Skip to main content
Glama

dsh-cordis-mcp

DeepSeek Harness의 동적 Cordis 도구 모음을 MCP(Streamable HTTP)로 Claude Code에 노출합니다. Claude Code는 DSH의 동적 플러그인을 실시간으로 로드, 정의, 실행, 업데이트, 중지, 삭제할 수 있습니다 — DSH 세션에서 cordis_define / cordis_run / cordis_stop / cordis_undefine / cordis_inspect_*를 사용하는 것과 완전히 동일한 기능, 동일한 런타임 에이전트입니다.

┌─────────────┐   MCP (Streamable HTTP, loopback)   ┌───────────────────────────┐
│ Claude Code │ ────── http://127.0.0.1:8090/mcp ──▶ │ DSH host (本插件)           │
│  (claude)   │ ────── JSON-RPC 2.0 ───────────────▶ │  dynamicCordisRunner      │
└─────────────┘                                       │  cordisInspect            │
                                                      │  agents (会话解析)         │
                                                      └───────────────────────────┘

플러그인은 기존 웹 포트에 마운트되며, 새 포트를 열지 않고 서비스를 게시하지 않습니다. MCP 엔드포인트는 Bearer 인증을 강제하며, 토큰은 DSH 설정 → dsh-cordis-mcp 페이지에서 구성합니다(최초 자동 생성, 사용자 지정/재생성 가능).

기능 (10개 도구)

MCP 도구

대응 DSH 도구

기능

dsh_status

—

브리지 상태: 세션 해석, 활성 세션 목록, 플러그인 수

dsh_sessions

—

관리 가능한 활성 DSH 세션 나열(플러그인은 세션별 귀속)

dsh_plugins_list

cordis_inspect_self(무인자)

대상 세션의 모든 동적 플러그인과 상태 나열

dsh_plugin_inspect

cordis_inspect_self(인자 있음)

플러그인/패키지 상세 정보; packageId가 있으면 소스 코드 반환

dsh_inspect_providers

cordis_inspect_list

Inspect provider 디렉터리(host + client)

dsh_inspect_query

cordis_inspect_query

읽기 전용 inspect 쿼리 한 번 실행(서비스/이벤트/내장/슬롯/주제/도구 디렉터리)

dsh_plugin_define

cordis_define

불변 Package 정의(새 플러그인 생성 또는 버전 추가)

dsh_plugin_run

cordis_run

Package 활성화(run / update), awaiting-approval 반환 가능

dsh_plugin_stop

cordis_stop

실행 중지, 미결 승인 취소, 정의와 버전 유지

dsh_plugin_undefine

cordis_undefine

플러그인 영구 삭제(모든 Package, 권한, 버전 포인터 포함)

Client half를 포함하는 패키지의 첫 실행은 여전히 DSH의 승인 흐름을 거칩니다. dsh_plugin_run은 awaiting-approval을 반환하고, DSH Web GUI의 Run 카드에서 허용을 클릭하면 비동기로 완료됩니다 — DSH 세션 내부와 동일합니다.

Related MCP server: engine

원클릭 설치

curl -fsSL https://raw.githubusercontent.com/GeekRicardo/dsh-cordis-mcp/main/install.sh | bash

스크립트가 수행하는 작업(--dry-run으로 미리 볼 수 있음):

  1. ~/.dsh/profiles/web/package.json에 의존성 "dsh-cordis-mcp": "github:GeekRicardo/dsh-cordis-mcp"를 기록합니다;

  2. dsh-cordis-mcp를 dsh.profile.bundles에 추가합니다;

  3. cd ~/.dsh/profiles/web && pnpm install;

  4. 번들이 등록되었는지 확인하고 재시작을 안내합니다.

DSH를 재시작하고 페이지를 강력 새로고침하면 MCP 엔드포인트가 웹 서비스와 함께 준비됩니다:

pm2 restart dsh-web   # 若用 pm2 托管;否则用你的启动方式重启

Claude Code 연동

# 端口换成你 DSH web 的实际端口(启动日志会打印完整地址)
claude mcp add dsh --transport http http://127.0.0.1:8090/mcp
claude mcp list          # 确认 connected

인증 (강제, 직접 연결 불가)

MCP 엔드포인트는 Bearer 인증을 강제하며, 토큰이 없으면 모두 401(토큰 미구성이면 503)을 반환합니다. 토큰은 DSH 설정 → dsh-cordis-mcp 페이지에서 구성합니다: 최초 사용 시 자동 생성되어 영속화되며, 페이지에서 조회/복사/사용자 지정/재생성이 가능합니다. .mcp.json의 요청 헤더에 토큰을 입력하세요:

{
  "mcpServers": {
    "dsh": {
      "type": "http",
      "url": "http://127.0.0.1:8090/mcp",
      "headers": { "Authorization": "Bearer <设置页里的 token>" }
    }
  }
}

