Skip to main content
Glama
ttacleinad-boop

Universal MCP Tool Framework

Universal MCP Tool Framework

Model Context Protocol ツールのための再利用可能なPython基盤です。このフレームワークは、登録、ディスカバリ、権限、操作モードの分離、構造化エラー、ロギング、設定、ヘルス/ステータス出力、拡張規約を一元化します。

設計上の境界

このフレームワークはMCP サーバー基盤であり、汎用シェル、ファイルシステムコントローラ、ポリシーエンジンではありません。ツールは明示的に登録され、ひとつの権限境界を通過して実行されます。

操作モード

デフォルト

要件

read

有効

ツールは読み取り専用として登録されている必要があります。

write

無効

設定で write が有効化され、呼び出し元が宣言されたスコープを持つ場合に限る。

execute

無効

設定で execute が有効化され、呼び出し元が宣言されたスコープを持つ場合に限る。

ツールは両方のチェックを通過する必要があります。つまり、操作モードが有効であり、必要なスコープが実行コンテキストに存在することです。

Related MCP server: achmadya-dev/mcp-core

同梱される機能

機能

実装

標準 MCP サーバー

server.py が公式 MCP Python SDK 用に mcp を公開する。

登録とディスカバリ

ToolRegistry が明示的な登録を管理し、公開ツールのメタデータを返す。

権限モデル

ToolRuntime が有効な操作モードとツール単位のスコープを強制する。

読み取り/書き込み/実行の分離

OperationMode はすべてのツールに必須。読み取り専用がデフォルト。

エラーハンドリングとロギング

すべての実行は構造化された結果エンベロープを返し、拒否・失敗した呼び出しはログに記録される。

設定

config.example.json がサーバー識別情報、有効なモード、ログレベルを制御する。

ヘルス/ステータス

framework_health、framework_status、framework_discover_tools は 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.py

MCP 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. 操作モードを 1 つ選択します。

  2. 必要なスコープをすべて宣言します。

  3. ToolRegistry を介してハンドラを登録します。

  4. ディスカバリ、許可された実行、拒否パスのテストを追加します。

  5. ツールが公開サーバーの機能に含まれる場合にのみ、薄い 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 も提供します。

プロジェクトテンプレート

ジェネレートされる機能

python-library

インストール可能な src/ パッケージ、ユニットテストのスターター、開発用・本番用設定、セットアップスクリプト、ドキュメント、プロジェクト状態、Git 初期化。

mcp-tool

python-library のすべてに加え、標準 MCP サーバーのエントリポイントと固定 MCP SDK 依存関係を含む。

完全に初期化されたプロジェクトを作成します。デフォルトでは、ジェネレーターはローカル 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 ソースファイルを解析し、構文エラーを報告する。

依存関係解析

pyproject.toml のメタデータを検証し、プロジェクトの依存関係の有無を報告する。

エラーの検出

構文、設定、依存、ソースコンパイルの失敗をレポートに添付する。

テスト検出・実行

tests/test_*.py を検出し、標準ライブラリのテストランナーを実行する。

ビルド検証

プロジェクトの変更を書き込まずに src/ をコンパイルする。

設定の検証

config/ 配下の JSON ファイルを検証する。

リグレッション/差分レポート

Git ステータスを使用して未コミットの変更を検出する。Git の変更は行わない。

ヘルス/ステータスレポート

集計カウントと全体の PASS、FAIL、WARNING を返す。

FAIL は非ゼロのコマンド終了ステータスを生成します。WARNING は、仮想依存が無い、テストが無い、設定ディレクトリが無い、Git 履歴が利用できないなど、不合格ではないが不完全な状態を示します。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides a shared MCP SDK wrapper for building MCP servers with stdio transport, tool registration, JSON-safe responses, and environment helpers.
    27 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Framework for building and running MCP servers as HTTP services. Define tools as pure Python functions, wire up with two lines, run with one command.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server generated from an OpenAPI Specification, exposing tools via HTTP. It allows clients to invoke API operations using JSON-RPC 2.0 requests.
    6 npm
    Artistic 2.0