SourceSync.ai MCP 서버

SourceSync.ai API를 위한 모델 컨텍스트 프로토콜(MCP) 서버 구현입니다. 이 서버를 통해 AI 모델은 표준화된 인터페이스를 통해 SourceSync.ai의 지식 관리 플랫폼과 상호 작용할 수 있습니다.
특징
지식 구성을 위한 네임스페이스 관리
다양한 소스(텍스트, URL, 웹사이트, 외부 서비스)에서 콘텐츠를 수집합니다.
지식 기반에 저장된 문서를 검색, 업데이트 및 관리합니다.
지식 기반에 대해 의미론적 검색과 하이브리드 검색을 수행합니다.
구문 분석된 텍스트 URL에서 직접 문서 콘텐츠에 액세스
외부 서비스에 대한 연결 관리
원활한 AI 통합을 위한 기본 구성 지원
Related MCP server: MCP Boilerplate
설치
npx로 실행
지엑스피1
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 클릭하세요
다음을 입력하세요.
추가한 후에는 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에서 실행
Claude Desktop과 함께 이 MCP 서버를 사용하려면:
Claude Desktop 구성 파일을 찾으세요.
macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
윈도우 : %APPDATA%\Claude\claude_desktop_config.json
리눅스 : ~/.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을 다시 시작하세요.
구성
환경 변수
필수의
선택 과목
구성 예제
기본값을 사용한 기본 구성:
export SOURCESYNC_API_KEY=your_api_key
export SOURCESYNC_TENANT_ID=your_tenant_id
export SOURCESYNC_NAMESPACE_ID=your_namespace_id
사용 가능한 도구
입증
{
"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"
}
}
찾다
{
"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
특허
MIT
모래밭
문서 콘텐츠 검색 워크플로:
먼저 includeConfig.parsedTextFileUrl: true 와 함께 getDocuments 사용하여 콘텐츠 URL이 포함된 문서를 가져옵니다.
문서 응답에서 URL 추출
fetchUrlContent 사용하여 실제 콘텐츠를 검색합니다.
{
"name": "fetchUrlContent",
"arguments": {
"url": "https://example.com"
}
}