SourceSync.ai

Um servidor MCP para a API do SourceSync.ai gerenciar e sincronizar contexto de código-fonte.

Documentação

Servidor MCP SourceSync.ai

smithery badge

Uma implementação de servidor Model Context Protocol (MCP) para a API do SourceSync.ai. Este servidor permite que modelos de IA interajam com a plataforma de gerenciamento de conhecimento do SourceSync.ai por meio de uma interface padronizada.

Recursos

  • Gerencie namespaces para organizar conhecimento
  • Ingira conteúdo de várias fontes (texto, URLs, sites, serviços externos)
  • Recupere, atualize e gerencie documentos armazenados em sua base de conhecimento
  • Realize buscas semânticas e híbridas em sua base de conhecimento
  • Acesse o conteúdo dos documentos diretamente a partir de URLs de texto analisadas
  • Gerencie conexões com serviços externos
  • Suporte a configuração padrão para integração perfeita com IA

Instalação

Executando com npx

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

Instalando via Smithery

Para instalar o sourcesyncai-mcp para Claude Desktop automaticamente via Smithery:

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

Instalação 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

Executando no Cursor

Para configurar o SourceSync.ai MCP no Cursor:

  1. Abra as Configurações do Cursor
  2. Vá para Features > MCP Servers
  3. Clique em + Add New MCP Server
  4. Insira o seguinte:
    • Nome: sourcesyncai-mcp (ou o nome de sua preferência)
    • Tipo: command
    • Comando: env SOURCESYNCAI_API_KEY=your-api-key npx -y sourcesyncai-mcp

Após adicionar, você pode usar as ferramentas do SourceSync.ai com os recursos de IA do Cursor descrevendo suas necessidades de gerenciamento de conhecimento.

Executando no Windsurf

Adicione isto ao seu ./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"
      }
    }
  }
}

Executando no Claude Desktop

Para usar este servidor MCP com o Claude Desktop:

  1. Localize o arquivo de configuração do 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. Edite o arquivo de configuração para adicionar o servidor MCP do 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. Salve o arquivo de configuração e reinicie o Claude Desktop

Configuração

Variáveis de Ambiente

Obrigatórias

  • SOURCESYNC_API_KEY: Sua chave de API do SourceSync.ai (obrigatória)

Opcionais

  • SOURCESYNC_NAMESPACE_ID: ID de namespace padrão a ser usado nas operações
  • SOURCESYNC_TENANT_ID: Seu ID de locatário (opcional)

Exemplos de Configuração

Configuração básica com valores padrão:

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

Ferramentas Disponíveis

Autenticação

  • validate_api_key: Validar uma chave de API do SourceSync.ai
{
  "name": "validate_api_key",
  "arguments": {}
}

Namespaces

  • create_namespace: Criar um novo namespace
  • list_namespaces: Listar todos os namespaces
  • get_namespace: Obter detalhes de um namespace específico
  • update_namespace: Atualizar um namespace
  • delete_namespace: Excluir um namespace
{
  "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"
  }
}

Ingestão de Dados

  • ingest_text: Ingerir conteúdo de texto
  • ingest_urls: Ingerir conteúdo de URLs
  • ingest_sitemap: Ingerir conteúdo de um sitemap
  • ingest_website: Ingerir conteúdo de um site
  • ingest_notion: Ingerir conteúdo do Notion
  • ingest_google_drive: Ingerir conteúdo do Google Drive
  • ingest_dropbox: Ingerir conteúdo do Dropbox
  • ingest_onedrive: Ingerir conteúdo do OneDrive
  • ingest_box: Ingerir conteúdo do Box
  • get_ingest_job_run_status: Obter o status de uma execução de trabalho de ingestão
{
  "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: Recuperar documentos com filtros opcionais
  • updateDocuments: Atualizar metadados de documentos
  • deleteDocuments: Excluir documentos
  • resyncDocuments: Ressincronizar documentos
  • fetchUrlContent: Buscar conteúdo de texto de 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"
  }
}

Busca

  • semantic_search: Realizar busca semântica
  • hybrid_search: Realizar busca híbrida (semântica + palavras-chave)
{
  "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
    }
  }
}

Conexões

  • create_connection: Criar uma nova conexão com um serviço externo
  • list_connections: Listar todas as conexões
  • get_connection: Obter detalhes de uma conexão específica
  • update_connection: Atualizar uma conexão
  • revoke_connection: Revogar uma conexão
{
  "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"
  }
}

Exemplos de Prompts

Aqui estão alguns exemplos de prompts que você pode usar com Claude ou Cursor após configurar o servidor MCP:

  • "Pesquise em minha base de conhecimento do SourceSync informações sobre aprendizado de máquina."
  • "Ingira este artigo em minha base de conhecimento do SourceSync: [URL]"
  • "Crie um novo namespace no SourceSync para a documentação do meu projeto."
  • "Liste todos os documentos no meu namespace do SourceSync."
  • "Obtenha o conteúdo de texto do documento [document_id] do meu namespace do SourceSync."

Solução de Problemas

Problemas de Conexão

Se você encontrar problemas ao conectar o servidor MCP do SourceSync.ai:

  1. Verifique os Caminhos: Certifique-se de que todos os caminhos na sua configuração sejam caminhos absolutos, não relativos.

  2. Verifique as Permissões: Certifique-se de que o arquivo do servidor tenha permissões de execução (chmod +x dist/index.js).

  3. Ative o Modo Desenvolvedor: No Claude Desktop, ative o Modo Desenvolvedor e verifique o Arquivo de Log do MCP.

  4. Teste o Servidor: Execute o servidor diretamente pela linha de comando:

    node /path/to/sourcesyncai-mcp/dist/index.js
    
  5. Reinicie o Cliente de IA: Após fazer alterações, reinicie completamente o Claude Desktop ou o Cursor.

  6. Verifique as Variáveis de Ambiente: Certifique-se de que todas as variáveis de ambiente obrigatórias estejam configuradas corretamente.

Registro de Depuração

Para registro detalhado, adicione a variável de ambiente DEBUG:

Desenvolvimento

Estrutura do Projeto

  • src/index.ts: Ponto de entrada principal e configuração do servidor
  • src/schemas.ts: Definições de esquema para todas as ferramentas
  • src/sourcesync.ts: Cliente para interagir com a API do SourceSync.ai
  • src/sourcesync.types.ts: Definições de tipos TypeScript

Compilação e Testes

# Build the project
npm run build

# Run tests
npm test

Licença

MIT

Links

Fluxo de trabalho de recuperação de conteúdo de documentos:

  1. Primeiro, use getDocuments com includeConfig.parsedTextFileUrl: true para obter documentos com suas URLs de conteúdo
  2. Extraia a URL da resposta do documento
  3. Use fetchUrlContent para recuperar o conteúdo real:
{
  "name": "fetchUrlContent",
  "arguments": {
    "url": "https://example.com"
  }
}