Universal MCP Tool Framework
Universal MCP Tool Framework
面向 Model Context Protocol 工具的可复用 Python 基础框架。该框架集中处理注册、发现、权限、操作模式分离、结构化错误、日志记录、配置、健康/状态输出以及扩展约定。
设计边界
该框架是 MCP 服务器基础,而非通用 shell、文件系统控制器或策略引擎。每个工具通过显式注册,执行时仅穿过一个统一权限边界。
操作模式 | 默认值 | 要求 |
| 启用 | 工具必须注册为只读工具。 |
| 禁用 | 配置启用 |
| 禁用 | 配置启用 |
工具必须同时通过两项检查:该工具的操作模式已启用,且执行上下文中存在该工具的所需作用域。
Related MCP server: achmadya-dev/mcp-core
包含的功能面
功能 | 实现 |
标准 MCP 服务器 面 |
|
注册与发现 |
|
权限模型 |
|
只读/写/执行扩展 |
|
错误处理与日志 | 每次执行均返回结构化结果封装,日志同时记录被拒绝或失败调用。 |
配置 |
|
健康/状态 |
|
示例工具 | 时间读取、模拟笔记写入和模拟检查执行三个工具,演示了每种模式。 |
扩展路径 | 一个装饰器注册每个新工具,其余日志/权限/错误公共逻辑都由运行库提供。 |
环境要求
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添加一个工具
选择一种操作模式。
为工具声明全部所需作用域。
通过
ToolRegistry注册。为 discovery(发现)、允许执行和拒绝路径各加测试。
仅当工具属于公开服务时,才加一层轻量的 MCP handler,否则不暴露。
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() 调用执行,以自动获得公共权限、日志记录和错误返回约定的保证。
结果契约
所有 runtime 执行都返回如下稳定结构:
{
"ok": true,
"data": {},
"error": null
}被拒绝或失败的请求置 ok: flase,并携带机器可读的错误码,如 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"测试套件覆盖的检查项包括:discovery、默认只读、默认拒绝写/执行、作用域强制、结构化错误、状态输出以及 json 配置正确性。
Universal MCP Tool Framework
该仓库还提供 umcp-scaffold,一个用于可重复 Python 工程初始化的受控制生成器。
项目模板 | 生成器输出能力 |
| 可安装的 |
|
|
生成一个完全初始化的项目:默认地生成器会创建本地 Git 仓库,隔离的 .venv,安装本地依赖,并对生成结果做校验。
umcp-scaffold create "My Project" ./my-project --type mcp-tool持续验证已生成的项目:
umcp-scaffold validate ./my-project每个生成项目都会写 .project-state.json 文件,其中包含 schema 版本、项目名称、包名、模板类型、生命周期状态、Git/依赖标志位、创建时间以及最近校验状态。生成器拒绝覆盖非空目录。
本地代码分析与测试工具集
umcp-quatrik 可扫描本地 Python 项目,并生成带 PASS、FAIL、WARNING 三种状态的机器可读质量报告。
umcp-quality ./my-project
umcp-quality ./my-project --format markdown检查项 | 检查结果 |
静态代码分析 | 解析每个 Python 源文件并报告语法错误。 |
依赖项分析 | 校验 |
错误收集 | 将语法、配置、测试、源编译失败信息收入报告。 |
测试发现与执行 | 发现 |
构建校验 | 不修改项目源码,仅为 |
配置校验 | 校验 |
回归/diff 状态 | 使用 Git 状态查找未 add 的变更,不做任何 Git 变更操作。 |
健康/status | 返回向上计数,以及总体的 PASS、FAIL 或 WARNING。 |
报告状态与退出码: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