Claude マニュアル

MCP ガイド — Claude に外部ツールをつなげる

最終確認日: 2026年3月24日 / MCP SDK: Python 1.x, TypeScript 1.x / Claude Desktop 最新版

Claude は標準状態でも高度な会話能力を持っていますが、「社内のデータベースを参照する」「GitHub のリポジトリを操作する」「ファイルシステムを読み書きする」といった外部との連携は、そのままでは行えません。

MCP(Model Context Protocol) はこの問題を解決するオープン標準です。USB-C ポートがさまざまなデバイスを同じ規格で接続できるように、MCP は AI アプリケーションとあらゆる外部システムを標準化された方法でつなぎます。

このガイドでは、MCP の仕組みを理解したうえで、実際に Claude Desktop や Claude Code へ MCP サーバーを接続する手順を解説します。


MCP とは — アーキテクチャの全体像

3つの役割を理解する

MCP のエコシステムは ホスト / クライアント / サーバー という3つの役割で構成されます。

役割説明
ホストAI モデルを実行し、MCP クライアントを内包するアプリケーションClaude Desktop, Claude Code
クライアントホスト内でサーバーとの通信を担うコンポーネントホストに内蔵(1サーバーにつき1クライアント)
サーバー外部システムへのアクセスを提供する軽量プロセスFilesystem サーバー、GitHub サーバー等
Claude Desktop(ホスト)
  ├── MCP クライアント A  ←→  Filesystem サーバー(ローカルファイル)
  ├── MCP クライアント B  ←→  GitHub サーバー(GitHub API)
  └── MCP クライアント C  ←→  Slack サーバー(Slack API)

ホストは複数の MCP サーバーを同時に利用できます。Claude Desktop でファイルを読みながら GitHub を操作する、といったことも1つの会話の中でシームレスに行えます。

MCP サーバーが提供できる3種類の機能

MCP サーバーはクライアントに対して次の3種類のリソースを公開できます。

種類説明
Resources(リソース)ファイルのように読み取れるデータファイル内容, DB レコード, API レスポンス
Tools(ツール)LLM が呼び出せる関数(ユーザー承認付き)ファイル書き込み, メール送信, コード実行
Prompts(プロンプト)再利用可能なプロンプトテンプレートレポート生成用テンプレート等

なぜ直接 API 呼び出しではなく MCP なのか

直接 API を呼び出す方法の問題点:

  • ツールごとに異なる認証方式・エラー処理・データ形式への対応が必要
  • LLM にツールの使い方を学習させるためのプロンプトエンジニアリングが複雑化
  • ツールを追加するたびにアプリケーション側のコード変更が必要

MCP を使う利点:

  • 標準化: すべてのサーバーが同じプロトコルで通信するため、一度書いた MCP クライアントはすべてのサーバーと互換
  • エコシステム: コミュニティが作った数百のサーバーをすぐに利用可能
  • セキュリティ: ホストはサーバーの機能(使えるツール、アクセスできるデータ)を明示的に制御できる

既成サーバーの利用 — すぐに使えるサーバー一覧

Anthropic とコミュニティが提供する MCP サーバーは github.com/modelcontextprotocol/servers にまとめられています。

Anthropic 公式が提供するサーバー

サーバー名機能用途例
Filesystemローカルファイルの読み書きコードレビュー、ドキュメント整理
GitHubリポジトリ・Issue・PR の操作コードレビュー補助、Issue 管理
GitLabGitLab プロジェクト操作CI/CD パイプライン確認
Google DriveDrive ファイルの検索・読取ドキュメント参照
Google Maps地図・場所情報の取得住所検索、ルート案内
Slackメッセージ送受信・チャンネル操作通知自動化
PostgreSQLPostgreSQL DB への読取専用アクセスデータ分析
SQLiteSQLite DB の読み書きローカルデータ管理
Puppeteerブラウザ自動操作Web スクレイピング、E2E テスト
FetchWeb ページの取得・変換公開 API の呼び出し
Memoryナレッジグラフによる記憶の永続化コンテキスト跨ぎの記憶
AWS KB RetrievalAWS Knowledge Base からの情報取得RAG 構築

コミュニティサーバーの探し方

公式の一覧以外にも、以下のリソースでサーバーを探せます。

  • modelcontextprotocol.io/servers — 公式カタログ
  • mcp.so — コミュニティが運営するサーバーディレクトリ
  • npm / PyPI — @modelcontextprotocol/server- で始まるパッケージ

つまづきポイント: 「どのサーバーを使えばいいかわからない」

まず用途から逆算してみてください。「ファイルを操作したい」→ Filesystem、「GitHub を使いたい」→ GitHub サーバーと対応は明快です。見つからない場合は npm で mcp server と検索するか、後述の自作サーバー入門を参照してください。


Claude Desktop での設定

Claude Desktop の MCP 設定は claude_desktop_config.json という JSON ファイルで管理します。

設定ファイルの場所

%APPDATA%\Claude\claude_desktop_config.json

エクスプローラーのアドレスバーに %APPDATA%\Claude\ と入力して開けます。

ファイルが存在しない場合は新規作成してください。

設定ファイルの基本構造

{
  "mcpServers": {
    "サーバー名": {
      "command": "実行コマンド",
      "args": ["引数1", "引数2"],
      "env": {
        "環境変数名": "値"
      }
    }
  }
}

mcpServers の中に、使いたいサーバーをキーとして並べます。キー名(例: "filesystem")は Claude の会話内でサーバーを識別する名前になります。

例1: Filesystem サーバー(ローカルファイル操作)

# まず npx でサーバーをインストール確認(初回は自動ダウンロード)
npx -y @modelcontextprotocol/server-filesystem --help

claude_desktop_config.json:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/yourname/Documents",
        "/Users/yourname/Projects"
      ]
    }
  }
}

args の最後に指定するパスが、Claude がアクセスできるディレクトリになります。複数指定可能です。セキュリティ上、必要最小限のディレクトリのみを指定することを推奨します。

例2: GitHub サーバー

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

GitHub の Personal Access Token は github.com/settings/tokens で発行します。必要なスコープは操作内容によって異なりますが、読み取りのみなら repo:read で十分です。

例3: 複数サーバーを同時に設定

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/yourname/Projects"
      ]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
      }
    },
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    }
  }
}

設定を保存後、Claude Desktop を完全に再起動する必要があります。再起動後、チャット画面の入力欄にハンマーアイコン(🔨)が表示されれば MCP サーバーが認識されています。

つまづきポイント: ハンマーアイコンが表示されない

  1. JSON の構文エラーがないか確認(カンマの有無、括弧の対応など)
  2. command のパス(npx, uvx, node 等)が正しいか確認。which npx でフルパスを調べて指定するとよい場合があります
  3. Claude Desktop を Dock から完全に終了し、再起動する
  4. macOS では ~/Library/Logs/Claude/ にログファイルがあり、エラー内容を確認できます

Claude Code での設定

Claude Code では、プロジェクトのルートディレクトリに .mcp.json ファイルを置くことでプロジェクト単位の MCP 設定が可能です。この設定をリポジトリにコミットすれば、チーム全員が同じ MCP 環境を共有できます。

.mcp.json の構造

.mcp.json の構造は Claude Desktop の claude_desktop_config.json と同じ形式です。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "."
      ]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}

"." を指定すると、現在のプロジェクトルートを対象にできます。環境変数は ${ENV_VAR_NAME} の形式で参照可能です。実際の値は .env ファイルや CI/CD の環境変数として管理し、.mcp.json 自体にシークレットを書かないようにしましょう。

claude mcp コマンドによる管理

Claude Code では claude mcp コマンドで MCP サーバーを管理できます。

# 登録済みの MCP サーバー一覧を表示
claude mcp list

# MCP サーバーを追加(プロジェクトスコープ)
claude mcp add filesystem npx -- -y @modelcontextprotocol/server-filesystem .

# MCP サーバーを追加(グローバルスコープ)
claude mcp add --scope global github npx -- -y @modelcontextprotocol/server-github

# サーバーの詳細を確認
claude mcp get filesystem

# サーバーを削除
claude mcp remove filesystem

スコープについて:

スコープ設定ファイルの場所適用範囲
project(デフォルト).mcp.json(プロジェクトルート)そのプロジェクトのみ
local~/.config/claude/mcp.jsonローカルマシン全体
globalグローバル設定ファイル全プロジェクト

Claude Code での動作確認

Claude Code セッション内で /mcp スラッシュコマンドを使うと、接続中の MCP サーバーの状態を確認できます。

/mcp

ツールが正しく読み込まれていれば、利用可能なツール一覧が表示されます。

つまづきポイント: .mcp.json を追加したのにツールが使われない

Claude Code は起動時に .mcp.json を読み込みます。ファイルを追加・変更した後は、Claude Code のセッションを /exit で終了し、再起動してください。/mcp コマンドで接続状態を確認できます。


自作サーバー入門

既成のサーバーで対応できない場合は、自分で MCP サーバーを作れます。MCP SDK は TypeScript と Python の両方で提供されています。

TypeScript で作る最小限のサーバー

前提条件: Node.js 18 以上

mkdir my-mcp-server
cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk zod
npm install --save-dev typescript @types/node
npx tsc --init

src/index.ts:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

// サーバーのインスタンスを作成
const server = new McpServer({
  name: "my-server",
  version: "1.0.0",
});

