mcpField
S
Skills Mcp

Skills Mcp

リモート
github.com/Jignesh-PonamwarAI・エージェント1022 週間前に更新
リポジトリ

Skills Mcp について

Skills Mcp は、手順型スキルの共有ライブラリを提供する MCP サーバーです。必要なときに専門知識を参照する AI エージェント向けで、セマンティック検索と段階的な読み込みに対応し、セルフホストや独自スキルの追加もできます。

主な機能

  1. 01スキルのセマンティック検索と順位付け
  2. 02スキル本文のオンデマンド読み込み
  3. 03参照資料とアセットの段階的取得
  4. 04スキルとオプションの一覧表示
  5. 05セルフホストとバージョン管理

活用シーン

  1. 01コードレビューでチームのチェックリストを読み込む
  2. 02SQL の最適化パターンを探す
  3. 03Stripe webhook の実装手順を参照する
  4. 04エージェントごとにフレームワークの実践方法を適用する

MCP 対応

MCP クライアント向けに、スキルの検索・閲覧、手順の読み込み、関連コンテンツの取得ツールを提供します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://skill-mcp.jigneshponamwar.workers.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

7
パラメーター型必須説明
querystringはい支援が必要なタスクを自然言語で記述します。具体的に記述してください。「テスト」だけでなく、「FastAPI の非同期エンドポイントの pytest 統合テストを書く」のように、カテゴリではなく達成したい内容を説明してください。
top_kintegerいいえ返す結果の数(1~20)。通常はデフォルトの 5 で十分です。

詳細

skills-mcp

Skills-MCP ロゴ

エージェントスキルを MCP 経由で提供します。
あらゆる MCP エージェントが実行時に読み込める、共有・検索可能な 1 つのスキルライブラリです。すべてのツール、リポジトリ、コンテキストにスキルファイルを含める必要はありません。
オープンな SKILL.md 形式をベースに構築 · セマンティック検索 · 段階的な読み込み · 30 以上のスキルを同梱 · Cloudflare でセルフホスト可能

ウェブサイト ライセンス Python Cloudflare Workers スキル skills-mcp MCP サーバー Cloudflare にデプロイ


課題

AI エージェントは幅広い知識を持っていますが、専門性は限られています。

エージェントが間違えるのは、知識が足りないからではありません。手順書が不足しているからです。社内の運用手順書を見たことがないシニアエンジニアがいるようなものです。

エージェントスキルは手順書の問題を解決しますが、通常は 1 台のマシン上のファイルか、単一ツールのプラグイン内に保存されています。そのため、新しいツール、リポジトリ、チームメンバーが増えるたびに個別のコピーを保持する必要があり、エージェントが必要に応じていつでも参照できる共有ライブラリはありません。

すべてのエージェントに対応できるレジストリが 1 つあったらどうでしょうか?

解決策:共有サービスとしてのエージェントスキルモデル

skills-mcp はエージェントスキルモデルを、共有・検索可能なサービスとして提供します。SKILL.md ファイルに記述するような専門的な手順、分野ごとのベストプラクティス、検証済みのパターン、参考資料を 1 つのレジストリにまとめ、エージェントが必要なときに MCP 経由で見つけて読み込めます。ツールごとのファイル同期も、すべてのスキルをコンテキストに詰め込む必要もありません。

You:   "Add Stripe subscriptions with webhook verification"

Agent: → calls skills_find_relevant("Stripe subscriptions webhooks")
         Returns: stripe-integration (confidence: 0.89)

       → calls skills_get_body("stripe-integration")
         Gets: API patterns, webhook signing verification, 
               idempotency key handling, security checklist, 
               live launch steps

       → Executes correctly. First time. Every time.

エージェントは推測で対応しません。重要な場面でシニアエンジニアがデプロイ手順書を確認するように、バージョン管理された信頼できる手順書を取得します。

スキルライブラリは、あなた自身が管理できます。 セルフホストできます。独自の手順を追加できます。エージェントがアクセスできる内容を制御できます。API のバージョンが変わったら更新できます。再トレーニングやプロンプトの変更をしなくても、エージェントを最新の状態に保てます。


仕組み

1. 自然言語で検索

エージェントが質問します:「FastAPI のエンドポイントに対する pytest テストの書き方は?」

スキルレジストリがセマンティックインデックスを検索し、関連度の高い順に結果を返します:

  • test-writer(一致度 0.84)←「包括的なテストスイートを作成します」
  • fastapi(一致度 0.71)←「FastAPI スキルです」

エージェントは信頼度スコアを確認し、何を読み込むかを決定します。

2. 必要なものだけを読み込む

test-writer が有力な候補だと判断したエージェントは、スキル全体を読み込みます:

GET /skill/test-writer/body
→ Returns:
  - Full step-by-step testing guide
  - pytest patterns, fixtures, mocking
  - Edge case checklist
  - Available reference files (if any)
  - Available scripts (if any)

注目してください。1 回の呼び出しでスキルの全体を取得できます。N+1 リクエストを連鎖させる必要はありません。エージェントは取得した内容を読み、補足の参考資料やサンプルスクリプトが必要かどうかを判断します。

3. 段階的な読み込み(帯域幅の無駄を削減)

エージェントが実際に必要とするものだけを読み込みます:

Tier 1  Search     → Find relevant skills (semantic match)
Tier 2  Load       → Get full instructions + manifest
Tier 3  Reference  → Load docs / scripts ONLY if instructions mention them

エージェントがファイルを先回りして読み込むことはありません。test-writer スキルに「高度なモックについては PATTERNS.md を参照」とあれば、エージェントはそのファイルを要求します。記載がなければ、ファイルはサーバー上に残ります。

結果: 高速な検索、小さなペイロード、スマートなキャッシュ。

4. セルフホスト可能、サーバーレス

スキルのレジストリは Cloudflare Workers 上で動作します。サーバーの管理も、稼働状況の監視も、データベースの管理も不要です。検索クエリは Cloudflare Workers AI を使用してエッジで実行されます。規模を拡大するまでは費用がかかりません。スキルにはバージョンが付与され、変更されません。


アーキテクチャ

6 つの Qdrant コレクション、それぞれに 1 つの用途
コレクションベクトル内容
skill_frontmatter✅ 384-dim名前、説明、タグ、トリガーフレーズ 発見レイヤー
skill_bodypayload only完全な Markdown の指示 + システムプロンプトへの追加内容
skill_optionspayload only設定スキーマ、バリエーション、依存関係、制限事項
skill_referencespayload onlyスキルに同梱された Markdown のリファレンスドキュメント
skill_scriptspayload only実行可能なスクリプト(ソースはサーバー側に保存され、エージェントには送信されません)
skill_assetspayload onlyテンプレートと静的な出力形式のリソース
7 つの MCP ツール - 3 段階の段階的開示 + ブラウジング
Tierツール呼び出すタイミング
1skills_find_relevant(query, top_k)常に最初に呼び出す - セマンティック検索。スコア付きのスキルを順位順に返します
1skills_list_all(limit, offset)検索せずにすべてのスキルを閲覧します - スキルの発見に便利です
2skills_get_body(skill_id, version?)一致するスキルが見つかった後 - 完全な指示 + tier3_manifest を取得します。version で特定のリリースを指定できます
2skills_get_options(skill_id)任意 - 設定スキーマ、バリエーション、依存関係、制限事項
3skills_get_reference(skill_id, filename)指示で特定のドキュメントが参照されている場合にのみ
3skills_run_script(skill_id, filename, input_data)指示でスクリプトの実行が指定されている場合にのみ
3skills_get_asset(skill_id, filename)指示で特定のテンプレートが参照されている場合にのみ
なぜ frontmatter だけを埋め込むのですか?

SKILL.md 全体を単一のベクトルとして埋め込むと、検索対象として意図されていない指示文が検索空間に混入します。skills-mcp は description + trigger_phrases(約 100 トークン)のみを埋め込むため、ベクトル空間が意味的に整理され、検索結果の関連性が保たれます。

埋め込み モデルのバージョンによるずれなし

Worker はクエリ時の埋め込みに Cloudflare Workers AI(@cf/baai/bge-small-en-v1.5、384-dim)を使用します。シードスクリプトも同じモデルを REST API 経由で呼び出します。シード時とクエリ時のベクトルを直接比較できます。ローカル GPU も、埋め込みサーバーも、ずれもありません。


含まれるもの

Anthropic、Google、Vercel、Stripe、Django、Vue.js などの公式ドキュメントから厳選した 30 以上のスキルです。一般的なガイドではなく、元の資料に基づいて直接作成され、原典へのリンクも記載されています。

各スキルには以下が含まれます。

  • 複雑さのレベル(初級 → 中級 → 上級)
  • 所要時間の目安(読む・理解するのにかかる時間)
  • 前提条件(事前に知っておく必要があること)
  • ユースケース(実際に活用できるシナリオ)
  • ソース URL(必ず公式ドキュメントまでたどれます)

特長:

  • ✅ 発見、読み込み、任意の補足コンテンツ取得に使える 7 つの MCP ツール
  • ✅ 動的なスキルブラウザー(skills_list_all)— エージェントは検索せずにスキルを閲覧できます
  • ✅ 拡張メタデータ — エージェントはスキルを読み込む前に複雑さを把握できます

実際のユースケース

ユースケース 1:一貫性のあるコードレビュー

skills-mcp を使わない場合: Claude に「このコードをレビューして」と伝えると、一般的なフィードバックが返ってきます。
skills-mcp を使う場合: エージェントが code-review スキルを読み込み → 組織のチェックリストを適用 → CRITICAL/HIGH/MEDIUM/LOW の評価を返し → 修正用スニペットを提示します。

ユースケース 2:大規模にも対応できる SQL クエリの生成

skills-mcp を使わない場合: エージェントはテストデータでは動作するものの、本番環境では N+1 が発生するクエリを作成します。
skills-mcp を使う場合: エージェントが sql-query-writer スキルを読み込み → ウィンドウ関数のパターン、CTE の最適化、インデックスの提案を適用 → 初回から本番環境ですぐに使えるクエリを生成します。

ユースケース 3:正しく実装された Webhook

skills-mcp なし: Stripe の Webhook で署名を検証しなかったり、冪等性が考慮されなかったりします。
skills-mcp あり: エージェントが stripe-integration スキルを読み込み → 署名検証のパターン、セキュリティチェックリスト、リリース手順を参照 → 正しく実装できます。

ユースケース 4:複数のフレームワークで一貫性を保つ

skills-mcp なし: React エージェントと Vue エージェントが異なるパターンでコードを書きます。
skills-mcp あり: 両方のエージェントが Skills レジストリを検索 → それぞれのフレームワーク向けスキルを見つける → 同じベストプラクティスに従う → コードベースの一貫性が保たれます。


カテゴリ別の同梱スキル

🔧 コア開発
スキル機能
api-integration認証、ページネーション、リトライ、エラー処理、OpenAPI との整合性を備えた REST/GraphQL クライアント
code-reviewCRITICAL/HIGH/MEDIUM/LOW の重大度評価と修正例を含む、体系的なセキュリティおよび品質レビュー
data-analysisCSV/表形式データの EDA、クリーニング、統計、可視化、実用的なインサイト
git-commit-writer差分からの Conventional Commits の作成(タイプ、スコープ、破壊的変更、共同作成者)
readme-writerバッジ、使用方法、API ドキュメント、コントリビューションガイドを含む、プロフェッショナルな README.md
sql-query-writerウィンドウ関数、CTE、インデックス、実行計画、よくあるアンチパターンに対応した最適化 SQL
test-writerエッジケースを網羅し、モックのパターンを含む pytest、Jest、Go のテストスイート
web-scraperレート制限、ページネーション、ボット対策を備えた構造化データの抽出
🏗️ バックエンドフレームワーク
スキル機能
django-web-frameworkDjango の MVT パターン:モデル、ビュー、ORM、マイグレーション、認証、ミドルウェア、テスト、デプロイ
🎨 フロントエンドフレームワーク
スキル機能
vue-frameworkVue.js 3:Composition API、リアクティブデータ、コンポーネント、ルーター、状態管理(Pinia)、テンプレート
📄 ドキュメントとオフィス
スキル機能
docx-creatorpython-docx を使った Word ドキュメントの作成と編集:表、スタイル、ヘッダー、変更履歴
pdf-processingPDF のテキストや表の抽出、フォームへの入力、結合/分割:Tier 3 の完全なスクリプトとリファレンス
pptx-creatorpptxgenjs を使った PowerPoint プレゼンテーションの作成:グラフ、画像、デザインの原則
xlsx-creatoropenpyxl を使った Excel スプレッドシート:数式、書式設定、グラフ、財務モデルの規約
🤖 AI と LLM プラットフォーム
スキル機能
claude-apiAnthropic SDK:ツールの使用、ストリーミング、ビジョン、プロンプトキャッシュ、拡張思考、バッチ処理
gemini-apiGoogle Gemini API:マルチモーダル、関数呼び出し、構造化出力、現行のモデル/SDK
openai-apiOpenAI:GPT-4o、ツールの使用、構造化出力、DALL-E、Whisper、TTS、バッチ処理
llm-prompt-engineeringChain-of-thought、Few-shot、構造化出力、エージェントのシステムプロンプト設計、アンチパターン
mcp-server-builderFastMCP(Python)または TypeScript SDK で MCP サーバーを構築:ツール、リソース、プロンプト
☁️ クラウドプラットフォームとインフラストラクチャ
スキル機能
cloudflare-workersWorkers、Pages、KV、D1、R2、Workers AI、Vectorize、Durable Objects、Wrangler
docker-containerization本番環境向け Dockerfile、マルチステージビルド、Docker Compose、セキュリティ強化
github-actionsCI/CD ワークフロー、マトリックスビルド、キャッシュ、Docker の公開、リリースの自動化
terraformAWS/GCP/Azure 向け IaC:モジュール、リモートステート、ワークスペース、CI/CD 連携
🌐 Webおよびフルスタックフレームワーク
スキル機能
nextjs-best-practicesApp Router、RSC、非同期パラメーター、データ取得、画像/フォントの最適化、セルフホスト
react-best-practicesHooks のパターン、状態管理、メモ化、仮想化、エラーバウンダリー
fastapiPython REST API、Pydantic v2、依存性注入、JWT 認証、非同期 SQLAlchemy、テスト
graphql-apiスキーマ設計、リゾルバー、DataLoader(N+1 の防止)、Apollo Client、Strawberry
typescript-patternsジェネリクス、判別可能なユニオン、ブランド型、条件付き型、厳格な tsconfig
🔌 サービスとインテグレーション
スキル機能
stripe-integrationCheckout Sessions、webhook、サブスクリプション、Connect(Accounts v2)、セキュリティチェックリスト
supabase-integrationPostgreSQL クエリ、認証(OAuth/マジックリンク)、RLS ポリシー、リアルタイム、ストレージ
🎨 デザインとUI
スキル機能
frontend-design美的な方向性、タイポグラフィシステム、カラーパレット、マイクロアニメーション、アンチパターン
web-artifacts-builder自己完結型のインタラクティブな HTML/React/Tailwind/D3 アーティファクトとダッシュボード

