Back to home@LeonxLJX

dsh-mcp-market

The front door to MCP for DeepSeek Harness. Search a verified catalog of MCP servers and get the exact cordis.yml row that wires one into the official @deepseek-ai/dsh-mcp-client bridge.

Stars
0
Language
JavaScript
Created
Sep 3, 2026
Updated
Sep 3, 2026

Introduction

dsh-mcp-market

The front door to MCP for DeepSeek Harness. Search a verified catalog of MCP servers and get the exact cordis.yml row that wires one into the official @deepseek-ai/dsh-mcp-client bridge — in one step.

npm license node

DeepSeek Harness is an all-plugin Cordis agent harness. Plugins bring the tools. The official MCP bridge already knows how to talk to any MCP server — but someone still has to tell you which server to run and what exact config makes it work.

That someone is dsh-mcp-market.

  • 📦 A verified catalog — every entry is probed against the live npm registry by scripts/build-catalog.mjs; packages that 404 are dropped, versions are pinned to what actually exists. No hand-written guesses.
  • 🔌 A one-tool plugin — load dsh-mcp-market and the agent itself can search the catalog and read the wiring for any server (mcp_market_search).
  • 🧩 A zero-config CLIdsh-mcp-market add github appends the exact row to your overlay mcp-servers.cordis.yml, idempotently.

Why this exists

LayerWhat ships itStatus
MCP protocol servers@modelcontextprotocol/server-* + community✅ thousands exist
MCP → dsh tool bridge@deepseek-ai/dsh-mcp-client✅ official
Discovery + verified configdsh-mcp-market🟩 this project

The bridge is per-server configuration: a cordis.yml row with the right package name, the right version, the right env keys. Get any of those wrong and the tool silently never appears. The ecosystem had a bridge but no front door — that gap is what this plugin fills.

Install

As a harness plugin (declared in package.json of the harness app or installed via the plugin manager):

npm install dsh-mcp-market

It is a Cordis plugin and registers exactly one tool. Add it to your cordis.yml:

plugins:
  mcp-market:
    # optional: default result limit for the search tool (1-10)
    # config:
    #   defaultLimit: 5

Requires the same peer set as the official bridge: @deepseek-ai/dsh-tools and @deepseek-ai/cordis. ESM-only ("type": "module"), Node ≥ 20.

The CLI is also available standalone without touching the harness:

npx dsh-mcp-market search github
npx dsh-mcp-market add github --out mcp-servers.cordis.yml

Usage

As a harness tool

Once the plugin is loaded, the agent can run mcp_market_search with a free-text query, an optional category, and an optional limit. The result is a ranked list of matching servers, each with:

  • package + pinned version,
  • env keys the server expects,
  • the exact cordis.yml row to copy.

Example (what the agent sees when asked "add a search tool"):

mcp_market_search(query="github")

1. github — GitHub MCP server (@modelcontextprotocol/server-github@2025.4.8)
   env: GITHUB_TOKEN (Personal access token; repo + read:org scopes)
   category: dev
   Wire it in:
   ```yaml
   - id: github
     name: '@deepseek-ai/dsh-mcp-client'
     config:
       serverName: github
       transport: stdio
       command: npx
       args: ['-y', '@modelcontextprotocol/server-github@2025.4.8']
       env:
         GITHUB_TOKEN: !!js process.env.GITHUB_TOKEN
   ```

From the CLI

dsh-mcp-market <command>

Commands:
  search <query>            Search the catalog
  add <id> [--out file]     Append a server's cordis.yml row to an overlay file
                            (idempotent — never duplicates). Default out:
                            mcp-servers.cordis.yml
  ls [--category cat]       List all servers (optionally filtered)
  categories                List available categories
$ dsh-mcp-market search postgres
# postgres — Postgres MCP server (@modelcontextprotocol/server-postgres@0.6.2)

$ dsh-mcp-market add memory
# appending managed block to mcp-servers.cordis.yml

$ cat mcp-servers.cordis.yml
- id: memory
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: memory
    transport: stdio
    command: npx
    args: ['-y', '@modelcontextprotocol/server-memory@0.6.2']
    env: {}

The overlay file is meant to be !included or merged into the harness cordis.yml alongside the official bridge's own rows. Rows added by the CLI are wrapped in a # --- dsh-mcp-market managed block --- marker; re-running add on the same id is a no-op.

The catalog

catalog/catalog.json currently ships 17 verified servers (all probed against npm):

idpackagetags
filesystem@modelcontextprotocol/server-filesystemofficial, files
memory@modelcontextprotocol/server-memoryofficial, memory
sequential-thinking@modelcontextprotocol/server-sequential-thinkingofficial, thinking
everything@modelcontextprotocol/server-everythingofficial, demo
github@modelcontextprotocol/server-githubofficial, dev
slack@modelcontextprotocol/server-slackofficial, chat
postgres@modelcontextprotocol/server-postgresofficial, db
brave-search@modelcontextprotocol/server-brave-searchofficial, search
google-maps@modelcontextprotocol/server-google-mapsofficial, geo
pdf@modelcontextprotocol/server-pdfofficial, files
gdrive@modelcontextprotocol/server-gdriveofficial, files
puppeteer@modelcontextprotocol/server-puppeteerofficial, browser
playwright@playwright/mcpbrowser
puppeteer-mcp-serverpuppeteer-mcp-serverbrowser
figmafigma-developer-mcpdesign
tavilytavily-mcpsearch
firecrawlfirecrawl-mcpscrape

Regenerating the catalog

The catalog is generated, not curated:

npm run catalog        # scripts/build-catalog.mjs → probes npm, writes catalog/catalog.json

To add a candidate, extend the CANDIDATES array in scripts/build-catalog.mjs and re-run. The script resolves the live latest version, fetches description/homepage, and drops any package that 404s on the registry — the shipped catalog only ever contains installable servers.

Development

npm install
npm run typecheck     # tsc --noEmit
npm run test          # build + node --test tests/market.test.mjs (9 cases)
npm run catalog       # regenerate catalog/catalog.json from live npm data

The test suite pins the important contracts:

  • every catalog entry parses and has a unique id,
  • searchCatalog ranks by id > package > tags > description (github query → github server first),
  • an empty query with no category returns [] (browse is reserved for ls),
  • buildRow emits exactly the format the official @deepseek-ai/dsh-mcp-client consumes,
  • parseCatalog rejects structurally invalid payloads.

Project layout

dsh-mcp-market/
├── src/
│   ├── index.ts      # Cordis plugin entry: name / inject / apply
│   ├── tool.ts       # mcp_market_search tool registration (defineTool)
│   ├── catalog.ts    # catalog URL resolution + structural parsing
│   ├── search.ts     # tokenizer + ranked search + categories
│   ├── snippet.ts    # cordis.yml row + install command builders
│   └── types.ts      # public types
├── cli/index.mjs     # search / add / ls / categories
├── scripts/build-catalog.mjs  # live npm probe → catalog/catalog.json
├── catalog/catalog.json       # generated, committed
└── tests/market.test.mjs      # 9 contract tests (node:test)

License

MIT © 2026 LeonxLJX — see LICENSE.