// ツールを定義する
server.tool(
  "greet",
  "指定した名前に挨拶する",
  {
    name: z.string().describe("挨拶する相手の名前"),
  },
  async ({ name }) => {
    return {
      content: [
        {
          type: "text",
          text: `こんにちは、${name}さん!`,
        },
      ],
    };
  }
);

// サーバーを起動
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Server started"); // STDIO サーバーでは stderr に出力すること

重要: STDIO 通信を使うサーバーでは、console.log() は絶対に使わないでください。stdout に書き込むと JSON-RPC メッセージが壊れてサーバーが動作しなくなります。デバッグ出力は必ず console.error() を使って stderr に書き出してください。

package.json に build スクリプトを追加してビルドします。

npx tsc
node dist/index.js

Python で作る最小限のサーバー

前提条件: Python 3.10 以上、uv パッケージマネージャー

uv init my-mcp-server
cd my-mcp-server
uv add "mcp[cli]"

server.py:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-server")

@mcp.tool()
def greet(name: str) -> str:
    """指定した名前に挨拶する。

    Args:
        name: 挨拶する相手の名前
    """
    return f"こんにちは、{name}さん!"

if __name__ == "__main__":
    mcp.run(transport="stdio")
uv run server.py

自作サーバーを Claude Desktop に登録する

ビルド・動作確認ができたら、claude_desktop_config.json に追加します。

{
  "mcpServers": {
    "my-server": {
      "command": "node",
      "args": ["/絶対パス/my-mcp-server/dist/index.js"]
    }
  }
}

Python の場合:

{
  "mcpServers": {
    "my-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/絶対パス/my-mcp-server",
        "run",
        "server.py"
      ]
    }
  }
}

パスは必ず絶対パスで指定してください。相対パスは動作しません。


デバッグとトラブルシューティング

Claude Desktop のログを確認する

# ログフォルダを開く
explorer "$env:APPDATA\Claude\logs"

MCP Inspector でサーバーを単体テスト

サーバーをデプロイする前に、MCP Inspector という開発ツールで動作確認できます。

npx @modelcontextprotocol/inspector node dist/index.js

ブラウザが開き、サーバーのツール・リソース・プロンプトを GUI で確認・テストできます。

よくあるエラーと解決策

エラー原因解決策
ハンマーアイコンが表示されないJSON 構文エラー / サーバーの起動失敗ログを確認、JSON をバリデート
command not foundnpx / uv のパスが通っていないcommand にフルパスを指定(例: /usr/local/bin/npx
ツールは表示されるが実行でエラーサーバー側のロジックエラーInspector で単体テスト、stderr ログを確認
GITHUB_TOKEN が認識されない環境変数が渡されていない"env" フィールドに明示的に記載
サーバーがすぐ終了するstdout へのログ書き込み(STDIO の場合)console.logconsole.error に変更

つまづきポイント: Python の uv コマンドが見つからない

uv はまだ広く普及していないツールです。commanduv と書いただけでは macOS 上で見つからないことがあります。which uv でフルパスを確認し(例: /Users/yourname/.cargo/bin/uv)、そのフルパスを command フィールドに指定してください。


セキュリティの考慮事項

MCP は Claude の能力を大きく拡張しますが、それはリスクも伴います。本番環境での利用や他人が作ったサーバーを使う際には、以下の点に注意してください。

アクセス範囲を最小限にする

Filesystem サーバーを設定する際は、Claude がアクセスできるディレクトリを必要最小限にしてください。

// 悪い例: ホームディレクトリ全体へのアクセス
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname"]

// 良い例: 特定のプロジェクトディレクトリのみ
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/my-project/docs"]

API トークンの権限を絞る

GitHub トークン等は最小権限の原則に従い、必要なスコープのみを付与します。読み取り専用で十分な場合は書き込み権限を与えないでください。

信頼できるサーバーのみを使う

コミュニティが作った MCP サーバーを使う前に、以下を確認してください。

  • ソースコードが公開されているか(npm / PyPI からインストールする場合も、元のリポジトリを確認)
  • 実績のある開発者・組織が管理しているか
  • 必要以上のデータにアクセスしようとしていないか

環境変数にシークレットを書かない

.mcp.json はリポジトリにコミットされることが多いため、シークレット(API キー、トークン)を直接書かないようにします。

// 悪い例: トークンを直書き
"env": { "GITHUB_TOKEN": "ghp_abc123..." }

// 良い例: 環境変数参照
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }

実際のトークンは .env ファイル(.gitignore に追加)や CI/CD のシークレット管理で管理します。

ツール実行の承認フロー

MCP のツール(Tools)は、Claude が実行しようとすると Claude Desktop / Claude Code 上でユーザーに承認を求めるダイアログが表示されます(ホスト実装によります)。重要な操作(ファイル削除、外部サービスへの書き込み等)を自動承認しないよう、ホストの設定を確認してください。


次のステップ

MCP の基本を習得したら、以下のリソースで理解を深められます。