🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

MCP 网关与技能安装器 zhangliang0115/ai-plugin

DeepSeek Harness
zhangliang011551 天前有提交已提供中文文档扫描:含敏感能力

一条命令跨 Agent 装技能,元工具代理全部 MCP 服务器

29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zhangliang0115/ai-plugin
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 51 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@zhangliang0115/aipx(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:46:22

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 85 处,展示前 78 条)
  • 请求外部主机api.github.com
    src/doctor.js:40
    const res = await fetch('https://api.github.com/rate_limit', {
  • 发起网络请求
    src/doctor.js:40
    const res = await fetch('https://api.github.com/rate_limit', {
  • 读取密钥环境变量
    src/doctor.js:59
    const has = Boolean(process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN)
  • 写入本地文件
    src/doctor.js:72
    await mkdir(target)
  • 删除本地文件递归
    src/doctor.js:85
    await rm(dir, { recursive: true, force: true })
  • 请求外部主机api.github.com
    src/doctor.js:109
    const res = await fetch(`https://api.github.com/repos/${REPO}/releases/latest`, {
  • 发起网络请求
    src/doctor.js:109
    const res = await fetch(`https://api.github.com/repos/${REPO}/releases/latest`, {
  • 执行外部命令固定命令
    src/doctor.js:154
    const zvec = spawnSync('python3', ['-c', 'import zvec'], { timeout: 15000 })
  • 读取本地文件
    src/doctor.js:173
    await access(path.dirname(root), fsConstants.W_OK)
  • 写入本地文件
    src/install.js:126
    await mkdir(p.dest, { recursive: true })
  • 读取本地文件
    src/install.js:127
    const body = await readFile(p.skill.file, 'utf8')
  • 写入本地文件
    src/install.js:128
    await writeFile(path.join(p.dest, 'SKILL.md'), body, 'utf8')
  • 读取本地文件
    src/lint.js:20
    const raw = await readFile(path.join(skillDir, 'SKILL.md'), 'utf8')
  • 读取本地文件
    src/lint.js:76
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    src/list.js:73
    const raw = await readFile(skillMd, 'utf8')
  • 读取本地文件
    src/collection.js:13
    return JSON.parse(await readFile(REGISTRY, 'utf8'))
  • 读取本地文件
    src/mcp.js:79
    parsed = JSON.parse(await readFile(resolvedFile, 'utf8'))
  • 读取本地文件
    src/mcp.js:96
    parsed = JSON.parse(await readFile(resolvedFile, 'utf8'))
  • 写入本地文件
    src/mcp.js:100
    await mkdir(path.dirname(resolvedFile), { recursive: true })
  • 写入本地文件
    src/mcp.js:101
    await writeFile(resolvedFile, JSON.stringify(parsed, null, 2) + '\n', 'utf8')
  • 读取本地文件
    src/mcp.js:185
    if (await exists(resolvedFile)) text = await readFile(resolvedFile, 'utf8')
  • 写入本地文件
    src/mcp.js:204
    await mkdir(path.dirname(resolvedFile), { recursive: true })
  • 写入本地文件
    src/mcp.js:205
    await writeFile(resolvedFile, out.join('\n'), 'utf8')
  • 读取本地文件
    src/mcp.js:210
    const rows = tomlAotRows(await readFile(resolvedFile, 'utf8'), key)
  • 读取本地文件
    src/mcp.js:213
    const lines = (await readFile(resolvedFile, 'utf8')).split('\n')
  • 写入本地文件
    src/mcp.js:217
    await writeFile(resolvedFile, lines.join('\n'), 'utf8')
  • 读取本地文件
    src/mcp.js:293
    if (await exists(resolvedFile)) text = await readFile(resolvedFile, 'utf8')
  • 写入本地文件
    src/mcp.js:316
    await mkdir(path.dirname(resolvedFile), { recursive: true })
  • 写入本地文件
    src/scaffold.js:276
    await mkdir(path.dirname(full), { recursive: true })
  • 写入本地文件
    src/scaffold.js:277
    await writeFile(full, content, 'utf8')
  • 读取本地文件
    src/util.js:22
    await stat(p)
  • 读取本地文件
    src/util.js:32
    await lstat(p)
  • 读取本地文件
    src/util.js:41
    return (await stat(p)).isDirectory()
  • 读取本地文件
    src/util.js:49
    return (await lstat(p)).isSymbolicLink()
  • 写入本地文件
    src/util.js:56
    await mkdir(p, { recursive: true })
  • 读取本地文件
    src/util.js:60
    return JSON.parse(await readFile(p, 'utf8'))
  • 写入本地文件
    src/util.js:65
    await writeFile(p, JSON.stringify(data, null, 2) + '\n', 'utf8')
  • 删除本地文件递归
    src/util.js:73
    await rm(p, { recursive: true, force: true })
  • 读取本地文件
    src/util.js:87
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    src/agents.js:118
    accessSync(`${d}/${bin}`, fsConstants.X_OK)
  • 读取本地文件
    src/detect.js:39
    pkg = JSON.parse(await readFile(pkgPath, 'utf8'))
  • 读取本地文件
    src/detect.js:79
    for (const name of await readdir(dir).catch(() => [])) {
  • 读取本地文件
    src/detect.js:83
    const { data } = parseFrontmatter(await readFile(full, 'utf8'))
  • 读取本地文件
    src/detect.js:110
    const parsed = JSON.parse(await readFile(mcpPath, 'utf8'))
  • 读取本地文件
    src/detect.js:146
    const { data } = parseFrontmatter(await readFile(skillMd, 'utf8'))
  • 读取密钥环境变量
    src/github.js:15
    const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN
  • 请求外部主机api.github.com
    src/github.js:20
    const res = await fetch(`https://api.github.com${pathname}`, {
  • 发起网络请求
    src/github.js:20
    const res = await fetch(`https://api.github.com${pathname}`, {
  • 发起网络请求
    src/github.js:39
    const res = await fetch(url, { headers: { 'User-Agent': UA, ...authHeaders() } })
  • 写入本地文件
    src/github.js:52
    await pipeline(Readable.fromWeb(res.body), createWriteStream(archive))
  • 删除本地文件
    src/github.js:55
    await rm(archive, { force: true })
  • 读取本地文件
    src/github.js:57
    const entries = await readdir(temp)
  • 写入本地文件
    src/github.js:69
    await writeFile(file, content, 'utf8')
  • 删除本地文件递归
    src/github.js:74
    await rm(temp, { recursive: true, force: true })
  • 读取本地文件
    dsh-plugin/bin/hub-serve.js:30
    raw = await readFile(file, 'utf8')
  • 读取本地文件
    dsh-plugin/index.js:92
    const raw = await readFile(path, 'utf8')
  • 读取本地文件
    dsh-plugin/index.js:103
    if ((await stat(dir)).isDirectory()) resourceBase = { kind: 'directory', path: dir }
  • 发起网络请求
    dsh-plugin/lib/client.js:145
    response = await fetch(BRIDGE_BASE + path, {
  • 发起网络请求
    dsh-plugin/lib/client.js:1544
    const r = await fetch("/aipx-hub/optimize", {
  • 请求外部主机api.deepseek.com
    dsh-plugin/lib/hub-bridge.js:441
    const callCompletion = (modelName) => fetch('https://api.deepseek.com/chat/completions', {
  • 发起网络请求
    dsh-plugin/lib/hub-bridge.js:441
    const callCompletion = (modelName) => fetch('https://api.deepseek.com/chat/completions', {
  • 读取密钥环境变量
    dsh-plugin/lib/hub-bridge.js:469
    if (process.env.DEEPSEEK_API_KEY) return process.env.DEEPSEEK_API_KEY
  • 读取本地文件
    dsh-plugin/lib/hub-bridge.js:471
    const yaml = readFileSync(path.join(os.homedir(), '.dsh', '.credentials.yaml'), 'utf8')
  • 读取本地文件
    dsh-plugin/lib/hub-bridge.js:483
    raw = await readFile(this.configPath, 'utf8')
  • 读取本地文件
    dsh-plugin/lib/hub-bridge.js:504
    raw = await readFile(this.pluginConfigPath, 'utf8')
  • 写入本地文件
    dsh-plugin/lib/hub-bridge.js:535
    await mkdir(path.dirname(this.pluginConfigPath), { recursive: true })
  • 写入本地文件
    dsh-plugin/lib/hub-bridge.js:537
    await writeFile(tmp, `${JSON.stringify(config, null, 2)}\n`, 'utf8')
  • 写入本地文件
    dsh-plugin/lib/hub-bridge.js:538
    await rename(tmp, this.pluginConfigPath)
  • 写入本地文件
    dsh-plugin/lib/hub-bridge.js:621
    await mkdir(path.dirname(this.configPath), { recursive: true })
  • 写入本地文件
    dsh-plugin/lib/hub-bridge.js:623
    await writeFile(tmp, JSON.stringify(config, null, 2) + '\n', 'utf8')
  • 写入本地文件
    dsh-plugin/lib/hub-bridge.js:624
    await rename(tmp, this.configPath)
  • 执行外部命令来自配置/变量
    src/hub/downstream.js:31
    this.child = spawn(this.def.command, this.def.args ?? [], {
  • 发起网络请求
    src/hub/downstream.js:139
    const result = await this.request('tools/list')
  • 发起网络请求
    src/hub/downstream.js:144
    return this.request('tools/call', { name: toolName, arguments: args ?? {} })
  • 发起网络请求
    src/hub/http-downstream.js:44
    res = await fetch(this.def.url, {
  • 发起网络请求
    src/hub/http-downstream.js:119
    const result = await this.request('tools/list')
  • 发起网络请求
    src/hub/http-downstream.js:124
    return this.request('tools/call', { name: toolName, arguments: args ?? {} })
  • 执行外部命令来自配置/变量
    src/hub/sidecar.js:30
    this.child = spawn(this.command, this.args, {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:api.github.com、api.deepseek.com

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 统管所有MCP服务器
  • 零配置混合搜索
  • 跨智能体安装技能

README

由 DeepSeek 最新模型翻译生成
ai-plugin 一条命令,把技能装进主流 harness 共享的标准根——外加一个用约 4 个元工具代理全部 MCP 服务器的网关与管理控制台。 Claude Code · DeepSeek Harness (dsh) · Codex CLI · Gemini CLI · GitHub Copilot · Cursor · OpenClaw CI License: MIT Node GitHub stars 你的电脑上装了 4 个不同的 AI Agent,你发现一个很棒的技能仓库。然后呢?把文件夹复制进 ~/.claude/skills,再复制进 ~/.agents/skills、~/.gemini/skills、 ~/.copilot/skills……上游一更新还得重新来一遍。 aipx 就是为解决这个问题而生的。 一条命令,把技能装进共享标准根 ~/.agents/skills(dsh 与 Codex 原生读取)。而 aipx MCP 网关用一个只暴露 4 个元工具(search / call / status / refresh)的 MCP 服务器托管你所有的下游 MCP——模型按需搜索、按需调用,上下文占用不再随 MCP 数量膨胀。内置技能还会教你如何用一个仓库面向所有 harness 发布插件。
展开完整文档(README 剩余 1 节)
ai-plugin

一条命令,把技能装进主流 harness 共享的标准根——外加一个用约 4 个元工具代理全部 MCP 服务器的网关与管理控制台。

Claude Code · DeepSeek Harness (dsh) · Codex CLI · Gemini CLI · GitHub Copilot · Cursor · OpenClaw

CI
License: MIT
Node
GitHub stars

你的电脑上装了 4 个不同的 AI Agent,你发现一个很棒的技能仓库。然后呢?把文件夹复制进 ~/.claude/skills,再复制进 ~/.agents/skills、~/.gemini/skills、 ~/.copilot/skills……上游一更新还得重新来一遍。

aipx 就是为解决这个问题而生的。 一条命令,把技能装进共享标准根 ~/.agents/skills(dsh 与 Codex 原生读取)。而 aipx MCP 网关用一个只暴露 4 个元工具(search / call / status / refresh)的 MCP 服务器托管你所有的下游 MCP——模型按需搜索、按需调用,上下文占用不再随 MCP 数量膨胀。内置技能还会教你如何用一个仓库面向所有 harness 发布插件。

npx github:zhangliang0115/ai-plugin install /

为什么需要

所有 Agent harness 都收敛到了同一个技能格式——SKILL.md——但安装路径各不相同:

| Agent | 从哪里读技能 |
| DeepSeek Harness (dsh) | ~/.agents/skills/ + /.agents/skills/ |
| Codex CLI | ~/.agents/skills/ + /.agents/skills/ |
| Claude Code | ~/.claude/skills/ + /.claude/skills/ |
| Gemini CLI | ~/.gemini/skills/ + /.gemini/skills/ |
| GitHub Copilot CLI | ~/.copilot/skills/ + /.github/skills/ |
| Cursor / OpenCode / OpenClaw | 各自的根目录(完整矩阵) |

插件体系更加碎片化:Claude Code 要 /plugin marketplace add,dsh 要
dsh plugin --profile web add "github:o/r#path:/dsh-plugin",Gemini 要
gemini extensions。aipx 就是缺失的那个公约数:一个安装器、一次同步、一份清单,通吃所有 Agent。

命令

aipx install owner/repo # 自动识别仓库根目录或 skills/ aipx install owner/repo#path:/skills/their-skill # 子目录(与 dsh 相同的语法) aipx install https://github.com/owner/repo/tree/v1.2/skills/x # 锁定 ref aipx install ./my-skill # 本地目录 aipx install owner/mcp-server # .mcp.json 仓库也能安装 MCP 服务器 aipx install owner/repo --project # 项目级:.claude/skills、 .agents/skills、.github/skills……
随仓库提交,全团队共享

aipx upgrade # 从记录的来源重装已装技能(等价 --force) aipx list # 按 Agent 列出已装技能 aipx search deepseek # 精选注册表;加 --github 实时搜索 GitHub topics aipx lint skills # 校验 SKILL.md 质量(frontmatter、触发描述、链接、嵌套) aipx new my-skill # 脚手架生成可直接发布的双目标技能仓库 aipx mcp list # 盘点各 Agent 配置中的 MCP 服务器 aipx mcp import # 把发现的 MCP 服务器注册进 aipx 网关 aipx mcp serve # 运行网关:一个 MCP 服务器、约 4 个元工具、上下文零膨胀 aipx remove # 从所有 Agent 卸载 aipx doctor # 环境与 Agent 检测报告

MCP 网关检索有四档引擎,自动选择:内置词法(零依赖)→ zvec 全文(中文友好)→ 零配置本地混合(fastembed 小模型自动下载、无 API 无费用;20 条查询评测 top-1 从 8/20 提升至 14/20,中文 0/10 → 9/10)→ 远程 embedding 混合(可选)。
aipx mcp serve --sidecar "python3 …/sidecars/zvec_sidecar.py" 即接入。

dsh 用户还可以在 设置 → Plugins → Hub Console 面板里管理服务器池、启停
单个工具、浏览工具目录,并用搜索试验场预览模型视角的检索结果。 面板顶部是插件设置:MCP 管理与优化提示词各自独立开关(默认全开);优化提示词还能配置按钮文字说明(默认隐藏、仅图标)、所用模型(默认 deepseek-chat)、优化范围(默认仅输入框草稿,可切「结合本次会话上下文」)、优化规则与自定义
模板(模板内容可含 {{input}} 占位符,设为生效即替换现有规则)。配置持久化
在 ~/.config/aipx/ai-plugin-toolkit.json,缺失或损坏时自动回退默认值。

示例:

$ aipx install JimmyLv/bibigpt-skill#path:/skills/bibi
✔ detected skill with 1 skill(s):
bibi — Summarize YouTube, Bilibili videos and podcasts…
✔ target roots:
/Users/you/.agents/skills (DeepSeek Harness (dsh))
/Users/you/.claude/skills (Claude Code)
✔ installed bibi into 2 root(s)

内置工具包(本仓库本身就是一个插件包)

三种用法:

1. 纯技能,所有 Agent: aipx install zhangliang0115/ai-plugin

2. Claude Code 市场: /plugin marketplace add zhangliang0115/ai-plugin /plugin install ai-plugin-toolkit@ai-plugin

3. DeepSeek Harness bundle:
dsh plugin --profile web add "github:zhangliang0115/ai-plugin#path:/dsh-plugin"

| 技能 | 教会你的 Agent |
| skill-author | 编写能在所有 harness 加载的 SKILL.md 技能 |
| dsh-plugin-dev | 打包发布 DeepSeek Harness bundle(cordis.patch.yml、ctx.skills.register、git 安装的坑) |
| claude-plugin-dev | 发布 Claude Code 插件与市场 |
| deepseek-cost-router | 在 deepseek-chat / deepseek-reasoner 之间路由任务,降低 API 成本 |

设计原则

- 零依赖。 一个关注点一个 JS 文件,node:test 测试套件,无供应链风险。
- 非破坏性。 已存在的目标默认跳过(--force 覆盖);--dry-run 预览;卸载走清单。
- 诚实的分级。 官方文档确认的路径默认写入;社区报告的路径(Cursor、 OpenCode、OpenClaw)需要 --all 或 --agents 显式指定。
- 标准优先。 全面采用 SKILL.md;优先符号链接而非复制;以 ~/.agents/skills 为同步主根(dsh 与 Codex 本来就共享它)。

文档

- 兼容性矩阵 — 每个根目录、每个分级
- 安装到 DeepSeek Harness (dsh) — 调研指南:技能根、分层、bundle 格式、常见的坑
- 安装到 Claude Code — 市场与插件
- 一次发布,全端生效 — 双目标仓库布局
- MCP 网关指南 — 元工具、事务记录、控制台
- 检索引擎与评测 — 词法/全文/混合四引擎与 20 查询评测
- dsh 快捷指令 — dsh 原生自定义提示词机制与边界
- MCP 生态决策 — 哪些用现成、哪些自研

环境要求

Node.js ≥ 20 与 tar(macOS、Linux、Windows 10+ 均内置)。无需 npm install——
npx github:zhangliang0115/ai-plugin 直接从仓库运行;也可全局安装 npm i -g @zhangliang0115/aipx。可选:GITHUB_TOKEN
提升 API 速率限制。

路线图

- [x] v0.1 — install / list / search / remove / doctor
- [x] v0.2 — 项目级安装、aipx new 脚手架、aipx upgrade、aipx lint
- [x] v0.3 — MCP 配置同步、注册表校验 bot + 网站 + 安装冒烟
- [x] v0.4 — MCP 网关(mcp import / mcp serve)、六技能工具包
- [x] v0.5 — hub 控制台(dsh 设置页面板:服务器池、工具启停、搜索试验场)、四档检索引擎(零配置本地混合,评测 8/20→14/20)、prompt-cache 稳定化、aipx doctor hub 健康段、registry 扩至 24 条全核验
- [ ] then — npm 发布(待 NPM_TOKEN)、Homebrew tap、技能分析钩子(可选)

详见 ROADMAP.md 与 CHANGELOG.md。

参与贡献

欢迎 PR——尤其是新增精选注册表条目和确认社区级根路径。参见 CONTRIBUTING.md 与插件提交模板。

许可证

MIT © 2026 zhangliang0115
预览分享卡片长什么样 ↓zhangliang0115/ai-plugin
分享 · DeepSeek Harness Hub
zhangliang0115/ai-plugin

一条命令跨 Agent 装技能,元工具代理全部 MCP 服务器

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部