SourceSync.ai
An MCP server for the SourceSync.ai API to manage and synchronize source code context.
SourceSync.ai MCP Server
A Model Context Protocol (MCP) server implementation for the SourceSync.ai API. This server allows AI models to interact with SourceSync.ai's knowledge management platform through a standardized interface.
Features
- Manage namespaces for organizing knowledge
- Ingest content from various sources (text, URLs, websites, external services)
- Retrieve, update, and manage documents stored in your knowledge base
- Perform semantic and hybrid searches against your knowledge base
- Access document content directly from parsed text URLs
- Manage connections to external services
- Default configuration support for seamless AI integration
Installation
Running with npx
# Install and run with your API key and tenant ID
env SOURCESYNC_API_KEY=your_api_key npx -y sourcesyncai-mcp
Installing via Smithery
To install sourcesyncai-mcp for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @pbteja1998/sourcesyncai-mcp --client claude
Manual Installation
# 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
Running on Cursor
To configure SourceSync.ai MCP in Cursor:
- Open Cursor Settings
- Go to
Features > MCP Servers - Click
+ Add New MCP Server - Enter the following:
- Name:
sourcesyncai-mcp(or your preferred name) - Type:
command - Command:
env SOURCESYNCAI_API_KEY=your-api-key npx -y sourcesyncai-mcp
- Name:
After adding, you can use SourceSync.ai tools with Cursor's AI features by describing your knowledge management needs.
Running on Windsurf
Add this to your ./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"
}
}
}
}
Running on Claude Desktop
To use this MCP server with Claude Desktop:
-
Locate the Claude Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- macOS:
-
Edit the configuration file to add the SourceSync.ai MCP server:
{
"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"
}
}
}
}
- Save the configuration file and restart Claude Desktop
Configuration
Environment Variables
Required
SOURCESYNC_API_KEY: Your SourceSync.ai API key (required)
Optional
SOURCESYNC_NAMESPACE_ID: Default namespace ID to use for operationsSOURCESYNC_TENANT_ID: Your tenant ID (optional)
Configuration Examples
Basic configuration with default values:
export SOURCESYNC_API_KEY=your_api_key
export SOURCESYNC_TENANT_ID=your_tenant_id
export SOURCESYNC_NAMESPACE_ID=your_namespace_id
Available Tools
Authentication
validate_api_key: Validate a SourceSync.ai API key
{
"name": "validate_api_key",
"arguments": {}
}
Namespaces
create_namespace: Create a new namespacelist_namespaces: List all namespacesget_namespace: Get details of a specific namespaceupdate_namespace: Update a namespacedelete_namespace: Delete a 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"
}
}
Data Ingestion
ingest_text: Ingest text contentingest_urls: Ingest content from URLsingest_sitemap: Ingest content from a sitemapingest_website: Ingest content from a websiteingest_notion: Ingest content from Notioningest_google_drive: Ingest content from Google Driveingest_dropbox: Ingest content from Dropboxingest_onedrive: Ingest content from OneDriveingest_box: Ingest content from Boxget_ingest_job_run_status: Get the status of an ingestion job run
{
"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": "[email protected]"
}
}
},
"tenantId": "tenant_XXX"
}
}
{
"name": "ingest_dropbox",
"arguments": {
"namespaceId": "your_namespace_id",
"ingestConfig": {
"source": "DROPBOX",
"config": {
"connectionId": "connection_XXX",
"metadata": {
"source": "dropbox",
"account": "[email protected]"
}
}
},
"tenantId": "tenant_XXX"
}
}
{
"name": "ingest_onedrive",
"arguments": {
"namespaceId": "your_namespace_id",
"ingestConfig": {
"source": "ONEDRIVE",
"config": {
"connectionId": "connection_XXX",
"metadata": {
"source": "onedrive",
"account": "[email protected]"
}
}
},
"tenantId": "tenant_XXX"
}
}
{
"name": "ingest_box",
"arguments": {
"namespaceId": "your_namespace_id",
"ingestConfig": {
"source": "BOX",
"config": {
"connectionId": "connection_XXX",
"metadata": {
"source": "box",
"owner": "[email protected]"
}
}
},
"tenantId": "tenant_XXX"
}
}
{
"name": "get_ingest_job_run_status",
"arguments": {
"namespaceId": "your_namespace_id",
"ingestJobRunId": "ingest_job_run_XXX",
"tenantId": "tenant_XXX"
}
}
Documents
getDocuments: Retrieve documents with optional filtersupdateDocuments: Update document metadatadeleteDocuments: Delete documentsresyncDocuments: Resync documentsfetchUrlContent: Fetch text content from document URLs
{
"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"
}
}
Search
semantic_search: Perform semantic searchhybrid_search: Perform hybrid search (semantic + keyword)
{
"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
}
}
}
Connections
create_connection: Create a new connection to an external servicelist_connections: List all connectionsget_connection: Get details of a specific connectionupdate_connection: Update a connectionrevoke_connection: Revoke a connection
{
"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"
}
}
Example Prompts
Here are some example prompts you can use with Claude or Cursor after configuring the MCP server:
- "Search my SourceSync knowledge base for information about machine learning."
- "Ingest this article into my SourceSync knowledge base: [URL]"
- "Create a new namespace in SourceSync for my project documentation."
- "List all the documents in my SourceSync namespace."
- "Get the text content of document [document_id] from my SourceSync namespace."
Troubleshooting
Connection Issues
If you encounter issues connecting the SourceSync.ai MCP server:
-
Verify Paths: Ensure all paths in your configuration are absolute paths, not relative.
-
Check Permissions: Ensure the server file has execution permissions (
chmod +x dist/index.js). -
Enable Developer Mode: In Claude Desktop, enable Developer Mode and check the MCP Log File.
-
Test the Server: Run the server directly from the command line:
node /path/to/sourcesyncai-mcp/dist/index.js -
Restart AI Client: After making changes, completely restart Claude Desktop or Cursor.
-
Check Environment Variables: Ensure all required environment variables are correctly set.
Debug Logging
For detailed logging, add the DEBUG environment variable:
Development
Project Structure
src/index.ts: Main entry point and server setupsrc/schemas.ts: Schema definitions for all toolssrc/sourcesync.ts: Client for interacting with SourceSync.ai APIsrc/sourcesync.types.ts: TypeScript type definitions
Building and Testing
# Build the project
npm run build
# Run tests
npm test
License
MIT
Links
Document content retrieval workflow:
- First, use
getDocumentswithincludeConfig.parsedTextFileUrl: trueto get documents with their content URLs - Extract the URL from the document response
- Use
fetchUrlContentto retrieve the actual content:
{
"name": "fetchUrlContent",
"arguments": {
"url": "https://example.com"
}
}
संबंधित सर्वर
Scout Monitoring MCP
प्रायोजकPut performance and error data directly in the hands of your AI assistant.
Alpha Vantage MCP Server
प्रायोजकAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
APIWeaver
Dynamically creates MCP servers from web API configurations, integrating any REST API, GraphQL endpoint, or web service into MCP-compatible tools.
EdgeOne Pages MCP
An MCP server implementation using EdgeOne Pages Functions for intelligent chat applications.
Omega Memory
Persistent memory for AI coding agents with semantic search, contradiction detection, memory decay, and cross-session learning. 25 MCP tools, local-first, #1 on LongMemEval (95.4%).
Add Tool
Fetches and sets up an MCP server from a specified GitHub repository.
MCP Spec Navigator
Navigate and explore the Model Context Protocol specification with dynamic markdown tree generation and intelligent section navigation.
Semgrep
Static code analysis using Semgrep for security vulnerability detection and code quality improvements.
Safe Local Python Executor
A tool for safely executing local Python code without requiring external data files.
MCP Server + Github OAuth
An MCP server with built-in GitHub OAuth support, designed for deployment on Cloudflare Workers.
ScreenHand
Native desktop + browser automation MCP server with 82 tools — accessibility APIs (macOS/Windows), Chrome DevTools Protocol, anti-detection, memory, jobs, and reusable playbooks.
Smithery Reference Servers
A collection of reference implementations for Model Context Protocol (MCP) servers in Typescript and Python, demonstrating MCP features and SDK usage.