DSH Marketplace
EN

API

DSH Marketplace API

1,837 个 DeepSeek Harness 插件的公开 JSON API。不用 key,不用注册,CORS 全开 —— 本站、CLI、Python 包和 harness 内嵌插件读的都是这两个接口。

两个接口

接口回答什么
GET /api/v1/plugins这个插件是干嘛的。
GET /api/v1/index这一千个仓库里,哪些才是插件。

两个都开了 CORS,不需要鉴权。你要做目录站、做聊天工具、或者写一个会自己装插件的 agent,直接拿去用——它们就是为这个存在的,比你再爬一遍 GitHub topic 划算。

GET /api/v1/plugins

curl -s 'https://dshmarketplace.dev/api/v1/plugins?q=memory&limit=5'
参数
q自由文本,匹配仓库名、中英文摘要和描述
category14 个分类 id 之一
limit1–100,默认 20
page从 1 开始

每条结果都带中英文摘要、解析好的安装命令、检测到的风险项和源码仓库:

{
  "fullName": "liustack/modlens",
  "summary": "…",
  "summaryZh": "…",
  "category": "vision",
  "stars": 2325,
  "license": "MIT",
  "npmPackage": "@liustack/modlens",
  "installKind": "npm",
  "install": "dsh plugin --profile web add @liustack/modlens",
  "installable": true,
  "installOptions": [{ "label": "npm", "cmd": "…", "note": "…" }],
  "riskFlags": ["terminal surface"],
  "repoUrl": "https://github.com/liustack/modlens",
  "url": "https://dshmarketplace.dev/plugins/liustack-modlens"
}

install 这个字段的约定

没有命令能装得上的时候,installnull,不是一个占位串。 写 agent 的话这段值得看两遍。会直接执行这个字段的调用方,不能拿到一条跑不通的命令, 所以宁可留空——installable 这个布尔值说的是同一件事。

两种情况会出现,而且都是真实存在的:

  • 插件在 monorepo 的子目录里。dsh plugin add 是转发给 pnpm 的,而 pnpm 把 # 后面的东西当 git ref,所以 github:owner/repo#packages/thing 根本解析不了。没有一行命令能装,那就不给命令。
  • 插件哪儿都没发。既没有 npm 包,仓库根目录也装不了。

凡是返回了的命令,都带着 --profile webdsh plugin 只是把参数转发给 profile 目录里的 pnpm,所以这个 flag 是必填的——不带它 CLI 会直接报 required option '--profile <name>' not specified,什么都装不上。你用的是别的 profile,把 web 换掉即可。

GET /api/v1/index

curl -s 'https://dshmarketplace.dev/api/v1/index'

一个请求拿走整份目录。给那种需要判断"这一页仓库里有没有插件"、又不可能一个一个问的调用方用。 为了小,行是位置数组,压过去大概 22 KB,列名跟着 payload 一起发:

{
  "generated": "2026-08-17T09:12:44.108Z",
  "count": 1837,
  "site": "https://dshmarketplace.dev",
  "fields": ["fullName", "category", "install", "path", "npm"],
  "plugins": [
    ["liustack/modlens", "vision", "dsh plugin --profile web add @liustack/modlens", "/plugins/liustack-modlens", "@liustack/modlens"]
  ]
}

条目还没有独立页面的时候 pathnull,插件没发包的时候 npmnull。和 install 一样,这几个字段永远不会塞占位符。

目录里收了什么

1,837 条,来自社区精选库和 GitHub 上的 dsh-plugin topic。topic 不是注册表,所以收录有门槛——门槛写在这里,因为一道没人能核对的筛选不算筛选:

  • 它得声明自己是 DSH 插件。package.json 里有 dsh manifest、依赖了 @deepseek-ai/* 或 cordis、或者有 cordis.patch.yml。别的 harness、agent 客户端也会挂 dsh-plugin 标签蹭曝光,那些在这里装不上,也就不收。
  • 提交数不少于 10 次。这个数不是我们定的,取自 awesome-dsh-plugin 自己的收录门槛,所以这条标准你可以拿别人的规则来核对。脚手架在第一次提交时 manifest 就是合法的,能把它和真活分开的是提交数。
  • 它得说清自己干嘛的。一句描述都没有的仓库,收进来就只是一个链接,而链接每家目录都能给你。

这道门槛跑下来一次删掉了 1,415 条,其中 754 条提交数不到 5 次。一个目录的价值在于它排除了什么。

缓存与合理使用

响应带 Cache-Control,走 Cloudflare 边缘缓存。没有限流也没有 key,这件事能成立的前提是调用方守规矩:把 index 缓存起来,别每次页面渲染都拉一遍; 能用一次 /api/v1/index 解决的,别打一千次 /api/v1/plugins。下面那个油猴脚本最多六小时刷新一次,那就是我们期望的用法。

四个参考实现

下面每一个读的都是上面那两个接口,而且全部 MIT 开源在 GitHub。你要接进自己的东西,大概率其中一个已经踩过你要踩的坑:

客户端
npmnpx dshmarketplace-cli find memory —— 给 agent 用的稳定 --json 契约
PyPIpip install dshmarketplace —— 零依赖,同步异步都有
DSH 里dsh plugin --profile web add dshmarketplace-plugin —— /store,另带两个可供 agent 调用的工具
油猴脚本逛 GitHub 和 npm 时标出插件 —— 一个文件,无构建,无依赖

使用条款

免费,商用也可以。不用 key,不用注册,不强制署名——留个链接我们会很高兴,但从不作为条件。 数据是公开的仓库元信息加上这里写的摘要,不提供任何担保,收录也不等于做过安全审查。见 这个站不是什么

发现哪条收录错了,或者想把自己的撤下来,说一声就会改。