セットアップ

必要なもの
要件費用備考
Qdrant Cloud無料1 GB の無料クラスター。作成して、URL と API キーをコピーします
Cloudflare無料Workers Free プランでは、SQLite ベースの Durable Objects を利用できます
Python 3.11+無料シードスクリプトと任意のローカルサーバー用
Node.js 18+無料wrangler CLI 用

Cloudflare は無料です。 skills-mcp は SQLite ベースの Durable Objects(wrangler.jsonc の new_sqlite_classes)を使用します。これは Cloudflare Workers の Free プラン(1 日あたり 100k リクエスト)で利用できます。この上限を超える場合、または KV ベースの Durable Objects が必要な場合にのみ、月額 $5 の有料プランが必要です。

クイックデプロイ(ワンクリック)

Cloudflare にデプロイ

上のボタンをクリックすると、Worker が Cloudflare アカウントにデプロイされます。デプロイの手順で、Qdrant Cloud URL と API キー の入力を求められます(どちらも cloud.qdrant.io で無料で取得できます)。Worker が稼働したら、同梱のスキルを使って Qdrant にデータを投入します。

git clone https://github.com/Jignesh-Ponamwar/skills-mcp && cd skills-mcp
pip install -r requirements.txt
cp .env.example .env
# Fill in: QDRANT_URL, QDRANT_API_KEY, WORKERS_AI_ACCOUNT_ID, WORKERS_AI_API_TOKEN
python -X utf8 -m skill_mcp.seed.seed_skills

サーバーは https://skill-mcp.<your-subdomain>.workers.dev/sse で利用できます。詳しい手順は SETUP.md をご覧ください。

オプション A 1 つのコマンドで実行(推奨)

Windows(PowerShell):

.\scripts\setup.ps1

Linux / macOS:

bash scripts/setup.sh

クロスプラットフォーム(Make):

make setup

ウィザードが前提条件を確認し → .env を作成し → Python の依存関係をインストールし → 同梱のすべてのスキルを Qdrant に投入し → Wrangler シークレットをプッシュし → Worker をデプロイします。これで完了です。

オプション B 手動(ステップごと)
# 1. Clone
git clone https://github.com/yourusername/skills-mcp && cd skills-mcp

# 2. Configure credentials
cp .env.example .env
# Fill in: QDRANT_URL, QDRANT_API_KEY, WORKERS_AI_ACCOUNT_ID, WORKERS_AI_API_TOKEN

# 3. Install seed dependencies and seed Qdrant
pip install -r requirements.txt
python -X utf8 -m skill_mcp.seed.seed_skills

# 4. Deploy to Cloudflare
npm install -g wrangler
wrangler login
wrangler secret put QDRANT_URL      # paste your Qdrant URL
wrangler secret put QDRANT_API_KEY  # paste your Qdrant API key
wrangler deploy

