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 ドライブからコンテンツを取り込む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
ライセンス
マサチューセッツ工科大学
リンク
ドキュメントコンテンツ取得ワークフロー:
- まず、
includeConfig.parsedTextFileUrl: true
指定したgetDocuments
使用して、ドキュメントとそのコンテンツ URL を取得します。 - ドキュメントレスポンスからURLを抽出する
- 実際のコンテンツを取得するには、
fetchUrlContent
を使用します。
{
"name": "fetchUrlContent",
"arguments": {
"url": "https://example.com"
}
}