Plugin para Claude Code/Desktop que permite enviar contenido (texto, JSON, URLs, imágenes) a un backend que integra con la API de AnythingLLM.
- Envía texto, JSON estructurado, URLs e imágenes desde Claude a AnythingLLM
- Integración directa con workspaces específicos de AnythingLLM
- Metadata personalizable para cada documento
- Backend bridge incluido para facilitar la comunicación con la API
/plugin install mbcontactanos/anything-llm-plugin-claudeCrea un directorio para el backend:
mkdir anything-llm-bridge
cd anything-llm-bridge
npm init -y
npm install express node-fetch dotenvCrea un archivo .env con tu configuración:
PORT=3001
ANYTHINGLLM_API_URL=http://localhost:3000/api/v1
ANYTHINGLLM_API_KEY=tu_api_key_aquiCrea index.js con el siguiente código:
import express from "express";
import fetch from "node-fetch";
import dotenv from "dotenv";
dotenv.config();
const app = express();
app.use(express.json({ limit: "20mb" }));
const { PORT = 3001, ANYTHINGLLM_API_URL, ANYTHINGLLM_API_KEY } = process.env;
app.post("/ingest", async (req, res) => {
try {
const { workspaceId, dataType, payload, metadata } = req.body;
if (!workspaceId || !dataType || !payload) {
return res.status(400).json({ error: "workspaceId, dataType y payload son obligatorios" });
}
let content = "";
if (dataType === "text") {
content = payload;
} else if (dataType === "json") {
content = typeof payload === "string" ? payload : JSON.stringify(payload, null, 2);
} else if (dataType === "url") {
// En producción, aquí descargarías el contenido de la URL
content = `URL: ${payload}`;
} else if (dataType === "image") {
// En producción, aquí procesarías la imagen
content = `Imagen en: ${payload}`;
} else {
return res.status(400).json({ error: "dataType no soportado" });
}
const docBody = {
workspace_id: workspaceId,
content,
metadata: metadata || { dataType, source: "claude-plugin" }
};
// Ajusta este endpoint según tu instalación de AnythingLLM
const resp = await fetch(`${ANYTHINGLLM_API_URL}/workspace/${workspaceId}/update-embeddings`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${ANYTHINGLLM_API_KEY}`
},
body: JSON.stringify(docBody)
});
if (!resp.ok) {
const text = await resp.text();
return res.status(resp.status).json({ error: "Error desde AnythingLLM", details: text });
}
const data = await resp.json();
res.json({ ok: true, anythingllm: data });
} catch (err) {
console.error(err);
res.status(500).json({ error: "Error interno", details: err.message });
}
});
app.listen(PORT, () => {
console.log(`AnythingLLM bridge escuchando en puerto ${PORT}`);
});Añade "type": "module" en tu package.json y arranca el servidor:
node index.js/anything-llm-plugin-claude:send-to-anythingllm --workspace-id="documentacion" --data-type="url" --payload="https://docs.anythingllm.com"/anything-llm-plugin-claude:send-to-anythingllm --workspace-id="productos" --data-type="json" --payload='{"nombre":"Widget Pro","precio":99.99,"stock":50}'/anything-llm-plugin-claude:send-to-anythingllm --workspace-id="notas" --data-type="text" --payload="Resumen de la reunión del 6 de marzo de 2026..."/anything-llm-plugin-claude:send-to-anythingllm --workspace-id="legal" --data-type="text" --payload="Términos y condiciones actualizados" --metadata='{"departamento":"legal","version":"2.0"}'- Abre tu instancia de AnythingLLM
- Ve a Settings → API Keys
- Genera una nueva API key
- Copia la key a tu archivo
.env
Puedes obtener el ID del workspace desde:
- La URL cuando estás en el workspace:
/workspace/<ID> - La API de AnythingLLM:
GET /api/v1/workspaces
Consulta la documentación Swagger de tu instancia en:
http://localhost:3000/api/docs
Los endpoints más útiles son:
POST /api/v1/workspace/{slug}/update-embeddings- Añadir documentosGET /api/v1/workspaces- Listar workspacesPOST /api/v1/document/upload- Subir archivos
Las contribuciones son bienvenidas. Por favor:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Añade nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
- Soporte para PDFs y archivos adjuntos
- Descarga automática de URLs y procesamiento de contenido
- Soporte para imágenes con análisis multimodal
- Conversión de MCP server para integración nativa
- Batch upload de múltiples documentos
- Sistema de tags y categorización automática
MIT License - consulta el archivo LICENSE para más detalles.
Nota: Este plugin requiere que tengas una instancia de AnythingLLM corriendo y accesible. Puedes instalar AnythingLLM siguiendo su documentación oficial.