Claude Codeに自作MCPサーバー(Python)を接続する最小手順と「3大障害」の回避法【2026年最新】

ソフトウェア開発におけるAIの役割は、単なる「コード生成アシスタント」から、自律的にタスクを遂行する「エージェント」へと進化を遂げています。その最前線に位置するのが、Anthropicの提供する「Claude Code」です。

このClaude Codeの真価を引き出し、開発効率を飛躍的に高めるためのアプローチが、**「自作MCP(Model Context Protocol)サーバーの接続」**です。

「自作のPythonスクリプトやローカルデータベース、あるいは独自のファイル操作処理をClaudeに直接実行させたい」と考えたことはないでしょうか。Pythonの豊富なライブラリを活用すれば、極めてシンプルな構成で独自のMCPサーバーを構築可能です。しかし、いざ接続を試みると、**「Claudeがツールを認識しない」「エラーを吐かずにプロセスがハングアップする」**といった特有のトラブルに直面することになります。

本記事では、Pythonを用いて最小構成のMCPサーバーを構築し、stdio(標準入出力)接続でClaude Codeへ統合する最短手順を解説します。あわせて、実装時に必ずと言っていいほど直面する「3つの罠」とその回避策について、技術的な背景を踏まえて徹底解説します。

編集長テックウォッチの目:
Claude Codeの真価は、ローカルエージェントとして動作する点にあります。GitHub Copilotなど他のAIアシスタントが「エディタの中」に閉じているのに対し、Claude CodeはMCPを介して「あなたのPC全体の支配権」を持ちます。独自のPythonスクリプトをMCP化することは、Claudeにあなた専用の「カスタム手足」を与えることと同じです。一度この自作連携を体験すると、もう二度と通常のチャットAIには戻れなくなりますよ!

1. 最小構成:PythonによるMCPサーバーの構築

MCP(Model Context Protocol)は、AIモデルと外部のデータソースやツールを安全かつ効率的に接続するためのオープン標準プロトコルです。いわば、**AIという「頭脳」と、ローカル環境という「実世界」を結ぶ「神経系」**の役割を果たします。

まずは、最もシンプルな例として「指定したディレクトリのディスク空き容量を返す」ツールを内包したMCPサーバーを、Pythonの「FastMCP」ライブラリを用いて実装します。

必要なライブラリのインストール

Python 3.10以降がインストールされた環境で、MCPサーバーを迅速に構築するためのフレームワーク fastmcp を導入します。

pip install fastmcp

サーバーコード(server.py)の実装

fastmcp を使用すると、標準のPython関数にデコレータを付与するだけで、Claudeが理解・実行可能な「ツール」へと自動的に変換されます。

# server.py
import shutil
from fastmcp import FastMCP

# MCPサーバーのインスタンスを初期化
mcp = FastMCP("DiskHelper")

@mcp.tool()
def get_disk_usage(path: str = ".") -> str:
    """指定されたパスのディスク使用状況(容量・空きスペース)を取得します。"""
    total, used, free = shutil.disk_usage(path)
    gb = 1024 ** 3
    return f"Total: {total/gb:.2f}GB, Used: {used/gb:.2f}GB, Free: {free/gb:.2f}GB"

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

このわずか数行のコードにより、標準入出力(stdio)をトランスポート層として用いる、仕様に準拠したMCPサーバーが完成します。


2. Claude Codeへの接続設定と統合

作成したMCPサーバーをClaude Codeに認識させるには、クライアント側の設定ファイル(通常は ~/.config/claude/claude_config.json)にサーバーの定義を追加する必要があります。

設定ファイルの mcpServers セクションに、以下の構成を記述します。

{
  "mcpServers": {
    "disk-helper": {
      "command": "python",
      "args": [
        "-u",
        "/absolute/path/to/server.py"
      ]
    }
  }
}

※注意:server.py へのパスは、相対パスではなく必ず絶対パスで指定してください。

接続の検証

設定を保存後、ターミナルからClaude Codeを起動します。

claude

対話型インターフェースが起動したら、「現在のディスク空き容量を調べて」と指示を与えます。Claude Codeが自動的に get_disk_usage ツールを選択・実行し、ローカルのディスク情報を正確に返答すれば、統合は成功です。


3. 実装プロセスにおいて回避すべき「3つの技術的罠」

一見シンプルに見える統合プロセスですが、実際の開発現場では、プロトコルの仕様や環境差異に起因する深刻なトラブルに直面することが少なくありません。特に注意すべき「3つの罠」とその詳細なメカニズム、回避策を解説します。

💡 罠1:標準出力(stdout)の衝突によるプロトコルの破壊

MCPのstdio(標準入出力)トランスポートは、Claude CodeとMCPサーバー間でJSON-RPC 2.0形式のメッセージを受け渡します。この通信経路において、Pythonコード内でデバッグ目的などで安易に print() を実行すると、JSON-RPCのフレーム外の文字列が標準出力に混入し、プロトコルエラー(パース不可)となって通信が即座に遮断されます。

  • 技術的対策: デバッグログや進捗状況を出力したい場合は、標準出力ではなく**標準エラー出力(stderr)**を使用します。Pythonの logging ライブラリを適切に設定し、出力先をエラー出力に限定することが不可欠です。
import sys
# 標準エラー出力へ直接書き出すことで通信への影響を防ぐ
print("Debug: process started", file=sys.stderr)

💡 罠2:I/Oバッファリングによる応答停止(ハングアップ)

Pythonはデフォルトで、標準出力への書き込みを効率化するためにバッファリング(一時的なデータの蓄積)を行います。しかし、リアルタイムの双方向通信が求められるMCPにおいて、レスポンスがバッファに滞留することは、Claude Codeから見れば「応答停止(タイムアウト)」を意味します。

  • 技術的対策: Pythonプロセスを起動する際、-u オプション(Unbuffered I/Oモード)を明示的に付与します。これによりバッファリングが無効化され、データが書き込まれた瞬間にClaude Codeへフラッシュされます。前述の設定ファイルにおける "args": ["-u", ...] という記述は、この同期ズレを防ぐための必須の措置です。

💡 罠3:仮想環境(Virtual Environment)における実行コンテキストの乖離

多くのプロジェクトでは、venvpoetry を用いてライブラリの依存関係を分離しています。しかし、Claude Codeの設定ファイルに単純に "command": "python" と記述すると、システムのグローバル環境に存在するPythonインタープリタが呼び出されます。その結果、仮想環境内にのみインストールされている fastmcp やその他の依存ライブラリをロードできず、ImportError で起動に失敗します。

  • 技術的対策: 設定ファイルの command パラメータには、システム共通のコマンドパスではなく、対象プロジェクトの仮想環境内に存在するPythonバイナリの絶対パスを直接指定します。
"command": "/Users/username/projects/my-mcp-tool/.venv/bin/python"

4. アーキテクチャ比較:Python (FastMCP) vs TypeScript (MCP SDK)

MCPサーバーの公式SDKは、PythonとTypeScript(Node.js)の双方で提供されています。自作ツールを開発するにあたり、どちらを採用すべきか、そのトレードオフを整理しました。

評価軸Python (FastMCP)TypeScript (MCP SDK)
開発スピード(学習コスト)極めて優秀(デコレータによる容易な宣言)標準的(ボイラープレートコードが多め)
エコシステム(AI/データ処理)圧倒的(Pandas、NumPy、LLM統合が容易)限定的(Web APIや既存Node資産の活用には強み)
起動パフォーマンス標準的高速(Node.jsのイベントループによる俊敏性)
推奨ユースケースローカル開発自動化、データパイプライン構築プロダクション環境、WebサービスとのAPI連携

開発生産性と、データ処理・AI処理への親和性を重視するローカルの自動化用途においては、Python(FastMCP)を選択するのが最も合理的かつ強力なアプローチであると言えます。


FAQ:よくある疑問とトラブルシューティング

Q. Claude Codeが自作のツールを正常に読み込めているかを確認するには? A. Claude Codeのセッション中に /tools コマンドを実行することで、現在アクティブなツールの一覧とスキーマ定義を確認できます。ここに自作ツールの名前が表示されていれば、登録は正常に完了しています。

Q. ローカル実行におけるセキュリティ上のリスクは? A. MCPサーバーを介して、Claude Codeは実質的に任意のシステム操作を実行可能になります。予期せぬファイル削除やコマンド実行を防ぐため、ツール側での入力値バリデーション(サニタイズ)を徹底すること、および破壊的な操作を実行するツールのプロンプト設計には細心の注意を払うことが重要です。

Q. 関数の引数において型エラーが発生する。 A. FastMCPは、Pythonの「型ヒント(Type Hints)」をメタデータに変換してClaudeに受け渡します。関数のシグネチャ(例: path: str)に型ヒントが欠落していると、型情報の推論に失敗しエラーとなるため、明示的な型定義を徹底してください。


まとめ:AIエージェントを自社ワークフローに最適化する

Claude Codeと自作Python MCPサーバーの連携は、単なるツールの追加に留まりません。それは、これまで人間の手作業で行っていたローカル環境での作業(ファイル操作、ローカルAPIの呼び出し、テスト実行、ログ解析)を、AIに「自律実行」させるためのチャネルを確立することを意味します。

stdio接続特有の挙動(標準出力のバッファリングや、競合の回避)さえ正しくコントロールできれば、開発効率の向上幅は計り知れません。本記事で示した最小構成を起点に、自身の開発プロセスに最適化した「カスタム・エージェント」を構築し、次世代の生産性を手に入れてください。