PerryLink/dsh-cert-mcp

dsh-cert-mcp

基于 DSH 插件认证登记的只读 MCP 服务,对外提供插件的认证等级、其快照以及支撑它的五维证据。

Uncategorizedcertificationdeepseek-harnessmcp

dsh-cert-mcp

English · 简体中文 · Español · Português · हिन्दी

dsh plugin --profile <name> add dsh-cert-mcp

Read-only MCP server that exposes the dsh-plugin-certification registry: certification grades, snapshot dates and five-dimension evidence for DeepSeek Harness (DSH) plugins. Zero runtime dependencies, stdio transport.

Install

dsh plugin --profile web add github:PerryLink/dsh-cert-mcp
git clone https://github.com/PerryLink/dsh-cert-mcp
cd dsh-cert-mcp
node src/index.js        # stdio server

Run it directly from the published npm package: npx dsh-cert-mcp.

Register in an MCP client

Claude Code:

claude mcp add dsh-cert -- node <path-to-repo>/src/index.js

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "dsh-cert": {
      "command": "node",
      "args": ["<path-to-repo>/src/index.js"]
    }
  }
}

DSH: add it through dsh-mcp-panel as a stdio server, or any MCP client that supports stdio.

Install as a DSH bundle

The package declares dsh.bundle.patch → cordis.patch.yml, so it also installs as a DeepSeek Harness bundle:

# git channel (latest main)
dsh plugin --profile web add github:PerryLink/dsh-cert-mcp

# npm channel (published releases)
dsh plugin --profile web add dsh-cert-mcp

The inserted row loads the package through the standard Cordis plugin contract: the host half is a plain ESM module exporting name, inject and apply(ctx). This package ships no browser UI, so there is no dsh.client declaration.

// bundle entry (host half) — the contract the patch row loads
export const name = 'dsh-cert-mcp'
export const inject = ['tools'] // the host tool surface, provided by dsh-tools
export function apply(ctx) {
  // registers the read-only certification lookup surface
  // (get_certification / list_certified / certification_spec)
}

The host half needs the `tools` service (shipped by @deepseek-ai/dsh-tools). A profile without it does not lose the tools silently: Cordis holds this row in PENDING until tools exists, which is visible in the profile's plugin list. Nothing else is required — no config keys, no credentials, and no network access at load time.

Two halves, one data path. The bundle row and the stdio server are separate entry points over the same handleRequest core. The server half is an independent process any MCP client can spawn (node src/index.js), and it is *not* part of the plugin path: installing this bundle never starts it, and removing the bundle never touches it. Conversely npx dsh-cert-mcp registers nothing on the DSH tool surface.

Remove the bundle with dsh plugin --profile web remove dsh-cert-mcp (or delete the row from the profile patch). The standalone stdio MCP server above keeps working for any MCP client.

What is dsh-cert-mcp?

Read-only MCP server that exposes the dsh-plugin-certification registry: certification grades, snapshot dates and five-dimension evidence for DeepSeek Harness (DSH) plugins. Zero runtime dependencies, stdio transport.

*Workflow overview: install → open panel → act. The examples below use the real command surface.*

Tools

Tool · Input · Returns get_certification · owner, repo · Full certification record (grade, snapshot, five dimensions, veto, notes) or "no record" list_certified · — · Every entry in the public registry: repo / grade / snapshot certification_spec · — · Spec v1 summary: five dimensions, grade scale, veto rule

The embedded snapshot lives in data/certified.json (synced from the certification repo) and the server refreshes it from the public registry at most once per five minutes. No writes, no secrets, no code execution.

Why this exists

The DeepSeek Harness repository does not run a plugin registry and does not accept external PRs; discovery happens through the dsh-plugin GitHub topic and community lists, none of which certify anything. dsh-plugin-certification turns "can I install this plugin" into a reproducible five-dimension check (manifest, build hygiene, supply-chain Scorecard, release provenance, sandboxed install smoke test) with a public registry and README badges. This MCP server is the same data with an agent-facing interface: agents can look up a plugin's certification before recommending or installing it.

Registry

Data source: PerryLink/dsh-plugin-certification — data/certified.json, spec v1.

What the registry is, and what a short answer from this server means. The registry is an opt-in subset: a repository appears in it only after it has been evaluated, so the absence of a record is *not* evidence that a plugin is uncertified, and list_certified returning few rows is not evidence that few plugins were assessed. The bundled snapshot held one entry (grade A, snapshot 2026-09-07) when this was written; a single-entry list carries no statistical meaning — a grade describes that one repository, and rankable comparison across plugins only becomes possible once the registry holds many. Every list_certified reply carries a coverage object stating exactly this, so an agent reading only the tool output cannot mistake the count for ecosystem coverage. The snapshot's date is the certification repo's fact, not a freshness promise from this server: it is synced byte-for-byte from dsh-plugin-certification, which owns the schedule and the check.

Compatibility

Surface · Status Harness · DeepSeek Harness dsh-v0.2.1-rc.2 (devDependencies and the declared engines.dsh range both admit that line; typecheck and the 5-test suite are green against @deepseek-ai/dsh-system-prompt / @deepseek-ai/dsh-tools 0.2.1-rc.2) Node · ^22.19.0 \ · \ · >=24.0.0 Declared host range · engines.dsh: >=0.2.1-0 <0.3.0, with dsh.manifestVersion: 1 Peer · @deepseek-ai/cordis ^4.0.2. The host half additionally needs the tools service at runtime; the stdio half needs nothing but Node.

