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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP hub server that aggregates tools from multiple domain packages into a single globally-available interface.1MIT
- AlicenseNot gradedqualityAmaintenanceProvides a shared MCP SDK wrapper for building MCP servers with stdio transport, tool registration, JSON-safe responses, and environment helpers.26MIT
Related MCP Connectors
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
MCP server for the Inistate platform: module discovery, entry management, and activity submission.
A basic MCP server to operate on the Postman API.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ttacleinad-boop/Universal-MCP-Tool-Framework'
If you have feedback or need assistance with the MCP directory API, please join our Discord server