Universal MCP Tool Framework
Universal MCP Tool Framework
Model Context Protocol ツールのための再利用可能なPython基盤です。このフレームワークは、登録、ディスカバリ、権限、操作モードの分離、構造化エラー、ロギング、設定、ヘルス/ステータス出力、拡張規約を一元化します。
設計上の境界
このフレームワークはMCP サーバー基盤であり、汎用シェル、ファイルシステムコントローラ、ポリシーエンジンではありません。ツールは明示的に登録され、ひとつの権限境界を通過して実行されます。
操作モード | デフォルト | 要件 |
| 有効 | ツールは読み取り専用として登録されている必要があります。 |
| 無効 | 設定で |
| 無効 | 設定で |
ツールは両方のチェックを通過する必要があります。つまり、操作モードが有効であり、必要なスコープが実行コンテキストに存在することです。
Related MCP server: achmadya-dev/mcp-core
同梱される機能
機能 | 実装 |
標準 MCP サーバー |
|
登録とディスカバリ |
|
権限モデル |
|
読み取り/書き込み/実行の分離 |
|
エラーハンドリングとロギング | すべての実行は構造化された結果エンベロープを返し、拒否・失敗した呼び出しはログに記録される。 |
設定 |
|
ヘルス/ステータス |
|
サンプルツール | 時刻の読み取り、疑似ノート書き込み、疑似チェック実行ツールが各モードを実演する。 |
拡張パス | 1 つのデコレータで各新規ツールを登録。ランタイムが共通制御をすべて提供する。 |
要件
Python 3.10+
公式 MCP Python SDK を
mcp==2.0.0に固定
クイックスタート
python -m venv .venv
. .venv/bin/activate
pip install -e .
python -m unittest discover -s tests -p "test_*.py"MCP SDK 経由でサーバーを起動します:
mcp run server.pyMCP Inspector での対話的な開発向け:
mcp dev server.py設定
読み取り以外の操作が必要な場合のみ、サンプルをコピーして変更してください。
{
"server_name": "Universal MCP Tool Framework",
"enabled_modes": ["read"],
"log_level": "INFO"
}read が唯一のデフォルトモードです。登録済みの書き込みツールを許可するには write を追加し、登録済みの実行ツールを許可するには execute を追加します。モードを有効にしても、ツール単位で必須となるスコープが回避されることはありません。
選択した設定ファイルを指定してサーバーを起動します:
UNIVERSAL_MCP_CONFIG=config.json mcp run server.pyツールを追加する
操作モードを 1 つ選択します。
必要なスコープをすべて宣言します。
ToolRegistryを介してハンドラを登録します。ディスカバリ、許可された実行、拒否パスのテストを追加します。
ツールが公開サーバーの機能に含まれる場合にのみ、薄い MCP ハンドラを公開します。
from universal_mcp.models import OperationMode
from universal_mcp.registry import ToolRegistry
registry = ToolRegistry()
@registry.register(
name="inventory_get_item",
description="Return one inventory item by stable identifier.",
mode=OperationMode.READ,
required_scopes={"inventory:read"},
)
def inventory_get_item(item_id: str) -> dict[str, str]:
return {"item_id": item_id}共通の権限・ロギング・エラー契約が常に適用されるよう、ToolRuntime.execute() を経由して呼び出します。
結果コントラクト
すべてのランタイム実行は、この安定したエンベロープを生成します:
{
"ok": true,
"data": {},
"error": null
}拒否および失敗したリクエストは ok: false となり、tool_not_found、permission_denied、tool_execution_failed などの機械可読なエラーコードを伴います。
リポジトリ構造
.
├── config.example.json
├── pyproject.toml
├── server.py
├── src/universal_mcp/
│ ├── config.py
│ ├── examples.py
│ ├── models.py
│ ├── registry.py
│ ├── runtime.py
│ └── server.py
└── tests/test_framework.py検証
python -m unittest discover -s tests -p "test_*.py"テストスイートは、登録、ディレクトリ、デフォルトの読み取りアクセス、デフォルトでの書き込み/実行拒否、スコープの強制、構造化エラー、ステータス出力、JSON 設定を検証します。
ユニバーサルプロジェクトセットアップツールキット
このリポジトリは、再現可能な Python プロジェクト作成のための制御ジェネレータ umcp-scaffold も提供します。
プロジェクトテンプレート | ジェネレートされる機能 |
| インストール可能な |
|
|
完全に初期化されたプロジェクトを作成します。デフォルトでは、ジェネレーターはローカル Git リポジトリを作成し、分離した .venv を作成し、ローカル依存関係をインストールし、生成されたプロジェクトを検証します。
umcp-scaffold create "My Project" ./my-project --type mcp-tool生成後のプロジェクトを後で検証するには:
umcp-scaffold validate ./my-project生成されるすべてのプロジェクトには、スキーマバージョン、名前、パッケージ名、テンプレートの種類、ライフサイクル状態、Git の可否フラグ、作成時刻、最後の検証状態を含む .project-state.json が付与されます。ジェネレーターは、プロジェクトを上書きせず、空でないターゲットディレクトリを拒否します。
ローカルコード解析・品質ツールキット
umcp-quality はローカル Python プロジェクトを検査し、PASS、FAIL、WARNING の結果を含む機械可読な品質レポートを返します。
umcp-quality ./my-project
umcp-quality ./my-project --format markdownチェック | 出力 |
静的コード解析 | すべての Python ソースファイルを解析し、構文エラーを報告する。 |
依存関係解析 |
|
エラーの検出 | 構文、設定、依存、ソースコンパイルの失敗をレポートに添付する。 |
テスト検出・実行 |
|
ビルド検証 | プロジェクトの変更を書き込まずに |
設定の検証 |
|
リグレッション/差分レポート | Git ステータスを使用して未コミットの変更を検出する。Git の変更は行わない。 |
ヘルス/ステータスレポート | 集計カウントと全体の |
FAIL は非ゼロのコマンド終了ステータスを生成します。WARNING は、仮想依存が無い、テストが無い、設定ディレクトリが無い、Git 履歴が利用できないなど、不合格ではないが不完全な状態を示します。
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP hub server that aggregates tools from multiple domain packages into a single globally-available interface.1MIT
- AlicenseNot gradedqualityCmaintenanceProvides a shared MCP SDK wrapper for building MCP servers with stdio transport, tool registration, JSON-safe responses, and environment helpers.27 npmMIT
- FlicenseNot gradedqualityBmaintenanceFramework for building and running MCP servers as HTTP services. Define tools as pure Python functions, wire up with two lines, run with one command.-
- AlicenseNot gradedqualityBmaintenanceMCP server generated from an OpenAPI Specification, exposing tools via HTTP. It allows clients to invoke API operations using JSON-RPC 2.0 requests.6 npmArtistic 2.0