Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 302品質スコア 94/100

building-mcp-server-on-cloudflare

Cloudflare Workers上にリモートMCP(Model Context Protocol)サーバーを構築します。ツール、OAuth認証、本番環境デプロイに対応しており、サーバーコードの生成、認証プロバイダーの設定、Workersへのデプロイを実行します。 以下の場合に使用できます:「MCPサーバーを構築したい」「MCPツールを作成したい」「リモートMCP」「MCPをデプロイしたい」「MCPにOAuthを追加したい」などのご要望、またはCloudflareでのModel Context Protocolについてのご相談。「MCP認証」や「MCPデプロイメント」に関するお問い合わせの場合も自動的に対応します。

description の原文を見る

Builds remote MCP (Model Context Protocol) servers on Cloudflare Workers with tools, OAuth authentication, and production deployment. Generates server code, configures auth providers, and deploys to Workers. Use when: user wants to "build MCP server", "create MCP tools", "remote MCP", "deploy MCP", add "OAuth to MCP", or mentions Model Context Protocol on Cloudflare. Also triggers on "MCP authentication" or "MCP deployment".

SKILL.md 本文

Cloudflare 上での MCP サーバーの構築

Cloudflare Workers 上でツール、認証、デプロイメントを備えた本番環境対応の Model Context Protocol サーバーを作成します。

使用するべき場合

  • ユーザーがリモート MCP サーバーを構築したい
  • ユーザーが MCP 経由でツールを公開する必要がある
  • ユーザーが MCP の認証または OAuth について質問している
  • ユーザーが MCP を Cloudflare Workers にデプロイしたい

前提条件

  • Workers が有効な Cloudflare アカウント
  • Node.js 18+ および npm/pnpm/yarn
  • Wrangler CLI (npm install -g wrangler)

クイックスタート

オプション 1: パブリックサーバー(認証なし)

npm create cloudflare@latest -- my-mcp-server \
  --template=cloudflare/ai/demos/remote-mcp-authless
cd my-mcp-server
npm start

サーバーは http://localhost:8788/mcp で実行されます。

オプション 2: 認証付きサーバー(OAuth)

npm create cloudflare@latest -- my-mcp-server \
  --template=cloudflare/ai/demos/remote-mcp-github-oauth
cd my-mcp-server

OAuth アプリのセットアップが必要です。references/oauth-setup.md を参照してください。

コアワークフロー

ステップ 1: ツールの定義

ツールは MCP クライアントが呼び出すことができる関数です。server.tool() を使用して定義します:

import { McpAgent } from "agents/mcp";
import { z } from "zod";

export class MyMCP extends McpAgent {
  server = new Server({ name: "my-mcp", version: "1.0.0" });

  async init() {
    // パラメータを持つシンプルなツール
    this.server.tool(
      "add",
      { a: z.number(), b: z.number() },
      async ({ a, b }) => ({
        content: [{ type: "text", text: String(a + b) }],
      }),
    );

    // 外部 API を呼び出すツール
    this.server.tool("get_weather", { city: z.string() }, async ({ city }) => {
      const response = await fetch(`https://api.weather.com/${city}`);
      const data = await response.json();
      return {
        content: [{ type: "text", text: JSON.stringify(data) }],
      };
    });
  }
}

ステップ 2: エントリーポイントの設定

パブリックサーバー (src/index.ts):

import { MyMCP } from "./mcp";

export default {
  fetch(request: Request, env: Env, ctx: ExecutionContext) {
    const url = new URL(request.url);
    if (url.pathname === "/mcp") {
      return MyMCP.serveSSE("/mcp").fetch(request, env, ctx);
    }
    return new Response("MCP Server", { status: 200 });
  },
};

export { MyMCP };

認証付きサーバーreferences/oauth-setup.md を参照してください。

ステップ 3: ローカルでのテスト

# サーバーを起動
npm start

# 別のターミナルで MCP Inspector を使用してテスト
npx @modelcontextprotocol/inspector@latest
# http://localhost:5173 を開き、http://localhost:8788/mcp を入力

ステップ 4: デプロイ

npx wrangler deploy

サーバーは https://[worker-name].[account].workers.dev/mcp でアクセス可能になります。

ステップ 5: クライアントの接続

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["mcp-remote", "https://my-mcp.workers.dev/mcp"]
    }
  }
}

設定を更新した後、Claude Desktop を再起動してください。

ツールパターン

戻り値の型

// テキストレスポンス
return { content: [{ type: "text", text: "result" }] };

// 複数のコンテンツアイテム
return {
  content: [
    { type: "text", text: "Here's the data:" },
    { type: "text", text: JSON.stringify(data, null, 2) },
  ],
};

Zod を使用した入力検証

this.server.tool(
  "create_user",
  {
    email: z.string().email(),
    name: z.string().min(1).max(100),
    role: z.enum(["admin", "user", "guest"]),
    age: z.number().int().min(0).optional(),
  },
  async params => {
    // params は完全に型付けされ、検証されています
  },
);

環境/バインディングへのアクセス

export class MyMCP extends McpAgent<Env> {
  async init() {
    this.server.tool("query_db", { sql: z.string() }, async ({ sql }) => {
      // D1 バインディングにアクセス
      const result = await this.env.DB.prepare(sql).all();
      return { content: [{ type: "text", text: JSON.stringify(result) }] };
    });
  }
}

認証

OAuth で保護されたサーバーについては、references/oauth-setup.md を参照してください。

対応プロバイダー:

  • GitHub
  • Google
  • Auth0
  • Stytch
  • WorkOS
  • OAuth 2.0 準拠の任意のプロバイダー

Wrangler 設定

最小限の wrangler.toml

name = "my-mcp-server"
main = "src/index.ts"
compatibility_date = "2024-12-01"

[durable_objects]
bindings = [{ name = "MCP", class_name = "MyMCP" }]

[[migrations]]
tag = "v1"
new_classes = ["MyMCP"]

バインディング付き(D1、KV など):

[[d1_databases]]
binding = "DB"
database_name = "my-db"
database_id = "xxx"

[[kv_namespaces]]
binding = "KV"
id = "xxx"

よくある問題

クライアント内で「Tool not found」エラー

  1. ツール名が正確に一致していることを確認(大文字小文字を区別)
  2. 接続前に init() がツールを登録していることを確認
  3. サーバーログを確認:wrangler tail

接続に失敗

  1. エンドポイントパスが /mcp であることを確認
  2. ブラウザベースのクライアントの場合は CORS を確認
  3. Worker がデプロイされていることを確認:wrangler deployments list

OAuth リダイレクトエラー

  1. コールバック URL が OAuth アプリ設定と正確に一致する必要があります
  2. GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET が設定されていることを確認
  3. ローカル開発の場合は http://localhost:8788/callback を使用

リファレンス

  • references/examples.md — 公式テンプレートと本番環境の例
  • references/oauth-setup.md — OAuth プロバイダーの設定
  • references/tool-patterns.md — 高度なツールの例
  • references/troubleshooting.md — エラーコードと修正方法

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
involvex
リポジトリ
involvex/youtube-music-cli
ライセンス
MIT
最終更新
2026/5/7

Source: https://github.com/involvex/youtube-music-cli / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: involvex · involvex/youtube-music-cli · ライセンス: MIT