mcpField
M
mcp-agent-template

mcp-agent-template

本地服务
github.com开发工具01 周前更新

关于 mcp-agent-template

mcp-agent-template 是用于构建带安全防护的 MCP 服务的模板,面向希望让 Agent 使用工具并管理权限与审计的企业团队。它按角色、策略白名单和破坏性操作的人类确认来控制调用,并附带本地示例。

主要功能

  1. 01按策略白名单控制工具
  2. 02基于角色限制调用权限
  3. 03限制参数可用值
  4. 04破坏性操作需人工确认
  5. 05记录带关联 ID 的 JSONL 审计日志
  6. 06附带企业与运维示例

适用场景

  1. 01为内部 Agent 配置工具访问规则
  2. 02要求重启服务前获得人工确认
  3. 03审计工单、目录或库存查询调用
  4. 04用本地示例构建受控 MCP 服务

MCP 相关

这是用于构建 MCP 服务的模板,所有工具调用都会经过策略、角色、参数值及必要的人类确认检查,并写入 JSONL 审计日志。它基于官方 MCP SDK,示例通过 MCP 客户端以 stdio 运行。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"amineutron-mcp-agent-template": {
"command": "uvx",
"args": [
"mcp-agent-template"
],
"env": {
"MCP_AGENT_TEMPLATE_ROLE": "<MCP_AGENT_TEMPLATE_ROLE>",
"MCP_AGENT_TEMPLATE_CONFIRM": "<MCP_AGENT_TEMPLATE_CONFIRM>",
"MCP_AGENT_TEMPLATE_AUDIT_DIR": "<MCP_AGENT_TEMPLATE_AUDIT_DIR>"
}
}
}
}
启动命令uvx mcp-agent-template
需要配置的环境变量
MCP_AGENT_TEMPLATE_ROLECaller role: lecteur (read-only), operateur, admin. Defaults to lecteur.
MCP_AGENT_TEMPLATE_CONFIRMelicit: the server asks the human; client: the client confirms itself from destructiveHint.
MCP_AGENT_TEMPLATE_AUDIT_DIRDirectory of the JSONL audit log.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-agent-template0.2.0

工具

10

收录的工具列表 · 更新于 1 周前

参数类型必填说明
limitinteger否
statusany否

详细介绍

mcp-agent-template — 企业 MCP Agent 防护模板

CI License: AGPL-3.0 + commercial Python 3.11+

英文摘要。 这是一个 MCP 服务模板,IT 部门可以让 LLM Agent 使用:每次工具调用都要经过允许列表策略(policy.yaml)、调用者角色(lecteur / operateur / admin,根据 MCP 工具注解决定)、各参数的允许值,以及针对破坏性操作的人工确认(MCP elicitation,支持 2025-11-25 和 2026-07-28 两种协议),并记录 JSONL 审计日志(权限模式为 0600,每次调用都有一个关联 ID)。mcp-agent-template 包附带两个可运行示例:一个企业示例(工单、只读的类 LDAP 目录、只读的 SQL 资产清单,全部使用本地虚构数据),以及一个通用运维示例(systemd 和 docker 状态查询、经确认后重启)。本地优先、可自托管、可在本地部署;无云服务、无遥测。采用双重许可:AGPL-3.0,或适用于任何规模公司的商业许可。


在企业中向 AI Agent 提供工具,总会引出相同的问题:谁有权做什么,谁批准了危险操作,以及记录在哪里。本仓库提供一个模板(“使用此模板”按钮),基于官方 MCP SDK,一次性解决这些问题。

防护机制的工作方式

每次工具调用都会依次经过以下检查:

  1. 允许列表(policy.yaml):不在列表中的工具会被拒绝。

  2. 调用者角色:最低角色由工具类型决定,策略只能提高要求。

    工具类型已发布的 MCP 注解最低角色
    读取readOnlyHint只读者
    非破坏性写入—操作者
    破坏性操作destructiveHint管理员 + 人工确认
  3. 允许的值:例如,只能重启特定的 systemd 单元。

  4. 破坏性工具的人工确认:客户端向人工用户显示确认问题(MCP elicitation)。检查 1 至 3 会先通过:绝不会要求人工用户批准角色无权执行的操作。任何不是明确“是”的回应都视为拒绝,包括无法提出确认问题的客户端。

  5. JSONL 审计日志,文件权限模式为 0600,每次调用都有一个关联 ID,用于关联决策、确认和结果。看起来像密钥的参数(password、token、api_key 等)会被隐藏。