토큰 해석 우선순위: 설정 페이지 구성 > DSH_MCP_TOKEN 환경 변수 > 자동 생성입니다. 토큰을 변경하면 즉시 적용되며(재시작 불필요), 재생성 후 이전 토큰은 즉시 무효화되므로 Claude Code 구성을 함께 업데이트해야 합니다.

세션 의미 (중요)

동적 플러그인은 세션별로 귀속되며 프로세스 메모리 상태입니다(DSH 재시작 시 지워짐). 브리지의 세션 해석 순서:

  1. 호출 매개변수의 sessionId(dsh_sessions로 조회 가능);

  2. 환경 변수 DSH_MCP_DEFAULT_SESSION 지정;

  3. 현재 유일한 활성 세션;

  4. 활성 세션이 여러 개인데 지정되지 않은 경우 → 오류와 함께 선택 가능한 목록을 표시하고 sessionId를 전달하도록 요구합니다.

기타 환경 변수

변수

기본값

설명

DSH_MCP_PATH

/mcp

MCP 엔드포인트 경로(webServer에 마운트됨)

DSH_MCP_TOKEN

없음

인증 토큰의 폴백 소스(설정 페이지에 미구성 시 사용)

DSH_MCP_DEFAULT_SESSION

없음

sessionId를 명시적으로 전달하지 않을 때의 대상 세션

보안 경계

  • Bearer 인증 강제: 토큰이 없으면 모두 401 / 503, 엔드포인트는 절대 직접 연결 불가;

  • loopback Host(127.* / localhost / ::1)만 허용, 모든 외부 접근 거부;

  • sec-fetch-site: cross-site 브라우저 요청 거부, 또한 CORS 헤더를 절대 반환하지 않음 — 웹페이지는 응답을 읽을 수 없음;

  • 설정 페이지 경로 /dsh-cordis-mcp/settings는 동일 출처 loopback만 허용(MCP 토큰 없이 접근하지만, 변경하는 것은 토큰 구성 자체뿐);

  • 이 엔드포인트는 플러그인을 정의/실행/삭제할 수 있으며, 셸 권한과 동일하므로 포트를 비로컬에 노출하지 마세요.

작동 원리

파일

역할

lib/mcp-protocol.js

순수 MCP JSON-RPC 레이어(initialize / ping / tools/list / tools/call), DSH 의존성 없음

lib/tools.js

10개 도구의 입력 검증 + 세션 해석, dynamicCordisRunner / cordisInspect 캡슐화

lib/token.js

순수 토큰 해석/생성(설정 > env > 자동 생성)

lib/http.js

MCP 라우트의 HTTP 레이어: 강제 인증, body 읽기, loopback/크로스 사이트 보호

lib/index.js

Cordis 플러그인: 5개 호스트 서비스 주입, settings 네임스페이스, /mcp + /dsh-cordis-mcp/settings 두 라우트

lib/client.js

설정 페이지 UI: 토큰 조회/복사/사용자 지정/재생성 + 엔드포인트 주소

제거

# 1. 从 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 移除 "dsh-cordis-mcp"
# 2. 移除 dependencies 里的 "dsh-cordis-mcp"
# 3. cd ~/.dsh/profiles/web && pnpm install
# 4. 重启 DSH;claude mcp remove dsh

사전 요구 사항

  • DeepSeek Harness가 web profile을 초기화했고(~/.dsh/profiles/web 존재), 현재 세션이 Cordis 도구 모음이 포함된 preset에서 실행 중(호스트 측 dynamicCordisRunner 서비스 존재, 기본 제공);

  • 로컬에 Claude Code CLI가 설치되어 있고 로그인되어 있어야 함;

  • Node.js ≥ 20, pnpm 사용 가능.

문제 해결

현상

원인과 처리

claude mcp list에 disconnected 표시

DSH 미재시작 / 포트 오류. 재시작 후 DSH 시작 로그에서 [dsh-cordis-mcp] MCP endpoint ready 줄을 찾아 출력된 주소 사용

dsh_plugin_run이 awaiting-approval 반환

Client half를 포함하는 패키지는 DSH Web GUI의 Run 카드에서 허용해야 함; 승인 후 dsh_plugin_run 다시 실행

multiple live DSH sessions 오류

활성 세션이 여러 개이면 dsh_sessions로 id를 조회한 후 호출에서 sessionId 전달

no live DSH session 오류

DSH Web GUI에 열린 세션이 없음; 연 후 다시 시도

401 / missing or invalid bearer token

.mcp.json의 토큰이 만료되었거나 잘못됨 — 설정 페이지에서 현재 토큰을 복사해 업데이트

503 / auth-not-configured

호스트가 토큰을 초기화하지 않음(비정상 상태) — 설정 페이지에서 아무 토큰이나 저장하거나 DSH 재시작

재시작 후 플러그인 사라짐

동적 플러그인은 프로세스 메모리 상태이므로 예상된 동작; 이 브리지는 실행 중인 DSH 프로세스만 관리

License

MIT

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Exposes self-owned AI agent plugins as tools to Claude Code via a stdio MCP server, allowing Claude to call system info, calculator, or scribe transcriber directly.
    3
    MIT