🤖

Model Context Protocol(MCP)とは?今更ながらその仕組みと可能性を探ってみた

に公開

AIを使っていて「もっと外部の情報を参照してくれたら」「このツールを使って作業してくれたら」と感じることありませんか。

ChatGPTやClaudeといった生成AIは驚くほど進化していますが、真の力を発揮するのは、外部システムと連携した時。
そんな連携を可能にするために登場したのが、Model Context Protocol(MCP)

今更ながらMCPに入門と使い方をざっくりまとめてみました。

MCPとは?AI界の「USB-Cポート」


Anthropicが2024年11月に発表したMCPは、「AI用のUSB-Cポート」と表現されるオープンプロトコル。

USB-Cがあらゆるデバイスを標準化されたインターフェースで接続できるように、MCPは生成AIモデルと様々なデータソースやツールを標準化された方法で接続することができます。

これにより、開発者は個別のAPI連携を繰り返す代わりに、MCPという単一のプロトコルを通じて多様なシステムと連携できるようになります。

MCPがもたらすメリット

  • 開発者: AIアプリケーションやエージェントの構築・統合にかかる時間と複雑さを軽減。
  • AIアプリケーション: データソース、ツール、アプリのエコシステムにアクセスできるようになり、AIの能力が向上し、エンドユーザーエクスペリエンスが改善。
  • エンドユーザー: より高性能なAIアプリケーションを利用でき、必要に応じてデータへのアクセスやアクションの実行をAIに依頼可能。

MCPの基本と主要機能

MCPは基本的にクライアント・サーバモデルに基づいており、以下のコンポーネントで構成されています。

  • MCPホスト: 生成AIモデルを搭載したアプリケーション(例: Claude Code、Cursor)。
  • MCPクライアント: MCPホストに組み込まれ、MCPサーバとの通信を担当。
  • MCPサーバ: 特定のデータソースやツールへのアクセスを提供する軽量サーバ(例: ファイルシステム、データベース、外部API)。

通信はJSON-RPC 2.0プロトコルに基づき、標準入出力(stdio)またはHTTP with Server-Sent Events(SSE)トランスポートを通じて行われます。
MCPサーバがクライアントに提供する主な機能は以下の3つです。

  1. リソース: AIモデルが参照できるデータやコンテンツ(ファイル、データベースデータ、Gitリポジトリのコードなど)を提供します。
  2. ツール: AIモデルが実行できる関数やアクション(計算実行、外部API呼び出し、ファイル操作など)を提供します。
  3. プロンプト: AIモデルの応答を形作るテンプレート(AIの役割定義、コンテキスト付きの質問、マルチモーダル入力など)です。

https://zenn.dev/hachimada/articles/jsonrpc-basic

Claude CodeでリモートMCP連携を実践


AnthropicからClaude CodeがリモートMCPをサポートしたとの発表があり、私も早速試してみました。リモートMCPとは、MCPサーバがローカル環境ではなく、クラウドやリモートサーバ上で実行されているMCPサーバと接続する際の総称です。

リモートMCPの大きなメリットは、設定が簡単であること、アップデートの必要がないこと、そしてOAuthサポートによりクレデンシャルをローカルに持たなくて良いためセキュアであることです。

https://docs.anthropic.com/ja/docs/claude-code/overview

https://zenn.dev/hokuto_tech/articles/86d1edb33da61a

パブリックなリモートMCPサーバーを試す (の利用)

まずは、公開されているMCPサーバー「deepwiki」をClaude Codeに登録してみます。

claude mcp add --transport sse deepwiki https://mcp.deepwiki.com/sse

このコマンドを実行すると、~/.claude.json(または設定によっては~/.config/claude/.claude.json)に設定が書き込まれます。
次に、Claude Codeを起動し、テキストボックスに/mcpと入力して実行します。

$ claude
╭────────────────────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code !                                 │
│                                                            │
│ /help  for  help, /status  for  your current setup         │
│                                                            │
│ cwd: /Users/shuntaka/repos/github.com/shuntaka9576/memo    │
╰────────────────────────────────────────────────────────────╯
Tips  for  getting started:
1 . Run /init to create a CLAUDE.md  file  with instructions  for  Claude
2 . Use Claude to  help  with  file  analysis, editing,  bash  commands and  git
3 . Be as specific as you would with another engineer  for  the best results
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│  >  /mcp                                                                                                                                                                                                                    │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
/mcp Manage MCP servers

