使用说明
工具注册表服务器
定义自定义工具,并通过OpenAPI或MCP接口为其提供服务。建于 工具注册表.
概述
toolregistry-server 允许您将Python函数注册为工具,并通过多种协议将其作为服务公开。它提供:
- 注册表生成器:与协议无关的配置加载和源代码注册(
registry_builder) - 协议适配器:
OpenAPIAdapter(FastAPI/REST)和MCPAdapter(模型上下文协议) - 应用程序编排:
App用于构建注册表和调度到任何适配器的类;子类prepare_registry()用于自定义注册表 - 认证:统一承载令牌支持(
auth.load_tokens) - 命令行界面:
toolregistry-server openapi/toolregistry-server mcp随着--config,--profile,以及更多
生态系统
| 包 | 描述 | PyPI | 文档 |
|---|---|---|---|
| 工具注册表 | 核心库——工具注册、模式生成、执行 | 文档 | |
| 工具注册表服务器 | 服务器适配器——通过OpenAPI和MCP公开工具 | 文档 | |
| 工具注册表中心 | 即用型工具——计算器、网络搜索、文件操作等。 | 文档 |
toolregistry (core)
↓
toolregistry-server (tool server)
↓
toolregistry-hub (tool collection + server config)
安装
# Base (RouteTable, registry_builder, auth)
pip install toolregistry-server
# With OpenAPI support
pip install toolregistry-server[openapi]
# With MCP support
pip install toolregistry-server[mcp]
# Full
pip install toolregistry-server[all]
快速开始
程序化——OpenAPI服务器
from toolregistry import ToolRegistry
from toolregistry_server import RouteTable
from toolregistry_server.adapters.openapi import OpenAPIAdapter
registry = ToolRegistry()
@registry.register
def greet(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
route_table = RouteTable(registry)
adapter = OpenAPIAdapter(route_table)
adapter.run(host="0.0.0.0", port=8000)
程序化-MCP服务器
import asyncio
from toolregistry import ToolRegistry
from toolregistry_server import RouteTable
from toolregistry_server.adapters.mcp import MCPAdapter
registry = ToolRegistry()
# ... register tools ...
route_table = RouteTable(registry)
adapter = MCPAdapter(route_table)
adapter.run(transport="stdio") # blocking
# or: asyncio.run(adapter.run_async(transport="sse", host="0.0.0.0", port=8000))
高级-- App 类
from toolregistry_server.app import App
# From a config file
App().serve_openapi(config_path="tools.yaml", host="0.0.0.0", port=8000)
App().serve_mcp(config_path="tools.yaml", transport="stdio")
# From a pre-built registry
from toolregistry import ToolRegistry
registry = ToolRegistry()
# ... register tools ...
App().serve_openapi(registry=registry, port=9000)
自定义应用程序子类
以(权力)否决 prepare_registry 添加内置工具、钩子或元数据:
from toolregistry_server.app import App
class MyApp(App):
def prepare_registry(self, **kwargs):
from toolregistry import ToolRegistry
registry = ToolRegistry()
registry.register(my_builtin_tool)
# optionally apply user config on top
if kwargs.get("config_path"):
from toolregistry_server import apply_config, load_config
apply_config(registry, load_config(kwargs["config_path"]))
return registry
MyApp().serve_openapi(host="0.0.0.0", port=8000)
命令行界面
# OpenAPI server from config file
toolregistry-server openapi --config tools.yaml --port 8000
# MCP server (stdio)
toolregistry-server mcp --config tools.yaml --transport stdio
# MCP server (SSE)
toolregistry-server mcp --config tools.yaml --transport sse --port 8000
# With deployment profile (disables network/filesystem tools)
toolregistry-server openapi --config tools.yaml --profile remote
# With Bearer token auth
toolregistry-server openapi --config tools.yaml --tokens /path/to/tokens.txt
配置文件
JSONC和YAML都支持。三种源类型: python, mcp, openapi.
mode: denylist # or "allowlist"
disabled: [] # namespaces to exclude (denylist mode)
tools:
# Python module — all public functions
- type: python
module: my_package.tools
namespace: my_tools
# Python class
- type: python
class: my_package.Calculator
namespace: calculator
# MCP server (stdio subprocess)
- type: mcp
transport: stdio
command: ["python", "-m", "my_mcp_server"]
namespace: mcp_tools
# MCP server (SSE / streamable-http)
- type: mcp
transport: http
url: http://localhost:8080/mcp
namespace: remote_mcp
# OpenAPI endpoint
- type: openapi
url: https://api.example.com/openapi.json
namespace: external_api
auth:
type: bearer
token_env: EXTERNAL_API_TOKEN
看 examples/config.yaml 和 examples/config.jsonc 如需查看完整示例。
建筑
┌─────────────────────────────────────────────────────────────┐
│ registry_builder │
│ load_config · apply_config · register_*_source │
│ apply_profile · PROFILE_DISABLE_TAGS │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ RouteTable │
│ (central routing layer) │
└─────────────────────────┬───────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ OpenAPIAdapter │ │ MCPAdapter │ │ (your adapter) │
│ (FastAPI) │ │ stdio/sse/http │ │ Adapter ABC │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ HTTP Clients │ │ MCP Clients │
└─────────────────┘ └─────────────────┘
添加新适配器
- 子类
Adapter从toolregistry_server.adapters - 实施
run(**kwargs)和create_and_run(cls, route_table, **kwargs) - 可选实施
add_cli_arguments(parser)用于CLI集成 - 呼叫
App().serve(MyAdapter, ...)--没有更改App需要
部署配置文件
--profile 启动时应用基于标签的工具筛选:
| 配置文件 | 禁用 |
|---|---|
remote |
FILE_SYSTEM, DESTRUCTIVE, PRIVILEGED 标记工具 |
local |
NETWORK 标记工具 |
文档
贡献
欢迎投稿!请查看我们的 贡献指南 了解详情。
许可证
麻省理工学院——见 许可证.
