Skills Mcp について
Skills Mcp は、手順型スキルの共有ライブラリを提供する MCP サーバーです。必要なときに専門知識を参照する AI エージェント向けで、セマンティック検索と段階的な読み込みに対応し、セルフホストや独自スキルの追加もできます。
主な機能
- 01スキルのセマンティック検索と順位付け
- 02スキル本文のオンデマンド読み込み
- 03参照資料とアセットの段階的取得
- 04スキルとオプションの一覧表示
- 05セルフホストとバージョン管理
活用シーン
- 01コードレビューでチームのチェックリストを読み込む
- 02SQL の最適化パターンを探す
- 03Stripe webhook の実装手順を参照する
- 04エージェントごとにフレームワークの実践方法を適用する
MCP 対応
MCP クライアント向けに、スキルの検索・閲覧、手順の読み込み、関連コンテンツの取得ツールを提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://skill-mcp.jigneshponamwar.workers.dev/mcpclaude mcp add --transport http skills https://skill-mcp.jigneshponamwar.workers.dev/mcp{"mcpServers":{"skills":{"type":"http","url":"https://skill-mcp.jigneshponamwar.workers.dev/mcp"}}}Cursor で開く{"servers":{"skills":{"type":"http","url":"https://skill-mcp.jigneshponamwar.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"skills":{"type":"http","url":"https://skill-mcp.jigneshponamwar.workers.dev/mcp"}}}{"mcpServers":{"skills":{"serverUrl":"https://skill-mcp.jigneshponamwar.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | 支援が必要なタスクを自然言語で記述します。具体的に記述してください。「テスト」だけでなく、「FastAPI の非同期エンドポイントの pytest 統合テストを書く」のように、カテゴリではなく達成したい内容を説明してください。 |
| top_k | integer | いいえ | 返す結果の数(1~20)。通常はデフォルトの 5 で十分です。 |
詳細
skills-mcp
エージェントスキルを MCP 経由で提供します。
あらゆる MCP エージェントが実行時に読み込める、共有・検索可能な 1 つのスキルライブラリです。すべてのツール、リポジトリ、コンテキストにスキルファイルを含める必要はありません。
オープンな SKILL.md 形式をベースに構築 · セマンティック検索 · 段階的な読み込み · 30 以上のスキルを同梱 · 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_body | payload only | 完全な Markdown の指示 + システムプロンプトへの追加内容 |
skill_options | payload only | 設定スキーマ、バリエーション、依存関係、制限事項 |
skill_references | payload only | スキルに同梱された Markdown のリファレンスドキュメント |
skill_scripts | payload only | 実行可能なスクリプト(ソースはサーバー側に保存され、エージェントには送信されません) |
skill_assets | payload only | テンプレートと静的な出力形式のリソース |
7 つの MCP ツール - 3 段階の段階的開示 + ブラウジング
| Tier | ツール | 呼び出すタイミング |
|---|---|---|
| 1 | skills_find_relevant(query, top_k) | 常に最初に呼び出す - セマンティック検索。スコア付きのスキルを順位順に返します |
| 1 | skills_list_all(limit, offset) | 検索せずにすべてのスキルを閲覧します - スキルの発見に便利です |
| 2 | skills_get_body(skill_id, version?) | 一致するスキルが見つかった後 - 完全な指示 + tier3_manifest を取得します。version で特定のリリースを指定できます |
| 2 | skills_get_options(skill_id) | 任意 - 設定スキーマ、バリエーション、依存関係、制限事項 |
| 3 | skills_get_reference(skill_id, filename) | 指示で特定のドキュメントが参照されている場合にのみ |
| 3 | skills_run_script(skill_id, filename, input_data) | 指示でスクリプトの実行が指定されている場合にのみ |
| 3 | skills_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-review | CRITICAL/HIGH/MEDIUM/LOW の重大度評価と修正例を含む、体系的なセキュリティおよび品質レビュー |
data-analysis | CSV/表形式データの 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-framework | Django の MVT パターン:モデル、ビュー、ORM、マイグレーション、認証、ミドルウェア、テスト、デプロイ |
🎨 フロントエンドフレームワーク
| スキル | 機能 |
|---|---|
vue-framework | Vue.js 3:Composition API、リアクティブデータ、コンポーネント、ルーター、状態管理(Pinia)、テンプレート |
📄 ドキュメントとオフィス
| スキル | 機能 |
|---|---|
docx-creator | python-docx を使った Word ドキュメントの作成と編集:表、スタイル、ヘッダー、変更履歴 |
pdf-processing | PDF のテキストや表の抽出、フォームへの入力、結合/分割:Tier 3 の完全なスクリプトとリファレンス |
pptx-creator | pptxgenjs を使った PowerPoint プレゼンテーションの作成:グラフ、画像、デザインの原則 |
xlsx-creator | openpyxl を使った Excel スプレッドシート:数式、書式設定、グラフ、財務モデルの規約 |
🤖 AI と LLM プラットフォーム
| スキル | 機能 |
|---|---|
claude-api | Anthropic SDK:ツールの使用、ストリーミング、ビジョン、プロンプトキャッシュ、拡張思考、バッチ処理 |
gemini-api | Google Gemini API:マルチモーダル、関数呼び出し、構造化出力、現行のモデル/SDK |
openai-api | OpenAI:GPT-4o、ツールの使用、構造化出力、DALL-E、Whisper、TTS、バッチ処理 |
llm-prompt-engineering | Chain-of-thought、Few-shot、構造化出力、エージェントのシステムプロンプト設計、アンチパターン |
mcp-server-builder | FastMCP(Python)または TypeScript SDK で MCP サーバーを構築:ツール、リソース、プロンプト |
☁️ クラウドプラットフォームとインフラストラクチャ
| スキル | 機能 |
|---|---|
cloudflare-workers | Workers、Pages、KV、D1、R2、Workers AI、Vectorize、Durable Objects、Wrangler |
docker-containerization | 本番環境向け Dockerfile、マルチステージビルド、Docker Compose、セキュリティ強化 |
github-actions | CI/CD ワークフロー、マトリックスビルド、キャッシュ、Docker の公開、リリースの自動化 |
terraform | AWS/GCP/Azure 向け IaC:モジュール、リモートステート、ワークスペース、CI/CD 連携 |
🌐 Webおよびフルスタックフレームワーク
| スキル | 機能 |
|---|---|
nextjs-best-practices | App Router、RSC、非同期パラメーター、データ取得、画像/フォントの最適化、セルフホスト |
react-best-practices | Hooks のパターン、状態管理、メモ化、仮想化、エラーバウンダリー |
fastapi | Python REST API、Pydantic v2、依存性注入、JWT 認証、非同期 SQLAlchemy、テスト |
graphql-api | スキーマ設計、リゾルバー、DataLoader(N+1 の防止)、Apollo Client、Strawberry |
typescript-patterns | ジェネリクス、判別可能なユニオン、ブランド型、条件付き型、厳格な tsconfig |
🔌 サービスとインテグレーション
| スキル | 機能 |
|---|---|
stripe-integration | Checkout Sessions、webhook、サブスクリプション、Connect(Accounts v2)、セキュリティチェックリスト |
supabase-integration | PostgreSQL クエリ、認証(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 の有料プランが必要です。
クイックデプロイ(ワンクリック)
上のボタンをクリックすると、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 Code | master-skill/platforms/claude-code/CLAUDE.md | プロジェクトのルート |
| Cursor | master-skill/platforms/cursor/.cursorrules | プロジェクトのルート |
| Windsurf | master-skill/platforms/windsurf/.windsurfrules | プロジェクトのルート |
| Antigravity(Google) | master-skill/platforms/antigravity/.agents/ | プロジェクトのルート(優先) |
| Antigravity(Google) | master-skill/platforms/antigravity/AGENTS.md | プロジェクトのルート(二次) |
| OpenAI Codex | master-skill/platforms/codex/AGENTS.md | プロジェクトのルート |
| Cline(VSCode) | master-skill/platforms/cline/.clinerules | プロジェクトのルート |
| GitHub Copilot | master-skill/platforms/copilot/.github/ | プロジェクトのルート |
| Aider | master-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 つです。
-
埋め込み対象となるのは説明とトリガーです。スキル名ではなく、エージェントが必要性をどのように表現するかに合わせて記述してください。
"pdf-skill"よりも"extract tables from a PDF"が適しています。 -
本文ではティア 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 |
| コンテンツの位置ずらし | MEDIUM | 20 行以上連続する空行 |
構造チェックの前にコードブロックは除外されます。そのため、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つの不変条件:
- 本文全体を埋め込まないでください。ベクトルコレクションに入れるのは
description + triggersのみです - スクリプトのソースを返さないでください。
skills_run_scriptが返すのはstdout / stderr / exit_codeのみです
CIはskills_data/に変更を加えるすべてのPRを検証します。検証内容は、YAML構文、スキーマ、slugの重複チェック、プロンプトインジェクションのスキャンです。スキャンに失敗すると、マージがブロックされます。
ライセンス
Apache 2.0。詳細はLICENSEを参照してください。
Cloudflare Workers · Qdrant · FastMCP · MCPで構築
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。