Skip to content

mounirb-dev/anything-llm-plugin-claude

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Anything LLM Plugin Claude

Plugin para Claude Code/Desktop que permite enviar contenido (texto, JSON, URLs, imágenes) a un backend que integra con la API de AnythingLLM.

🚀 Características

  • 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

📦 Instalación

1. Instalar el plugin en Claude Desktop

/plugin install mbcontactanos/anything-llm-plugin-claude

2. Configurar el backend bridge

Crea un directorio para el backend:

mkdir anything-llm-bridge
cd anything-llm-bridge
npm init -y
npm install express node-fetch dotenv

Crea un archivo .env con tu configuración:

PORT=3001
ANYTHINGLLM_API_URL=http://localhost:3000/api/v1
ANYTHINGLLM_API_KEY=tu_api_key_aqui

Crea 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

💡 Uso

Enviar una URL

/anything-llm-plugin-claude:send-to-anythingllm --workspace-id="documentacion" --data-type="url" --payload="https://docs.anythingllm.com"

Enviar JSON estructurado

/anything-llm-plugin-claude:send-to-anythingllm --workspace-id="productos" --data-type="json" --payload='{"nombre":"Widget Pro","precio":99.99,"stock":50}'

Enviar texto directo

/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..."

Con metadata personalizada

/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"}'

🔧 Configuración avanzada

Obtener tu API Key de AnythingLLM

  1. Abre tu instancia de AnythingLLM
  2. Ve a Settings → API Keys
  3. Genera una nueva API key
  4. Copia la key a tu archivo .env

Encontrar el Workspace ID

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

Endpoints de AnythingLLM

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 documentos
  • GET /api/v1/workspaces - Listar workspaces
  • POST /api/v1/document/upload - Subir archivos

🤝 Contribuir

Las contribuciones son bienvenidas. Por favor:

  1. Fork el repositorio
  2. Crea una rama para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit tus cambios (git commit -am 'Añade nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abre un Pull Request

📝 Roadmap

  • 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

📄 Licencia

MIT License - consulta el archivo LICENSE para más detalles.

🔗 Enlaces útiles


Nota: Este plugin requiere que tengas una instancia de AnythingLLM corriendo y accesible. Puedes instalar AnythingLLM siguiendo su documentación oficial.

About

Plugin para Claude Desktop que permite enviar documentos, JSON, imágenes y URLs a AnythingLLM vía su API

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors