SourceSync.ai MCP 服务器
SourceSync.ai API 的模型上下文协议 (MCP) 服务器实现。该服务器允许 AI 模型通过标准化接口与 SourceSync.ai 的知识管理平台进行交互。
特征
- 管理命名空间以组织知识
- 从各种来源(文本、URL、网站、外部服务)获取内容
- 检索、更新和管理知识库中存储的文档
- 针对您的知识库执行语义和混合搜索
- 直接从解析的文本 URL 访问文档内容
- 管理与外部服务的连接
- 默认配置支持无缝 AI 集成
安装
使用 npx 运行
# Install and run with your API key and tenant ID
env SOURCESYNC_API_KEY=your_api_key npx -y sourcesyncai-mcp
通过 Smithery 安装
要通过Smithery自动为 Claude Desktop 安装 sourcesyncai-mcp:
npx -y @smithery/cli install @pbteja1998/sourcesyncai-mcp --client claude
手动安装
# 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
在光标上运行
要在 Cursor 中配置 SourceSync.ai MCP:
- 打开游标设置
- 前往
Features > MCP Servers
- 点击
+ Add New MCP Server
- 输入以下内容:
- 名称:
sourcesyncai-mcp
(或您喜欢的名称) - 类型:
command
- 命令:
env SOURCESYNCAI_API_KEY=your-api-key npx -y sourcesyncai-mcp
添加后,您可以通过描述您的知识管理需求,将SourceSync.ai工具与Cursor的AI功能结合使用。
在风帆冲浪中奔跑
将其添加到您的./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"
}
}
}
}
在 Claude Desktop 上运行
要将此 MCP 服务器与 Claude Desktop 一起使用:
- 找到 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
- 编辑配置文件以添加 SourceSync.ai MCP 服务器:
{
"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"
}
}
}
}
- 保存配置文件并重新启动Claude Desktop
配置
环境变量
必需的
SOURCESYNC_API_KEY
:您的 SourceSync.ai API 密钥(必需)
选修的
SOURCESYNC_NAMESPACE_ID
:用于操作的默认命名空间 IDSOURCESYNC_TENANT_ID
:您的租户 ID(可选)
配置示例
具有默认值的基本配置:
export SOURCESYNC_API_KEY=your_api_key
export SOURCESYNC_TENANT_ID=your_tenant_id
export SOURCESYNC_NAMESPACE_ID=your_namespace_id
可用工具
验证
validate_api_key
SourceSync.ai API 密钥
{
"name": "validate_api_key",
"arguments": {}
}
命名空间
create_namespace
:创建一个新的命名空间list_namespaces
:列出所有命名空间get_namespace
:获取特定命名空间的详细信息update_namespace
:更新命名空间delete_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_text
:提取文本内容ingest_urls
:从 URL 中提取内容ingest_sitemap
:从站点地图中提取内容ingest_website
:从网站提取内容ingest_notion
:从 Notion 中提取内容ingest_google_drive
:从 Google Drive 提取内容ingest_dropbox
:从 Dropbox 提取内容ingest_onedrive
:从 OneDrive 提取内容ingest_box
:从 Box 中提取内容get_ingest_job_run_status
:获取摄取作业运行的状态
{
"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"
}
}
文件
getDocuments
:使用可选过滤器检索文档updateDocuments
:更新文档元数据deleteDocuments
:删除文档resyncDocuments
:重新同步文档fetchUrlContent
:从文档 URL 获取文本内容
{
"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
:执行语义搜索hybrid_search
:执行混合搜索(语义+关键字)
{
"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
}
}
}
连接
create_connection
:创建与外部服务的新连接list_connections
:列出所有连接get_connection
:获取特定连接的详细信息update_connection
:更新连接revoke_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"
}
}
示例提示
以下是配置 MCP 服务器后可以与 Claude 或 Cursor 一起使用的一些示例提示:
- “在我的 SourceSync 知识库中搜索有关机器学习的信息。”
- “将这篇文章纳入我的 SourceSync 知识库:[URL]”
- “在 SourceSync 中为我的项目文档创建一个新的命名空间。”
- “列出我的 SourceSync 命名空间中的所有文档。”
- “从我的 SourceSync 命名空间获取文档 [document_id] 的文本内容。”
故障排除
连接问题
如果您在连接 SourceSync.ai MCP 服务器时遇到问题:
- 验证路径:确保配置中的所有路径都是绝对路径,而不是相对路径。
- 检查权限:确保服务器文件具有执行权限(
chmod +x dist/index.js
)。 - 启用开发者模式:在 Claude Desktop 中,启用开发者模式并检查 MCP 日志文件。
- 测试服务器:直接从命令行运行服务器:
node /path/to/sourcesyncai-mcp/dist/index.js
- 重新启动 AI 客户端:进行更改后,完全重新启动 Claude Desktop 或 Cursor。
- 检查环境变量:确保所有必需的环境变量都已正确设置。
调试日志
如需详细日志记录,请添加 DEBUG 环境变量:
发展
项目结构
src/index.ts
:主入口点和服务器设置src/schemas.ts
:所有工具的架构定义src/sourcesync.ts
:与 SourceSync.ai API 交互的客户端src/sourcesync.types.ts
:TypeScript 类型定义
构建和测试
# Build the project
npm run build
# Run tests
npm test
执照
麻省理工学院
链接
文档内容检索工作流程:
- 首先,使用
getDocuments
和includeConfig.parsedTextFileUrl: true
来获取文档及其内容 URL - 从文档响应中提取 URL
- 使用
fetchUrlContent
检索实际内容:
{
"name": "fetchUrlContent",
"arguments": {
"url": "https://example.com"
}
}