关于 McpStamp Check
McpStamp Check 用于评估远程 MCP 服务对 Claude、ChatGPT、Gemini 和 MCP Registry 的就绪情况。它提供评分、等级、各平台状态和修复建议,并支持通过 GitHub Action 在 CI 中检查。
主要功能
- 01为服务就绪度打 0 至 100 分
- 02显示字母等级和各平台状态
- 03列出失败项及修复建议
- 04解释单项检查及其来源
- 05通过 GitHub Action 设置 CI 门槛
适用场景
- 01发布前检查 MCP 端点
- 02发现协议或元数据就绪问题
- 03核验面向特定应用目录的就绪状态
- 04就绪条件未满足时让 CI 失败
MCP 相关
它本身是通过 Streamable HTTP 提供的远程 MCP 服务。其工具可评估服务 URL 并解释检查项,返回平台就绪状态、问题和修复建议等结果。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.zovo.one/stamp/mcpclaude mcp add --transport http theluckystrike-mcpstamp-check https://mcp.zovo.one/stamp/mcp{"mcpServers":{"theluckystrike-mcpstamp-check":{"type":"http","url":"https://mcp.zovo.one/stamp/mcp"}}}在 Cursor 中打开{"servers":{"theluckystrike-mcpstamp-check":{"type":"http","url":"https://mcp.zovo.one/stamp/mcp"}}}在 VS Code 中打开{"mcpServers":{"theluckystrike-mcpstamp-check":{"type":"http","url":"https://mcp.zovo.one/stamp/mcp"}}}{"mcpServers":{"theluckystrike-mcpstamp-check":{"serverUrl":"https://mcp.zovo.one/stamp/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
McpStamp Check
为任意远程 MCP 服务评估其是否已准备好接入 Claude Directory、ChatGPT Apps、Gemini Connected Apps 和 MCP Registry:提供 0–100 分的评分、A–F 等级、各平台的就绪状态,以及每项未通过检查对应的一行修复建议。
试用:https://www.mcpstamp.com/check/
Readiness Index:https://www.mcpstamp.com/readiness/ 根据此引擎的评分,对官方 MCP Registry 中列出的远程服务进行排名,并列出每个服务在各平台的就绪状态。
徽章
检查后,将徽章嵌入 README(<id> 位于检查结果中):
[](https://www.mcpstamp.com/check/?id=<id>)
徽章会显示 McpStamp | 87 B,并根据等级着色;未检查时显示灰色的 unchecked。
MCP 服务
McpStamp Check 本身也是一个远程 MCP 服务(Streamable HTTP,协议版本 2025-11-25,无需登录):
https://mcp.zovo.one/stamp/mcp
| 工具 | 功能 |
|---|---|
check_mcp_server(url, fresh?) | 评分、等级、各平台的就绪状态、每项未通过检查及其修复建议、报告 URL 和徽章 Markdown |
explain_check(check_id) | 检查项的含义、会阻止哪些平台,以及平台或规范来源 |
将其添加到客户端:
# Claude Code
claude mcp add --transport http mcpstamp https://mcp.zovo.one/stamp/mcp
// Cursor: ~/.cursor/mcp.json
{ "mcpServers": { "mcpstamp": { "url": "https://mcp.zovo.one/stamp/mcp" } } }
// VS Code: .vscode/mcp.json
{ "servers": { "mcpstamp": { "type": "http", "url": "https://mcp.zovo.one/stamp/mcp" } } }
然后询问:“Check https://example.com/mcp with McpStamp”。实时检查共用 API 限额(每个客户端每小时 20 次)。该服务已列入 MCP Registry,名称为 io.github.theluckystrike/mcpstamp-check。
GitHub Action
根据就绪状态设置 CI 门禁。此 Action 会调用公共 API、生成作业摘要(评分、平台、修复建议),并在评分低于 min-score 或 fail-on-store 中的平台未就绪时,使步骤失败。
name: McpStamp Check
on:
workflow_dispatch:
push:
branches: [main]
jobs:
mcpstamp:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: theluckystrike/mcpstamp-check@v1
id: stamp
with:
url: https://example.com/mcp
min-score: 80
fail-on-store: claude,chatgpt
- run: echo "Score ${{ steps.stamp.outputs.score }} (${{ steps.stamp.outputs.grade }}): ${{ steps.stamp.outputs.report-url }}"
| 输入项 | 默认值 | 含义 |
|---|---|---|
url | (必填) | MCP 端点的 https URL |
min-score | 0 | 评分低于此值时失败 |
fail-on-store | 空 | 必须就绪的平台列表,以逗号分隔,可选 claude、chatgpt、gemini、registry(例如,若某平台的阻塞性检查无法运行,如工具需要登录,则该平台视为未就绪) |
fresh | true | false 表示接受 10 分钟内的结果。达到速率限制时,Action 会使用缓存结果 |
api-base | https://mcp.zovo.one/stamp | API 基础 URL |
输出:score、grade、report-url、badge-url、ready-stores。
该 Action 是一个复合 Action,使用运行器的 Node.js(18 或更高版本)运行 action/run.mjs,无需依赖项,也无需构建步骤。检查已部署的 URL:请在部署步骤后运行它。
API
基础 URL:https://mcp.zovo.one/stamp(也通过 https://www.mcpstamp.com/api/ 代理)。
| 请求 | 响应 |
|---|---|
GET /api/check?url=<https MCP URL>[&fresh=1] | 结果 JSON(缓存 10 分钟) |
GET /api/result/<id> | 最近一次保存的结果;若无结果则返回 404 |
GET /api/checks | 下方的检查项表格 |
GET /badge?url=<url> 或 GET /badge/<id>.svg | SVG 徽章 |
POST /mcp | MCP Streamable HTTP 端点(见上文) |
错误:400 {error:"bad_url"|"blocked_host"}、429 {error:"rate_limited", retry_after}、502 {error:"unreachable"|"blocked_by_firewall", detail}(blocked_by_firewall:服务器的 WAF 或机器人防护返回了 403 HTML 页面或 Cloudflare 验证,因此未进行评分)。
限额:每个 IP 每小时最多 20 次实时检查;每次检查最多向被检查的服务器发送 10 个 HTTP 请求,最长耗时 25 秒;每个请求超时为 8 秒,响应正文上限为 1 MB;仅支持 https,端口为 443/8443,不允许 IP 字面量或私有名称;每个被获取的 URL(初始 URL、最多 3 次重定向的每一跳、每个发现 URL)都会重新验证,且其 DNS 解析结果(DNS-over-HTTPS)必须为公网地址。结果保留 30 天;请求 7 天以前结果的徽章时,会在后台触发一次重新检查。URL 中的凭据(/t/ 后的部分、长度为 24 个或更多字符的随机字符串路径段、机密查询参数值)会显示并存储为 REDACTED。
代理
受信任的代理(mcpstamp.com Pages Functions)可以发送 x-mcpstamp-proxy-key: <PROXY_KEY secret> 和 x-mcpstamp-client-ip: <visitor IP>,这样速率限制会按访客而非代理进行。
评分
每项检查的结果为 pass(1)、warn(0.5)、fail(0)或 skip(不计入)。评分 = 适用检查的加权通过率。等级:A >= 90,B >= 80,C >= 65,D >= 50,否则为 F。每个 store 都会获得一个 status:ready(没有阻断性检查失败,且没有检查被跳过)、unverified(没有检查失败,但某项阻断性检查无法运行,例如工具需要登录才能访问)或 not_ready(某项阻断性检查失败)。只有状态为 ready 时,ready 才为 true。如果工具需要登录才能访问且无法检查,评分上限为 85。跳过的检查会带有 skip_reason:not_applicable、needs_sign_in、not_probed(请求或时间预算不足)、not_reached(握手未完成)或 blocked;每个 store 都会列出 unverified_reasons。当某个 store 对某项检查采取更宽松的判定时,该检查可带有 store_status(例如,legacy SSE 对 Claude 和 Registry 来说是警告)。registry store 表示“符合 MCP Registry 要求的远程服务”(公开的 https,且支持 Streamable HTTP 或 SSE),而非表示服务已发布到 Registry。
下表根据 src/check.mjs 中的 CHECKS 导出内容生成(node scripts/scoring-table.mjs --write;过期时测试会失败)。“阻断”列出了检查失败时无法就绪的 store。GET /api/checks 会返回相同数据,以及每项检查计入哪些 store。对于无需登录的服务,会跳过身份验证检查。
| 检查 | 分组 | 测试内容 | 权重 | 阻断(失败 = 未就绪) |
|---|---|---|---|---|
https | transport | 是否通过 HTTPS 提供服务 | 10 | claude, chatgpt, gemini, registry |
initialize | transport | 是否通过 Streamable HTTP 执行 initialize | 15 | claude, chatgpt, gemini, registry |
protocol_version | transport | 是否协商出受支持的协议版本 | 6 | gemini |
content_type | transport | JSON 或 SSE 响应的 Content-Type | 3 | - |
jsonrpc_errors | transport | 未知方法是否返回 JSON-RPC 错误 | 4 | - |
get_stream | transport | GET 是否返回 SSE 或 405 | 3 | - |
latency | transport | initialize 延迟 | 5 | - |
server_info | metadata | serverInfo 名称和版本 | 6 | - |
instructions | metadata | 服务说明 | 4 | - |
capabilities_tools | metadata | 是否声明 tools 能力 | 3 | - |
auth_method | auth | store 支持的登录方式(OAuth 或无) | 6 | chatgpt, gemini |
auth_challenge | auth | 401 是否携带 WWW-Authenticate resource_metadata | 6 | - |
auth_prm | auth | 受保护资源元数据(RFC 9728) | 8 | claude, chatgpt |
auth_resource | auth | 资源元数据中的 "resource" 是否等于服务 URL | 4 | claude |
auth_as_metadata | auth | 授权服务器元数据(RFC 8414 / OIDC) | 8 | claude, chatgpt, gemini |
auth_gemini_discovery | auth | Gemini 首先尝试的元数据 URL 是否以必需字段返回 200 | 4 | gemini |
auth_chatgpt_metadata | auth | issuer 是否等于 authorization_servers 条目;token_endpoint_auth_methods_supported(ChatGPT) | 4 | chatgpt |
auth_pkce | auth | 是否声明支持 PKCE S256 | 6 | claude, chatgpt, gemini |
auth_registration | auth | 客户端注册(DCR 或 Client ID Metadata Documents) | 6 | - |
auth_refresh | auth | 是否声明支持 refresh_token 授权类型 | 3 | - |
tools_list | tools | tools/list 是否返回工具 | 10 | claude, chatgpt, gemini |
tool_schema | tools | inputSchema 是否为对象架构 | 6 | claude, chatgpt, gemini |
tool_names | tools | 工具名称是否有效且可移植 | 5 | - |
tool_annotations | tools | 每个工具是否都带有 readOnlyHint 或 destructiveHint | 10 | claude, chatgpt |
tool_open_world | tools | 是否明确声明 readOnlyHint、destructiveHint 和 openWorldHint(ChatGPT) | 5 | chatgpt |
tool_titles | tools | 每个工具是否都有易读的标题 | 5 | claude, chatgpt |
tool_descriptions | tools | 工具说明 | 6 | - |
| 总权重(所有检查) | 161 |
每条规则都可追溯至 SOURCES.md 中相应 store 或规范的文本。
使用引擎
src/check.mjs 是一个不依赖任何依赖项的纯 ES 模块。它可在 Node 20+ 和 Cloudflare Workers 中运行:
import { checkServer, CHECKS } from './src/check.mjs';
const result = await checkServer('https://example.com/mcp', { fetch, timeoutMs: 8000 });
console.log(result.score, result.grade, result.stores.claude);
每个获取的 URL 都会通过主机防护检查(语法和 DNS)。默认情况下,DNS 查询通过 DNS-over-HTTPS(1.1.1.1)进行;如果无法读取 DNS,检查就会拒绝请求。在 Node 中,传入系统解析器,这样局域网和 /etc/hosts 中的名称就会根据 fetch 使用的相同解析结果进行判断:
import { nodeResolve } from './src/resolve-node.mjs';
await checkServer(url, { fetch, resolve: nodeResolve });
CLI:node scripts/check-cli.mjs https://example.com/mcp [--json]
开发
npm test # node --test, mock fetch, no network (engine, Worker, MCP endpoint, action)
npx wrangler deploy # Worker "mcpstamp-check"
联系邮箱:[email protected]
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。