Skip to content

Instantly share code, notes, and snippets.

@mrtry
Last active December 6, 2025 05:48
Show Gist options
  • Select an option

  • Save mrtry/4a525202829e0842057a2082a78b64a7 to your computer and use it in GitHub Desktop.

Select an option

Save mrtry/4a525202829e0842057a2082a78b64a7 to your computer and use it in GitHub Desktop.
MCP Registry sample
name: Deploy to GitHub Pages
on:
# main ブランチへの push 時に実行
push:
branches: [main]
# 手動実行も可能
workflow_dispatch:
# GitHub Pages へのデプロイに必要な権限
permissions:
contents: read
pages: write
id-token: write
# 同時実行を制御(同じデプロイが重複しないように)
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# ビルドジョブ
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
- name: Generate registry endpoints
run: node scripts/generate-registry-endpoints.js
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./docs
# デプロイジョブ
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

1. 申請サーバーの概要

Cloudflare Docs Vectorize MCP Server は、Cloudflare のドキュメントをベクトル検索(セマンティック検索)で検索できるリモート MCP サーバーです。

達成したいこと:

  • Cloudflare の公式ドキュメントに対する自然言語での検索クエリを可能にする
  • Workers、R2、Vectorize などの Cloudflare サービスに関する技術情報を素早く取得
  • 開発者が IDE 内から離れることなく、Cloudflare の機能や API に関する質問に回答を得る

改善する開発ワークフロー:

  • Cloudflare Workers、R2、D1 などを使用したアプリケーション開発において、ドキュメント参照の効率化
  • コスト、制限、ベストプラクティスに関する疑問をリアルタイムで解決

2. セキュリティリスク判定

総合的なセキュリティリスク評価:

  • 🟢 低リスク - ローカル完結型で外部通信なし、または十分なセキュリティ対策が確認されている
  • 🟡 中リスク - 制限付き外部通信または一部セキュリティ懸念があるが、適切に管理可能
  • 🔴 高リスク - 広範な権限要求、重大なセキュリティ懸念、または不十分なセキュリティ対策

判定理由:

  • 出所と信頼性: Cloudflare 公式リポジトリから提供されており、Apache-2.0 ライセンスで公開。251以上のリリース、30人以上のコントリビューター、3.2k スターと活発なメンテナンス状況
  • 権限とアクセス制御: 読み取り専用のドキュメント検索機能のみ。OAuth 認証でアクセス制御
  • データハンドリング: ユーザーのプロンプト(検索クエリ)のみが Cloudflare のリモートサーバーに送信される。コードやリポジトリデータは送信されない
  • セキュリティ対策: Security policy が設定されており、依存関係の更新も定期的に実施されている

3. セキュリティ・リスク自己評価

3.1. 出所と信頼性 (サプライチェーン・セキュリティ)

公式レジストリの確認:

申請するサーバーが以下の公式レジストリに登録されているか確認してください

  • はい、公式レジストリに登録されています。

    • 登録先:
      • https://mcp.azure.com/
      • https://github.com/mcp
    • サーバー定義URL: ``
  • いいえ、公式レジストリには登録されていません。 (社内製、サードパーティのオープンソースなど)

「いいえ」にチェックした場合

ソースコードリポジトリ:

https://github.com/cloudflare/mcp-server-cloudflare(Cloudflare 公式リポジトリ、apps/docs-vectorize サブフォルダ)

メンテナンス状況:

  • 活発にメンテナンスされている(直近3ヶ月以内にコミットあり)
  • メンテナンスが停止している(1年以上コミットなし)
  • 不明

最新リリース: 2025年11月(containers-mcp@0.2.9)、321コミット、30人以上のコントリビューター

脆弱性スキャン (SCA):

  • DependabotやSnykなどで脆弱性スキャンが設定されており、重大な脆弱性がないことを確認した
  • スキャン設定がない、または脆弱性が放置されている
  • 不明 / ソース非公開

Security policy が設定されている: https://github.com/cloudflare/mcp-server-cloudflare/security

