MCPサーバーの作り方|Python/TypeScriptで自作する手順

MCPサーバーの作り方|Python/TypeScriptで自作する手順のアイキャッチ画像

※ 本記事にはアフィリエイトリンクが含まれています。

claude code
AI開発支援
$0/月
無料プラン
$20〜
有料プラン
100万+
ユーザー数
主な機能
MCPサーバー
Python対応
TypeScript
コード生成
API連携
Good
高精度コード生成
多言語対応
詳細な説明
Note
利用制限あり
日本語精度
Python開発者
TypeScript開発者
AI開発初心者

MCPサーバーは、Claude Desktop等のAIアシスタントと外部システムを連携させるためのプロトコルサーバーです。PythonやTypeScriptを使って独自のMCPサーバーを構築することで、AIアシスタントに新しい機能やClaudecodeとの連携機能を追加できます。

この記事で分かること:

  • MCPプロトコルの基本概念と実装方法
  • PythonでのMCPサーバー構築手順
  • TypeScriptでの実装との違いと使い分け

MCPサーバーとは?

MCPサーバーは、Model Context Protocol(MCP)に基づいてAIアシスタントと外部サービスを連携させるためのサーバーアプリケーションです。 Anthropic社が2024年に公開したこのプロトコルは、Claude DesktopをはじめとするAIクライアントに新しい機能を追加するための標準的な仕組みとして注目を集めています。

従来、AIアシスタントに外部システムとの連携機能を追加するには、プラグインやカスタムAPIの開発が必要でした。MCPサーバーの最大の差別化ポイントは、標準化されたプロトコルを通じて任意の外部システムとの連携を簡単に実現できることです。

主な特徴:

  • 標準プロトコル:JSON-RPC 2.0ベースの統一された通信規格
  • 多言語対応:Python、TypeScript、Rustなどで実装可能
  • 非同期処理:Python asyncioやNode.js async/awaitに対応
  • 拡張性:カスタムツール、リソース、プロンプトの追加が可能
  • セキュリティ:サンドボックス化された実行環境での安全な連携

主要機能の詳細解説

ツール機能(Tools)

MCPサーバーの中核機能で、AIアシスタントが実行できるカスタム関数を定義できます。ファイル操作、API呼び出し、データベースアクセスなど、任意の処理をツールとして公開可能です。

例えば、社内システムのユーザー情報を取得するツールを作成すれば、「田中さんの連絡先を教えて」という質問に対して、AIが自動的に社内DBから情報を取得して回答できるようになります。PythonのFastAPIサーバーと組み合わせることで、複雑な業務ロジックもツール化できます。

リソース機能(Resources)

ファイル、データベース、API等の外部リソースへのアクセス機能を提供します。AIアシスタントが必要に応じてリソースの内容を参照し、コンテキストとして活用できます。

例えば、プロジェクトの設計書やマニュアルをリソースとして登録しておけば、AIが自動的に関連文書を参照して、より正確で具体的な回答を生成できます。Python asyncio を活用することで、大量のリソースへの非同期アクセスも効率的に処理できます。

プロンプト機能(Prompts)

再利用可能なプロンプトテンプレートを定義し、AIアシスタントが適切なタイミングで呼び出せる機能です。業務特有の質問パターンやレポート生成テンプレートを標準化できます。

例えば、週次レポート生成用のプロンプトを登録しておけば、「今週のレポートを作成して」という指示だけで、決まった形式の報告書を自動生成できます。MCPハンドラー関数を使ってプロンプトに動的パラメータを組み込むことも可能です。

サンプリング機能(Sampling)

AIアシスタントからのサンプリング要求を処理し、LLM推論の結果を他のMCPクライアントに提供する機能です。マルチエージェント環境での情報共有に活用できます。

例えば、複数のAIエージェントが協調して作業を進める際、一つのエージェントが生成した分析結果を、MCPサーバー経由で他のエージェントが参照できるようになります。

ロギング機能(Logging)

MCPサーバーとクライアント間の通信ログを記録・管理する機能です。デバッグやシステム監視、セキュリティ監査に不可欠な機能です。

例えば、本番環境でMCPサーバーを運用する際、どのツールがどの頻度で呼び出されているか、エラーが発生していないかを継続的に監視できます。Python標準のloggingモジュールと組み合わせて、詳細なログ分析も可能です。

料金プラン

MCPサーバー自体はオープンソースのプロトコルのため、基本的に無料で利用できます。ただし、実装や運用に関連するコストは以下の通りです:

項目内容費用目安こんな人向け
開発コストPythonやTypeScriptでの実装無料〜自社開発する場合
サーバー運用AWSやGCPでのホスティング月額$5〜$50本格運用する場合
Claude ProClaude Desktopでの利用月額$20高機能なMCP機能を使う場合
開発支援ツールIDEやモニタリングツール月額$10〜$30開発効率を重視する場合

開発環境の制約:

  • ローカル開発:完全無料(Python、Node.js環境があれば可能)
  • テスト用MCPクライアント:無料で利用可能
  • 商用利用:ライセンス制限なし(MIT License)

まずは無料のローカル開発環境から始めるのがおすすめです。 基本的な機能を試してから、本格運用時にクラウド環境を検討しましょう。

具体的な使い方・操作手順

実際にClaudecodeと連携するPython MCPサーバーを構築してみましょう。以下の手順で、基本的な機能を持つサーバーを作成できます。

1. 開発環境の準備

まずはPython環境とMCPライブラリをインストールします。Python 3.9以上が必要で、非同期処理に対応したasyncio環境を構築します。

pip install mcp anthropic-mcp-server

プロジェクトディレクトリを作成し、必要な設定ファイルも準備します。ここで適切なディレクトリ構造を作ることで、後の開発がスムーズになります。

Tip: 仮想環境(venv)を使用することで、他のプロジェクトとの依存関係の競合を避けられます。

2. 基本的なMCPサーバークラスの実装

MCPサーバーのコア機能を実装します。mcp.server.Serverクラスを継承し、必要なハンドラー関数を定義していきます。

from mcp import ClientSession, StdioServerParameters
from mcp.server import Server
import asyncio

app = Server("my-mcp-server")

@app.list_tools()
async def handle_list_tools():
    return [
        {
            "name": "calculate",
            "Description": "数値計算を実行",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "expression": {"type": "string"}
                }
            }
        }
    ]

この段階で、MCPプロトコルの基本的な通信機能が動作するようになります。

3. カスタムツール機能の追加

AIアシスタントが呼び出せるツール関数を実装します。Python FastAPIサーバーの知識があれば、同様の感覚でエンドポイント(ツール)を追加できます。

@app.call_tool()
async def handle_call_tool(name: str, arguments: dict):
    if name == "calculate":
        expression = arguments.get("expression")
        Try:
            result = eval(expression)  # 本番では安全な数式パーサーを使用
            return {"result": result}
        except Exception as e:
            return {"error": str(e)}

計算機能以外にも、ファイル操作、API呼び出し、データベースアクセスなど、業務に必要な機能をツールとして実装できます。

注意: eval()は本番環境では使用しないでください。安全な数式パーサーライブラリを使用しましょう。

4. リソースハンドラーの設定

外部データソースへのアクセス機能を追加します。ファイル、API、データベースなどのリソースを、AIが参照できるように設定します。

@app.list_resources()
async def handle_list_resources():
    return [
        {
            "uri": "file://docs/manual.txt",
            "name": "システムマニュアル",
            "description": "社内システムの操作マニュアル"
        }
    ]

@app.read_resource()
async def handle_read_resource(uri: str):
    if uri == "file://docs/manual.txt":
        with open("docs/manual.txt", "r") as f:
            content = f.read()
        return {"contents": [{"type": "text", "text": content}]}

Python asyncioを活用することで、複数のリソースへの同時アクセスも効率的に処理できます。

5. MCPクライアント接続の設定

Claude Desktopとの接続設定を行います。設定ファイル(claude_desktop_config.json)にMCPサーバーの情報を追加します。

{
  "mcpServers": {
    "my-python-server": {
      "command": "python",
      "args": ["server.py"],
      "env": {}
    }
  }
}

この設定により、Claude DesktopがMCPサーバーを自動的に検出し、利用可能なツールとして認識します。

6. サーバーの起動と動作確認

MCPサーバーを起動し、Claude Desktopからの接続を確認します。正常に接続されていれば、Claude内でカスタムツールが利用可能になります。

async def main():
    async with StdioServerParameters() as params:
        await app.run(params.read_stream, params.write_stream)

if __name__ == "__main__":
    asyncio.run(main())

Claude Desktopを再起動し、新しいツールが利用可能になっていることを確認します。「calculate機能を使って2+2を計算して」のような質問で動作テストを行いましょう。

Tip: ログレベルをDEBUGに設定しておくと、MCPクライアントとの通信状況を詳しく確認できます。

7. エラーハンドリングとロギングの実装

本格的な運用に向けて、エラーハンドリングとロギング機能を追加します。これにより、問題発生時の原因特定や運用監視が可能になります。

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

@app.call_tool()
async def handle_call_tool_with_logging(name: str, arguments: dict):
    logger.info(f"Tool called: {name} with args: {arguments}")
    try:
        # ツール処理
        result = await process_tool(name, arguments)
        logger.info(f"Tool result: {result}")
        return result
    except Exception as e:
        logger.error(f"Tool error: {str(e)}")
        return {"error": f"処理中にエラーが発生しました: {str(e)}"}

活用事例・ユーザーの声

現時点でclaude-codeのG2レビューは確認できていません。最新のユーザー評価については、各レビューサイトをご確認ください。

活用シーン1:想定される主な利用パターン

claude-codeは、チームの業務効率化やワークフロー改善を目的として導入されるケースが想定されます。公式サイトの事例ページで具体的な導入企業の声を確認することを推奨します。

活用シーン2:導入前に確認すべきポイント

無料プランやトライアル期間を活用し、自社の要件に合致するか検証してから本格導入することが推奨されます。

メリット・デメリット

メリット

  • 標準プロトコル採用: JSON-RPC 2.0ベースで他ツールとの互換性が高い
  • 多言語対応: Python、TypeScript、Rustなど主要言語で実装可能
  • 非同期処理対応: Python asyncioで高性能な並行処理が可能
  • オープンソース: 完全無料で商用利用も制限なし
  • Claude Desktop統合: 設定ファイル追加のみで即座に利用開始可能

デメリット

  • 学習コストの存在: MCPプロトコル理解に初期学習時間が必要(公式ドキュメントで解決可能)
  • デバッグの複雑さ: 非同期通信のため問題特定が困難な場合がある(詳細ログ設定で軽減)
  • 対応クライアント限定: 現時点ではClaude Desktop等の限られたクライアントのみ対応
  • セキュリティ考慮が必要: 外部システム連携時の権限管理を適切に設計する必要
  • エコシステム発展途上: 2024年公開の新技術でベストプラクティスが未確立

競合ツールとの簡易比較

項目MCPLangChainAutoGenOpenAI GPTs
プロトコル標準化済みフレームワーク依存Microsoft独自OpenAI独自
実装難易度中程度中程度
多言語対応
オープンソース

使い分けガイド:

  • シンプルなClaude統合なら→ MCP
  • 複雑なマルチエージェントなら→ LangChain
  • Microsoft環境での開発なら→ AutoGen

よくある質問(FAQ)

Q. 日本語に対応していますか?

A. MCPプロトコル自体は言語に依存せず、完全に日本語対応しています。ツール名、説明文、エラーメッセージなど、すべて日本語で実装可能です。Claude Desktopとのやりとりでも日本語のパラメータや戻り値を正常に処理できます。

Q. TypeScriptとPythonのどちらで実装すべきですか?

A. 既存システムとの連携内容によって選択しましょう。既存のAPIがPythonベースなら Python、Node.js環境やフロントエンド連携が必要ならTypeScriptが適しています。性能面では大きな差はありません。

Q. 本番環境での運用は安全ですか?

A. 適切なセキュリティ対策を講じれば安全に運用可能です。入力値検証権限管理ログ監視を必ず実装してください。特に外部API連携時は、APIキーの管理とレート制限の設定が重要です。

Q. Claude Desktop以外のクライアントでも利用できますか?

A. MCPプロトコルは標準仕様のため、対応した他のAIクライアントでも利用可能です。ただし、現時点ではClaude Desktopが最も充実した機能を提供しています。今後、対応クライアントは増加予定です。

Q. 既存のFastAPIアプリケーションをMCP対応させられますか?

A. はい。既存のFastAPIエンドポイントをMCPツールとしてラップする形で実装できます。ビジネスロジックは変更不要で、MCPハンドラー関数から既存APIを呼び出すだけで連携可能です。

Q. エラーが発生した場合のデバッグ方法は?

A. 詳細ログ出力の有効化MCPクライアント接続の確認JSONスキーマの検証を段階的に実施してください。Claude Desktopの開発者ツールでMCP通信ログも確認できます。


まとめ:MCPサーバーはAI統合を標準化したい開発者におすすめ

  • 標準プロトコル採用により将来的な互換性を確保
  • Python/TypeScript対応で既存スキルを活用可能
  • 無料で始められるため、スモールスタートに最適

Claude Code 公式サイトへ

参考・情報ソース

まずは無料で体験

claude-code を無料で試してみる

無料プランあり・3分で登録完了

claude-code 公式サイトへ(無料) 他の比較ツールも見る