Skip to main content
Glama

dsh-cert-mcp

License DSH plugin Gitee Version npm version npm downloads dsh-cert-mcp MCP server dsh-cert-mcp MCP server

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

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.

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.

Related MCP server: feedback-loop-mcp

Install

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.patchcordis.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#main"

# 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.

Why this exists

The official 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-certificationdata/certified.json, spec v1.

Compatibility

  • Node ^22.19.0 || >=24.0.0.

  • DSH >=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 (declared in engines.dsh, 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.

This project is one of the 41 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:

Plugin

One-liner

dsh-auto-review

Second-model auto-review on the approval chain, fail-closed by default

dsh-autotier

Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command

dsh-background-agents

Durable background child agents with a Web UI sidebar, messaging and interrupt

dsh-budget

Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel.

dsh-catalog

DSH Desktop Market standard catalog source for the PerryLink family

dsh-checkpoint-rewind

Unified session + workspace + config checkpoints with one-shot /rewind

dsh-claude-move

Migrate Claude Code, Codex, OpenCode and Hermes sessions, memories and skills into DSH

dsh-click

Cross-platform native desktop control for DeepSeek Harness — Windows first.

dsh-composer-history

Terminal-style input history for the web composer: arrows, Ctrl+R search

dsh-data-quality

Deterministic dataset profiling, cleaning and citation verification

dsh-defend

Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness.

dsh-doublecheck

Engineering-discipline guard: requirements grill, test gates, adversary review

dsh-draw

Unified static-image generation routing for DeepSeek Harness.

dsh-fast

Read-only performance diagnostics: load, spill, compaction and cache hit rate

dsh-fund-research

Chinese mutual-fund research with sealed, traceable source snapshots

dsh-github

GitHub PR/issue/CI integration with every write approval-gated

dsh-industry-research

Industry and company research pack: chain map, policy timeline, company cards

dsh-kit

One-command starter pack that installs the core family

dsh-library

Local document knowledge base with hybrid search and citation-aware injection

dsh-local-ai

Local Ollama model discovery and task-based routing with cloud fallback

dsh-lsp-actions

LSP diagnostics, formatting, completion, code actions, symbols and rename

dsh-mask

PII masking at the model boundary with a host-side restore table

dsh-mcp-panel

MCP management console: /mcp command, Settings tab and trial calls

dsh-memento

Approval-gated cross-session memory protocol (ctx.memory + SQLite)

dsh-observe

OpenTelemetry and Langfuse telemetry export from the session event stream

dsh-output-styles

Runtime-switchable model output styles

dsh-permission-rules

Declarative allow/deny/ask rules plus a process-level network policy

dsh-plugin-certification

Community certification registry with repro-checkable grades and badges

dsh-plugin-doctor

Zero-dependency static + sandbox smoke detector for DSH plugins

dsh-plugin-guide

Plugin-dev knowledge base, agent skill and the dsh-plugin-dev CLI toolchain

dsh-plugin-kit

Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins

dsh-plugin-portal

Zero-dependency static portal rendering the whole plugin family as one page

dsh-plugin-upgrade-015

Merged 0.1.3-alpha.10.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner

dsh-reach

Multi-channel approval/question bridge: WeChat, Telegram, Feishu + a session console

dsh-research-report

Verifiable research reports: evidence ledger, manifest seal, per-claim verdicts

dsh-score

Multi-dimensional plugin quality scoring with an evidence-backed leaderboard

dsh-session-pin

Pin sessions and workspaces in the Web sidebar with per-pin colors

dsh-session-sync

Git-backed cross-device session synchronization with keep-both merges

dsh-skill-pack-security

Security-audit skill pack plus the plugin_vet supply-chain gate

dsh-talk

Voice-first session loop: speech-to-text input and text-to-speech replies

dsh-team-rooms

Cross-session team rooms: shared message bus, task board and timeline

dsh-test-drive

Isolated install-and-smoke test drives with a pass/fail matrix

dsh-ticktick

TickTick/Dida365 task bridge: session-header panel plus eleven agent tools

dsh-translate

Vendor parameter translation and deterministic JSON repair

dsh-wechat

WeChat ↔ DSH bridge (Tencent iLink bot) developed with pan17, who hosts the repo

dsh-personal-directive

Personal directive injector with a top-bar toggle (fork of liucai2026/dsh-personal-directive)

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.

Available Tools

3 tools
certification_specA

Explain the dsh-plugin-certification spec v1: the five dimensions, the grade scale and the veto rule.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. 'Explain' signals a purely informational, non-mutating call, and the sentence specifies exactly which content will be delivered (five dimensions, grade scale, veto rule). It does not explicitly state that nothing is modified or describe the response shape, but for a zero-parameter explainer tool this is largely sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 17-word sentence front-loads the key verb and resource, then packs the content scope into a compact list. There is no filler, tautology, or repetition — every word contributes information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity — zero parameters, no annotations, no output schema — the description names the full content scope (five dimensions, grade scale, veto rule), which is what an agent needs to decide whether to invoke it. The only omission is the return format, which is a minor gap for a purely explanatory tool that will predictably return a textual explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, and the rubric sets a baseline of 4 for that case. The empty input schema already exhaustively conveys the parameter surface, so there is nothing further the description needs to add about parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb, 'Explain', bound to a concrete resource, 'the dsh-plugin-certification spec v1', and enumerates the exact scope: 'the five dimensions, the grade scale and the veto rule'. This naturally distinguishes it from the siblings get_certification and list_certified, which connote retrieving certification data rather than explaining the spec itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no alternative tool is named. The appropriate context (an agent wanting to understand the spec's evaluation model before or instead of querying actual certifications) is only implied by the verb 'explain', leaving the agent to infer routing from the tool name and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_certificationB

Return the dsh-plugin-certification record for one DeepSeek Harness plugin repository (grade, snapshot date, five-dimension evidence).

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesGitHub repository name, e.g. dsh-auto-review
ownerYesGitHub owner, e.g. PerryLink

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It clearly indicates this is a return/read operation and discloses the kind of data returned, which is adequate. However, it does not mention behavior when the repository/certification record is missing, whether live data is fetched from GitHub, or any response-shape details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no filler. The core action is front-loaded, and the parenthetical packs useful output context without bloating the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-owner/repo tool, the description covers the key context: what resource is returned and the main output dimensions. No output schema exists, so the parenthetical helps compensate, though a fuller description of the response structure or behavior when not found would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters owner and repo are already fully documented by the schema. The description adds context about the record type but does not explain the parameters beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Return') and a specific resource ('dsh-plugin-certification record'), scoped to one repository, with a useful parenthetical of the returned content (grade, snapshot date, five-dimension evidence). It does not explicitly contrast with sibling tools, but 'for one repository' clearly signals singular retrieval versus list_certified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to choose this tool over list_certified or certification_spec. The phrase 'for one repository' implies a singular lookup, but no explicit when-to-use, when-not-to-use, or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_certifiedA

List every plugin in the public dsh-plugin-certification registry with repo, grade and snapshot date.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the tool lists all plugins, not a filtered subset, and includes the output fields. However, it does not mention ordering, pagination, or any access requirements, leaving some behavioral aspects unstated for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, pointed sentence that front-loads the action and resource, then lists the output fields. Every word contributes meaning; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and no output schema, the description covers the key information: what is listed, from where, and which attributes are returned. It could be more complete by noting ordering or pagination, but the core calling context is sufficiently clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds no parameter details, but none are needed because the schema is empty and there is nothing to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('every plugin in the public dsh-plugin-certification registry'), and names the returned attributes (repo, grade, snapshot date). This clearly distinguishes it from sibling tools like get_certification or certification_spec, which suggest retrieving a single item or a spec rather than the full list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus its siblings. It does not mention alternatives, exclusions, or conditions. While the simple zero-parameter interface reduces ambiguity, the presence of sibling tools makes the lack of explicit routing a notable gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedcertification_spec
    • First observedget_certification
    • First observedlist_certified

TDQS

A4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool serves a clearly distinct purpose: fetch a single certification record, list the full registry, or explain the certification spec. There is no overlap in behavior and an agent would not confuse them.

Naming Consistency4/5

get_certification and list_certified follow a verb_first pattern, while certification_spec is a noun phrase. The names are still readable and predictable, but the mix is a minor deviation from full consistency.

Tool Count5/5

Three tools is an appropriate, well-scoped size for a certification registry lookup service. Each tool earns its place: one for a specific record, one for the whole list, and one for the spec.

Completeness5/5

For the apparent read-only domain, the surface is complete: agents can retrieve a specific certification, list all certified plugins, and understand the grading spec. There are no obvious dead ends or missing operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers