McpStamp Check について
McpStamp Check は、Claude、ChatGPT、Gemini、MCP Registry に対するリモート MCP サーバーの対応状況を評価します。スコア、評価、各サービスの状態、修正案を示し、GitHub Action による CI 検査にも対応します。
主な機能
- 01サーバーの対応状況を 0〜100 点で評価
- 02評価ランクとサービス別の状態を表示
- 03不合格項目と修正案を提示
- 04個々のチェック項目と出典を説明
- 05GitHub 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 の評価、ストアごとの対応状況、および各不合格チェックに対する修正案を1行で表示します。
お試しください: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" } } }
次のように尋ねてください:「McpStamp で https://example.com/mcp をチェックして」。ライブチェックは API の制限(クライアントあたり1時間に20回)を共有します。MCP Registry には io.github.theluckystrike/mcpstamp-check として登録されています。
GitHub Action
対応状況を条件に CI を制御できます。このアクションは公開 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 | (required) | MCP エンドポイントの https URL |
min-score | 0 | スコアがこの値を下回ると失敗します |
fail-on-store | empty | 対応必須のストアを指定する、claude、chatgpt、gemini、registry のカンマ区切りリストです(サインインが必要なツールなど、ブロック対象のチェックを実行できなかったストアは利用可能とみなされません) |
fresh | true | false の場合、最大10分前の結果を使用します。レート制限に達した場合、アクションはキャッシュされた結果にフォールバックします |
api-base | https://mcp.zovo.one/stamp | API のベース URL |
出力:score、grade、report-url、badge-url、ready-stores。
このアクションは複合アクションで、依存関係やビルド手順なしに、ランナーの 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 あたり1時間に20回のライブチェック。チェック対象サーバーへの HTTP リクエストはチェックあたり最大10回、チェック全体の制限時間は25秒。リクエストあたりのタイムアウトは8秒、本文の上限は1 MB。https のみ対応し、ポートは 443/8443。IP リテラルおよびプライベート名は使用できません。取得するすべての URL(最初の URL、最大3回のリダイレクト先、各ディスカバリー URL)は再検証され、DNS の応答(DNS-over-HTTPS)はパブリックである必要があります。結果は30日間保持されます。7日を超えた結果に対するバッジのリクエストは、バックグラウンドで1回再チェックを実行します。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です。各ストアには status が割り当てられます。ready(ブロック対象のチェックに失敗がなく、スキップもない)、unverified(失敗はないものの、サインインが必要なツールなど、ブロック対象のチェックを実行できなかった)、または not_ready(ブロック対象のチェックに失敗した)です。ready が true になるのは、ready の場合のみです。ツールがサインインの背後にあり、検査できない場合、スコアは85点が上限です。スキップされたチェックには skip_reason が付与されます。値は not_applicable、needs_sign_in、not_probed(リクエストまたは時間の上限)、not_reached(ハンドシェイクが完了しなかった)、または blocked です。各ストアには unverified_reasons が記載されます。あるストアではチェックをより緩やかに扱う場合(たとえば、Claude と Registry では従来の SSE を警告とする場合)、チェックに store_status が付くことがあります。registry ストアは「MCP Registry にとって有効なリモートサーバー」(パブリックな https で、Streamable HTTP または SSE として応答するもの)を意味し、サーバーがそこに公開されていることを意味するものではありません。
以下の表は、src/check.mjs の CHECKS エクスポートから生成されます(node scripts/scoring-table.mjs --write。表が古くなるとテストが失敗します)。「ブロック対象」には、チェックに失敗した場合に準備完了でなくなるストアが記載されています。GET /api/checks は同じデータに加えて、各チェックの集計対象となるストアも返します。サインイン不要のサーバーでは、認証チェックはスキップされます。
| チェック | グループ | テスト内容 | 重み | ブロック対象(失敗すると準備未完了) |
|---|---|---|---|---|
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 | ストアがサポートするサインイン方法(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 grant が通知されている | 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 で確認できます。
エンジンを使用する
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-over-HTTPS(1.1.1.1)を使用し、DNS を読み取れない場合はチェックを拒否します。Node ではシステムリゾルバーを渡すと、LAN および /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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。