Skip to main content
Glama

dsh-cordis-mcp

Expone el conjunto de herramientas dinámicas de Cordis de DeepSeek Harness a Claude Code mediante MCP (Streamable HTTP): Claude Code puede cargar, definir, ejecutar, actualizar, detener y eliminar los plugins dinámicos de DSH en tiempo real, con exactamente las mismas capacidades que en una sesión de DSH usando cordis_define / cordis_run / cordis_stop / cordis_undefine / cordis_inspect_*, y el mismo agente de ejecución.

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

Los plugins se montan en el puerto web existente, sin abrir puertos nuevos ni publicar servicios; el endpoint MCP exige autenticación Bearer y el token se configura en la página Configuración de DSH → dsh-cordis-mcp (se genera automáticamente la primera vez; se puede personalizar o regenerar).

Capacidades (10 herramientas)

Herramienta MCP

Herramienta DSH correspondiente

Función

dsh_status

—

Estado del puente: resolución de sesión, lista de sesiones activas, número de plugins

dsh_sessions

—

Lista las sesiones DSH activas gestionables (los plugins se asignan por sesión)

dsh_plugins_list

cordis_inspect_self (sin argumentos)

Lista todos los plugins dinámicos y su estado en la sesión objetivo

dsh_plugin_inspect

cordis_inspect_self (con argumentos)

Detalles del plugin/paquete; con packageId devuelve el código fuente

dsh_inspect_providers

cordis_inspect_list

Directorio de inspect providers (host + client)

dsh_inspect_query

cordis_inspect_query

Ejecuta una consulta de inspección de solo lectura (servicios/eventos/internos/slots/temas/directorio de herramientas)

dsh_plugin_define

cordis_define

Define un Package inmutable (crea un plugin nuevo o añade una versión)

dsh_plugin_run

cordis_run

Activa un Package (run / update); puede devolver awaiting-approval

dsh_plugin_stop

cordis_stop

Detiene la ejecución, cancela aprobaciones pendientes; conserva la definición y las versiones

dsh_plugin_undefine

cordis_undefine

Elimina permanentemente el plugin (incluidos todos los Packages, autorizaciones y punteros de versión)

Los paquetes con parte Client siguen pasando por el flujo de aprobación de DSH en su primera ejecución: dsh_plugin_run devuelve awaiting-approval y se completa de forma asíncrona tras hacer clic en Permitir en la tarjeta Run de la GUI web de DSH, igual que en una sesión de DSH.

Related MCP server: engine

Instalación con un clic

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

Lo que hace el script (puedes previsualizarlo con --dry-run):

  1. Escribe la dependencia "dsh-cordis-mcp": "github:GeekRicardo/dsh-cordis-mcp" en ~/.dsh/profiles/web/package.json;

  2. Añade dsh-cordis-mcp a dsh.profile.bundles;

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

  4. Verifica que los bundles están registrados y sugiere reiniciar.

Tras reiniciar DSH y hacer un refresco forzado de la página, el endpoint MCP queda listo junto con el servicio web:

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

Conexión con Claude Code

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

Autenticación (obligatoria, no se puede conectar directamente)

El endpoint MCP exige autenticación Bearer; cualquier petición sin token recibe 401 (503 si no hay token configurado). El token se configura en la página Configuración de DSH → dsh-cordis-mcp: se genera y persiste automáticamente en el primer uso; la página permite verlo/copiarlo/personalizarlo/regenerarlo. Introduce el token en la cabecera de .mcp.json:

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

Prioridad de resolución del token: configuración de la página de ajustes > variable de entorno DSH_MCP_TOKEN > generación automática. Cambiar el token surte efecto de inmediato (sin reiniciar); al regenerarlo, el token antiguo queda invalidado al instante y hay que actualizar la configuración de Claude Code.

Semántica de sesión (importante)

