すべてのスキル

mcp-builder (anthropics/skills)

Python や TypeScript で MCP サーバーを作り、外部サービスを使いやすいツールとして公開する方法を導きます。

mcp-builder:命名、アノテーション、async を追加することで MCP サーバーを 3.6 から 4.6/5 に引き上げます。ただし、一文チェックリストはトークンの 68% で 4.9 を記録します。

状況次第安全

Codex CLI · gpt-6-astra

21.6 / 30

スキルなしに対するリフト:+1.04 · 状況次第 · 18 実行

状況次第:合計 21.6/30 が 22 未満。推奨には合計 22/30、出力品質 3.5、リフト +1.0 が必要です。

SOTA

合格

Codex でテスト済み。

カバー対象 Codex, Claude Code

Codex CLI 0.166(SOTA ティア):採点対象 18 実行。当ティアのルールでは、ここでの合格は Claude Code もカバーします。第2ティアについては何も述べません。

スコア

各ディメンションは 0〜5 点で、6 つの合計が 30 点満点の合計スコアになります。すべてのディメンションで 5 が最良です。コスト 5 は低コストで高速、インストール 5 は簡単であることを意味します。

トリガーの信頼性
5.0
スキルなしに対するリフト
3.0
出力品質
4.6
トークンと時間のコスト
3.0
インストールと移植性
3.0
安全性
3.0

セキュリティレビュー

安全

静的スキャン:CRITICAL 8 / HIGH 13 / MEDIUM 7。手動レビュー:ネットワーク無効のサンドボックスで実行しても安全(スキャナの指摘は確認済み。同梱スクリプトは実行せず)。クリーンなスキャン結果はスキルの安全性を証明しません。

インストール

npx skills@latest add anthropics/skills --skill mcp-builder

ソース

固定コミット: ca45fc496a3436251f191354091d557da31c15b5

テスト済み: 2026-11-02