Development

pnpm install
pnpm run typecheck                            # the one type ruler: checkJs over the published host face
pnpm test                                     # JSON-RPC smoke + the real-Cordis runtime suite
pnpm pack                                     # the published tarball

The runtime suite mounts the REAL SystemPrompt/ToolRuntime registries and asserts that mounting this package puts all three certification tools into ctx.tools.schemas(), that disposing the fiber removes them again, and that a context without the tools service parks the plugin in PENDING. dsh --dump-config is deliberately not used as acceptance: a mounted row and a pending fiber look the same there.

There is deliberately one type ruler. @deepseek-ai/* resolves through this repo's own node_modules (the pinned devDependencies — the published line) and the package declares no DSH peer, so a second tsc configuration would be the same command over the same type universe. The typecheck:ci script is kept as the historical no-op duplicate (its only extra key is an empty paths: {}) for compatibility with existing references, not as a second face. The independent second piece of evidence is the runtime mount gate above.

PerryLink DSH Plugin Family

This project is part of the DeepSeek Harness plugin family from PerryLink. The roster stays collapsed below so every README keeps a short first screen; expand it to see every row and its status.

Expand all plugins

Plugin · Status dsh-aqua-input-check · dsh-archive-check · dsh-auto-review · dsh-autotier · dsh-bid-ca-precheck · dsh-bid-qual-check · dsh-cert-mcp · dsh-checkpoint-rewind · dsh-click · dsh-composer-history · dsh-contract-stance · dsh-customs-doc-check · dsh-data-quality · dsh-demurrage-ledger · dsh-doublecheck · dsh-drill-script-check · dsh-eia-guide-check · dsh-emergency-plan · dsh-essay-rubric-check · dsh-evidence-check · dsh-export-ctl-check · dsh-fast · dsh-fmea-table-check · dsh-forecast-penalty · dsh-fund-research · dsh-github · dsh-gongwen-flow-check · dsh-gongwen-word-check · dsh-guard-plan-qc · dsh-hazchem-check · dsh-hazplan-check · dsh-hidden-risk-map · dsh-hs-classify · dsh-icd-rule-check · dsh-industry-research · dsh-lawcite-adapter · dsh-laya · dsh-lc-doc-check · dsh-learning-gap-check · dsh-library · dsh-local-ai · dsh-lsp-actions · dsh-mask · dsh-mcp-panel · dsh-medrec-qc · dsh-memento · dsh-nsfc-form-check · dsh-nurse-record-check · dsh-observe · dsh-origin-rvc-check · dsh-ota-review-check · dsh-output-styles · dsh-paper-doc-adapter · dsh-permission-rules · dsh-permit-report-check · dsh-pipeline-check · dsh-pleading-draft · dsh-plugin-doctor · dsh-plugin-guide · dsh-plugin-kit · dsh-plugin-upgrade · dsh-policy-brief-draft · dsh-power-loss-split · dsh-power-ticket-check · dsh-ppap-check · dsh-protest-deadline · dsh-railway-window · dsh-repair-order-qc · dsh-research-report · dsh-review-reply-check · dsh-rulefile-check · dsh-safety-brief-check · dsh-score · dsh-session-sync · dsh-site-log-check · dsh-skill-pack-security · dsh-soe-decision-check · dsh-soilwater-check · dsh-sop-sync-check · dsh-spc-gbt-adapter · dsh-talk · dsh-tender-extract · dsh-tender-matrix · dsh-test-drive · dsh-ticktick · dsh-translate · dsh-warranty-calc · dsh-budget · 🧊 FROZEN — see the repo README dsh-claude-move · 🧊 FROZEN — see the repo README dsh-defend · 🧊 FROZEN — see the repo README dsh-draw · 🧊 FROZEN — see the repo README dsh-reach · 🧊 FROZEN — see the repo README dsh-background-agents · 🚫 RETIRED — see the repo README dsh-session-pin · 🚫 RETIRED — see the repo README dsh-team-rooms · 🚫 RETIRED — see the repo README

License

Apache-2.0. A listing or grade is an evidence record, not a security guarantee: plugins run inside your DSH process with your permissions.

Examples

These are the plugin's real entry points; install once, then call one.

Detailed example

Command

~~~sh get_certification ~~~

Input

~~~json { "owner": "PerryLink", "repo": "dsh-auto-review" } ~~~

Output

~~~text { "repo": "PerryLink/dsh-auto-review", "grade": "A", "snapshot": "2026-09-07", "dimensions": { "manifest": { "result": "pass" }, "buildHygiene": { "result": "pass" }, "supplyChain": { "result": "pass", "score": 5.4 }, "releaseIntegrity": { "result": "pass" }, "installSmoke": { "result": "ok" } }, "veto": null } ~~~

*Observed from plugins/dsh-cert-mcp/src/server.js:192-199; data in plugins/dsh-cert-mcp/data/certified.json:1-30; smoke test at plugins/dsh-cert-mcp/test/smoke.mjs:29-39*

Failure branch

Input

~~~text {"owner":"nobody","repo":"nothing"} ~~~

Output

~~~text No certification record for nobody/nothing in registry snapshot 2026-09-07. ~~~

*Observed from plugins/dsh-cert-mcp/src/server.js:191-199; plugins/dsh-cert-mcp/test/smoke.mjs:41-47; plugins/dsh-cert-mcp/data/certified.json*

Brief examples

  • list_certified
  • certification_spec