mcpField
M
mcpify

mcpify

本地服务
github.com/furkan708开发工具29 周前更新

关于 mcpify

mcpify 是将 OpenAPI 3.x 规范转换为 MCP 服务的命令行工具,供希望让 Agent 调用 REST API 的团队使用。它为每个操作生成工具,并提供凭据、访问控制和部署选项。

主要功能

  1. 01将 OpenAPI 操作转换为 MCP 工具
  2. 02支持 stdio 和 HTTP 传输
  3. 03凭据与访问策略控制
  4. 04规范诊断和版本差异比较
  5. 05响应筛选与敏感信息遮盖

适用场景

  1. 01向 MCP 客户端开放 REST API
  2. 02在 CI 中检查 API 变更
  3. 03限制 Agent 仅执行读取操作
  4. 04缩减工具列表和响应体积

MCP 相关

它将 OpenAPI 操作作为 MCP 工具,通过 stdio 或 Streamable HTTP 提供服务,供本地或共享的 MCP 客户端调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"furkan708-mcpify": {
"command": "uvx",
"args": [
"mcpify-openapi"
]
}
}
}
启动命令uvx mcpify-openapi

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcpify-openapi1.19.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcpify

Tests CI CodeQL PyPI PyPI Downloads Python License MCP Registry Dependencies

English | Türkçe

mcpify 实战演示 — 将 OpenAPI 端点列出并作为 MCP 工具提供服务

将任意 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 调用。

操作如何转换为工具

OpenAPImcpify
operationId工具名称(经过清理;缺省时使用 method_path)
summary / descriptionAgent 读取的工具描述
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 的客户端会收到封装为单个 SSE message 事件的响应。对于无状态服务,服务器发起的流(带会话的 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 检查。

套件测试数验证内容
规范解析与解析13OpenAPI 3.x 与 YAML 加载、$ref 链、allOf 合并、服务器变量、格式错误的输入
工具转换19带冲突后缀的 operationId 命名、输入架构、枚举、请求体处理、注解与输出架构推导
Agent 接口32基于 HTTP 的注解、结构化输出契约、补救错误、--lazy 搜索、试运行预览
CLI15list / 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 转换、发现、批处理、状态/健康检查
协议版本兼容性52026-07-28 无状态 _meta 请求与旧版 2025-06-18 握手,在同一线路上验证
HTTP 传输19Streamable HTTP:通过 POST 管理生命周期、405/411/413/415 错误阶梯、解析/批处理拒绝、Bearer 验证、绑定字符串解析器
OAuth2 客户端凭据18使用虚拟时钟测试令牌获取/缓存/刷新、Basic 与请求体客户端身份验证、公共客户端、所有故障模式、端到端 401 自愈
try REPL26管道输入的 stdin 会话:按编号/名称选择、类型化提示、输入错误时重新提示、:raw/:info、干净处理 EOF/Ctrl+C 退出、只读接口
output-server11内嵌规范完整性、防护措施(文件已存在、规范错误、未知标志)、机密警告,以及真实子进程 E2E 握手
服务选择17`--server INDEX
身份验证自动检测与 Basic22securitySchemes → 样式/名称解析(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 流——考虑到无状态传输,这项功能特意未纳入)。

  • status 策略可见性、REPL :redact/:fields、diff --probe + 成本差值、表单示例 — 已在 v1.16.0 发布
  • 经过身份验证的 doctor --probe + --fail-on-http-error CI 门禁、init --probe、投影/脱敏指标、延迟加载的表面定价 — 已在 v1.15.0 发布
  • --redact、--rate-limit、doctor --probe、延迟搜索成本、多 API list — 已在 v1.14.0 发布
  • OAuth2 写入流程(--write-oauth2-*)、list --cost、--fields 投影、SSE POST 响应 — 已在 v1.13.0 发布
  • 读写凭据分离、工具文本覆盖、doctor 提示词卫生审计、结构感知截断 — 已在 v1.12.0 发布
  • 规范差异 + 审计日志 + 逐令牌 RBAC + 插件钩子 + 配置 JSON Schema + 外部 $ref 打包 + OTel 扩展 — 已在 v1.11.0 发布
  • Web 仪表板、Prometheus 指标、模拟服务、热重载 — 已在 v1.10.0 发布
  • 多 API 聚合:一个 serve 进程代理多个 OpenAPI 文档 — 已在 v1.9.0 发布
  • HTTP 传输、OAuth2 客户端凭据、mcpify try REPL、--output-server — 已在 v1.6.0 发布

许可证

MIT — 详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。