콘텐츠로 이동

MCP 서버

**Schift MCP 서버(Model Context Protocol 서버)**는 Claude Code, Cursor, ChatGPT, Gemini 등 MCP를 지원하는 모든 클라이언트에 Schift 지식 레이어(knowledge layer)를 노출합니다. 이 서버는 Schift Cloud REST API를 감싸는 가벼운 래퍼(wrapper)로, MCP 도구 호출을 버킷(bucket) 검색, 문서 업로드, 메모리 검색, 워크플로우(workflow) 작업으로 변환합니다.

npm에서 전역으로 패키지를 설치합니다.

Terminal window
npm install -g @schift-io/mcp

설치된 바이너리는 schift-mcp이며, Node.js 18 이상이 필요합니다.

npx로 바로 실행할 수도 있습니다.

Terminal window
npx -y @schift-io/mcp

모든 MCP 도구는 사용자를 대신해 Schift Cloud API를 호출하므로, 서버에 Schift API 키가 필요합니다.

변수필수 여부기본값설명
SCHIFT_API_KEYstdio 및 셀프 호스티드(self-hosted) static 모드에서 필수{apiUrl} 호출에 사용하는 Schift API 키입니다.
SCHIFT_API_BASE_URL아니오{apiUrl}Schift API 오리진입니다.
SCHIFT_USER_ID아니오API 키에서 추론소스 목록 조회용 명시적 사용자 ID입니다.
SCHIFT_DEFAULT_BUCKET아니오searchschift_search의 기본 버킷입니다.
SCHIFT_MEMORY_BUCKETS아니오인증된 사용자의 메모리 레이어(memory layer)메모리 검색에 강제로 사용할 쉼표로 구분된 버킷 목록입니다.
SCHIFT_MCP_AUTH_MODE아니오로컬은 static, 호스티드 배포는 upstream-bearer원격 클라이언트 인증 방식입니다.
SCHIFT_MCP_BEARER_TOKENHTTP static 모드셀프 호스티드 HTTP 서버에 클라이언트가 인증할 때 사용하는 토큰입니다.
SCHIFT_MCP_ALLOW_UNAUTHENTICATED아니오로컬 전용 무인증 HTTP 테스트를 위해 1로 설정합니다.

참고: {mcpUrl}/mcp의 Schift 호스티드 엔드포인트를 사용할 때는 Schift API 키나 OAuth 액세스 토큰을 MCP 클라이언트 베어러 토큰(bearer token)으로 전송하세요. 이 모드에서는 공유 SCHIFT_API_KEY를 사용하지 않습니다.

인자 없이 schift-mcp를 실행하면 stdio MCP 서버가 시작됩니다.

Terminal window
SCHIFT_API_KEY=sk_... SCHIFT_DEFAULT_BUCKET=docs schift-mcp

/mcp에서 Streamable HTTP 서버를 시작합니다.

Terminal window
SCHIFT_API_KEY=sk_... \
SCHIFT_DEFAULT_BUCKET=docs \
SCHIFT_MCP_BEARER_TOKEN=your-mcp-client-token \
schift-mcp --http

기본 포트는 8787입니다. PORTSCHIFT_MCP_PORT로 변경할 수 있습니다. GET /healthz에서 상태 확인을 할 수 있습니다.

호스티드 다중 사용자 모드에서는 다음과 같이 실행합니다.

Terminal window
SCHIFT_MCP_AUTH_MODE=upstream-bearer schift-mcp --http

이 모드에서는 각 MCP 클라이언트가 Authorization: Bearer ... 형식으로 사용자의 Schift 토큰을 전송하면, 서버가 해당 토큰으로 Schift API를 호출합니다.

셀프 호스티드 HTTP 모드용 무작위 베어러 토큰을 생성합니다.

Terminal window
schift-mcp token

특정 MCP 클라이언트에 맞는 설정을 출력합니다. 지원 대상은 claude, cursor, remote, chatgpt입니다.

Terminal window
schift-mcp init --client cursor --bucket docs
schift-mcp init --client claude --bucket docs
schift-mcp init --client remote --bucket docs --server-url https://mcp.your-domain.com/mcp

~/.claude/mcp_servers.json에 추가합니다.

{
"schift": {
"command": "schift-mcp",
"env": {
"SCHIFT_API_KEY": "sk_...",
"SCHIFT_DEFAULT_BUCKET": "docs"
}
}
}

~/.cursor/mcp.json에 추가합니다.

{
"mcpServers": {
"schift": {
"command": "schift-mcp",
"env": {
"SCHIFT_API_KEY": "sk_...",
"SCHIFT_DEFAULT_BUCKET": "docs"
}
}
}
}

Schift 호스티드 엔드포인트({mcpUrl}/mcp)를 사용합니다.

<your-mcp-host>/mcp
Authorization: Bearer <your-schift-api-key>

OpenAI Responses API 스타일 설정은 다음과 같습니다.

{
"type": "mcp",
"server_label": "schift",
"server_url": "<your-mcp-host>/mcp",
"headers": {
"Authorization": "Bearer <your-schift-api-key>"
},
"allowed_tools": ["search", "fetch", "schift_search", "schift_memory_search"],
"require_approval": "never"
}

셀프 호스티드 원격 서버의 경우 배포한 URL과 SCHIFT_MCP_BEARER_TOKEN 값을 사용합니다.

https://mcp.your-domain.com/mcp
Authorization: Bearer <your-mcp-client-token>

ChatGPT 호환 검색 별칭(alias)입니다. SCHIFT_DEFAULT_BUCKET 또는 사용자의 default 버킷을 검색하고 결과 ID, 제목, URL을 반환합니다. 공개 웹이 아닌 Schift 지식을 검색합니다.

ChatGPT 호환 조회 별칭(alias)입니다. 같은 MCP 세션에서 search가 반환한 ID에 대해 캐시된 콘텐츠를 반환합니다.

POST /v2/buckets/{bucket}/search를 통한 Schift 네이티브 버킷 검색입니다.

매개변수타입필수 여부설명
querystring검색어입니다.
bucketstring아니오버킷 ID 또는 이름입니다. 기본값은 SCHIFT_DEFAULT_BUCKET, 다음으로 default입니다.
collectionstring아니오더 이상 사용하지 않는 bucket의 별칭입니다.
top_knumber아니오결과 개수입니다. 기본값은 10입니다.
filterobject아니오Schift 검색에 전달할 메타데이터(metadata) 필터입니다.
taskstring아니오question_answering 같은 검색 지시 프리셋입니다.
rerankboolean아니오재순위(reranking)를 활성화합니다.
rerank_top_knumber아니오재순위 결과 한도입니다.

API 키로 접근할 수 있는 버킷을 나열합니다. 사용자가 버킷 이름을 지정하지 않았을 때 검색 전에 사용하세요.

버킷 내부의 하위 컬렉션(collection)을 나열합니다.

매개변수타입필수 여부설명
bucketstring버킷 ID 또는 이름입니다.

텍스트 또는 base64 인코딩된 파일을 버킷에 업로드하고 비동기 수집을 큐에 넣습니다.

매개변수타입필수 여부설명
bucketstring아니오버킷 ID 또는 이름입니다. 기본값은 SCHIFT_DEFAULT_BUCKET, 다음으로 default입니다.
filenamestring파일 이름입니다.
text / contentstring둘 중 하나 필수UTF-8 텍스트 콘텐츠입니다.
content_base64string둘 중 하나 필수바이너리 파일용 Base64 인코딩 콘텐츠입니다.
content_typestring아니오MIME 타입(MIME type)입니다. 예를 들어 text/plain 또는 application/pdf입니다.
metadataobject아니오문서 메타데이터입니다.
collection_idstring아니오선택적 하위 컬렉션 ID입니다.
ocr_strategystring아니오Schift 업로드에 전달할 OCR 전략(OCR strategy)입니다.
chunk_sizenumber아니오청크 크기(chunk size) 오버라이드입니다.
chunk_overlapnumber아니오청크 오버랩(chunk overlap) 오버라이드입니다.

참고: textcontent_base64를 동시에 전달하지 마세요. 둘 중 하나만 사용하세요.

메모리 도구는 인증된 사용자의 메모리 레이어(memory layer)를 검색하며, Gmail, Notion, Slack, Linear, GitHub, Calendar, Drive 등 연결된 소스(source)를 포함합니다.

사용자의 메모리 버킷을 검색합니다.

매개변수타입필수 여부설명
querystring검색어입니다.
bucketstring아니오선택적 버킷 오버라이드입니다.
sourcesstring[]아니오gmail, notion, slack 등 소스 유형으로 필터링합니다.
tagsstring[]아니오AND로 결합된 key:value 태그(tag) 필터입니다.
top_knumber아니오결과 개수입니다. 기본값은 20입니다.
temporalstring아니오before, after, between, as_of, latest 중 하나입니다.
temporal_startnumber아니오시간적 시작 타임스탬프(timestamp)입니다.
temporal_endnumber아니오시간적 종료 타임스탬프입니다.

