MCP批准-工具调用批准系统
一个生产就绪、可插拔的AI工具调用批准系统,集成了模型上下文协议(MCP)。
概述
该项目提供两种类型的审批机制:
- 工具级别批准 -根据工具名称和描述批准/拒绝
- 呼叫级别批准 -通过检查运行时参数(例如。,
get是安全的,除非all_namespaces=True)
两者都与LangChain代理和MCP服务器无缝集成。
快速开始
1.安装依赖项
make install2.设置API密钥
export OPENAI_API_KEY='sk-...'3.运行Demos
# Start the mock MCP server (in one terminal)
make server
# Run the LangGraph demo (in another terminal)
make demo
# Or run the OLS-style streaming demo
make demo-ols4.清理(可选)
# Clean temporary files and caches (__pycache__, *.pyc, .pytest_cache, *.egg-info)
make clean
# To remove the virtual environment, run:
# rm -rf .venv核心组件
approvals.py -核心审批逻辑
独立、可重用的审批类:
课程:
BaseApprovalConfig-带有公共字段的基本配置ToolLevelApprovalConfig-工具级审批配置CallLevelApprovalConfig-呼叫级别审批配置(扩展ToolLevelApprovalConfig)BaseApproval-审批处理程序的抽象基类ToolLevelApproval-根据包含危险动词的工具名称/描述进行批准CallLevelApproval-通过参数模式匹配扩展ToolLevelApprovalToolRequest-工具调用结构的TypedDictdefault_cli_approval_handler-默认CLI审批界面
例子:
from approvals import ToolLevelApproval, ToolLevelApprovalConfig
config = ToolLevelApprovalConfig(dangerous_verbs=["delete", "remove"])
approval = ToolLevelApproval(config=config)
tool_request = {"name": "kubectl_delete", "description": "...", "args": {...}}
approved = await approval.check_and_approve_tool(tool_request)approval_client.py -LangChain/MCP集成
LangChain代理与MCP服务器集成。
功能:
discover_mcp_tools()-连接到MCP服务器并检索工具create_approval_agent()-使用审批中间件创建LangChain代理invoke_with_approval()-通过审批循环处理代理执行
例子:
from approval_client import create_approval_agent, invoke_with_approval
agent, approval = await create_approval_agent(
mcp_url="http://localhost:3000",
api_key=os.getenv("OPENAI_API_KEY")
)
result = await invoke_with_approval(
agent, approval, "Delete test.txt", {"configurable": {"thread_id": "1"}}
)demo_approval_client.py -LangGraph演示
使用LangGraph代理的三种场景的综合演示:
- 工具级别批准
- 使用参数模式进行调用级审批
- 自定义域特定规则
ols_approval_client.py -OLS风格流媒体客户端
使用LangChain的原生工具调用并支持流媒体的替代客户端实现:
课程:
StreamedChunk-表示流式响应的块(文本、tool_call、tool_result、end)OLSApprovalClient-具有集成审批支持的流媒体客户端
特征:
- 本地LLM流媒体
llm.astream() - 工具执行与批准检查
- LLM(60秒)和工具执行(30秒)分别超时
- 清除流式API返回的文本、工具调用和工具结果
例子:
from ols_approval_client import OLSApprovalClient
from approvals import ToolLevelApprovalConfig, default_cli_approval_handler
config = ToolLevelApprovalConfig(
dangerous_verbs=["delete", "remove", "send"],
approval_timeout=10,
approval_ui_handler=default_cli_approval_handler,
)
client = OLSApprovalClient(
mcp_url="http://localhost:3000",
model="gpt-4o",
api_key=api_key,
approval_config=config,
)
result = await client.invoke("Delete test.txt")
print(result["response"])demo_ols_approval_client.py -OLS流媒体演示
使用两个场景演示OLS风格的客户端:
- 未经批准-工具自动执行
- 具有工具级批准-危险操作需要确认
mcp_server.py -模拟MCP服务器
使用安全和危险的工具测试服务器,用于测试审批工作流。
主要特点
- ✅ 可插拔UI:自定义审批处理程序(CLI、web、Slack等)
- ✅ 类型安全:带验证的Pydantic配置
- ✅ 两种审批模式:工具级别和调用级别
- ✅ 自动审批:安全工具绕过审批
- ✅ 演出:短路评估,小写缓存
- ✅ 保持简单:简单、专注、可维护
- ✅ MCP集成:适用于任何MCP服务器
- ✅ LangChain兼容:使用HumanInTheLoop中间件
