Labsco
scmdr logo

SourceSync.ai

โ˜… 1

from scmdr

An MCP server for the SourceSync.ai API to manage and synchronize source code context.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedAccount requiredAdvanced setup

SourceSync.ai MCP Server

smithery badge

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

Available Tools

Authentication

  • validate_api_key: Validate a SourceSync.ai API key
{
  "name": "validate_api_key",
  "arguments": {}
}

Namespaces

  • create_namespace: Create a new namespace
  • list_namespaces: List all namespaces
  • get_namespace: Get details of a specific namespace
  • update_namespace: Update a namespace
  • delete_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 content
  • ingest_urls: Ingest content from URLs
  • ingest_sitemap: Ingest content from a sitemap
  • ingest_website: Ingest content from a website
  • ingest_notion: Ingest content from Notion
  • ingest_google_drive: Ingest content from Google Drive
  • ingest_dropbox: Ingest content from Dropbox
  • ingest_onedrive: Ingest content from OneDrive
  • ingest_box: Ingest content from Box
  • get_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": "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"
  }
}

Documents

  • getDocuments: Retrieve documents with optional filters
  • updateDocuments: Update document metadata
  • deleteDocuments: Delete documents
  • resyncDocuments: Resync documents
  • fetchUrlContent: 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"
  }
}
  • semantic_search: Perform semantic search
  • hybrid_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 service
  • list_connections: List all connections
  • get_connection: Get details of a specific connection
  • update_connection: Update a connection
  • revoke_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."

Development

Project Structure

  • src/index.ts: Main entry point and server setup
  • src/schemas.ts: Schema definitions for all tools
  • src/sourcesync.ts: Client for interacting with SourceSync.ai API
  • src/sourcesync.types.ts: TypeScript type definitions

Building and Testing

# Build the project
npm run build

# Run tests
npm test

Document content retrieval workflow:

  1. First, use getDocuments with includeConfig.parsedTextFileUrl: true to get documents with their content URLs
  2. Extract the URL from the document response
  3. Use fetchUrlContent to retrieve the actual content:
{
  "name": "fetchUrlContent",
  "arguments": {
    "url": "https://example.com"
  }
}