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
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:
- Abre la configuración de Cursor
- Ve a
Features > MCP Servers - Haz clic en
+ Add New MCP Server - Ingresa lo siguiente:
- Nombre:
sourcesyncai-mcp(o tu nombre preferido) - Tipo:
command - Comando:
env SOURCESYNCAI_API_KEY=your-api-key npx -y sourcesyncai-mcp
- Nombre:
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:
-
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
- macOS:
-
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"
}
}
}
}
- 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 operacionesSOURCESYNC_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 nombreslist_namespaces: Lista todos los espacios de nombresget_namespace: Obtén detalles de un espacio de nombres específicoupdate_namespace: Actualiza un espacio de nombresdelete_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 textoingest_urls: Ingiere contenido desde URLsingest_sitemap: Ingiere contenido desde un mapa del sitioingest_website: Ingiere contenido desde un sitio webingest_notion: Ingiere contenido desde Notioningest_google_drive: Ingiere contenido desde Google Driveingest_dropbox: Ingiere contenido desde Dropboxingest_onedrive: Ingiere contenido desde OneDriveingest_box: Ingiere contenido desde Boxget_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 opcionalesupdateDocuments: Actualiza metadatos de documentosdeleteDocuments: Elimina documentosresyncDocuments: Resincroniza documentosfetchUrlContent: 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ánticahybrid_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 externolist_connections: Lista todas las conexionesget_connection: Obtén detalles de una conexión específicaupdate_connection: Actualiza una conexiónrevoke_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:
-
Verifica las rutas: Asegúrate de que todas las rutas en tu configuración sean rutas absolutas, no relativas.
-
Verifica los permisos: Asegúrate de que el archivo del servidor tenga permisos de ejecución (
chmod +x dist/index.js). -
Habilita el modo desarrollador: En Claude Desktop, habilita el modo desarrollador y revisa el archivo de registro de MCP.
-
Prueba el servidor: Ejecuta el servidor directamente desde la línea de comandos:
node /path/to/sourcesyncai-mcp/dist/index.js -
Reinicia el cliente de IA: Después de hacer cambios, reinicia completamente Claude Desktop o Cursor.
-
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 servidorsrc/schemas.ts: Definiciones de esquema para todas las herramientassrc/sourcesync.ts: Cliente para interactuar con la API de SourceSync.aisrc/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:
- Primero, usa
getDocumentsconincludeConfig.parsedTextFileUrl: truepara obtener documentos con sus URLs de contenido - Extrae la URL de la respuesta del documento
- Usa
fetchUrlContentpara recuperar el contenido real:
{
"name": "fetchUrlContent",
"arguments": {
"url": "https://example.com"
}
}