拒绝操作时会向 Agent 返回易读的错误,绝不会伪装成成功。

试用

uvx mcp-agent-template --help
uvx mcp-agent-template serve --example enterprise   # tickets, annuaire, inventaire (donnees fictives)
uvx mcp-agent-template serve --example ops          # systemd et docker
uvx mcp-agent-template check-policy policy.yaml     # valide une politique et resume ses regles

在 MCP 客户端(Claude Code、Claude Desktop 等)中:

{
  "mcpServers": {
    "entreprise": {
      "command": "uvx",
      "args": ["mcp-agent-template", "serve", "--example", "enterprise"],
      "env": { "MCP_AGENT_TEMPLATE_ROLE": "operateur" }
    }
  }
}
变量角色默认值
MCP_AGENT_TEMPLATE_ROLE调用者角色:lecteur、operateur、adminlecteur
MCP_AGENT_TEMPLATE_CONFIRMelicit:人工用户通过客户端确认;client:客户端自行确认(读取 destructiveHint)elicit
MCP_AGENT_TEMPLATE_AUDIT_DIR审计日志目录~/.local/state/mcp-agent-template
MCP_AGENT_TEMPLATE_DATA_DIR示例的 SQLite 数据库~/.local/state/mcp-agent-template-demo

目前,角色来自客户端配置:每台设备或每个配置文件都有自己的角色。角色来源通过一个小型接口(RoleSource)实现:无需改动工具,即可接入基于令牌的身份验证。

示例

企业(--example enterprise),使用本地创建的虚构公司 “Exemple SA”数据,不连接任何外部服务:

  • 支持:list_tickets、get_ticket、create_ticket(根据策略,“严重”优先级仅限人工设置)、close_ticket、delete_ticket (管理员权限 + 确认);
  • 只读目录,类似 LDAP:search_directory、get_user、 group_members;
  • 只读 SQL 库存:list_tables、query_inventory。有两道防护:数据库以 mode=ro 模式打开,且 SQLite 授权器会拒绝任何写入、 PRAGMA 或 ATTACH 操作,即使它们隐藏在 WITH 中也不例外。

运维(--example ops):只读的 service_status 和 list_containers, 以及受策略限制、仅可操作列出的单元并须确认后执行的 restart_service。

编写自己的服务

from mcp.server.mcpserver import MCPServer
from mcp_agent_template import Guard, Policy, ToolKind

server = MCPServer("mon-agent")
guard = Guard(server, Policy.load("policy.yaml"))

@guard.tool(ToolKind.READ, title="Lister les commandes")
def list_orders(status: str = "ouverte") -> list[dict]:
    """Commandes du jour."""
    ...

@guard.tool(ToolKind.DESTRUCTIVE, title="Annuler une commande")
def cancel_order(order_id: int) -> dict:
    """Annule une commande (admin + confirmation humaine)."""
    ...

server.run()
# policy.yaml
version: 1
default: deny
tools:
  list_orders: {}
  cancel_order:
    allowed_values:
      order_id: ["1042", "1043"]

要接入真正的工单工具、真正的 LDAP 目录或真正的数据库,只需替换 src/mcp_agent_template/examples/stores.py 中的类:MCP 工具和 防护机制无需更改。

开发

uv sync
uv run pytest        # garde, politique, audit, exemples, protocoles 2025-11-25 et 2026-07-28, stdio
uv run ruff check src tests

项目提供了 devcontainer(.devcontainer/)。

许可证

双重许可:

  • AGPL-3.0(LICENSE):个人、协会以及教育或研究用途可免费使用;
  • 商业许可证,面向各种规模的企业: 参见 COMMERCIAL-LICENSE.md。

贡献须遵循 CLA.md 中的协议。

属于 Lyra 生态系统的一部分

采用与 fedora-agents (带关联 ID 的审计日志、MCP 注释)和 Lyra 相同的理念;后者是一款以法语为先的语音助手, 会在每次敏感操作前要求人工确认。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。