关于 mcpify
mcpify 是将 OpenAPI 3.x 规范转换为 MCP 服务的命令行工具,供希望让 Agent 调用 REST API 的团队使用。它为每个操作生成工具,并提供凭据、访问控制和部署选项。
主要功能
- 01将 OpenAPI 操作转换为 MCP 工具
- 02支持 stdio 和 HTTP 传输
- 03凭据与访问策略控制
- 04规范诊断和版本差异比较
- 05响应筛选与敏感信息遮盖
适用场景
- 01向 MCP 客户端开放 REST API
- 02在 CI 中检查 API 变更
- 03限制 Agent 仅执行读取操作
- 04缩减工具列表和响应体积
MCP 相关
它将 OpenAPI 操作作为 MCP 工具,通过 stdio 或 Streamable HTTP 提供服务,供本地或共享的 MCP 客户端调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcpify
English | Türkçe
将任意 OpenAPI REST API 转换为 MCP 服务,让 Claude Code、Cursor 及其他所有 MCP 客户端都能直接调用你的 API。只需一条命令,且没有运行时依赖:
mcpify serve https://your-company.com/openapi.json
# try it right now, nothing installed (uvx pulls from PyPI on demand)
uvx --from mcpify-openapi mcpify list examples/petstore.json --cost
专注、适用于生产环境、以 CLI 为先:只做一件事(OpenAPI → MCP)。其他一切——治理、凭据、令牌经济、运维——都是可选项,在你需要之前不会碍事:
- 默认对 Agent 安全 — 延迟加载上下文预算(
--lazy)、密钥屏蔽(--redact)、爆炸半径限制(--read-only、按令牌划分的 RBAC) - 满足真实部署需求 — stdio + HTTP/SSE、OAuth2 和读写分离凭据、健康探针、审计跟踪、指标、多 API 服务、热重载
- 经验证,而非空口承诺 — 28 个测试套件共 520 项测试、恶意规范语料库、实时 CI 检查、零运行时依赖
你会喜欢它的理由
从规范到服务
- 60 秒即可运行 — 指向任意 OpenAPI 3.x 规范(文件或 URL)
- 每个操作都成为一流 MCP 工具 — 根据
parameters+requestBody生成输入架构,并解析内部$ref - 从工具视图比较规范版本 —
mcpify diff old.yaml new.yaml会报告新增、移除和变更的操作,并为每项变更给出破坏性判定和迁移指南;--fail-on-breaking可作为 CI 门禁 mcpify doctor— 发布前检查规范是否便于 Agent 使用:缺少 operationId、缺少摘要、类似指令的工具文本、描述过长;--probe会调用一次 API——需要验证端到端身份验证时,可使用真实凭据(--auth-env),而--fail-on-http-error可用作严格的 CI 门禁mcpify try/mcpify mock/mcpify output-server— 无需 Agent 客户端即可调用工具,为 CI 提供符合架构的模拟 API,或将服务命令嵌入可共享脚本
凭据与策略
- 凭证绝不会进入规范或模型 — 调用时从环境中读取;规范自身的安全声明会选择标志(bearer、basic、header、query)
- 内置 OAuth2 客户端凭证 — 获取、缓存和刷新令牌;遇到请求过程中的 401 时会重新获取(RFC 6749,仅使用标准库);
--write-oauth2-*为非 GET 调用提供第二个客户端身份,让读写使用不同客户端进行身份验证 - 默认遵循最小权限原则 —
--write-auth-env拆分静态凭证(读取使用读取密钥,写入使用专用密钥),--read-only过滤可用范围,--deny/--allow隐藏会产生修改的 GET 请求,基于令牌的 RBAC 为每个 bearer 令牌提供独立的允许/拒绝范围 --redact password,token— 在每个响应的所有层级,将键名表示机密的值替换为***(包括错误正文,不区分大小写);模型绝不会看到这些值- 保留审计记录,不暴露内容 — 每次调用记录一行 JSON:工具、API、状态、延迟、参数指纹(绝不记录原始参数);
--plugin可加载你的 Python 模块,用于身份验证、请求和结果钩子
令牌开销
- 提供服务前先查看费用 —
mcpify list --cost估算可用范围的价格(约 4 个字符/令牌):每个 Agent 在每次tools/list中需要支付多少;多 API 配置会在一次运行中显示每个 API 的价格和总价 --fields id,event— 在每一层选择响应字段:选中的键保留其值,未选中的容器保持透明,清空的容器会被移除。实时 weather.gov:350 条预警的完整响应也能控制在之前约 189 条时就会截断的预算内- 有效截断 — 超大响应会沿 JSON 结构截断,并明确标记
"truncated": true,绝不会从文档中间截断 --lazy先搜索再调用 — 将 api.weather.gov 的列表缩减 95.5%;搜索结果现在会显示提取每个完整架构的开销,Agent 因此只提取所需内容[tool-text]覆盖项 — doctor 会标记面向模型、类似指令的描述;你可以在配置中为每个工具替换描述
运维
- 两种传输方式,一个工具范围 — 为本地 Agent 提供 stdio;
serve --http 8080使用 MCP Streamable HTTP(对于请求 SSE 的客户端返回 SSE 响应,否则返回 JSON),让整个团队共享一个服务,还可选用 bearer 令牌 - 多个 API,一个 MCP 服务 — 在
.mcpify.toml中使用[apis.NAME]配置段:为每个 API 设置身份验证、缓存、重试、过滤器和速率限制;安全处理名称冲突;聚合健康状态;mcpify status并行探测每个 API - 内置上游友好机制 — 感知 ETag 的缓存、仅重试幂等请求(502/503/504)、
--wait-on-429遵循 Retry-After、--rate-limit RPS限制每秒请求数(多 API 时按上游分别限制,重试也计入) - 仅按需启用可观测性 — Prometheus
--metrics(调用计数、延迟、缓存、健康状态,以及运行时的投影/脱敏计数器)、--otel跟踪、--reload热切换、mcpify ui本地仪表板 - 免费自行托管 — 使用带自动 HTTPS 的 docker-compose Caddy,以及经过强化的 systemd 单元:自托管指南
- 运行时零依赖 — 整个代码树都是可审计的标准库 Python;YAML 规范需要可选安装
pip install 'mcpify[yaml]'
快速开始
# install (installs the `mcpify` command)
pipx install mcpify-openapi
# run without installing (uvx — pulls from PyPI on demand)
uvx --from mcpify-openapi mcpify list ./openapi.json --read-only
# first time? the wizard writes a config for you
uvx --from mcpify-openapi mcpify init
# ...as a container (GHCR, published on every release)
docker run -i ghcr.io/furkan708/mcpify:latest serve ./openapi.json --read-only
# ...or from source
git clone https://github.com/furkan708/mcpify.git
cd mcpify && pip install .
# 1. preview the tools that will be generated (add --cost for the context price)
mcpify list examples/petstore.json
# 2. validate the spec is agent-friendly (+ --probe for a live pre-flight)
mcpify doctor examples/petstore.json
# 3. serve it over MCP
mcpify serve examples/petstore.json --base-url https://petstore.example.com/v1
# 4. no agent client at hand? try the tools in your terminal
mcpify try examples/petstore.json --base-url https://petstore.example.com/v1
# 5. or share it over HTTP with the whole team
mcpify serve examples/petstore.json --http 8080 --http-token $SHARED_TOKEN
使用身份验证
# Bearer token read from the environment (never hardcoded)
export PETSTORE_KEY="sk-..."
mcpify serve petstore.json \
--base-url https://petstore.example.com/v1 \
--auth-env PETSTORE_KEY \
--auth-style bearer \ # optional: auto-detected from the spec
--read-only
通常无需显式指定样式 — 规范的安全声明会为你选择 bearer/basic/header/query(以及相应名称)。对于 HTTP Basic,环境变量中应包含 username:password:
--auth-style basic --auth-env CREDS。
| 标志 | 含义 |
|---|---|
--auth-env VAR | 存放凭证的环境变量 |
--auth-style bearer|basic|header|query | 发送凭证的方式(默认:根据规范自动检测) |
--auth-name NAME | 非 bearer 样式使用的 header / query 名称(例如 X-API-Key) |
使用 OAuth2(客户端凭据)
适用于由 OAuth2 身份提供方保护的 API(RFC 6749 §4.4)。凭据
保存在环境变量中;访问令牌会自动获取、缓存至其 expires_in,
到期后自动刷新;如果 API 在请求过程中返回 401,也会自动重新
获取一次:
export OAUTH2_CLIENT_ID="..."
export OAUTH2_CLIENT_SECRET="..."
mcpify serve api.json \
--oauth2-token-url https://idp.example.com/oauth2/token \
--oauth2-client-id-env OAUTH2_CLIENT_ID \
--oauth2-client-secret-env OAUTH2_CLIENT_SECRET \
--oauth2-scope "read write" # optional; --oauth2-client-auth body for token endpoints that reject Basic
也可拆分写入身份: --write-oauth2-token-url(以及客户端和作用域
标志)会为非 GET 请求运行第二个客户端凭据流程——读取请求使用读取客户端
进行身份验证,写入请求使用写入客户端进行身份验证;两者各自拥有
独立的令牌缓存,并采用相同的 401 自动修复机制。不能与
--write-auth-env 同时使用(写入请求只能选择一种凭据类型)。
在一个服务中使用多个 API
在一个配置中放入多个 OpenAPI 文档,并将它们作为同一工具集提供服务——无需网关,也无需为每个 API 单独运行进程:
# .mcpify.toml
[apis.catalog]
spec = "https://shop.example.com/openapi.json"
auth-env = "CATALOG_TOKEN" # per-API credential
cache-ttl = 60
rate-limit = 5 # per-API courtesy throttle (req/s)
redact = "password,client_secret" # per-API response masking
[apis.crm]
spec = "./crm.yaml"
read-only = true # per-API policy
base-url = "https://crm.internal/v2"
fields = "id,name" # per-API response projection
[apis.weather]
spec = "https://api.weather.gov/openapi.json"
timeout = 10
表面配置开关(--lazy、--enable-preview、--http、--format)是
服务级标志;凭据、策略、缓存和重试则按 API 配置。
mcpify list --cost # preview every API and price each surface
mcpify serve # stdio, all three APIs, prefixed on collisions
mcpify serve --http 8080
mcpify try # REPL across every API
mcpify status # probes each API concurrently
mcpify status 会逐个报告 API 状态,例如:[catalog] reachable (status 200, 0.03s) — https://shop.example.com — 31 tools;如果任何 API 无法访问,命令会以非零状态退出。如果两个 API 暴露了同名工具(list_pets),两者都会加上各自的标签进行重命名(catalog_list_pets、crm_list_pets),避免名称被静默覆盖;不冲突的名称则保持不变。mcpify_health 工具会返回涵盖所有 API 的报告。各项配置的优先级为:CLI 标志 > [apis.NAME] > [serve]。传入位置参数规格文件或 [apis.*] 配置段,二者只能选其一。
接入 Agent
Claude Code:
claude mcp add my-api -- mcpify serve openapi.json --read-only
Claude Desktop / Cursor / 任意 MCP 客户端(claude_desktop_config.json):
{
"mcpServers": {
"petstore": {
"command": "mcpify",
"args": ["serve", "~/specs/petstore.json", "--auth-env", "PETSTORE_KEY"]
}
}
}
HTTP 传输(团队共享服务)——运行一次 mcpify serve api.json --http 0.0.0.0:8080 --http-token $TOKEN,然后让支持 HTTP 的客户端连接到该服务:
{
"mcpServers": {
"petstore": {
"type": "http",
"url": "http://your-host:8080",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
现在向你的 Agent 提问:“列出宠物,然后创建一只名叫 Milo 的宠物”——它会发现 list_pets 和 create_pet,填入参数,并执行真实的 HTTP 调用。
操作如何转换为工具
| OpenAPI | mcpify |
|---|---|
operationId | 工具名称(经过清理;缺省时使用 method_path) |
summary / description | Agent 读取的工具描述 |
deprecated: true | 在暴露旧端点前,由 mcpify list 显示 |
parameters(path/query/header) | 带枚举值的独立类型化参数 |
requestBody(JSON) | body 对象参数 |
$ref 指针 | 内联解析(components → 实际架构) |
servers[0].url | 默认基础 URL(可通过 --base-url 覆盖) |
Agent 只能看到工具列表和 API 返回的 JSON 响应—— mcpify 不会添加中间件,不会缓存你未要求缓存的内容,也不会将 凭据发送到 API 以外的任何地方。
诊断
$ mcpify doctor my-api.json
openapi: 3.0.3
title: Acme API
paths: 23
tools: 41 operations
servers: https://api.acme.com
warning: 12/41 operations have no operationId (names fall back to method_path)
warning: 30/41 operations have no summary (agents see no description)
添加 --probe 可进行实时预检——静态报告生成后,mcpify
会尝试连接一个无需参数的 GET 端点(或基础 URL),并报告其可访问性;
如果连接失败,命令会以非零状态退出,让 CI 和 Shell 脚本在启动服务前
停止:
$ mcpify doctor https://api.weather.gov/openapi.json --probe
...
probe: GET /alerts → 200 reachable (2.80s)
CLI 参考
mcpify list <spec> [--tag T] [--include P] [--exclude P] [--read-only] [--json]
mcpify list --cost # price the surface (~4 chars/token)
mcpify list --cost --lazy # ...and the 3-meta-tool lazy surface
mcpify list --config .mcpify.toml --cost # multi-API: every surface priced
mcpify serve <spec> [--base-url URL] [--server INDEX|NAME] [--name N] [--auth-env VAR]
[--auth-style bearer|header|query] [--auth-name NAME]
[--oauth2-token-url URL --oauth2-client-id-env VAR
--oauth2-client-secret-env VAR] [--timeout S]
[--read-only] [--tag T] [--include P] [--exclude P]
[--http [HOST:]PORT] [--http-token TOKEN] [--wait-on-429 SEC]
mcpify try <spec> [same serve flags] # interactive REPL, no agent needed
mcpify output-server <spec> -o FILE [-- <any serve flags>]
mcpify ui <spec> [same serve flags] # local dashboard (tool explorer, health, config)
mcpify mock <spec> [--http 8000] [--delay-ms N]
mcpify diff OLD NEW [--json] [--fail-on-breaking] # upgrade report + CI gate
mcpify diff OLD NEW --probe [--auth-env V] # ...+ live check of the NEW API + cost delta
mcpify config-schema # JSON Schema for .mcpify.toml (editor wiring)
mcpify doctor <spec> [--probe --auth-env V --fail-on-http-error] # static audit + live pre-flight / CI gate
# token economics: --fields id,name (projection), --redact password,token (masking),
# --rate-limit RPS (upstream courtesy, retries included)
# credential split: --write-auth-env WRITE_KEY_ENV or --write-oauth2-token-url (reads keep --auth-env)
# tool-text overrides: [tool-text.TOOL] description = "..." in .mcpify.toml
# multi-API: define [apis.NAME] sections in .mcpify.toml, then run
# mcpify list|serve|try|status|ui (no positional spec) — one process, every API
# ops add-ons for serve/ui: --metrics [HOST:]PORT --reload --cache-warm
# --audit-log FILE --http-token-file FILE --plugin FILE (repeatable) --otel [ENDPOINT]
备注与限制
- JSON 规范开箱即用;YAML 规范需要运行
pip install 'mcpify[yaml]' - 加载时会自动打包外部
$ref目标(文件或 URL);循环跨文件引用会保留原样,而不会展开(无法解析的内容会被 surface 跳过) - 过大的 JSON 响应会截断为有效 JSON(保留前几项并添加截断标记);非 JSON 正文会在字符边界处截断
--fields会按照文档说明的规则在每一层进行选择(选中的键原样保留,未选中的容器透明处理);这只是投影,而非安全边界——如果某个字段绝不能传给模型,请使用--redact- 请求正文会作为单个
body对象参数公开——选择可预测性,而非复杂性 - HTTP 传输每个请求只提供一个 JSON-RPC 响应(MCP 规范已移除批处理);发送
Accept: text/event-stream的客户端会收到封装为单个 SSEmessage事件的响应。对于无状态服务,服务器发起的流(带会话的 GET 流)特意不在支持范围内 - 规范版本:接受 OpenAPI 3.x 和 Swagger 2.x 根规范;3.x 是首选
针对现实世界的强化
mcpify 每次发布都会依据涵盖 10 个类别的 MCP 最佳实践清单及已公开的生产环境故障模式进行审计,而不只是测试我们自己的示例:
- 恶意规范测试集(12/12): 循环
$ref、多部分上传、allOf架构、服务器 URL 变量、相对基础 URL、超大响应——每个场景都源自有记录的真实故障,已修复并通过回归测试锁定。来源包括一项针对 18 个真实 API 的 REST→MCP 生成研究(arXiv)。 - 实时集成: CI 中会加载真实的 api.weather.gov 规范——实时检查发现了最后两个真实错误(嵌套截断导致的封装拆分、仅对顶层执行投影),并在用户发现前修复。
- 强制执行 MCP 生命周期: 客户端完成
initialize握手前,工具不可访问。 - 上游故障后会话仍可继续: 上游响应缓慢(读取超时)、响应中途断开,甚至单个工具内部出现意外异常,都会转为包含修复建议的正常
isError工具结果——绝不会导致 stdio 连接失效(其他 OpenAPI-to-MCP 服务曾报告过这种故障;此处已重现并通过回归测试锁定)。 - 影响范围控制: 只读模式、拒绝/允许策略层、按令牌划分的 RBAC、响应投影与机密信息屏蔽、速率限制、有效 JSON 截断至 40k 个字符、
--timeout、绝不记录凭据。
包含每项状态的完整清单:docs/AUDIT-CHECKLIST.md
测试
520 项测试通过,另有一项实时集成测试会加载真实的 api.weather.gov 文档(离线时自动跳过),以及一项 OTel 正向测试,会在安装了可选追踪扩展的环境中运行。每个测试套件都会在 Linux 和 Windows 上使用 Python 3.10–3.12 运行;每次推送都会经过 ruff、严格模式的 mypy 和 CodeQL 检查。
| 套件 | 测试数 | 验证内容 |
|---|---|---|
| 规范解析与解析 | 13 | OpenAPI 3.x 与 YAML 加载、$ref 链、allOf 合并、服务器变量、格式错误的输入 |
| 工具转换 | 19 | 带冲突后缀的 operationId 命名、输入架构、枚举、请求体处理、注解与输出架构推导 |
| Agent 接口 | 32 | 基于 HTTP 的注解、结构化输出契约、补救错误、--lazy 搜索、试运行预览 |
| CLI | 15 | list / doctor / serve 标志、--json 输出、已弃用徽标 |
| 恶意输入集 | 11 | 循环 $ref、multipart 请求体、相对基础 URL、300 KB 截断、500 个操作的性能;每项都对应一个有记录的真实故障 |
| 生命周期与卫生 | 8 | 初始化握手(-32002)、字节纯净的 stdio、绝不记录凭据 |
| 协议端到端 | 9 | 通过 stdio 与运行中的本地 HTTP API 进行真实 JSON-RPC 通信,并断言线路级行为 |
| 策略层 | 7 | --read-only、--allow / --deny 优先级、防止修改数据的 GET 请求 |
$ref 参数 | 4 | 根据完整规范解析参数架构——weather.gov 类故障(其中一项测试会访问实时文档) |
| 运维与配置 | 47 | 配置文件与环境变量的优先级、初始化向导、缓存 TTL 与边界、重试安全性、XML 转换、发现、批处理、状态/健康检查 |
| 协议版本兼容性 | 5 | 2026-07-28 无状态 _meta 请求与旧版 2025-06-18 握手,在同一线路上验证 |
| HTTP 传输 | 19 | Streamable HTTP:通过 POST 管理生命周期、405/411/413/415 错误阶梯、解析/批处理拒绝、Bearer 验证、绑定字符串解析器 |
| OAuth2 客户端凭据 | 18 | 使用虚拟时钟测试令牌获取/缓存/刷新、Basic 与请求体客户端身份验证、公共客户端、所有故障模式、端到端 401 自愈 |
try REPL | 26 | 管道输入的 stdin 会话:按编号/名称选择、类型化提示、输入错误时重新提示、:raw/:info、干净处理 EOF/Ctrl+C 退出、只读接口 |
output-server | 11 | 内嵌规范完整性、防护措施(文件已存在、规范错误、未知标志)、机密警告,以及真实子进程 E2E 握手 |
| 服务选择 | 17 | `--server INDEX |
| 身份验证自动检测与 Basic | 22 | securitySchemes → 样式/名称解析(OpenAPI + Swagger 2.0)、按要求顺序确定优先级、操作级安全设置、精确的提示文本、HTTP Basic 标头编码、CLI/try/doctor 接线、显式样式覆盖 |
友好处理速率限制(--wait-on-429) | 9 | 在上限内遵循一次 Retry-After,超过上限则原样返回 429,缺少标头时回退到重试延迟,HTTP-date 格式不等待,POST 不会自动等待,CLI 接线 |
| 多 API 聚合 | 26 | [apis.*] 合并时使用双向冲突前缀和 _2 后缀、各 API 的路由/身份验证/缓存隔离、并发聚合健康检查(在提示中指出失效 API)、跨 API 的延迟搜索(含标签匹配)、预览路由、状态退出代码、--env 继承、同时被拒绝的标志组合 |
| 运维:仪表板、指标、模拟、重新加载 | 25 | /metrics 文本格式(计数器/直方图/缓存命中与未命中/健康度量)、需令牌验证的 UI 路由、脱敏预览 API、配置表单写入器(+未知键返回 400)、架构形状的模拟响应与模板路由、热重载重建(包括在规范损坏时继续运行) |
| CLI 连通性接线 | 10 | --http 接线、MCPIFY_HTTP_TOKEN 回退、OAuth2 标志规则、配置文件键、向导选项 5、try 冒烟测试 |
规范差异(mcpify diff) | 14 | 新增/删除/更改的操作、破坏性变更判定(新增必需参数/变为必需、请求体变为必需、移除操作)、弃用与 operationId 警告、迁移指南、文档级差异、CLI 退出契约 0/1/2、--json |
| v1.11 服务:审计、缓存、RBAC、插件 | 17 | 带参数指纹的 JSONL 审计跟踪 + 文件不可写时的故障安全行为、对过期条目进行 ETag 304 重新验证、mcpify_cache_invalidate(按范围 + 全部)、--cache-warm 仅预调用无参数的 GET、端到端令牌文件范围控制(401 / 过滤列表 / 拒绝调用、deny 优先、拒绝重复令牌)、对真实请求运行插件钩子、mcpify ui 分发(防止命令失效回归)、config-schema 与配置模块一致、OTel 防护 |
外部 $ref 打包 | 6 | 内联文件与 URL 基础目标、仅包含组件的目标文件、相对于各自文件解析嵌套引用、跳过缺失目标、保留循环引用、不修改同一文档中的引用 |
| 治理:拆分密钥、工具文本、有效截断 | 21 | 针对实时上游按方法使用读密钥/写密钥(共享身份的默认值保持不变)、样式/名称继承 + 显式覆盖、serve/envs/apis 中的配置 write-auth-* 键、通过 list --json 覆盖 [tool-text]、未知工具警告、验证器错误、架构/密钥一致性、doctor 指令式与超长描述计数、超大数组 → 带标记的有效 JSON、保留对象键、非 JSON 回退、保留错误前缀 |
| v1.13:成本、投影、SSE、OAuth2 写入 | 20 | 在 JSON 与人类可读输出中显示表面成本、递归投影与透明封套(固定了两条规则:仅适用于顶层的首条规则在实时测试中失败)、选定的键保留其数组、SSE 分帧与 JSON 客户端、写入流程解析 + 与 --write-auth-env 互斥 |
| v1.16:状态策略、REPL 会话控制、差异探测 + 成本变化 | 12 | 多 API JSON+人类可读状态中的策略(fields/redact/rate-limit)与单规范 policy: 行、在实时上游上通过 :redact/:fields 会话设置/显示/清除(在线路上验证脱敏)、JSON+人类可读输出中的差异表面成本变化、--probe 可达/不可达退出契约(探测失败时为 2)、表单重试延迟浮点数 |
| v1.15:auth-probe、严格门控、指标、延迟定价 | 16 | 使用真实凭据进行探测(在实时本地上游上对比无凭据时的 401 与有凭据时的 200)、严格模式判定、doctor CLI 退出契约、投影/脱敏 Prometheus 计数器(统计数值、启用全新会话)、count_redact_targets、延迟表面的定价行、init --probe 可达/不可达、仪表板表单令牌键(浮点数强制转换、拒绝未知键) |
| v1.14:脱敏、速率限制、探测、多 API 列表 | 29 | 各层级的脱敏,包括错误正文和选定键重叠、原地脱敏数组、使用虚拟时钟测试限流器槽位、重试限流、探测目标选择 + 可达性退出契约、serve/apis/envs 中的配置 redact/rate-limit、各上游的独立限流器、多 API list + 定价 |
| 故障处理策略:在实际使用中发现的每个 bug,都会在修复发布前加入固定的 | ||
| 回归测试套件,测试只会不断增加。 |
在本地运行:
pip install pytest pyyaml
pytest -v
路线图
v1.6–v1.16 路线图已全部交付。未来可能开展的工作(不作承诺):由服务端发起的 SSE(带会话的 GET 流——考虑到无状态传输,这项功能特意未纳入)。
-
— 已在 v1.16.0 发布status策略可见性、REPL:redact/:fields、diff --probe+ 成本差值、表单示例 -
经过身份验证的— 已在 v1.15.0 发布doctor --probe+--fail-on-http-errorCI 门禁、init --probe、投影/脱敏指标、延迟加载的表面定价 -
— 已在 v1.14.0 发布--redact、--rate-limit、doctor --probe、延迟搜索成本、多 APIlist -
OAuth2 写入流程(— 已在 v1.13.0 发布--write-oauth2-*)、list --cost、--fields投影、SSE POST 响应 -
读写凭据分离、工具文本覆盖、doctor 提示词卫生审计、结构感知截断— 已在 v1.12.0 发布 -
规范差异 + 审计日志 + 逐令牌 RBAC + 插件钩子 + 配置 JSON Schema + 外部— 已在 v1.11.0 发布$ref打包 + OTel 扩展 -
Web 仪表板、Prometheus 指标、模拟服务、热重载— 已在 v1.10.0 发布 -
多 API 聚合:一个— 已在 v1.9.0 发布serve进程代理多个 OpenAPI 文档 -
HTTP 传输、OAuth2 客户端凭据、、mcpify tryREPL— 已在 v1.6.0 发布--output-server
许可证
MIT — 详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。