Universal MCP Tool Framework
Универсальный фреймворк инструментов MCP
Многоразовая основа на Python для инструментов Model Context Protocol. Фреймворк централизует регистрацию, обнаружение, разрешения, разделение режимов операций, структурированные ошибки, журналирование, конфигурацию, вывод состояния/статуса и соглашения о расширениях.
Границы проектирования
Фреймворк — это основа MCP-сервера, а не универсальная оболочка, контроллер файловой системы или механизм политик. Инструменты регистрируются явно и выполняются через одну границу разрешений.
Режим операции | По умолчанию | Требование |
| Включено | Инструмент должен быть зарегистрирован как доступный только для чтения. |
| Отключено | Конфигурация включает |
| Отключено | Конфигурация включает |
Инструмент должен пройти обе проверки: его режим операции включён, и требуемые области присутствуют в контексте выполнения.
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.Добавьте тест для обнаружения, разрешённого выполнения и путей отклонения.
Предоставьте тонкий 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-конфигурацию.
Универсальный набор инструментов для создания проектов
Репозиторий также предоставляет umcp-scaffold — управляемый генератор для повторяемых стартов Python-проектов.
Шаблон проекта | Сгенерированная возможность |
| Устанавливаемый пакет |
| Всё из |
Создайте полностью инициализированный проект. По умолчанию генератор создаёт локальный Git-репозиторий, создаёт изолированный .venv, устанавливает локальные зависимости и проверяет сгенерированный проект.
umcp-scaffold create "My Project" ./my-project --type mcp-toolПроверьте сгенерированный проект позже:
umcp-scaffold validate ./my-projectКаждый сгенерированный проект получает .project-state.json с версией схемы, именем, именем пакета, типом шаблона, состоянием жизненного цикла, флагами Git/зависимостей, временем создания и последним состоянием проверки. Генератор отклоняет непустые целевые каталоги, а не перезаписывает проект.
Локальный набор инструментов для анализа и тестирования кода
umcp-quality проверяет локальный Python-проект и возвращает машиночитаемый отчёт о качестве с результатами PASS, FAIL и WARNING.
umcp-quality ./my-project
umcp-quality ./my-project --format markdownПроверка | Результат |
Статический анализ кода | Анализирует каждый исходный файл Python и сообщает об ошибках синтаксиса. |
Анализ зависимостей | Проверяет метаданные |
Обнаружение ошибок | Фиксирует ошибки синтаксиса, конфигурации, тестов и компиляции исходников в отчёте. |
Обнаружение и выполнение тестов | Обнаруживает |
Проверка сборки | Компилирует |
Проверка конфигурации | Проверяет JSON-файлы в |
Отчёт о регрессиях/изменениях | Использует статус Git для отметки незакоммиченных изменений; мутация Git не выполняется. |
Отчёт о состоянии/статусе | Возвращает агрегированные счётчики и общий результат 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