Los plugins dinámicos se asignan por sesión y viven en memoria del proceso (se borran al reiniciar DSH). Orden de resolución de sesión del puente:

  1. sessionId en los argumentos de la llamada (se puede consultar con dsh_sessions);

  2. Variable de entorno DSH_MCP_DEFAULT_SESSION;

  3. La única sesión activa actual;

  4. Varias sesiones activas sin especificar → error con la lista de opciones, pidiendo que se pase sessionId.

Otras variables de entorno

Variable

Valor por defecto

Descripción

DSH_MCP_PATH

/mcp

Ruta del endpoint MCP (montado en el webServer)

DSH_MCP_TOKEN

ninguno

Fuente de respaldo del token de autenticación (se usa si la página de ajustes no está configurada)

DSH_MCP_DEFAULT_SESSION

ninguno

Sesión objetivo cuando no se pasa sessionId explícitamente

Límites de seguridad

  • Autenticación Bearer obligatoria: sin token, siempre 401 / 503; el endpoint nunca se puede conectar directamente;

  • Solo acepta Host de loopback (127.* / localhost / ::1); rechaza todo acceso externo;

  • Rechaza peticiones de navegador con sec-fetch-site: cross-site y nunca devuelve cabeceras CORS — las páginas web no pueden leer la respuesta;

  • La ruta de la página de ajustes /dsh-cordis-mcp/settings solo permite loopback del mismo origen (sin token MCP, pero solo modifica la configuración del token en sí);

  • Este endpoint puede definir/ejecutar/eliminar plugins, equivalente a permisos de shell; no expongas el puerto fuera de la máquina local.

Cómo funciona

Archivo

Responsabilidad

lib/mcp-protocol.js

Capa MCP JSON-RPC pura (initialize / ping / tools/list / tools/call), cero dependencias de DSH

lib/tools.js

Validación de entrada de las 10 herramientas + resolución de sesión; envuelve dynamicCordisRunner / cordisInspect

lib/token.js

Resolución/generación pura de token (ajustes > env > generación automática)

lib/http.js

Capa HTTP de la ruta MCP: autenticación obligatoria, lectura del body, protección loopback/entre sitios

lib/index.js

Plugin de Cordis: inyecta 5 servicios host, el namespace de ajustes y las dos rutas /mcp + /dsh-cordis-mcp/settings

lib/client.js

UI de la página de ajustes: ver/copiar/personalizar/regenerar token + dirección del endpoint

Desinstalación

# 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

Requisitos previos

  • DeepSeek Harness tiene el perfil web inicializado (existe ~/.dsh/profiles/web) y la sesión actual se ejecuta en un preset con el conjunto de herramientas de Cordis (el servicio dynamicCordisRunner del lado host existe; está presente por defecto);

  • Claude Code CLI instalado en la máquina e iniciado sesión;

  • Node.js ≥ 20 y pnpm disponibles.

Solución de problemas

Síntoma

Causa y solución

claude mcp list muestra disconnected

DSH no se ha reiniciado / puerto incorrecto. Tras reiniciar, busca la línea [dsh-cordis-mcp] MCP endpoint ready en el log de arranque de DSH y usa la dirección impresa

dsh_plugin_run devuelve awaiting-approval

Los paquetes con parte Client requieren que permitas la ejecución en la tarjeta Run de la GUI web de DSH; tras la autorización, vuelve a ejecutar dsh_plugin_run

Error multiple live DSH sessions

Hay varias sesiones activas; primero consulta el id con dsh_sessions y luego pasa sessionId en la llamada

Error no live DSH session

La GUI web de DSH no tiene ninguna sesión abierta; ábrela e inténtalo de nuevo

401 / missing or invalid bearer token

El token en .mcp.json ha caducado o es incorrecto: copia el token actual desde la página de ajustes y actualízalo

503 / auth-not-configured

El host no tiene el token inicializado (estado anómalo): guarda cualquier token en la página de ajustes o reinicia DSH

Los plugins desaparecen tras reiniciar

Los plugins dinámicos viven en memoria del proceso; es lo esperado. Este puente solo gestiona el proceso DSH en ejecución

Licencia

MIT

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