기본적으로 이 도구는 POST /v1/memory/search를 호출하고 Schift가 사용자의 memory:{user_id}:* 버킷을 찾도록 합니다. 고정 버킷 목록이 필요할 때만 SCHIFT_MEMORY_BUCKETS를 설정하세요.

연결된 메모리 소스를 동기화 상태와 색인된 문서 수와 함께 나열합니다.

워크플로우 도구는 설치된 Agent Workflow Protocol(AWP) 워크플로우를 Schift API를 통해 실행합니다.

조직에 설치된 워크플로우를 나열합니다. 상태가 published인 워크플로우만 실행할 수 있으며, draft 워크플로우는 Schift 콘솔에서 먼저 검토 및 게시되어야 합니다.

schift_workflow_dry_run(workflow_id, inputs?)

섹션 제목: “schift_workflow_dry_run(workflow_id, inputs?)”

주어진 입력으로 워크플로우를 드라이런(dry-run)합니다. 부작용(side effects)은 발생하지 않고 블록 수준(block-level) 결과를 반환하여 검토할 수 있습니다.

게시된 워크플로우를 실행합니다.

매개변수타입필수 여부설명
workflow_idstring워크플로우 ID입니다.
inputsobject아니오입력 이름을 키로 하는 워크플로우 입력값입니다.
modestring아니오simulate(기본값)는 부작용을 준비만 하고, live는 실제 실행합니다.
approvalsobject아니오블록별 인간 승인입니다. 예: {"review_issue": true}. 명시적 인간 승인 후에만 설정하세요.

워크플로우가 여전히 초안(draft)이면 도구는 status: "needs_review"와 함께 먼저 사람이 게시해야 한다는 메시지를 반환합니다.

{
"name": "schift_search",
"arguments": {
"query": "Q3 renewal terms",
"top_k": 5
}
}
{
"name": "schift_memory_search",
"arguments": {
"query": "acme renewal",
"sources": ["gmail", "notion"],
"tags": ["account:acme"],
"top_k": 10
}
}
{
"name": "schift_upload_document",
"arguments": {
"bucket": "docs",
"filename": "notes.md",
"text": "# Project notes\n\nKey decision: use v2 buckets.",
"content_type": "text/markdown",
"metadata": { "project": "migration" }
}
}
{
"name": "schift_workflow_run",
"arguments": {
"workflow_id": "wf_abc123",
"inputs": { "query": "Summarize latest Slack threads" },
"mode": "simulate"
}
}
  • 로컬 stdio 모드: MCP 클라이언트가 환경에 SCHIFT_API_KEY를 담아 schift-mcp를 실행합니다. 별도의 MCP 베어러 토큰은 필요 없습니다.
  • 셀프 호스티드 HTTP static 모드: SCHIFT_MCP_BEARER_TOKEN을 설정하고 클라이언트가 Authorization: Bearer <token>을 전송하도록 합니다. 서버는 Schift 호출에 고정 SCHIFT_API_KEY를 사용합니다.
  • 호스티드 upstream-bearer 모드: MCP 클라이언트가 자체 Schift 토큰을 베어러로 전송합니다. 서버는 해당 토큰을 Schift API로 전달하며 공유 SCHIFT_API_KEY를 저장하지 않습니다.
  • HTTP 모드는 SCHIFT_MCP_BEARER_TOKEN이 없으면 시작하지 않습니다. 단, SCHIFT_MCP_AUTH_MODE=upstream-bearer이거나 로컬 테스트용으로 SCHIFT_MCP_ALLOW_UNAUTHENTICATED=1을 설정한 경우는 예외입니다.

환경 변수(environment variable) 요약

섹션 제목: “환경 변수(environment variable) 요약”
변수사용 모드용도
SCHIFT_API_KEYstdio, 셀프 호스티드 staticSchift API 인증입니다.
SCHIFT_API_BASE_URL모든 모드Schift API 오리진입니다.
SCHIFT_USER_ID모든 모드선택적 명시적 사용자 ID입니다.
SCHIFT_DEFAULT_BUCKET모든 모드검색 및 업로드용 기본 버킷입니다.
SCHIFT_MEMORY_BUCKETS모든 모드메모리 검색을 강제할 버킷입니다.
SCHIFT_MCP_AUTH_MODEHTTPstatic 또는 upstream-bearer입니다.
SCHIFT_MCP_BEARER_TOKENHTTP static클라이언트-서버 간 베어러 토큰입니다.
SCHIFT_MCP_ALLOW_UNAUTHENTICATEDHTTP 로컬 테스트베어러 토큰 검사를 건습니다.
PORT / SCHIFT_MCP_PORTHTTP서버 포트입니다. 기본값은 8787입니다.