3.2. 権限とアクセス制御 (最小権限の原則)

要求する権限:

  • 読み取り専用(情報取得、検索のみ)
  • 書き込み権限(Issue作成、ファイル編集、PR作成など)
  • その他(詳細: [機能説明]

提供ツール: search_cloudflare_documentation - Cloudflare ドキュメントの検索のみ

認証方式:

  • 認証不要(ローカル完結)
  • OAuth 2.0(推奨)
  • 個人アクセストークン (PAT) が必要

OAuth 認証フローを使用。ブラウザウィンドウが開き、Cloudflare アカウントでの認証を要求。

PATが必要な場合の詳細:

該当なし(OAuth 認証を使用)

3.3. データハンドリングとプライバシー

サーバーに送信されるデータ:

  • ユーザーが入力したプロンプトのみ
  • IDEで開いているファイルのコード(コンテキスト)
  • リポジトリ内の他ファイル(要検索時など)
  • その他(詳細: [データ内容]

ドキュメント検索クエリのみが送信される

外部へのデータ送信:

  • なし(すべての処理がローカルまたは社内ネットワークで完結する)
  • あり(以下の詳細を記載)
    • 送信先ドメイン/API: https://docs.mcp.cloudflare.com/mcp
    • 送信するデータの内容: ユーザーの検索クエリ(プロンプト)
    • 目的: Cloudflare ドキュメントに対するセマンティック検索を実行するため(Vectorize DB を使用)

データの保存:

  • 保存しない(セッション中のみメモリで保持)
  • 保存する(保存場所と目的を記載: [場所と目的]

CHANGELOG によると、v0.5.0 で「Moved Docs MCP server to be stateless for /mcp」と記載されており、ステートレスな設計

3.4. コードと運用のセキュリティ

プロンプトインジェクション対策:

  • サーバー側で入力値の検証やサニタイズ(無害化)が行われていることを確認した
  • 特に対策されていない、または不明

implementation-guides/tools.md に「Robust Error Handling」「Use Zod Validators」「Leverage Zod for input validation」などのベストプラクティスが記載されており、入力検証が実装されている

(ローカルサーバーの場合) ネットワークバインディング:

  • localhost のみにバインドされ、外部ネットワークに公開されないことを確認した
  • 0.0.0.0(全インターフェース)にバインドされる(高リスク
  • 不明 / 該当なし

リモート MCP サーバー(Cloudflare Workers でホスト)のため該当なし

#!/usr/bin/env node
/**
* MCP レジストリエンドポイント生成スクリプト
*
* mcp-registry.json から GitHub Pages 用の HTML ファイルを生成します。
*
* 生成されるエンドポイント:
* - GET /v0.1/servers (全サーバー一覧)
* - GET /v0.1/servers/{serverName}/versions/latest (最新バージョン)
* - GET /v0.1/servers/{serverName}/versions/{version} (特定バージョン)
*
* 使用方法:
* node scripts/generate-registry-endpoints.js
*/
const fs = require('fs');
const path = require('path');
const REGISTRY_FILE = path.join(__dirname, '..', 'mcp-registry.json');
const OUTPUT_BASE = path.join(__dirname, '..', 'docs', 'v0.1', 'servers');
/**
* packages プロパティを除外したサーバーエントリを返す
* @param {Object} serverEntry - サーバーエントリ
* @returns {Object} packages を除外したエントリ
*/
function removePackages(serverEntry) {
const { server, _meta } = serverEntry;
const { packages, ...serverWithoutPackages } = server;
return { server: serverWithoutPackages, _meta };
}
/**
* メイン処理
*/
function main() {
console.log('MCP レジストリエンドポイントを生成中...\n');
// 1. mcp-registry.json を読み込み
const registry = JSON.parse(fs.readFileSync(REGISTRY_FILE, 'utf-8'));
// 2. エンドポイント1: 全サーバー一覧 (GET /v0.1/servers)
const indexPath = path.join(OUTPUT_BASE, 'index.html');
fs.mkdirSync(path.dirname(indexPath), { recursive: true });
fs.writeFileSync(indexPath, JSON.stringify(registry));
console.log('✓ GET /v0.1/servers');
// 3. エンドポイント2 & 3: 各サーバーの個別ファイル
let count = 0;
for (const serverEntry of registry.servers) {
const serverName = serverEntry.server.name;
const version = serverEntry.server.version;
// packages を除外したデータを作成
const cleanedEntry = removePackages(serverEntry);
const jsonString = JSON.stringify(cleanedEntry);
const serverDir = path.join(OUTPUT_BASE, serverName, 'versions');
// エンドポイント2: latest 版 (GET /v0.1/servers/{serverName}/versions/latest)
const latestPath = path.join(serverDir, 'latest', 'index.html');
fs.mkdirSync(path.dirname(latestPath), { recursive: true });
fs.writeFileSync(latestPath, jsonString);
// エンドポイント3: バージョン指定版 (GET /v0.1/servers/{serverName}/versions/{version})
const versionPath = path.join(serverDir, version, 'index.html');
fs.mkdirSync(path.dirname(versionPath), { recursive: true });
fs.writeFileSync(versionPath, jsonString);
console.log(`✓ ${serverName} (v${version})`);
count++;
}
console.log(`\n✅ 完了: ${count}個のサーバーを処理しました`);
console.log(` 合計: ${1 + count * 2}個のHTMLファイルを生成`);
}
// スクリプト実行
main();
{
"metadata": {
"count": 1
},
"servers": [
{
"server": {
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"name": "com.github/github-mcp-server",
"version": "0.23.0",
"description": "リポジトリ、Issue、PR、Actionsなど全GitHub機能を自然言語で操作",
"title": "GitHub",
"icon": "https://avatars.githubusercontent.com/u/9919?s=200&v=4",
"repository": {
"url": "https://github.com/github/github-mcp-server",
"source": "github"
},
"remotes": [
{
"type": "sse",
"url": "https://api.githubcopilot.com/mcp/",
}
]
},
"_meta": {
"io.modelcontextprotocol.registry/official": {
"status": "active",
"publishedAt": "2025-11-28T00:00:00.000000Z",
"updatedAt": "2025-11-28T00:00:00.000000Z",
"isLatest": true
}
}
}
]
}

MCP Registry 設定ガイド

概要

MCP Registry は、Model Context Protocol (MCP) サーバーのディレクトリであり、IDE や Copilot のカタログとして機能します。 Enterprise または Organization 所有者は、MCP Registry URL とアクセス制御ポリシーを構成して、開発者が使用できる MCP サーバーを管理できます。

MCP Registry の JSON フォーマット

基本構造

MCP Registry は、公式スキーマに準拠した以下の構造の JSON 応答を返す必要があります。 参照: https://registry.modelcontextprotocol.io/docs#/operations/list-servers-v0.1

{
  "metadata": {
    "count": 2, // 登録したサーバーの総数
    "nextCursor": "server-name:version" // ページネーション用カーソル(オプション)
  },
  "servers": [
    {
      "server": {
        "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
        "name": "example.com/server-name", // 名前空間付きのサーバー名(例: "ai.example/my-server")
        "version": "1.0.0", // セマンティックバージョニング形式
        "description": "サーバーの説明",
        "repository": {
          "url": "https://github.com/org/repo",
          "source": "github",
          "subfolder": "path/to/server" // オプション: サブフォルダパス
        },
        // 以下のいずれかの配置方法を指定:
        // 1. packages配列: PyPI, npm, OCI等のパッケージレジストリから配布
        "packages": [
          {
            "registryType": "npm", // "npm", "pypi", "oci" など
            "registryBaseUrl": "https://registry.npmjs.org",
            "identifier": "package-name",
            "version": "1.0.0",
            "runtimeHint": "npx", // オプション: 実行時のヒント
            "transport": {
              "type": "stdio" // "stdio" または "sse"
            },
            "environmentVariables": [
              {
                "name": "API_KEY",
                "description": "APIキーの説明",
                "isRequired": true,
                "isSecret": true,
                "default": "default-value", // オプション
                "format": "string" // オプション
              }
            ]
          }
        ],
        // 2. remotes配列: リモートMCPサーバーとして配布
        "remotes": [
          {
            "type": "sse", // "sse" または "streamable-http"
            "url": "https://example.com/mcp",
            "headers": [
              // オプション: 追加HTTPヘッダー
              {
                "name": "Authorization",
                "description": "認証トークン",
                "value": "Bearer ${TOKEN}", // 環境変数参照可能
                "isSecret": true
              }
            ]
          }
        ]
      },
      "_meta": {
        "io.modelcontextprotocol.registry/official": {
          "status": "active", // "active" または "deprecated"
          "publishedAt": "2025-01-01T00:00:00.000000Z", // ISO 8601形式(マイクロ秒まで)
          "updatedAt": "2025-01-01T00:00:00.000000Z", // ISO 8601形式(マイクロ秒まで)
          "isLatest": true // 最新バージョンの場合はtrue
        }
      }
    }
  ]
}

必須フィールド

ルートレベル

  • metadata: レジストリのメタデータ
    • count: サーバーの総数(数値)
  • servers: サーバーエントリの配列

各サーバーエントリ

  • server: サーバー定義オブジェクト

    • $schema: スキーマ URL(https://static.modelcontextprotocol.io/schemas/YYYY-MM-DD/server.schema.json
    • name: 名前空間付きサーバー名(例: "ai.example/my-server"
    • version: セマンティックバージョン(例: "1.0.0"
    • description: サーバーの説明文
    • repository: リポジトリ情報(オプションだが推奨)
      • url: リポジトリ URL
      • source: ソース種別(例: "github"
    • 配置方法(以下のいずれか必須):
      • packages: パッケージレジストリからの配布
      • remotes: リモートサーバーとしての配布
  • _meta: メタデータオブジェクト

    • io.modelcontextprotocol.registry/official: 公式レジストリメタデータ
      • status: ステータス("active" または "deprecated"
      • publishedAt: 公開日時(ISO 8601 形式、マイクロ秒精度)
      • updatedAt: 更新日時(ISO 8601 形式、マイクロ秒精度)
      • isLatest: 最新バージョンフラグ(boolean)

オプションフィールド

  • metadata.nextCursor: ページネーション用の次ページカーソル
  • server.repository.subfolder: モノレポ内のサブフォルダパス
  • packages[].runtimeHint: 実行時のヒント(例: "npx", "uvx"
  • packages[].environmentVariables: 環境変数定義配列
  • remotes[].headers: カスタム HTTP ヘッダー配列

配置方法の選択

  1. packages を使用する場合: PyPI、npm、OCI 等のパッケージレジストリから配布

    • registryType: "npm", "pypi", "oci" など
    • transport.type: "stdio" または "sse"
  2. remotes を使用する場合: HTTP エンドポイント経由でリモートサーバーとして提供

    • type: "sse" または "streamable-http"
    • OAuth 認証等が必要な場合は headers でトークンを指定可能

公式 API 仕様 - プロパティ詳細

以下は、公式 MCP Registry API (list-servers-v0.1) のプロパティ定義です。 参照元: https://registry.modelcontextprotocol.io/docs#/operations/list-servers-v0.1

レスポンス構造

metadata (object, required)

ページネーションメタデータ

  • count (integer, required): 現在のページに含まれるアイテム数
  • nextCursor (string, optional): 次のページを取得するためのページネーションカーソル。次のリクエストのcursorクエリパラメータにこの値を使用する

servers (array[object] or null, required)

サーバーエントリのリスト

各サーバーエントリは以下の構造を持つ:

server (object, required)

サーバー設定とメタデータ

  • $schema (string, required): この server.json フォーマットの JSON Schema URI

    • 制約: 1 文字以上
    • 例: "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json"
  • name (string, required): リバース DNS 形式のサーバー名。名前空間とサーバー名を区切る 1 つのスラッシュを含む必要がある

    • 制約: 3-200 文字
    • パターン: ^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$
    • 例: "io.github.user/weather"
  • version (string, required): サーバーのバージョン文字列。セマンティックバージョニングに従うべき

    • 例: "1.0.2"
  • description (string, required): サーバー機能の明確で人間が読める説明

    • 制約: 1-100 文字
    • 例: "MCP server providing weather data and forecasts via OpenWeatherMap API"
  • title (string, optional): MCP サーバーの人間が読めるタイトルまたは表示名

    • 制約: 1-100 文字
    • 例: "Weather API"
  • websiteUrl (string, optional): サーバーのホームページ、ドキュメント、またはプロジェクトウェブサイトの URL

    • 例: "https://modelcontextprotocol.io/examples"
  • icon (string, optional): サーバーを視覚的に識別するためのアイコン画像 URL

    • 推奨: GitHub organization のアバター画像 URL(例: "https://avatars.githubusercontent.com/u/124619424?s=200&v=4"
    • 形式: PNG, SVG などの画像形式
    • 例: "https://avatars.githubusercontent.com/u/124619424?s=200&v=4"
  • repository (object, optional): MCP サーバーソースコードのリポジトリメタデータ

    • url (string, required): リポジトリ URL
      • 例: "https://github.com/modelcontextprotocol/servers"
    • source (string, required): ソースの種類
      • 例: "github"
    • subfolder (string, optional): モノレポ内のサブフォルダパス
      • 例: "src/everything"
    • id (string, optional): リポジトリのユニーク ID
      • 例: "b94b5f7e-c7c6-d760-2c78-a5e9b8a5b8c9"
  • icons (array[object] or null, optional): クライアントが UI に表示できるサイズ付きアイコンのセット

    • 各アイコンオブジェクト:
      • src (string, required): アイコン画像の URL
        • 例: "https://example.com/icon.png"
      • mimeType (string, required): アイコンの MIME タイプ
        • 例: "image/png"
      • sizes (array[string], optional): アイコンサイズのリスト
      • theme (string, optional): テーマ指定 ("light", "dark", etc.)
  • packages (array[object] or null, optional): パッケージ設定の配列

    • registryType (string, required): パッケージレジストリの種類
      • 値: "npm", "pypi", "oci" など
      • 例: "npm"
    • registryBaseUrl (string, optional): レジストリのベース URL
      • 例: "https://registry.npmjs.org"
    • identifier (string, required): パッケージ識別子
      • 例: "@modelcontextprotocol/server-brave-search"
    • version (string, required): パッケージバージョン
      • 例: "1.0.2"
    • runtimeHint (string, optional): 実行時のヒント
      • 例: "npx"
    • fileSha256 (string, optional): パッケージファイルの SHA256 ハッシュ
      • 例: "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce"
    • transport (object, required): トランスポート設定
      • type (string, required): トランスポートタイプ ("stdio" または "sse")
      • url (string, optional): トランスポート URL
      • headers (array[object], optional): カスタム HTTP ヘッダー配列
    • environmentVariables (array[object], optional): 環境変数定義の配列
    • packageArguments (array[object], optional): パッケージ引数の配列
    • runtimeArguments (array[object], optional): ランタイム引数の配列
  • remotes (array[object] or null, optional): リモート設定の配列

    • type (string, required): リモートタイプ ("stdio", "sse", "streamable-http")
    • url (string, required): リモートエンドポイント URL
      • 例: "https://api.example.com/mcp"
    • headers (array[object], optional): カスタム HTTP ヘッダー配列
  • _meta (object, optional): リバース DNS 名前空間を使用したベンダー固有データの拡張メタデータ

_meta (object, required)

レジストリ管理メタデータ

  • io.modelcontextprotocol.registry/official (object, optional): 公式 MCP レジストリメタデータ
    • status (string, required): サーバーのライフサイクルステータス
      • 許可値: "active", "deprecated", "deleted"
    • publishedAt (string, required): サーバーがレジストリに初めて公開されたタイムスタンプ
      • 形式: ISO 8601 (RFC3339)
      • 例: "2019-08-24T14:15:22Z"
    • updatedAt (string, optional): サーバーエントリが最後に更新されたタイムスタンプ
      • 形式: ISO 8601 (RFC3339)
      • 例: "2019-08-24T14:15:22Z"
    • isLatest (boolean, required): これがサーバーの最新バージョンかどうか

クエリパラメータ

  • cursor (string, optional): ページネーションカーソル

    • 例: "server-cursor-123"
  • limit (integer, optional): 1 ページあたりのアイテム数

    • 制約: 1-100
    • デフォルト: 30
    • 例: 50
  • search (string, optional): 名前でサーバーを検索 (部分文字列マッチ)

    • 例: "filesystem"
  • updated_since (string, optional): 指定されたタイムスタンプ以降に更新されたサーバーをフィルタ (RFC3339 datetime)

    • 例: "2025-08-07T13:15:04.280Z"
  • version (string, optional): バージョンでフィルタ (最新版は'latest'、または'1.2.3'のような正確なバージョン)

    • 例: "latest"

このリポジトリでの運用方法

このリポジトリでは MCP Registry の管理を行っています。

Registry ファイルの管理

  • ファイルパス: docs/registry.json
  • 公開方法: GitHub Pages にて自動公開
  • 更新方法: ユーザーから MCP サーバーの追加・更新・削除の指示があった場合は、docs/registry.json を直接編集してください

更新時の注意点

  1. JSON フォーマットに従って正確に記述する

    • 公式スキーマ(https://static.modelcontextprotocol.io/schemas/YYYY-MM-DD/server.schema.json)に準拠すること
  2. metadata.count を更新する

    • レジストリ内の全サーバーバージョンの総数に合わせる(最新版のみでなく全バージョンを含む)
  3. サーバー名は名前空間付きで記述する

    • 形式: "組織ドメイン/サーバー名" (例: "ai.example/my-server", "com.github/awesome-server"
    • 一意性を保つため、ドメインベースの命名規則を推奨
  4. 必須フィールドを必ず含める

    • server.$schema: スキーマ URL
    • server.name: 名前空間付きサーバー名
    • server.version: セマンティックバージョン
    • server.description: サーバーの説明
    • server.packages または server.remotes: 配置方法(いずれか必須)
    • _meta.io.modelcontextprotocol.registry/official: 公式メタデータ
  5. 日時は ISO 8601 形式(マイクロ秒精度)で記述する

    • 形式: "YYYY-MM-DDTHH:mm:ss.ffffffZ"
    • 例: "2025-11-27T10:30:45.123456Z"
    • publishedAt: 新規追加時の日付
    • updatedAt: 更新時の日付
  6. リポジトリ情報を可能な限り含める

    • repository.url: GitHub リポジトリ URL
    • repository.source: "github" など
    • repository.subfolder: モノレポの場合はサブフォルダパス
  7. アイコンを設定する(推奨)

    • server.icon: サーバーのアイコン画像 URL を指定
    • 推奨: GitHub organization のアバター画像 URL を使用
      • 形式: "https://avatars.githubusercontent.com/u/{org_id}?s=200&v=4"
    • Organization ID の確認方法:
      • GitHub organization ページの URL から取得
      • または GitHub API を使用: https://api.github.com/orgs/{org_name}
    • 例: Model Context Protocol の場合
      • "icon": "https://avatars.githubusercontent.com/u/124619424?s=200&v=4"
  8. 配置方法(packages または remotes)を適切に選択する

    • packages: PyPI、npm、OCI 等のパッケージレジストリから配布する場合
      • registryType, identifier, version, transport を指定
      • 環境変数が必要な場合は environmentVariables を定義
    • remotes: HTTP エンドポイント経由でサービスとして提供する場合
      • type ("sse" または "streamable-http") と url を指定
      • 認証が必要な場合は headers を定義
  9. バージョン管理の注意点

    • 同じサーバーの複数バージョンを登録可能
    • 最新バージョンのみ _meta.io.modelcontextprotocol.registry/official.isLatesttrue に設定
    • 古いバージョンは false に設定
  10. docs/mcp-registry.md の更新

  • docs/registry.json を更新した後、必ず docs/mcp-registry.md のサーバー一覧テーブルも更新する
  • テーブルフォーマット: | 名前 | 説明 |
  • 名前カラムには server.repository.url へのリンクを設定: [server.name](repository.url)
  • 説明カラムには server.description の内容をそのまま記載
  • 最新バージョンのみをテーブルに含める(isLatest: true のもの)

セキュリティサーベイの実行

MCP Registry の更新作業が完了した後、追加された MCP サーバーのセキュリティ評価を実施してください。

実行手順:

  1. .github/prompts/mcp-security-servey.prompt.md に記載された指示に従う
  2. 追加された MCP サーバー名を入力として使用
  3. セキュリティサーベイを実施し、PR Template を埋めた markdown file を repository root に生成し、保存する

詳細な指示については、.github/prompts/mcp-security-servey.prompt.md を参照してください。

【プロンプト】MCP サーバー セキュリティサーベイ自律実行

あなたは「DevSecOps アナリスト AI」です。

タスク

新しく申請された MCP サーバーの名称(例: oraios/serena)を基に、.github/PULL_REQUEST_TEMPLATE/mcp.md ファイルに定義されているセキュリティテンプレートの全項目を自律的に調査し、その調査結果(ファクト)でテンプレートを埋めてください。

入力: [MCPサーバー名](例: oraios/serena
出力: .github/PULL_REQUEST_TEMPLATE/mcp.md の形式に完全準拠した、記入済みの Pull Request テンプレート

調査の原則

  1. 情報源: 公開情報(GitHub リポジトリ、公式ドキュメント、セキュリティ関連の公開議論、NPM/PyPI などのパッケージレジストリ)のみを使用
  2. 調査範囲: コードの静的解析(SAST)は行わない
  3. 記述方針: すべての調査結果はファクトベースで記載し、推測する場合は明示的に「推測」と記載
  4. テンプレート遵守: .github/PULL_REQUEST_TEMPLATE/mcp.md の構造を一切変更せず、調査結果のみを適切な箇所に記入

調査の進め方

基本調査手順

  1. テンプレートの読み込み: まず .github/PULL_REQUEST_TEMPLATE/mcp.md を読み、すべての項目を理解する
  2. 情報収集: 対象サーバーについて、以下のソースから情報を収集:
    • 公式レジストリ(https://github.com/modelcontextprotocol/servers, https://github.com/mcp, https://mcp.azure.com/
    • ソースコードリポジトリ(GitHub/GitLab 等)
    • 公式ドキュメント
    • Issues, Discussions, Pull Requests
    • セキュリティ関連ファイル(SECURITY.md, dependabot.yml 等)
  3. テンプレートへの記入: 収集した情報を基に、テンプレートの各項目を埋める
  4. 検証: すべての必須項目が記入されていることを確認

セクション別の調査ポイント

1. 申請サーバーの概要

  • サーバーの主目的、提供機能、解決する課題を把握
  • 開発ワークフローへの貢献を具体的に記述

2.1. 出所と信頼性

  • 公式レジストリへの登録状況を確認
  • ソースコードの入手可能性
  • メンテナンス活動(最新コミット日、Issue/PR の活動状況)
  • 脆弱性管理体制(SECURITY.md, Dependabot, セキュリティバッジ等)

2.2. 権限とアクセス制御

  • サーバーが要求する権限の種類(読み取り/書き込み/その他)
  • 認証方式(不要/OAuth/PAT)
  • PAT が必要な場合のスコープと管理方法

2.3. データハンドリングとプライバシー

  • サーバーに送信されるデータの種類
  • 外部 API へのデータ送信の有無と詳細
  • データの永続化の有無と保存場所

2.4. コードと運用のセキュリティ

  • プロンプトインジェクション対策の実装状況
  • ネットワークバインディングの設定(特にローカルサーバーの場合)

重要な注意事項

  • テンプレートは .github/PULL_REQUEST_TEMPLATE/mcp.md ファイルを参照すること
  • チェックボックスの扱い: 該当する項目に [x] でチェックを入れる
  • 情報源の明記:
    • Issue/Pull Request/Discussion を参照する場合は必ず完全な URL を記載すること
    • 形式: [#123](https://github.com/owner/repo/issues/123) または Issue #123: https://github.com/owner/repo/issues/123
    • 単に「Issue #123」や「Discussion #456」のような番号のみの記載は不可
    • その他の情報源(ドキュメント、セキュリティアドバイザリ等)も完全な URL を記載
  • セキュリティ懸念の強調: 重大なセキュリティ問題は太字で強調

これらの要要を遵守し、 .github/PULL_REQUEST_TEMPLATE/mcp.md の構造を一切変更せず、調査結果のみを適切な箇所に記入してください

1. 申請サーバーの概要

2. セキュリティリスク判定

総合的なセキュリティリスク評価:

  • 🟢 低リスク - ローカル完結型で外部通信なし、または十分なセキュリティ対策が確認されている
  • 🟡 中リスク - 制限付き外部通信または一部セキュリティ懸念があるが、適切に管理可能
  • 🔴 高リスク - 広範な権限要求、重大なセキュリティ懸念、または不十分なセキュリティ対策

判定理由:

3. セキュリティ・リスク自己評価

3.1. 出所と信頼性 (サプライチェーン・セキュリティ)

公式レジストリの確認:

申請するサーバーが以下の公式レジストリに登録されているか確認してください

  • はい、公式レジストリに登録されています。

    • 登録先:
      • https://mcp.azure.com/
      • https://github.com/mcp
    • サーバー定義URL: ``
  • いいえ、公式レジストリには登録されていません。 (社内製、サードパーティのオープンソースなど)

「いいえ」にチェックした場合

ソースコードリポジトリ:

メンテナンス状況:

  • 活発にメンテナンスされている(直近3ヶ月以内にコミットあり)
  • メンテナンスが停止している(1年以上コミットなし)
  • 不明

脆弱性スキャン (SCA):

  • DependabotやSnykなどで脆弱性スキャンが設定されており、重大な脆弱性がないことを確認した
  • スキャン設定がない、または脆弱性が放置されている
  • 不明 / ソース非公開

3.2. 権限とアクセス制御 (最小権限の原則)

要求する権限:

  • 読み取り専用(情報取得、検索のみ)
  • 書き込み権限(Issue作成、ファイル編集、PR作成など)
  • その他(詳細: [機能説明]

認証方式:

  • 認証不要(ローカル完結)
  • OAuth 2.0(推奨)
  • 個人アクセストークン (PAT) が必要

PATが必要な場合の詳細:

  • 必要なスコープ:
  • トークンの管理方法:

3.3. データハンドリングとプライバシー

サーバーに送信されるデータ:

  • ユーザーが入力したプロンプトのみ
  • IDEで開いているファイルのコード(コンテキスト)
  • リポジトリ内の他ファイル(要検索時など)
  • その他(詳細: [データ内容]

外部へのデータ送信:

  • なし(すべての処理がローカルまたは社内ネットワークで完結する)
  • あり(以下の詳細を記載)
    • 送信先ドメイン/API:
    • 送信するデータの内容:
    • 目的:

データの保存:

  • 保存しない(セッション中のみメモリで保持)
  • 保存する(保存場所と目的を記載: [場所と目的]

3.4. コードと運用のセキュリティ

プロンプトインジェクション対策:

  • サーバー側で入力値の検証やサニタイズ(無害化)が行われていることを確認した
  • 特に対策されていない、または不明

(ローカルサーバーの場合) ネットワークバインディング:

  • localhost のみにバインドされ、外部ネットワークに公開されないことを確認した
  • 0.0.0.0(全インターフェース)にバインドされる(高リスク
  • 不明 / 該当なし
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment