mcp-utils について
mcp-utilsは、既存のアプリケーションにMCPサーバーを組み込むPython開発者向けのパッケージです。同期処理を重視し、Flask連携やMCPエンドポイント用の機能を備えています。
主な機能
- 01同期型MCPサーバー用ユーティリティ
- 02Flask連携
- 03SSEとHTTPのサポート
- 04エンドポイント用デコレーター
- 05Pydanticスキーマと検証
- 06Redisレスポンスキュー
活用シーン
- 01PythonアプリへのMCPエンドポイント追加
- 02FlaskベースのMCPサーバー構築
- 03Redisキューによるレスポンス処理
MCP 対応
MCPクライアントにエンドポイントを公開するMCPサーバーの構築に使えるユーティリティとスキーマモデルを提供します。SSEとHTTPのトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-utils
Model Context Protocol(MCP)サーバーを構築するための Python ユーティリティパッケージです。
目次
概要
mcp-utils は、Python で MCP に準拠したサーバーを構築するためのユーティリティとヘルパーを提供します。特に Flask を使用した同期実装に重点を置いています。このパッケージは、非同期コードの複雑さを避け、既存の Python アプリケーションに MCP サーバーを実装したい開発者向けに設計されています。
主な機能
- MCP サーバー実装の基本的なユーティリティ
- Server-Sent Events(SSE)のサポート
- MCP エンドポイント向けのシンプルなデコレーター
- 同期実装
- HTTP プロトコルのサポート
- Redis 応答キュー
- MCP スキーマ向けの包括的な Pydantic モデル
- 組み込みの検証とドキュメント
インストール
pip install mcp-utils
要件
- Python 3.10+
- Pydantic 2
オプションの依存関係
- Flask(ウェブサーバー用)
- Gunicorn(本番環境へのデプロイ用)
- Redis(応答キュー用)
使い方
基本的な MCP サーバー
MCP サーバーを作成する簡単な例を紹介します。
from mcp_utils.core import MCPServer
from mcp_utils.schema import GetPromptResult, Message, TextContent, CallToolResult
# Create a basic MCP server
mcp = MCPServer("example", "1.0")
@mcp.prompt()
def get_weather_prompt(city: str) -> GetPromptResult:
return GetPromptResult(
description="Weather prompt",
messages=[
Message(
role="user",
content=TextContent(
text=f"What is the weather like in {city}?",
),
)
],
)
@mcp.tool()
def get_weather(city: str) -> str:
return "sunny"
Flask の例
本番環境では、シンプルな Flask アプリで MCP サーバーを使用して、 バージョン 2025-06-18 からの Streamable HTTP をサポートできます。
from flask import Flask, Response, url_for, request
# Create Flask app and MCP server with Redis queue
app = Flask(__name__)
mcp = MCPServer(
"example",
"1.0",
)
@app.route("/mcp", methods=["POST"])
def mcp_route():
response = mcp.handle_message(request.get_json())
return jsonify(response.model_dump(exclude_none=True))
if __name__ == "__main__":
app.run(debug=True)
SQLAlchemy のトランザクション処理の例
本番環境では、MCP サーバーを Flask、Redis、SQLAlchemy と統合することで、メッセージ処理とデータベースのトランザクション管理を改善できます。
from flask import Flask, request
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
# Create engine for PostgreSQL database
engine = create_engine("postgresql://user:pass@localhost/dbname")
# Create Flask app and MCP server with Redis queue
app = Flask(__name__)
mcp = MCPServer(
"example",
"1.0",
)
@app.route("/mcp", methods=["POST"])
def mcp_route():
with Session(engine) as session:
try:
response = mcp.handle_message(request.get_json())
session.commit()
except:
session.rollback()
raise
else:
return jsonify(response.model_dump(exclude_none=True))
if __name__ == "__main__":
app.run(debug=True)
ログの設定やセッション管理を含む、より包括的な例については、リポジトリ内のFlask アプリケーションの例をご覧ください。
Gunicorn での実行
ローカルで実行する場合でも、Gunicorn を使用する方法がおすすめです。Gunicorn でアプリを実行するには、次のようにします。
from gunicorn.app.base import BaseApplication
class FlaskApplication(BaseApplication):
def __init__(self, app, options=None):
self.options = options or {}
self.application = app
super().__init__()
def load_config(self):
config = {
key: value
for key, value in self.options.items()
if key in self.cfg.settings
}
for key, value in config.items():
self.cfg.set(key.lower(), value)
def load(self):
return self.application
if __name__ == "__main__":
handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter("[%(asctime)s] [%(levelname)s] %(name)s: %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
options = {
"bind": "0.0.0.0:9000",
"workers": 1,
"worker_class": "gevent",
"loglevel": "debug",
}
FlaskApplication(app, options).run()
MCP クライアントとの接続
Cursor
- MCP の設定を編集し、構成に追加します。
{
"mcpServers": {
"server-name": {
"url": "http://localhost:9000/mcp"
}
}
}
Claude Desktop
この記事の執筆時点では、Claude Desktop は SSE 経由の MCP をサポートしておらず、stdio のみをサポートしています。Claude Desktop を MCP サーバーに接続するには、mcp-proxy を使用する必要があります。
Claude Desktop の構成例:
{
"mcpServers": {
"weather": {
"command": "/Users/yourname/.local/bin/mcp-proxy",
"args": ["http://127.0.0.1:9000/sse"]
}
}
}
Smithery 経由でのインストール
Smithery 経由で Claude Desktop 用の MCP Proxy を自動的にインストールするには、次のようにします。
npx -y @smithery/cli install mcp-proxy --client claude
PyPI 経由でのインストール
パッケージの安定版は PyPI リポジトリで入手できます。次のコマンドでインストールできます。
# Option 1: With uv (recommended)
uv tool install mcp-proxy
# Option 2: With pipx (alternative)
pipx install mcp-proxy
インストール後は、mcp-proxy コマンドを使用してサーバーを実行できます。
コントリビューション
コントリビューションを歓迎します。お気軽にプルリクエストを送信してください。
関連プロジェクト
- MCP Python SDK - MCP の公式非同期 Python SDK
- mcp-proxy - Claude Desktop を MCP サーバーに接続するためのプロキシツール
ライセンス
MIT License
MCP Inspector を使ったテスト
MCP Inspector は、MCP サーバーのテストとデバッグに役立つツールです。MCP サーバーのエンドポイントを調査、テストするためのウェブインターフェイスを提供します。
インストール
npm を使って MCP Inspector をインストールします。
npm install -g @modelcontextprotocol/inspector
使用方法
- MCP サーバーを起動します(例:上記の Flask の例)。
- MCP Inspector を実行します。
git clone [email protected]:modelcontextprotocol/inspector.git
cd inspector
npm run build
npm start
- ブラウザーを開き、
http://127.0.0.1:6274/にアクセスします。 - MCP サーバーの URL(例:
http://localhost:9000/sse)を入力します。 - Inspector を使って、以下を行います。
- トランスポートタイプを SSE に変更する
- サーバー接続をテストする
- SSE イベントを監視する
- テストメッセージを送信する
- 応答をデバッグする
このツールは、開発中に MCP サーバーの実装が正しく動作し、プロトコル仕様に準拠していることを確認するのに特に役立ちます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。