すると、接続されたMCPサーバーのリストが表示され、deepwikiが「connected」と表示されているのが確認できます。
deepwikiを選択すると、このMCPが提供するツール(read_wiki_structure、read_wiki_contents、ask_questionなど)が確認できます。
実践:リポジトリの概要を質問してみる
Claude Codeのplanモードで、「https://github.com/vercel/ai このリポジトリの概要を教えてください」と質問してみました。

deepwiki - read_wiki_contents (MCP)(repoName: "vercel/ai")
  ⎿  # Page: Overview

Claudeはvercel/aiリポジトリの概要を調査し、deepwiki:read_wiki_structureとdeepwiki:ask_questionツールを利用しました。read_wiki_contentsツールはトークン数が多すぎてエラーになりましたが、ask_questionツールは正常に動作し、Vercel AI SDKの概要を詳細にまとめてくれました。

主な特徴:

  1. 統合プロバイダーシステム

  -
  20以上のAIプロバイダー(OpenAI、Anthropic、Google、Mistral等)を一貫したAPIで使用可能      
  - プロバイダー切り替えがコード変更なしで可能
  - 自動フォールバック機能とロードバランシング

  2. フレームワーク横断サポート

  - React: useChat() フックによる宣言的チャットインターface
  - Vue/Nuxt: Chat クラスによるリアクティブな統合
  - Svelte: Svelte 5の $state runes対応
  - Angular: サービス指向アーキテクチャとRxJS統合

  3. コア機能

  - テキスト生成: generateText() / streamText()
  - 構造化データ: generateObject() / streamObject()
  - ツール呼び出し: 外部関数実行とマルチステップワークフロー
  - リアルタイムストリーミング: サーバーサイドイベントによる応答

  4. 高度な機能

  - プロバイダー定義ツール: Anthropic Computer Use、OpenAI検索等
  - 推論サポート: Claude 4、o1モデル対応
  - マルチモーダル: 画像・ファイル入力対応
  - カスタムデータストリーミング: UIメッセージと並行したデータ送信

  5. アーキテクチャ

  graph TB
      subgraph "アプリケーション層"
          UI["UIコンポーネント"]
          HOOKS["フレームワークフック"]
      end

      subgraph "AI SDK コア"
          CORE["generateText/streamText"]
          PROVIDERS["プロバイダー抽象化"]
          TRANSPORT["トランスポート層"]
      end

      subgraph "AIプロバイダー"
          OPENAI["OpenAI"]
          ANTHROPIC["Anthropic"]
          GOOGLE["Google"]
      end

      UI --> HOOKS
      HOOKS --> CORE
      CORE --> PROVIDERS
      PROVIDERS --> OPENAI
      PROVIDERS --> ANTHROPIC
      PROVIDERS --> GOOGLE

  6. 開発ワークフロー

  - パッケージ管理: pnpm workspaceベースのモノレポ
  - ビルドシステム: Turboによる並列ビルド
  - バージョン管理: Changesetsによる自動化されたリリース
  - 品質保証: ESLint、Prettier、TypeScriptによる厳格な品質チェック

このように、Claude Codeが外部ツールを自律的に判断して利用することで、GitHubリポジトリの情報を取得し、要約して回答してくれることが分かります。
MCPサーバーを削除したい場合は、以下のコマンドを実行します。

claude mcp remove deepwiki

認証付きリモートMCPサーバーを試す (GitHub MCP)

次に、認証が必要なGitHub MCPサーバーとの連携を試しました。
mcpの設定を行う前にあらかじめGitHubのアクセストークを取得しておきます。

  1. GitHub右上のアイコン → Settings
  2. Developer settings → Personal access tokens → Tokens (classic)
  3. Generate new token (classic)
  4. 権限:repo (必須)

GitHub公式MCPサーバーはDockerで提供されています
https://docs.docker.com/get-started/get-docker/

.mcp.jsonに以下を追記し、claude codeからGitHub MCPサーバーを呼び出せるようにします。

{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ここにさっきのトークンを入れる"
      }
    }
  }
}

再度/mcpを実行すると、my-mcpがリストに表示されますが、最初は「未接続」の状態です。ここでmy-mcpを選択してEnterを押すと、認証フローが開始され、GitHub OAuth Appsでの承認プロセスを経て接続が完了しました。

実践:GitHubにcommit&pushしてみる

接続が完了した状態で、試しにREADMEを作成してpushさせてみました「このプロジェクトのREADMEを作成してpushして」と質問すると、無事に連携が確認され、GitHubプロファイルに関する情報をClaude Codeが取得・応答しました。

