SourceSync.ai

Un servidor MCP para la API de SourceSync.ai que permite gestionar y sincronizar el contexto del código fuente.

Documentación

Servidor MCP de SourceSync.ai

smithery badge

Una implementación de servidor del Model Context Protocol (MCP) para la API de SourceSync.ai. Este servidor permite que los modelos de IA interactúen con la plataforma de gestión de conocimiento de SourceSync.ai a través de una interfaz estandarizada.

Características

  • Gestionar espacios de nombres para organizar el conocimiento
  • Ingerir contenido de diversas fuentes (texto, URLs, sitios web, servicios externos)
  • Recuperar, actualizar y gestionar documentos almacenados en tu base de conocimiento
  • Realizar búsquedas semánticas e híbridas en tu base de conocimiento
  • Acceder al contenido de los documentos directamente desde URLs de texto analizadas
  • Gestionar conexiones a servicios externos
  • Soporte de configuración predeterminada para una integración fluida con IA

Instalación

Ejecución con npx

# Install and run with your API key and tenant ID
env SOURCESYNC_API_KEY=your_api_key npx -y sourcesyncai-mcp

Instalación mediante Smithery

Para instalar sourcesyncai-mcp para Claude Desktop automáticamente mediante Smithery:

npx -y @smithery/cli install @pbteja1998/sourcesyncai-mcp --client claude

Instalación manual

# Clone the repository
git clone https://github.com/yourusername/sourcesyncai-mcp.git
cd sourcesyncai-mcp

# Install dependencies
npm install

# Build the project
npm run build

# Run the server
node dist/index.js

Ejecución en Cursor

Para configurar SourceSync.ai MCP en Cursor:

  1. Abre la configuración de Cursor
  2. Ve a Features > MCP Servers
  3. Haz clic en + Add New MCP Server
  4. Ingresa lo siguiente:
    • Nombre: sourcesyncai-mcp (o tu nombre preferido)
    • Tipo: command
    • Comando: env SOURCESYNCAI_API_KEY=your-api-key npx -y sourcesyncai-mcp

Después de agregarlo, puedes usar las herramientas de SourceSync.ai con las funciones de IA de Cursor describiendo tus necesidades de gestión de conocimiento.

Ejecución en Windsurf

Agrega esto a tu ./codeium/windsurf/model_config.json:

{
  "mcpServers": {
    "sourcesyncai-mcp": {
      "command": "npx",
      "args": ["-y", "soucesyncai-mcp"],
      "env": {
        "SOURCESYNC_API_KEY": "your_api_key",
        "SOURCESYNC_NAMESPACE_ID": "your_namespace_id",
        "SOURCESYNC_TENANT_ID": "your_tenant_id"
      }
    }
  }
}

Ejecución en Claude Desktop

Para usar este servidor MCP con Claude Desktop:

  1. Localiza el archivo de configuración de Claude Desktop:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • Linux: ~/.config/Claude/claude_desktop_config.json
  2. Edita el archivo de configuración para agregar el servidor MCP de SourceSync.ai:

{
  "mcpServers": {
    "sourcesyncai-mcp": {
      "command": "npx",
      "args": ["-y", "sourcesyncai-mcp"],
      "env": {
        "SOURCESYNC_API_KEY": "your_api_key",
        "SOURCESYNC_NAMESPACE_ID": "your_namespace_id",
        "SOURCESYNC_TENANT_ID": "your_tenant_id"
      }
    }
  }
}
  1. Guarda el archivo de configuración y reinicia Claude Desktop

Configuración

Variables de entorno

Requeridas

  • SOURCESYNC_API_KEY: Tu clave de API de SourceSync.ai (requerida)

Opcionales

  • SOURCESYNC_NAMESPACE_ID: ID de espacio de nombres predeterminado para usar en las operaciones
  • SOURCESYNC_TENANT_ID: Tu ID de inquilino (opcional)

Ejemplos de configuración

Configuración básica con valores predeterminados:

export SOURCESYNC_API_KEY=your_api_key
export SOURCESYNC_TENANT_ID=your_tenant_id
export SOURCESYNC_NAMESPACE_ID=your_namespace_id

Herramientas disponibles

Autenticación

  • validate_api_key: Valida una clave de API de SourceSync.ai
{
  "name": "validate_api_key",
  "arguments": {}
}

Espacios de nombres

  • create_namespace: Crea un nuevo espacio de nombres
  • list_namespaces: Lista todos los espacios de nombres
  • get_namespace: Obtén detalles de un espacio de nombres específico
  • update_namespace: Actualiza un espacio de nombres
  • delete_namespace: Elimina un espacio de nombres
{
  "name": "create_namespace",
  "arguments": {
    "name": "my-namespace",
    "fileStorageConfig": {
      "provider": "S3_COMPATIBLE",
      "config": {
        "endpoint": "s3.amazonaws.com",
        "accessKey": "your_access_key",
        "secretKey": "your_secret_key",
        "bucket": "your_bucket",
        "region": "us-east-1"
      }
    },
    "vectorStorageConfig": {
      "provider": "PINECONE",
      "config": {
        "apiKey": "your_pinecone_api_key",
        "environment": "your_environment",
        "index": "your_index"
      }
    },
    "embeddingModelConfig": {
      "provider": "OPENAI",
      "config": {
        "apiKey": "your_openai_api_key",
        "model": "text-embedding-3-small"
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "list_namespaces",
  "arguments": {
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "get_namespace",
  "arguments": {
    "namespaceId": "namespace_XXX",
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "update_namespace",
  "arguments": {
    "namespaceId": "namespace_XXX",
    "tenantId": "tenant_XXX",
    "name": "updated-namespace-name"
  }
}
{
  "name": "delete_namespace",
  "arguments": {
    "namespaceId": "namespace_XXX",
    "tenantId": "tenant_XXX"
  }
}

Ingestión de datos

  • ingest_text: Ingiere contenido de texto
  • ingest_urls: Ingiere contenido desde URLs
  • ingest_sitemap: Ingiere contenido desde un mapa del sitio
  • ingest_website: Ingiere contenido desde un sitio web
  • ingest_notion: Ingiere contenido desde Notion
  • ingest_google_drive: Ingiere contenido desde Google Drive
  • ingest_dropbox: Ingiere contenido desde Dropbox
  • ingest_onedrive: Ingiere contenido desde OneDrive
  • ingest_box: Ingiere contenido desde Box
  • get_ingest_job_run_status: Obtén el estado de una ejecución de trabajo de ingesta
{
  "name": "ingest_text",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "TEXT",
      "config": {
        "name": "example-document",
        "text": "This is an example document for ingestion.",
        "metadata": {
          "category": "example",
          "author": "AI Assistant"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "ingest_urls",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "URLS",
      "config": {
        "urls": ["https://example.com/page1", "https://example.com/page2"],
        "metadata": {
          "source": "web",
          "category": "documentation"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "ingest_sitemap",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "SITEMAP",
      "config": {
        "url": "https://example.com/sitemap.xml",
        "metadata": {
          "source": "sitemap",
          "website": "example.com"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "ingest_website",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "WEBSITE",
      "config": {
        "url": "https://example.com",
        "maxDepth": 3,
        "maxPages": 100,
        "metadata": {
          "source": "website",
          "domain": "example.com"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "ingest_notion",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "NOTION",
      "config": {
        "connectionId": "your_notion_connection_id",
        "metadata": {
          "source": "notion",
          "workspace": "My Workspace"
        }
      }
    },
    "tenantId": "your_tenant_id"
  }
}
{
  "name": "ingest_google_drive",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "GOOGLE_DRIVE",
      "config": {
        "connectionId": "connection_XXX",
        "metadata": {
          "source": "google_drive",
          "owner": "user@example.com"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "ingest_dropbox",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "DROPBOX",
      "config": {
        "connectionId": "connection_XXX",
        "metadata": {
          "source": "dropbox",
          "account": "user@example.com"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "ingest_onedrive",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "ONEDRIVE",
      "config": {
        "connectionId": "connection_XXX",
        "metadata": {
          "source": "onedrive",
          "account": "user@example.com"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "ingest_box",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestConfig": {
      "source": "BOX",
      "config": {
        "connectionId": "connection_XXX",
        "metadata": {
          "source": "box",
          "owner": "user@example.com"
        }
      }
    },
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "get_ingest_job_run_status",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "ingestJobRunId": "ingest_job_run_XXX",
    "tenantId": "tenant_XXX"
  }
}

Documentos

  • getDocuments: Recupera documentos con filtros opcionales
  • updateDocuments: Actualiza metadatos de documentos
  • deleteDocuments: Elimina documentos
  • resyncDocuments: Resincroniza documentos
  • fetchUrlContent: Obtén contenido de texto desde URLs de documentos
{
  "name": "getDocuments",
  "arguments": {
    "namespaceId": "namespace_XXX",
    "tenantId": "tenant_XXX",
    "filterConfig": {
      "documentTypes": ["PDF"]
    },
    "includeConfig": {
      "parsedTextFileUrl": true
    }
  }
}
{
  "name": "updateDocuments",
  "arguments": {
    "namespaceId": "namespace_XXX",
    "tenantId": "tenant_XXX",
    "documentIds": ["doc_XXX", "doc_YYY"],
    "filterConfig": {
      "documentIds": ["doc_XXX", "doc_YYY"]
    },
    "data": {
      "metadata": {
        "status": "reviewed",
        "category": "technical"
      }
    }
  }
}
{
  "name": "deleteDocuments",
  "arguments": {
    "namespaceId": "namespace_XXX",
    "tenantId": "tenant_XXX",
    "documentIds": ["doc_XXX", "doc_YYY"],
    "filterConfig": {
      "documentIds": ["doc_XXX", "doc_YYY"]
    }
  }
}
{
  "name": "resyncDocuments",
  "arguments": {
    "namespaceId": "namespace_XXX",
    "tenantId": "tenant_XXX",
    "documentIds": ["doc_XXX", "doc_YYY"],
    "filterConfig": {
      "documentIds": ["doc_XXX", "doc_YYY"]
    }
  }
}
{
  "name": "fetchUrlContent",
  "arguments": {
    "url": "https://api.sourcesync.ai/v1/documents/doc_XXX/content?format=text",
    "apiKey": "your_api_key",
    "tenantId": "tenant_XXX"
  }
}

Búsqueda

  • semantic_search: Realiza búsqueda semántica
  • hybrid_search: Realiza búsqueda híbrida (semántica + palabras clave)
{
  "name": "semantic_search",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "query": "example document",
    "topK": 5,
    "tenantId": "tenant_XXX"
  }
}
{
  "name": "hybrid_search",
  "arguments": {
    "namespaceId": "your_namespace_id",
    "query": "example document",
    "topK": 5,
    "tenantId": "tenant_XXX",
    "hybridConfig": {
      "semanticWeight": 0.7,
      "keywordWeight": 0.3
    }
  }
}

Conexiones

  • create_connection: Crea una nueva conexión a un servicio externo
  • list_connections: Lista todas las conexiones
  • get_connection: Obtén detalles de una conexión específica
  • update_connection: Actualiza una conexión
  • revoke_connection: Revoca una conexión
{
  "name": "create_connection",
  "arguments": {
    "tenantId": "tenant_XXX",
    "namespaceId": "namespace_XXX",
    "name": "My Connection",
    "connector": "GOOGLE_DRIVE",
    "clientRedirectUrl": "https://your-app.com/callback"
  }
}
{
  "name": "list_connections",
  "arguments": {
    "tenantId": "tenant_XXX",
    "namespaceId": "namespace_XXX"
  }
}
{
  "name": "get_connection",
  "arguments": {
    "tenantId": "tenant_XXX",
    "namespaceId": "namespace_XXX",
    "connectionId": "connection_XXX"
  }
}
{
  "name": "update_connection",
  "arguments": {
    "tenantId": "tenant_XXX",
    "namespaceId": "namespace_XXX",
    "connectionId": "connection_XXX",
    "name": "Updated Connection Name",
    "clientRedirectUrl": "https://your-app.com/updated-callback"
  }
}
{
  "name": "revoke_connection",
  "arguments": {
    "tenantId": "tenant_XXX",
    "namespaceId": "namespace_XXX",
    "connectionId": "connection_XXX"
  }
}

Ejemplos de indicaciones

Aquí hay algunos ejemplos de indicaciones que puedes usar con Claude o Cursor después de configurar el servidor MCP:

  • "Busca en mi base de conocimiento de SourceSync información sobre aprendizaje automático."
  • "Ingiere este artículo en mi base de conocimiento de SourceSync: [URL]"
  • "Crea un nuevo espacio de nombres en SourceSync para la documentación de mi proyecto."
  • "Lista todos los documentos en mi espacio de nombres de SourceSync."
  • "Obtén el contenido de texto del documento [document_id] de mi espacio de nombres de SourceSync."

Solución de problemas

Problemas de conexión

Si encuentras problemas al conectar el servidor MCP de SourceSync.ai:

  1. Verifica las rutas: Asegúrate de que todas las rutas en tu configuración sean rutas absolutas, no relativas.

  2. Verifica los permisos: Asegúrate de que el archivo del servidor tenga permisos de ejecución (chmod +x dist/index.js).

  3. Habilita el modo desarrollador: En Claude Desktop, habilita el modo desarrollador y revisa el archivo de registro de MCP.

  4. Prueba el servidor: Ejecuta el servidor directamente desde la línea de comandos:

    node /path/to/sourcesyncai-mcp/dist/index.js
    
  5. Reinicia el cliente de IA: Después de hacer cambios, reinicia completamente Claude Desktop o Cursor.

  6. Verifica las variables de entorno: Asegúrate de que todas las variables de entorno requeridas estén configuradas correctamente.

Registro de depuración

Para un registro detallado, agrega la variable de entorno DEBUG:

Desarrollo

Estructura del proyecto

  • src/index.ts: Punto de entrada principal y configuración del servidor
  • src/schemas.ts: Definiciones de esquema para todas las herramientas
  • src/sourcesync.ts: Cliente para interactuar con la API de SourceSync.ai
  • src/sourcesync.types.ts: Definiciones de tipos de TypeScript

Compilación y pruebas

# Build the project
npm run build

# Run tests
npm test

Licencia

MIT

Enlaces

Flujo de trabajo de recuperación de contenido de documentos:

  1. Primero, usa getDocuments con includeConfig.parsedTextFileUrl: true para obtener documentos con sus URLs de contenido
  2. Extrae la URL de la respuesta del documento
  3. Usa fetchUrlContent para recuperar el contenido real:
{
  "name": "fetchUrlContent",
  "arguments": {
    "url": "https://example.com"
  }
}