dsh-mcp-skill-list
🇬🇧 English · 🇨🇳 简体中文
🔎 Two things a DSH profile never tells you at a glance: what this machine is wired to, and what a session actually used. This plugin answers both.
🧭 What it does
- 🔌 What is this machine wired to? — every configured MCP server, every skill on disk, every hook they declare.
- 📊 What did this session actually use? — every TOOL / MCP / SKILL / HOOK the conversation called, summarised per session and per turn.
It ships two surfaces, both rendered as real React inside DSH slots (no iframe):
| Surface | Where |
|---|---|
| 🧩 Inventory panel | Sidebar icon + main panel, three tabs: MCP / SKILL / HOOK |
| 🧰 Usage tab | Conversation top bar, right after Trajectory (轨迹), labelled 工具 |
🧩 Inventory panel (left sidebar)
- 🔌 MCP — server name, transport (
stdio/streamable-http), the startup command line or endpoint URL, environment variable names only, and whether tools from that server are currently registered. - 🎒 SKILL — name, description,
whenToUse, the provider that supplied it, itsSKILL.mdpath, and how many hooks it declares. - 🪝 HOOK — every hook declared by a skill's frontmatter, plus anything in
~/.claude/settings.json,<cwd>/.claude/settings.jsonandsettings.local.json, plus the eight events the host can hook into.
📋 Every name has a copy button.
🧰 Usage tab (conversation top bar)
Two levels, switched by a segmented control:
- 📊 Session summary — every tool the session called, with call counts, error counts and the number of turns it appeared in. Sub-tabs split TOOL / SKILL / MCP / HOOK; the hook tab also estimates how many times each hook would have fired.
- 🪜 Turn detail — one collapsible card per turn: the prompt that opened it, its call count, and the tools / skills / MCP servers that turn used.
🧠 MCP tools are recognised by their mcp__<server>__<tool> names and grouped back to their server, so you see which MCP server did the work, not just an opaque tool name.
🔌 Data sources
Everything is read, never written.
| Fact | Where it comes from |
|---|---|
| 🔌 MCP servers | profile Loader entries whose module is @deepseek-ai/dsh-mcp-client |
| 🩺 MCP connectivity | tools.schemas() filtered by the mcp__ prefix |
| 🎒 Skills | the skills service snapshot, backed by a disk scan of ~/.agents/skills, ~/.dsh/skills, <cwd>/.agents/skills, <cwd>/.dsh/skills |
| 🪝 Hooks | hooks: frontmatter inside SKILL.md, plus Claude Code settings files |
| 📊 Session usage | the session event log via sessionQuery (tool/call, tool/result, turn/start, …) |
🔒 Secrets stay home. Environment variables are reduced to their key names before they ever leave the host process; values are never serialised, never sent to the browser, never logged.
📦 Install
From the plugin market, one click. Or from a DSH session:
plugin_manager install_bundle, target: dsh-mcp-skill-list
From a checkout:
plugin_manager install_bundle, target: <absolute path to this directory>
✅ Requirements
- 🖥️ DSH runtime with the
webplatform (the panel is a web client plugin). - 📦 No third-party runtime dependencies: the host half imports only
node:fs/promises,node:osandnode:path; the client half requires onlyreactfrom the browser module table.
🗂️ Layout
index.js 🖥️ host half — two same-origin read-only routes
client.js 🌐 client half — slots, components, both surfaces
cordis.patch.yml ⚙️ bundle patch inserting the plugin row
locale/{zh,en}.json 🈯 interface dictionaries
icon.svg 🎨 sidebar icon
Two routes are registered on the host:
GET /api/dsh-mcp-skill-list/inventory— 🧩 MCP servers, skills, hooksGET /api/dsh-mcp-skill-list/usage?sessionId=…— 📊 per-session and per-turn usage
🛡️ Both reject non-loopback origins and cross-site requests.
🌐 UI language
The interface follows the DSH language setting out of the box — Simplified Chinese and English dictionaries are bundled in locale/{zh,en}.json, no extra configuration needed.
📄 License
MIT
No comments yet. Be the first to write one.