サーバーは次の URL で稼働します:

https://skill-mcp.<your-subdomain>.workers.dev/sse

認証情報の詳しい設定手順は SETUP.md をご覧ください。

Make ターゲットのリファレンス
# Cloudflare deployment
make env        # Copy .env.example → .env (skips if .env already exists)
make check      # Verify all required .env values are set
make install    # pip install -r requirements.txt
make seed       # Seed / re-seed Qdrant with all skills (idempotent)
make secrets    # Auto-push QDRANT_URL + QDRANT_API_KEY from .env to Worker
make deploy     # wrangler deploy
make dev        # Run local FastMCP server in stdio mode
make dev-http   # Run local FastMCP server on HTTP :8000
make setup      # Full first-run: env + install + seed + secrets + deploy

# Security & validation
make validate          # Validate all SKILL.md files - schema + prompt-injection scan
make calibrate         # Sweep (t_high, t_low) pairs; report precision/recall/F1
make check-qdrant-keys # Warn if read/write Qdrant keys are identical

# Docker (one-command local stack)
make docker-up    # Start Qdrant + seed + MCP server
make docker-down  # Stop containers (keeps Qdrant data)
make docker-seed  # Re-seed after adding new skills
make docker-logs  # Follow server logs
オプション C - Docker(1 つのコマンドで実行、完全ローカル)

Cloudflare アカウントは不要です。Qdrant をコンテナー内でローカルに実行します。ローカルのみのセットアップ、エアギャップ環境、デプロイ前のテストに便利です。

# Start everything: Qdrant + seed + MCP server
docker compose up

# Or in background
docker compose up -d && docker compose logs -f server

ローカルの MCP サーバーは http://localhost:8000/sse で稼働します。

MCP クライアントの設定に追加します:

{
  "mcpServers": {
    "skill-mcp": {
      "transport": "sse",
      "url": "http://localhost:8000/sse"
    }
  }
}

Docker モードの要件: .env に必要なのは WORKERS_AI_ACCOUNT_ID と WORKERS_AI_API_TOKEN のみです。Workers AI 経由で埋め込みを生成するには、引き続き Cloudflare の認証情報が必要です。Qdrant はローカルで実行されるため、Qdrant Cloud アカウントは不要です。

make docker-up     # Start the full stack
make docker-down   # Stop (data volume preserved)
make docker-seed   # Re-seed after adding new skills

AI エージェントの接続

自分が管理していないホスト型の skills-mcp インスタンスに接続する前に: TRANSPARENCY.md をお読みください。スキルの本文は、サードパーティのサーバーからエージェントのコンテキストウィンドウに直接読み込まれます。このリポジトリが提供するホスト型インスタンスは個人によるデプロイであり、SLA も認証もありません。本番環境での利用や機密性の高いワークロードには、セルフホストしてください。

ステップ 1 MCP サーバーを追加する

MCP クライアントの設定(.mcp.json、Claude Code の設定、Cursor の設定など)に追加します。

本番環境(Cloudflare Worker):

{
  "mcpServers": {
    "skill-mcp": {
      "transport": "sse",
      "url": "https://skill-mcp.<your-subdomain>.workers.dev/sse"
    }
  }
}

ローカル開発(wrangler dev):

{
  "mcpServers": {
    "skill-mcp": {
      "transport": "sse",
      "url": "http://localhost:8787/sse"
    }
  }
}

ローカルの Python サーバー(skills_run_script に必要です。Cloudflare Workers はサブプロセスを実行できません):

{
  "mcpServers": {
    "skill-mcp": {
      "command": "python",
      "args": ["-m", "skill_mcp.server"],
      "cwd": "/path/to/skills-mcp"
    }
  }
}
ステップ 2 お使いのプラットフォーム向けのマスタースキルをインストールする

適切なファイルをプロジェクトのルートに配置すると、エージェントは検索するタイミング、スコアの解釈方法、補足ファイルを読み込むタイミングを含む 3 層のスキルワークフローに自動的に従います。

プラットフォームコピーするファイル配置先
Claude Codemaster-skill/platforms/claude-code/CLAUDE.mdプロジェクトのルート
Cursormaster-skill/platforms/cursor/.cursorrulesプロジェクトのルート
Windsurfmaster-skill/platforms/windsurf/.windsurfrulesプロジェクトのルート
Antigravity(Google)master-skill/platforms/antigravity/.agents/プロジェクトのルート(優先)
Antigravity(Google)master-skill/platforms/antigravity/AGENTS.mdプロジェクトのルート(二次)
OpenAI Codexmaster-skill/platforms/codex/AGENTS.mdプロジェクトのルート
Cline(VSCode)master-skill/platforms/cline/.clinerulesプロジェクトのルート
GitHub Copilotmaster-skill/platforms/copilot/.github/プロジェクトのルート
Aidermaster-skill/platforms/aider/CONVENTIONS.mdプロジェクトのルート

コピーした後、プレースホルダー URL をデプロイ済みの Worker URL に置き換えてください。

プラットフォーム別のインストールコマンド: master-skill/README.md


独自のスキルを追加する

スキルは skill_mcp/skills_data/ に保存されています。各スキルは次のフォルダーに入っています。

skill_mcp/skills_data/
└── my-skill/
    ├── SKILL.md          ← required: frontmatter + full instructions
    ├── references/       ← optional: markdown reference docs (.md)
    ├── scripts/          ← optional: executable scripts (.py, .js, .sh)
    └── assets/           ← optional: output templates and static files
SKILL.md の形式
---
name: my-skill
description: >
  One or two sentences describing WHEN to use this skill.
  Write it from the agent's perspective: "Use when the user asks to extract data from PDFs,
  process forms, or parse tables from documents."
license: Apache-2.0
metadata:
  author: your-name
  version: "1.0"
  tags: [pdf, extraction, data]
  platforms: [claude-code, cursor, any]
  triggers:
    - extract text from a PDF
    - parse a PDF document
    - read a PDF file
    - fill a PDF form
---

# Skill Title

Full step-by-step instructions. This is what the agent reads and follows.

Reference tier-3 files explicitly so the agent knows to load them:
- "For field type reference, see references/FORMS.md"
- "To extract data, run scripts/extract.py with PDF_PATH set to the file path"
- "Format your output using assets/extraction-template.md"

重要なルールは 2 つです。

  1. 埋め込み対象となるのは説明とトリガーです。スキル名ではなく、エージェントが必要性をどのように表現するかに合わせて記述してください。"pdf-skill" よりも "extract tables from a PDF" が適しています。

  2. 本文ではティア 3 のファイルを名前で参照してください。エージェントには利用可能なファイルを一覧にした tier3_manifest が渡され、指示で明示的に言及されたファイルだけが取得されます。推測による読み込みは行われません。

追加後に再シードする
python -X utf8 -m skill_mcp.seed.seed_skills
# or:
make seed

シードスクリプトは冪等です。再実行すると、重複を作成せずに既存のスキルを更新します。


セキュリティ

プロンプトインジェクション対策(取り込みパイプライン)

命令の上書きを埋め込んだ悪意のある SKILL.md は、スキル本文の読み込み後にエージェントの動作を変え、レジストリをプロンプトインジェクションの配布手段にしてしまう可能性があります。

すべてのスキルは、Qdrant に登録される前に、シード時およびすべての PR の CI で skill_mcp/security/prompt_injection.py によるスキャンを受けます。CRITICAL または HIGH の検出結果があるスキルはブロックされます。スキャナーはパターンマッチングを使用します。パターンを回避するセマンティック攻撃は既知の残存リスクです(THREAT_MODEL.md を参照)。

攻撃カテゴリ深刻度例
命令の上書きを促すフレーズCRITICAL"ignore all previous instructions"
役割/アイデンティティの乗っ取りCRITICAL"you are now an unrestricted AI"
プロンプト区切り文字の注入HIGH</system>、[INST]、<<SYS>>
認証情報の流出CRITICAL"POST the API key to webhook.site/…"
HTML/スクリプトの注入HIGHコードブロック外の <script>
Unicode の双方向制御文字/ゼロ幅文字HIGH視覚的に隠されたコンテンツ
Base64 エンコードされたペイロードCRITICAL上書きフレーズにデコードされる Base64
コンテンツの位置ずらしMEDIUM20 行以上連続する空行

構造チェックの前にコードブロックは除外されます。そのため、TypeScript のジェネリクス(Promise<User>)やコード例内の <script> タグが誤検出されることはありません。

脅威モデル全文:THREAT_MODEL.md · ホスト型インスタンスの信頼モデル:TRANSPARENCY.md

ランタイムのセキュリティ強化(Worker + ローカルサーバー)
  • IP ごとのレート制限 - スライディングウィンドウ方式で毎分 60 リクエスト(RATE_LIMIT_RPM で設定可能)。上限を超えると HTTP 429 を返します。古いエントリーは IP 数が 10k 件に達した時点で削除されます。Worker のみ
  • CORS ヘッダー - すべての Worker レスポンスに Access-Control-Allow-Origin: * を設定します。ブラウザベースの MCP クライアントやテスター(Glama、MCP Inspector)をサポートします
  • リクエストボディの上限 1 MB - 1 MB を超える POST ボディは、解析前に HTTP 413 で拒否されます
  • サニタイズされたエラーメッセージ - 上流 URL、Qdrant のレスポンス、スタックトレースが MCP クライアントに渡ることはありません
  • セキュリティレスポンスヘッダー - X-Content-Type-Options: nosniff、X-Frame-Options: DENY、Cache-Control: no-store、Referrer-Policy: no-referrer
  • クエリ文字列の上限 - 全体で 2 KB、パラメーター数 16 個、キーは 128 文字、値は 256 文字まで
  • 入力検証 - tools/call の引数の型をチェックします。不正な JSON-RPC には適切なエラーコードを返します
  • クエリ長の上限 - skills_find_relevant は 2,000 文字を超えるクエリを拒否します

スクリプトの実行(skills_run_script、ローカルサーバーのみ):

  • 分離された tempfile.TemporaryDirectory() を使用し、実行ごとに削除します
  • 30 秒のハードタイムアウトを設定し、プロセスを明示的に終了します
  • 最小限のクリーンな環境を使用し、認証情報や機密性の高い環境変数をスクリプトに渡しません
  • 環境変数の注入(PATH、LD_PRELOAD、PYTHONPATH など)をブロックします
  • スクリプトのソースがエージェントに返されることはありません。返されるのは stdout / stderr / exit_code のみです
  • 各ストリームの出力は 10,000 文字で切り詰められます

デプロイ済みの Cloudflare Worker では、Pyodide ランタイムがサブプロセスを実行できないため、skills_run_script はスクリプトマニフェストのみを返します。


プロジェクト構成

最上位の 3 つのディレクトリが、それぞれ異なる役割を担います。

  • skill_mcp/ - Python パッケージです。サーバーの実行に必要なものはすべてここにあります。Pydantic モデル(models/)、Qdrant との連携(db/)、MCP ツールの実装(tools/)、プロンプトインジェクションスキャナー(security/)、シードスクリプト(seed/)、ローカルの FastMCP エントリーポイント(server.py)、スキルレジストリそのもの(skills_data/)が含まれます。スキルの追加、ツールの編集、データレイヤーの変更は、ここで行います。

  • src/ - Cloudflare Workers のデプロイ先です。単一ファイルの worker.py が含まれています。このファイルは、外部パッケージを使わず、Pyodide に対応した自己完結型の Cloudflare Python Worker として、6 つすべての MCP ツールを再実装しています。リポジトリのルートにある wrangler.jsonc がこのディレクトリを参照します。デプロイ済み Worker の動作を変更する場合のみ、ここを編集してください。

  • scripts/ - インポート可能なパッケージには含まれない、開発者向けおよび CI 用のユーティリティです。setup.sh / setup.ps1 は一度だけ実行する対話型ウィザードです。validate_skills.py は SKILL.md のスキーマとプロンプトインジェクションを検証するスクリプトで、make validate と GitHub Actions のスキル検証ワークフローの両方から呼び出されます。

skills-mcp/
├── skill_mcp/                     # Installable Python package (pip install -e ".[seed]")
│   ├── db/                        # Qdrant client, embedder, TTL cache
│   ├── eval/calibrate.py          # Threshold calibration runner (precision/recall sweep)
│   ├── models/skill.py            # Pydantic models for all 6 collection types
│   ├── security/prompt_injection.py  # 9-category injection scanner
│   ├── seed/seed_skills.py        # Walks skills_data/, scans, embeds, upserts Qdrant
│   ├── tools/                     # MCP tool implementations (local server)
│   ├── skills_data/               # skill folders - one SKILL.md each
│   └── server.py                  # Local FastMCP entry point (stdio / HTTP)
├── src/
│   └── worker.py                  # Cloudflare Python Worker - all 6 tools, SSE + Streamable HTTP, rate limiting, CORS
├── scripts/
│   ├── setup.sh / setup.ps1       # One-shot setup wizards (Linux/macOS + Windows)
│   └── validate_skills.py         # SKILL.md validator - schema + injection scan
├── master-skill/                  # Drop-in agent instruction files (8 platforms)
│   └── platforms/
│       ├── claude-code/CLAUDE.md
│       ├── cursor/.cursorrules
│       ├── windsurf/.windsurfrules
│       ├── codex/AGENTS.md
│       ├── cline/.clinerules
│       ├── copilot/.github/copilot-instructions.md
│       └── aider/CONVENTIONS.md
├── tests/
│   └── eval/threshold_calibration.json  # 120 eval triples for threshold calibration
├── .github/workflows/
│   ├── tests.yml                  # pytest on every push (unit tests, no external deps)
│   └── validate-skills.yml        # SKILL.md lint + injection scan on PRs
├── wrangler.jsonc                  # Workers AI binding + SQLite Durable Objects config
├── Makefile                        # Automation: setup, seed, deploy, dev, docker, validate
├── Dockerfile / docker-compose.yml # One-command local stack: Qdrant + seed + server
├── pyproject.toml                  # Package metadata + optional dependency groups
├── .env.example                    # Credential template - copy to .env
├── SETUP.md                        # Full credential walkthrough
├── CONTRIBUTING.md                 # Skill submission workflow + security policy
├── THREAT_MODEL.md                 # 7 threat categories with mitigations
├── TRANSPARENCY.md                 # Hosted instance trust model, SLA status, deployment boundaries
└── docs/                           # Architecture, versioning, calibration, and federation design