> このプロジェクトのREADMEを作成してpushして

● このプロジェクトのREADMEを作成してpushします。まず、現在のプロジェクト構造を確認してか     
  ら適切なREADMEを作成します。

● Update Todos
  ⎿  ☐ プロジェクト構造を確認
     ☐ main.pyの内容を確認
     ☐ README.mdを作成
     ☐ 変更をコミット
     ☐ リモートにpush
● Update Todos
  ⎿  ☒ プロジェクト構造を確認
     ☒ main.pyの内容を確認
     ☐ README.mdを作成
     ☐ 変更をコミット
     ☐ リモートにpush

● Write(README.md)
  ⎿  Wrote 1 lines to README.md
     # AWS S3 連携プロジェクト
     AWS S3 サービスとの連携を目的とした Python プロジェクトです。boto3
     ライブラリを使用して AWS リソースを操作します。
     ## 機能
     ### 1. S3 バケット管理 (`main.py`)
     - AWS S3 バケットの一覧取得
     - バケット名と作成日時の表示
     - 適切なエラーハンドリング

Bash command                                                                              │
│                                                                                           │
│   git add README.md                                                                       │
│   README.mdをステージングエリアに追加                                                     │
│                                                                                           │
│ Do you want to proceed?                                                                   │
│ ❯ 1. Yes                                                                                  │
│   2. Yes, and don't ask again for git add commands in                                     │
│   C:***                                                 │
│   3. No, and tell Claude what to do differently (esc)   

● Bash(git push origin master)
  ⎿  To github.com:***/***.git
        63df2d0..dc9245f  master -> master

● Update Todos
  ⎿  ☒ プロジェクト構造を確認
     ☒ main.pyの内容を確認
     ☒ README.mdを作成
     ☒ 変更をコミット
     ☒ リモートにpush

  コミットメッセージにも詳細な変更内容を記載し、正常にリモートリポジトリにプッシュできま     
  した。

このように、認証が必要な外部サービスに対しても、MCPとClaude Codeを連携させることで、AIがセキュアにアクセスし、情報を利用できるようになります。

Claude Codeで利用できる様々なMCPサーバー

「ドメイン駆動設計をはじめよう」の記事では、Claude Codeで利用できる様々なMCPサーバーが紹介されています。いくつか例を挙げると、

  • playwright: LLMでブラウザを操作できます。
  • markitdown-mcp: PDFやPPTXなどをマークダウン形式に変換します。
  • ArXiv MCP Server: ArXivの論文を調査、ダウンロード、マークダウン変換できます。
  • context7-mcp: ライブラリの最新バージョン仕様を取得し、AIが学習していない最新ライブラリに対応できます。
  • YouTube MCP Server: YouTubeにアクセスして字幕情報などを取得し、内容の要約や調査ができます。
    これらのMCPサーバーを適切に設定することで、Claude Codeはさらに幅広いタスクを実行できるようになります。

MCPサーバー設定のヒント

MCPサーバーの設定は、スコープによって保存場所が変わります。

  • local: 現在のプロジェクトでのみ利用可能。~/.claude.jsonに保存されます。
  • project: 現在のプロジェクトでのみ利用可能。プロジェクト直下の.mcp.jsonに保存されます。チームでの共有に便利です。
  • user: どこでも利用可能。~/.claude.jsonに保存されます。

個人的には、スコープをprojectに設定し、.mcp.jsonに設定するのが、管理もしやすく他のMCPホストとの互換性も高いためおすすめです。
登録されているMCPサーバーのリストはclaude mcp listで、削除はclaude mcp remove <サーバー名>で実行できます。

まとめ

MCPとClaude Codeの連携を試してみて、私は「本当の意味でAIが人間の代替として動いてくれるようになった」という印象を強く受けました。これまでの生成AIは人間が情報を与え、指示し、応答を基に人間が作業する、という繰り返しでしたが、MCPによってAIが自律的に外部システムと連携し、情報を取得・操作できるようになったことで、人間の単純作業はさらに減少し、人間にしかできない作業に集中できるようになります。

また、公開されているMCPサーバーは、GitHubリポジトリに書かれたコマンドを実行するだけで簡単に利用開始でき、AIがツールの選択や操作を自律的に行うため、導入障壁が低いのも大きな利点です。

また気になるmcpが出たら色々使ってみたいと思います。

Discussion