开发者中心 › 工具包结构

工具包结构:目录条目字段级说明

能力市场的目录是一个 registry.json(https 托管),你的工具作为 packages 数组的一项上架。本文每个字段都对照市场目录真实数据与 app 端解析代码(McpMarket.kt)编写。在线目录:/market/registry.json(本站域名下,链接可直接打开)。

要点(30 秒)

  • 市场目录 = registry.json(https 托管);你的工具是 packages 数组中的一项。
  • 两类形态:byo(自带服务器)与 declarative(声明式剧本);builtin 为内建保留。
  • byo 条目字段级说明(服务地址 / 工具清单 / 类目等)。
  • declarative 条目(workflow 剧本)字段与执行入口。
  • 含保留名提醒——命名前先对照。
展开全文(完整表格 / 代码 / 细节)

一、目录整体结构

{
  "version": 1,
  "updatedAt": "2026-08-25T06:21:03.000Z",
  "packages": [ { ...你的条目... }, ... ]
}

二、工具包两类形态(kind)

kind形态说明
byo
(缺省)
自带服务器你在自己的服务器上跑 MCP over HTTP 服务(快速开始的 hello world 就是这种)。条目带 server 对象。网页提交只支持这一类。
declarative声明式剧本零服务器:条目带顶层 declarative 对象(工作流剧本 + 字段映射),安装后由 app 内 workflow.run 工具族执行。剧本为公开内容,提交/审核链路会深度检查并拒绝含 token/apiKey/secret/password 类键的剧本。仅通过 app 内对话提交。
builtin官方内置MOV 官方内置能力,暂不对创作者开放提交。

三、byo(自带服务器)条目字段

{
  "id": "weather-demo",
  "name": "天气示例",
  "desc": "查询城市天气(只读工具 × 2)",
  "cat": "life",
  "paid": false,
  "author": "onlywmw",
  "contact": "you@example.com",
  "homepage": "https://github.com/onlywmw/xxx",
  "kind": "byo",
  "server": { "url": "https://mcp.example.com/weather", "token": "" },
  "toolPreview": ["weather.now", "weather.forecast"],
  "minAppVersion": "0.1.0",
  "ui": "https://weather-ui.example.com"
}
字段必填约束
id✅全局唯一,上架后不可改(会成为用户本地服务器配置 id,market.install 撞 id 拒绝)。网页提交口径:小写字母/数字/短横线,且以字母或数字开头(提交表单按此校验;服务端更宽,但按表单口径准备最稳)。
name✅展示名。安装后还决定工具前缀 ext.<name>.<工具>,非字母数字字符会转下划线。
desc✅一句话简介 ≤ 20 字(码点计):市场卡片等宽展示的前提,超限由提交校验直接拒绝。
cat✅分类,自由字符串(市场前端按它分组),缺省归 other。
author✅作者名/团队名,公开展示。
contact✅联系方式(邮箱等),审核沟通用。
paid—付费标记,仅展示;当前市场不做账号/支付。
homepage—你的主页/仓库链接。
server.url✅你的 MCP 端点,必须 https(提交时现场健康检查:空 POST,200/405 即通)。
server.token—必须留空。需要鉴权的服务由用户安装后在 app 里自填 token(每个请求带 Authorization: Bearer);目录中出现 token 结构直接拒收。
toolPreview—展示用预览清单;真实工具清单以安装后 tools/list 发现为准。
minAppVersion—最低 app 版本。
ui—可选:工具自带 UI 页面入口 URL。用户把它钉到侧边栏后,点击直接打开这个页面;缺省则点击行为降级为回填聊天输入框。
保留名提醒:tools/list 返回的工具名命中保留黑名单(sms.read / pay.query / identity.read / a2a.message / contact.read / call.log / location.read)不会被挂出——声明了也白搭,命名时就避开。

四、declarative(声明式剧本)条目

{
  "id": "wx-merchant-onboard",
  "kind": "declarative",
  "name": "微信商户入驻助手",
  "desc": "对话式跑完入驻填表",
  "cat": "onboarding",
  "author": "MOV 官方",
  "declarative": {
    "workflowId": "demo-onboard",
    "version": "0.1.0",
    "workflow": { "id": "demo-onboard", "version": "0.1.0",
                  "steps": [ { "id": "open_page", "action": "open", "url": "..." },
                             { "id": "fill_user", "action": "fillForm", "fields": [...] },
                             { "id": "pause_captcha", "action": "waitUser", "reason": "..." } ] }
  },
  "toolPreview": ["workflow.run", "workflow.status"]
}
  • 无 server、无健康检查/发现;toolPreview 展示 workflow.* 工具族;
  • 安装 = 把 workflow 落盘用户设备 filesDir/workflows/<workflowId>.json,卸载即删除;
  • 仅通过 app 内对话提交(见上架流程)。