web2mcp について
web2mcpは、WebサイトやREST APIをMCPツールに変換する設定ベースのゲートウェイです。Cloudflare Workerまたはローカルのコネクターを使ってHTTPサービスを公開したい開発者向けです。
主な機能
- 01設定によるAPIコネクター定義
- 02OpenAPI 3仕様の変換
- 03レスポンス項目の選択と圧縮
- 04大規模API向けカタログモード
- 05任意のBearer認証
活用シーン
- 01REST APIのMCPクライアントへの公開
- 02OpenAPI仕様からのツール生成
- 03モデルに渡す大きなレスポンスの圧縮
MCP 対応
Streamable HTTPまたはstdioでMCPクライアントにツールを提供します。tools/listやtools/callなどのメソッドに対応しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://web2mcp.cwei59969.workers.dev/mcpclaude mcp add --transport http charleswei118-web2mcp https://web2mcp.cwei59969.workers.dev/mcp{"mcpServers":{"charleswei118-web2mcp":{"type":"http","url":"https://web2mcp.cwei59969.workers.dev/mcp"}}}Cursor で開く{"servers":{"charleswei118-web2mcp":{"type":"http","url":"https://web2mcp.cwei59969.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"charleswei118-web2mcp":{"type":"http","url":"https://web2mcp.cwei59969.workers.dev/mcp"}}}{"mcpServers":{"charleswei118-web2mcp":{"serverUrl":"https://web2mcp.cwei59969.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
web2mcp
あらゆる Web サイトや REST API を MCP ツールに変換します — 依存関係ゼロの小さな Cloudflare Worker ひとつで実現できます。
GitHub の 665 個の REST エンドポイント → 2 個の MCP ツール、約 147,000 トークンのツール定義 → 約 300 トークン(カタログモード(665 エンドポイントを 2 ツールに))
すべての AI エージェント(Claude、ChatGPT、Cursor、自作のボットなど)が、今では Model Context Protocol に対応しています。しかし、ほとんどの Web サイトやアプリは対応していません。web2mcp はその橋渡し役です。HTTP API を数行の設定で記述すれば、すぐに あらゆる エージェントが呼び出せる MCP ツールになります。Cloudflare のエッジで無料ホストできます。
Claude / Cursor / any MCP client
│ MCP (Streamable HTTP, JSON-RPC)
▼
┌──────────────────────────┐
│ web2mcp (CF Worker) │ connectors/*.js or CONNECTORS_JSON
└──────────────────────────┘
│ │ │
Wikipedia GitHub any REST API / web page …
今すぐ試す
公開デモを **https://web2mcp.cwei59969.workers.dev**(ツール一覧)で実行しています。MCP エンドポイントはこちらです。
https://web2mcp.cwei59969.workers.dev/mcp
リモート MCP サーバーに対応するクライアントに貼り付けてください。または、次のようにします。
curl -s https://web2mcp.cwei59969.workers.dev/mcp -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"weather_forecast","arguments":{"latitude":35.68,"longitude":139.69}}}'
デモは無料プランのレート制限があり、reader_read は無効になっています。実際に使用する場合は、ご自身の環境にデプロイしてください。
特長
- コードではなく設定。 コネクターは、ベース URL、パス、クエリ、パラメーターを指定するシンプルなオブジェクトです。SDK を習得する必要はありません。
- 実行時の依存関係はゼロ。 読みやすい JavaScript 約 500 行で構成されています。10 分で監査できます。
- トークンに配慮した出力。
pickとfieldsを使って、大きな JSON レスポンスからモデルに必要な情報だけを抽出できます。 - 無料ホスティング。 Cloudflare Workers の無料プランで動作します。ワンクリックでデプロイできます。
- デフォルトで安全。 リクエストは各コネクターのホストに制限され、引数は型チェックされ、シークレットはサーバー側に保持されます。オプションでベアラー認証も利用できます。
- OpenAPI のインポート。 1 つのコマンドで、あらゆる OpenAPI 3 仕様をコネクターに変換できます。
組み込みコネクター(API キー不要)
| ツール | 機能 |
|---|---|
wikipedia_search, wikipedia_summary | Wikipedia を検索し、記事の概要を取得します |
hackernews_front_page, hackernews_search | Hacker News の記事を取得します |
geocode_search | 地名 → 座標(Open-Meteo) |
weather_forecast | 現在の天気と毎日の予報(Open-Meteo) |
currency_latest | ECB の為替レート(Frankfurter) |
github_search_repos, github_repo | 公開 GitHub リポジトリ(Workers に GITHUB_TOKEN を設定してください。共有 IP は GitHub の匿名利用制限に達する場合があります) |
reader_read | あらゆる Web ページ → 整形済み Markdown(Jina Reader) |
npm_package, npmstats_downloads | npm パッケージ情報と週間ダウンロード数 |
ワンクリックで自分の環境にデプロイ
上の Deploy to Cloudflare をクリックしてください。Cloudflare がこのリポジトリを GitHub アカウントにコピーし、AUTH_TOKEN(openssl rand -hex 32 などで生成した、長くランダムな文字列)を求めた後、ビルドしてデプロイします。1 分後には https://web2mcp.<your-subdomain>.workers.dev/mcp でサーバーが稼働し、コピー先へのプッシュのたびに再デプロイされます。Workers の無料プランで十分です。
クイックスタート
git clone https://github.com/charleswei118/web2mcp && cd web2mcp
npm test # unit tests, no install needed (Node 20+)
npm run smoke # calls every built-in tool against the real APIs
npx wrangler dev # local server at http://localhost:8787/mcp
npx wrangler deploy # your own https://web2mcp.<you>.workers.dev/mcp
オプション:エンドポイントを保護する
npx wrangler secret put AUTH_TOKEN
AI クライアントを接続する
Claude Desktop / Cursor / Windsurf(mcp-remote 経由):
{
"mcpServers": {
"web2mcp": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://web2mcp.<you>.workers.dev/mcp",
"--header", "Authorization: Bearer ${WEB2MCP_TOKEN}"],
"env": { "WEB2MCP_TOKEN": "your-token" }
}
}
}
stdio でローカル実行する場合(Cloudflare アカウント不要。コネクターは同じです):
{
"mcpServers": {
"web2mcp": {
"command": "npx",
"args": ["-y", "github:charleswei118/web2mcp"],
"env": { "ENABLED_CONNECTORS": "wikipedia,hackernews,weather" }
}
}
}
Docker を使う場合:docker build -t web2mcp . && docker run -i --rm web2mcp。環境変数は Worker のバインディングと同じように使用できます(ENABLED_CONNECTORS、CONNECTORS_JSON、MAX_OUTPUT_CHARS、TOOL_MODE=catalog)。
リモート MCP サーバーにネイティブ対応するクライアント(Claude.ai のカスタムコネクター、ChatGPT のコネクター、OpenAI Responses API、Cloudflare AI Playground など)では、URL をそのまま使用できます。公式インスペクターでテストしてください。
npx @modelcontextprotocol/inspector # transport: Streamable HTTP, URL: .../mcp
コネクターを作成する
connectors/myapi.js を作成し、connectors/index.js に追加します。
export default {
name: "openlibrary", // tool names become openlibrary_<tool>
description: "Search books on Open Library.",
baseUrl: "https://openlibrary.org",
headers: { /* "authorization": "Bearer ${MY_API_KEY}" */ },
tools: [
{
name: "search",
description: "Search books by title or author.",
method: "GET", // GET | POST | PUT | PATCH | DELETE
path: "/search.json", // "{arg}" in the path is URL-encoded
query: { q: "{query}", limit: "{limit}" },
params: {
query: { type: "string", required: true, description: "Title or author" },
limit: { type: "integer", minimum: 1, maximum: 20, default: 5 },
},
pick: "docs", // dotted path into the JSON response
fields: ["title", "author=author_name", "year=first_publish_year"],
},
],
};
テンプレートのルール:
| 構文 | 意味 |
|---|---|
"{arg}" | ツールの引数です。値全体としては型が保持され、省略可能な引数が指定されていない場合は除外されます。 |
"${SECRET}" | Worker のシークレット/変数から読み取ります。モデルに公開されることはありません。 |
"${?SECRET}" | 省略可能なシークレットです。設定されていない場合、値は除外されます。 |
pick: "a.b.*.c" | レスポンスの一部を選択します(* は配列の各要素に適用され、単一の値も要素が1つのリストとして扱われます)。 |
fields: ["x", "alias=deep.path"] | これらのフィールドだけを保持します。 |
limit: 10 | 配列を切り詰めます。 |
response: "xml" | XML/Atom/RSS レスポンスを先に JSON に解析し、pick/fields を適用できるようにします(属性は @name になり、名前空間プレフィックスは削除され、繰り返し出現する要素は配列になります)。また、"json"、"text"(生の本文)、または "auto"(デフォルト)も指定できます。 |
コード不要の方法: コネクターを同じオブジェクトの JSON 配列として CONNECTORS_JSON シークレットに設定すると、コードを変更せずに利用できるようになります。一部だけを公開するには、ENABLED_CONNECTORS="wikipedia,weather" を使用します。
OpenAPI 仕様から作成する
node scripts/openapi2connector.js https://petstore3.swagger.io/api/v3/openapi.json petstore --only GET > connectors/petstore.js
カタログモード:665 エンドポイント、2 ツール
すべてのエンドポイントを個別のツールとして公開すると、モデルのコンテキストがあふれてしまいます。カタログモードでは、web2mcp は2つのツールだけを公開します。
search_api— キーワードでオペレーションを検索し、名前と引数スキーマを返しますcall_api— 引数オブジェクトを指定して、名前でオペレーションを実行します
GitHub の REST OpenAPI 仕様全体(GET オペレーションのみ。scripts/openapi2connector.js で変換)を使用して測定しました。
| モード | tools/list 内のツール数 | おおよそのコンテキスト量 |
|---|---|---|
| デフォルト(エンドポイントごとに1つのツール) | 665 | 約147,000トークン |
| カタログ | 2 | 約300トークン |
リクエストごとに有効にするには /mcp?mode=catalog を使用します。デプロイ全体で有効にするには、変数 TOOL_MODE = "catalog" を設定します(?mode=tools を指定すると元に戻ります)。デモでお試しください:https://web2mcp.cwei59969.workers.dev/mcp?mode=catalog。
エンドポイント
| パス | |
|---|---|
POST /mcp | MCP Streamable HTTP エンドポイント(JSON レスポンス、バッチ処理に対応) |
POST /mcp?mode=catalog | 同じエンドポイントのカタログモード(search_api + call_api) |
GET / | ツールの人間が読みやすい一覧 |
GET /tools | JSON 形式のツール一覧 |
GET /health | ヘルスチェック |
対応する MCP メソッド:initialize、ping、tools/list、tools/call。また、空の resources/list と prompts/list にも対応しています。プロトコルバージョンは 2025-06-18、2025-03-26、2024-11-05 です。
ロードマップ
- カタログモード(
search_api+call_api)— v0.2 - 実行時に URL から OpenAPI 仕様を読み込む
- ワンクリックで「Deploy to Cloudflare」— v0.2
- HTML スクレイピングコネクター(
HTMLRewriterによる CSS セレクター) - ツールごとのレート制限と KV キャッシュ
- ユーザーアカウントが必要なコネクター向けの OAuth
- コネクターレジストリ:コネクターを JSON ファイルとして共有
- Durable Objects 上のエージェント間(A2A)チャットルーム
新しいコネクターの PR を歓迎します。CONTRIBUTING.md をご覧ください。
責任ある利用
利用が許可されている API とサイトのみを接続してください。各サービスの利用規約、robots ルール、レート制限を尊重し、認証情報は Worker のシークレットに保管してください。
ライセンス
web2mcp が時間の節約に役立ったら、リポジトリに ⭐ を付けてください。他の人が見つけやすくなります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。