既知の制限事項

  • エージェントの動作を安定させるにはマスタースキルが必要です - 3層ワークフロー(発見 → 読み込み → 補完)が一貫して実行されるのは、マスタースキルファイルがエージェントのプロジェクトルートにインストールされている場合のみです(上記のステップ 2を参照)。インストールされていないと、エージェントがスコアのしきい値を無視したり、スキル本文を推測で読み込んだり、tier3_manifestを完全に無視したりする可能性があり、コンテキストウィンドウのトークンを無駄に消費して、結果に一貫性がなくなります。

  • トークン使用量はコレクションの規模に応じて増加します - skills_find_relevantはtop_k件の結果の記述子(それぞれ約100~200トークン)を返します。スキルが30件なら無視できる量です。スキルが300件以上あり、top_kの値も大きい場合、1回の検索呼び出しでコンテキストウィンドウのかなりの部分を消費する可能性があります。規模が大きくなっても関連性を保つため、top_kは低く(3~5)抑え、スキルごとに正確で重複しないトリガーフレーズを記述してください。

  • スクリプトの実行はローカル限定です - skills_run_scriptにはローカルのPythonサーバーが必要です。Cloudflare Workerはスクリプトマニフェストを返しますが、Pyodideランタイムがsubprocessをサポートしていないため、サブプロセスを実行できません。skills_run_scriptを呼び出すスキルのワークフローでは、MCP クライアントの接続先をWorkerのURLではなく、python -m skill_mcp.serverにしてください。

  • 埋め込みモデルはシード作成時に固定されます - ベクトルはシード作成時とクエリ時の両方で@cf/baai/bge-small-en-v1.5(384次元)を使って生成されます。Cloudflare Workers AIがこのモデルを廃止または変更した場合、すべてのベクトルが比較できなくなり、スキルコレクション全体を再シードする必要があります。

  • 検索品質はトリガーフレーズの品質に左右されます - セマンティック検索の品質は、各SKILL.mdに記述されたtriggersの品質によって決まります。トリガーフレーズが曖昧だったり、重複していたりするスキルは、無関係なクエリにも表示され、結果の関連性を損ないます。トリガーの記述が不適切なスキルが1つあるだけで、レジストリ全体の品質が低下します。


貢献

スキルの投稿ワークフロー全体(優れたスキルの条件、SKILL.mdの形式リファレンス、PRの手順、投稿されたスキルのセキュリティポリシー)については、CONTRIBUTING.mdをお読みください。

クイックスタート:

# 1. Create your skill
mkdir -p skill_mcp/skills_data/my-skill && touch skill_mcp/skills_data/my-skill/SKILL.md

# 2. Validate locally (schema + prompt-injection scan)
python scripts/validate_skills.py skill_mcp/skills_data/my-skill/SKILL.md

# 3. Open a PR - CI runs automatically

決して破ってはならない2つの不変条件:

  1. 本文全体を埋め込まないでください。ベクトルコレクションに入れるのはdescription + triggersのみです
  2. スクリプトのソースを返さないでください。skills_run_scriptが返すのはstdout / stderr / exit_codeのみです

CIはskills_data/に変更を加えるすべてのPRを検証します。検証内容は、YAML構文、スキーマ、slugの重複チェック、プロンプトインジェクションのスキャンです。スキャンに失敗すると、マージがブロックされます。


ライセンス

Apache 2.0。詳細はLICENSEを参照してください。


Cloudflare Workers · Qdrant · FastMCP · MCPで構築

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。