Servidor MCP de SourceSync.ai

Implementación de un servidor de Protocolo de Contexto de Modelo (MCP) para la API de SourceSync.ai . Este servidor permite que los modelos de IA interactúen con la plataforma de gestión del conocimiento de SourceSync.ai mediante una interfaz estandarizada.
Características
Administrar espacios de nombres para organizar el conocimiento
Ingerir contenido de diversas fuentes (texto, URL, sitios web, servicios externos)
Recupere, actualice y administre documentos almacenados en su base de conocimientos
Realice búsquedas semánticas e híbridas en su base de conocimientos
Acceda al contenido del documento directamente desde las URL de texto analizadas
Administrar conexiones a servicios externos
Compatibilidad con configuración predeterminada para una integración perfecta con IA
Related MCP server: MCP Boilerplate
Instalación
Ejecutando 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 herrería
Para instalar sourcesyncai-mcp para Claude Desktop automáticamente a través de 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
Ejecutando en el cursor
Para configurar SourceSync.ai MCP en Cursor:
Abrir configuración del cursor
Vaya a Features > MCP Servers
Haga clic en + Add New MCP Server
Introduzca lo siguiente:
Después de agregar, puede usar las herramientas de SourceSync.ai con las funciones de inteligencia artificial de Cursor describiendo sus necesidades de gestión de conocimientos.
Corriendo en Windsurf
Agregue esto a su ./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"
}
}
}
}
Ejecutándose en Claude Desktop
Para utilizar este servidor MCP con Claude Desktop:
Localice el archivo de configuración de Claude Desktop:
macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
Ventanas : %APPDATA%\Claude\claude_desktop_config.json
Linux : ~/.config/Claude/claude_desktop_config.json
Edite 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"
}
}
}
}
Guarde el archivo de configuración y reinicie Claude Desktop
Configuración
Variables de entorno
Requerido
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
{
"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 : Obtener detalles de un espacio de nombres específico
update_namespace : Actualizar un espacio de nombres
delete_namespace : Eliminar 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 : Ingerir contenido de texto
ingest_urls : Ingerir contenido de las URL
ingest_sitemap : Ingerir contenido de un mapa del sitio
ingest_website : Ingerir contenido de un sitio web
ingest_notion : Ingerir contenido desde Notion
ingest_google_drive : Ingerir contenido desde Google Drive
ingest_dropbox : Ingerir contenido desde Dropbox
ingest_onedrive : Ingerir contenido desde OneDrive
ingest_box : Ingerir contenido de Box
get_ingest_job_run_status : obtener el estado de la ejecución de un trabajo de ingestión
{
"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 : Actualizar metadatos del documento
deleteDocuments : Eliminar documentos
resyncDocuments : Resincronizar documentos
fetchUrlContent : recupera el contenido de texto de las URL de los 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"
}
}
Buscar
{
"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 : Obtener detalles de una conexión específica
update_connection : Actualizar una conexión
revoke_connection : Revocar 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
A continuación se muestran algunos ejemplos de indicaciones que puede utilizar con Claude o Cursor después de configurar el servidor MCP:
"Busca información sobre aprendizaje automático en mi base de conocimientos de SourceSync".
"Ingresar este artículo en mi base de conocimientos de SourceSync: [URL]"
"Crear un nuevo espacio de nombres en SourceSync para la documentación de mi proyecto".
"Enumere todos los documentos en mi espacio de nombres SourceSync".
"Obtener el contenido de texto del documento [document_id] desde mi espacio de nombres SourceSync".
Solución de problemas
Problemas de conexión
Si tiene problemas para conectarse al servidor MCP de SourceSync.ai:
Verificar rutas : asegúrese de que todas las rutas en su configuración sean rutas absolutas, no relativas.
Comprobar permisos : asegúrese de que el archivo del servidor tenga permisos de ejecución ( chmod +x dist/index.js ).
Habilitar el modo de desarrollador : en Claude Desktop, habilite el modo de desarrollador y verifique el archivo de registro de MCP.
Probar el servidor : Ejecute el servidor directamente desde la línea de comandos:
node /path/to/sourcesyncai-mcp/dist/index.js
Reiniciar AI Client : después de realizar cambios, reinicie completamente Claude Desktop o Cursor.
Verificar las variables de entorno : asegúrese de que todas las variables de entorno necesarias estén configuradas correctamente.
Registro de depuración
Para un registro detallado, agregue 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 esquemas 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
Construcción y pruebas
# Build the project
npm run build
# Run tests
npm test
Licencia
Instituto Tecnológico de Massachusetts (MIT)
Campo de golf
Flujo de trabajo de recuperación de contenido de documentos:
Primero, use getDocuments con includeConfig.parsedTextFileUrl: true para obtener los documentos con sus URL de contenido.
Extraer la URL de la respuesta del documento
Utilice fetchUrlContent para recuperar el contenido real:
{
"name": "fetchUrlContent",
"arguments": {
"url": "https://example.com"
}
}