テスト内容

  • 書店 API 用の Python MCP サーバー — server.py を書いてください。書店在庫 REST API(ベース URL は環境変数から、ベアラートークンは環境変数から)用の Python 製 MCP サーバーです。ツール:書籍の検索、1 冊の取得、在庫の更新、書籍の削除。公式 mcp Python SDK(FastMC…
  • 天気 API 用の TypeScript MCP サーバー — src/index.ts と package.json を書いてください。天気 REST API(ベース URL と API キーは環境変数から)用の TypeScript 製 MCP サーバーです。ツール:都市の現在の天気を取得、5 日間の予報を取得、保存済みの場所を一覧、保存済みの場所を削除。公式 MC…
  • 急造 MCP サーバーの修正 — server.py は当社の倉庫 API 用の MCP サーバーで、動きますが急いで書かれました。良い MCP サーバーのプラクティスに沿うよう修正してください。server.py をその場で編集し、同じ API と通信できる状態を保ってください。ここではネットワークもパッケージインストールもありません。ただ書いて…

長所

  • スキルなしと比べ平均スコアを 3.57 から 4.61 に引き上げ(+1.04)。
  • スキルは名前を出さずとも採用されました:スキルあり群 6/6 実行でスキルファイルが読み込まれました。
  • スキルありの絶対品質は高水準:5 点中 4.61。

短所

  • 一文プロンプトは 4.88、スキルありは 4.61(-0.27)。
  • スキルなしの 1.51 倍のトークンを消費。
  • タスク・群ごとに n=2。1 ポイント未満の差はノイズです。

レビュー

専用の Windows テスト PC 上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。3 つのタスク:書店 REST API 用の Python MCP サーバーを書く、天気 API 用の TypeScript MCP サーバーを書く、既存の急造 server.py を良いプラクティスに沿うよう修正する。ネットワークは不要です(エージェントは MCP SDK をインストールできず、コードを書くだけです)。スキルあり群のプロンプトは対照群と同じです。

3群の比較

群平均スコア(0〜5)1実行あたりのトークン
スキルなし3.5773k
一文プロンプト4.8875k
スキルあり4.61110k

Codex CLI で 18 実行を計測し、LLM 判定なしのルールベースのチェックで採点。合計 21.6 / 30、判定は 状況次第。

判定:状況次第(21.6 / 30)。 出典:anthropics/skills、skills/mcp-builder、コミット ca45fc4 に固定。インストール:npx skills@latest add anthropics/skills --skill mcp-builder。ライセンス: プロプライエタリ:anthropics/skills の LICENSE.txt(ソース公開。評価のみ、再配布不可)。

概要

anthropics/skills の mcp-builder スキル:Model Context Protocol サーバー構築のガイドです(調査と計画、実装、レビューとテスト、評価の作成)。Python(FastMCP)と TypeScript の言語ガイド、MCP のベストプラクティスノート、サーバーに対して評価を実行する 2 つのヘルパースクリプトが同梱されています。プロプライエタリライセンス(ソース公開)。

テスト方法

専用の Windows テスト PC 上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。

タスクは 3 つ:書店の REST API 用の Python MCP サーバーの作成、天気 API 用の TypeScript MCP サーバーの作成、既存の間に合わせの server.py を良いプラクティスに従うよう修正。ネットワークを必要とするものはありません(エージェントは MCP SDK をインストールできず、コードを書くだけ)。スキル群のプロンプトは対照群と同じです。

  1. 書店 API 用の Python MCP サーバー — server.py を書いてください:書店の在庫 REST API(ベース URL は環境変数から、ベアラートークンは環境変数から)用の Python の MCP サーバー。ツール:書籍の検索、1 冊の取得、在庫の更新、書籍の削除。公式の mcp Python SDK(FastMC…
  2. 天気 API 用の TypeScript MCP サーバー — src/index.ts と package.json を書いてください:天気 REST API(ベース URL と API キーは環境変数から)用の TypeScript の MCP サーバー。ツール:都市の現在の天気の取得、5 日間予報の取得、保存済み地点の一覧、保存済み地点の削除。公式の MC…
  3. 急いで書かれた MCP サーバーの修正 — server.py は倉庫 API 用の MCP サーバーで、動作はしますが急いで書かれました。良い MCP サーバーのプラクティスに従うよう修正してください。server.py をその場で編集し、同じ API と通信し続けてください。ここではネットワークもパッケージインストールもありません。ただ書…

採点はプログラム的(隠しテスト/仕込み問題の検出/制約チェック/該当する場合はレンダリング+OCR)で、実行ごとに 0〜5 点。スコアはどの LLM 判定者も決めていません。

結果

第 3 群に与えた一文プロンプト:「MCP サーバーを専門家のように設計する:一貫したサービスプレフィックス付きで動作志向のツール名(例:bookstore_search_books)、フィールドの説明付きの型付き入力スキーマ(Pydantic または Zod)、アノテーション(readOnlyHint、destructiveHint、idempotentHint)、ページングされサイズ制限された結果、実行可能なエラーメッセージ、シークレットは環境変数のみから、非同期 I/O、stdio トランスポートで stdout に何も出力しないこと。」

タスク対照群スコア一文プロンプトスキルあり対照群のトークン一文プロンプトのトークンスキルありのトークンスキル読み込み
t1-python1.434.644.260k64k97k2/2
t2-typescript4.295.04.6460k55k100k2/2
t3-fix5.05.05.097k106k133k2/2

平均スコア:スキルなし 3.57 に対しスキルあり 4.61(差 +1.04)。1実行あたりのトークン:73k 対 110k(1.51x)。時間:80s 対 89s。一文プロンプト群:4.88(一文プロンプトに対するスキルの上積み:-0.27。一文プロンプト自身のスキルなしに対する上積み:+1.31)。一文プロンプトのトークンは 1実行あたり 75k なので、スキルは一文プロンプトの 1.47 倍のコストになります。

何が起きたか

  • 重要な場面ではスキルが役立ちます:ゼロから作る 2 つのサーバーで、対照群は基本を見落としました(共通のサービスプレフィックス付きツール名が 2/4 実行、readOnlyHint などのツールアノテーションが Python の 2/2 実行、非同期ツールが Python の 2/2 実行、実行可能なエラーメッセージが Python の 2/2 実行)。平均スコアは対照群 3.57、スキル 4.61。
  • 一文群はスキルより良い結果でした:4.88。18 実行でチェック落ちは 1 つだけ、スキル群は 5 つ。この一文はチェックが求めるのと同じ性質を列挙するため、短いプロンプトの上限値ですが、1実行あたり 75k トークンで、スキルは 110k、対照群は 73k です。
  • スキル群には実際の欠陥があります:TypeScript のスキルあり群は両実行とも新しい @modelcontextprotocol/server パッケージ向けの createServer() を生成しましたが、トランスポートを開始しませんでした(stdio も Streamable HTTP もなし)。そのため、書かれたままではサーバーファイルを起動できません。対照群と一文プロンプトの実行はトランスポートを含めていました。
  • 修正タスクでは全 3 群が同じスコアでした(全 6 実行で 9/9 チェック合格)。既存のサーバーが与えられると、素の Codex はすでにプラクティスを適用します。
  • スキルの読み込みは重いです:SKILL.md と参照ガイド。スキルあり群の実行はプロジェクトの .agents フォルダに約 12 個のスキルファイルを残し、ガイドを読み込みました。1.5x のトークンはここに費やされます。ヘルパースクリプト(評価ハーネス)はオフラインのサンドボックスでは実行されませんでした。

評価項目スコア

評価項目スコア理由
1_output_quality4.61

スキルありの平均スコアは 5 点中 4.61(プログラム的チェック。タスク別の表を参照)。

2_lift_vs_no_skill3.04

スキルなしの 3.57 に対し +1.04 点(タスクごとに n=2。約 1 点未満の差はノイズ)。

3_trigger5.0スキルあり群 6/6 実行でスキルファイルが読み込まれました。
4_instructions_portability3

大規模な参照セット。言語ガイドに分かれています。ヘルパースクリプトは Python パッケージと稼働中のサーバーを必要とします。

5_efficiency3トークン 1.51x(1実行あたり 110k 対 73k)、時間 1.11x(89s 対 80s)。
6_safety_hygiene3

スキャナは CRITICAL 8 / HIGH 13 を報告。すべて文脈上確認済み:サンプルサーバーコードとヘルパースクリプトでの環境変数の受け渡し。プロプライエタリライセンス。

このテストの限界

  • コードテキストに対するルールベースのチェック。生成されたサーバーはどれも実際に起動したり、クライアントに接続したりしていません。
  • ネットワークなし:エージェントは MCP SDK をインストールもインポートもできなかったため、API の詳細(例:新しい v2 の TypeScript パッケージ)は検証されていません。
  • スキルの評価ステップ(質問の生成とサーバーに対する実行)は検証していません。
  • タスクごとに各群 n=2。約 1 点未満の差はノイズです。
  • ルールベースの採点はチェックが見られるものだけを測ります。好みや、結果が可能な限り最善かどうかは判断できません。

セキュリティ

security.md を参照。スキャン:CRITICAL 8 / HIGH 13 / MEDIUM 7。判定:実行しても安全(ネットワーク無効のサンドボックス)。クリーンなスキャン結果はスキルの安全性を証明しません。

結論

ゼロから作るサーバーでは、このスキルは命名、アノテーション、非同期、エラー処理で、ガイドのないエージェントを 1.5x のトークンで明らかに上回ります。短いチェックリスト文は、より少ないトークンで、しかもトランスポート欠落の欠陥なしで同じ性質を実現したため、良いプロンプトに対する品質の飛躍のためではなく、参照ガイドと一貫性のためにインストールしてください。

トランスクリプト

実行ログ:mcp-builder (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.)
列:タスク、群-回、スコア(0-5)、トークン、秒、合格したチェック、エージェントが開いたスキルファイル。

t1-python control-1: スコア 1.79, トークン 51610, 秒 53.2, チェック 4/9, 開いたファイルなし
t1-python control-2: スコア 1.07, トークン 69259, 秒 98.6, チェック 3/9, 開いたファイルなし
t1-python oneliner-1: スコア 5.0, トークン 74072, 秒 101.3, チェック 9/9, 開いたファイルなし
t1-python oneliner-2: スコア 4.29, トークン 54692, 秒 126.2, チェック 8/9, 開いたファイルなし
t1-python treatment-1: スコア 3.39, トークン 101809, 秒 72.0, チェック 6/9, 開いたファイル mcp-builder
t1-python treatment-2: スコア 5.0, トークン 93275, 秒 66.9, チェック 9/9, 開いたファイル mcp-builder
t2-typescript control-1: スコア 4.29, トークン 52126, 秒 59.1, チェック 8/9, 開いたファイルなし
t2-typescript control-2: スコア 4.29, トークン 69042, 秒 61.5, チェック 8/9, 開いたファイルなし
t2-typescript oneliner-1: スコア 5.0, トークン 55412, 秒 104.3, チェック 9/9, 開いたファイルなし

18 実行、3 成果物

サンプル出力

SOTA · With the skill: server.py (t1-python, run 1, Codex)

"""Bookstore MCP server (Python 3.10+, official mcp SDK, httpx, Pydantic 2). Required environment variables: BOOKSTORE_BASE_URL: API root, e.g. https://inventory.example.com/api/v1 BOOKSTORE_API_TOKEN: bearer token (without the 'Bearer ' prefix) Assumed REST contract (adjust paths/fields here to match your API): GET /books?q=...&limit=...&offset=... -> JSON search results GET /books/{book_id} -> JSON book PATCH /books/{book_id}/stock body: {"stock": nonnegative integer} DELETE /books/{book_id} Updates and deletes may return JSON or an empty success response. Search pagination and response shape are supplied by the upstream API. Run with `python server.py` in an environment with the dependencies installed. Transport is stdio; stdout is reserved for MCP protocol messages. """ import os from contextlib import asynccontextmanager from dataclasses import dataclass from typing import Annotated, Any, AsyncIterator from urllib.parse import quote, urlsplit import httpx from mcp.server.fastmcp import Context, FastMCP from mcp.server.fastmcp.exceptions import ToolError from pydantic import Field @dataclass class AppState: client: httpx.AsyncClient @asynccontextmanager async def lifespan(server: FastMCP) -> AsyncIterator[AppState]: base_url = os.environ.get("BOOKSTORE_BASE_URL", "").strip() token = os.environ.get("BOOKSTORE_API_TOKEN", "").strip() if not base_url or not token: raise RuntimeError("Set BOOKSTORE_BASE_URL and BOOKSTORE_API_TOKEN.") try: parsed = urlsplit(base_url) valid = ( parsed.scheme in {"http", "https"} and bool(parsed.hostname) and parsed.username is None and parsed.password is None and not parsed.query and not parsed.fragment ) parsed.port # Validate a supplied port without exposing the URL. except ValueError: valid = False if not valid: raise RuntimeError("BOOKSTORE_BASE_URL must be an HTTP(S) API root without credentials, query, or fragment.") if any(ord(char) < 33 or ord(char) > 126 for char in token): raise RuntimeError("BOOKSTORE_API_TOKEN must contain printable ASCII without whitespace.") async with httpx.AsyncClient( base_url=base_url.rstrip("/") + "/", headers={"Authorization": f"Bearer {token}", "Accept": "application/json"}, timeout=httpx.Timeout(30.0, connect=10.0), follow_redirects=False, trust_env=False, ) as client: yield AppState(client=client) mcp = FastMCP("bookstore_mcp", lifespan=lifespan) BookId = Annotated[str, Field(min_length=1, max_length=256, description="Book identifier, e.g. 'book-123'.")] def book_path(book_id: str) -> str: if not book_id.strip() or book_id in {".", ".."}: raise ToolError("Provide a nonblank book identifier other than '.' or '..'.") return "books/" + quote(book_id, safe="") async def api_request( ctx: Context, method: str, path: str, *, params: dict[str, Any] | None = None, payload: dict[str, Any] | None = None, ) -> dict[str, Any]: state: AppState = ctx.r [... excerpt: first 3200 of 7129 characters]

Pro を見る