list_tickets
Lister les tickets
Tickets du support, les plus recents d'abord. status : ouvert, en_cours, resolu ou ferme.
limitstatus
io.github.amineutron由 GitHub 帳號 amineutron 發布v0.2.0更新於 Nov 7, 2026
Enterprise MCP guard: roles, allowlist policy, human confirmation, JSONL audit log, example tools.
具防護機制的企業 MCP 範本:角色權限、白名單政策、人工確認與 JSONL 稽核日誌,並附工單、通訊錄與盤點範例工具。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
[CI] [License: AGPL-3.0 + commercial] [Python 3.11+]
English summary. A template for MCP servers that an IT department can let an
LLM agent use: every tool call goes through an allowlist policy (policy.yaml),
a caller role (lecteur / operateur / admin, derived from the MCP tool
annotations), per-parameter allowed values, a human confirmation for destructive
actions (MCP elicitation, both the 2025-11-25 and 2026-07-28 protocols), and a
JSONL audit log (mode 0600, one correlation id per call). The mcp-agent-template package
ships two runnable examples: an enterprise one (tickets, a read-only LDAP-like
directory, a read-only SQL inventory, all on fictitious local data) and a generic
ops one (systemd and docker status, restart with confirmation). Local-first,
self-hosted, on-prem; no cloud, no telemetry. Dual licensed: AGPL-3.0, or a
commercial licence for companies of any size.
Donner des outils a un agent IA dans une entreprise pose toujours les memes questions : qui a le droit de faire quoi, qui a valide une action dangereuse, et ou est la trace. Ce depot est un modele (bouton « Use this template ») qui y repond une fois pour toutes, autour du SDK MCP officiel.
Chaque appel d'outil passe, dans l'ordre :
Liste blanche (policy.yaml) : un outil absent est refuse.
Role de l'appelant : le role minimal vient du type d'outil, et la politique peut seulement le durcir.
Valeurs permises : par exemple, seules certaines unites systemd peuvent etre redemarrees.
Confirmation humaine pour les outils destructifs : le client affiche la question a l'humain (elicitation MCP). Les controles 1 a 3 passent AVANT : on ne demande jamais a l'humain d'approuver ce que le role n'autorise pas. Tout ce qui n'est pas un « oui » explicite vaut refus, y compris un client qui ne sait pas poser la question.
Journal d'audit JSONL, fichier en 0600, un identifiant de correlation par
appel qui relie la decision, la confirmation et le resultat. Les parametres qui
ressemblent a des secrets (password, token, api_key...) sont masques.
Un refus renvoie une erreur lisible a l'agent, jamais un faux succes.
Dans un client MCP (Claude Code, Claude Desktop...) :
Le role vient pour l'instant de la configuration du client : chaque poste ou
chaque profil recoit le sien. La source du role est une petite interface
(RoleSource) : une authentification par jeton pourra s'y brancher sans toucher
aux outils.
Entreprise (--example enterprise), sur des donnees FICTIVES d'une societe
« Exemple SA » creees en local, sans aucun service externe :
list_tickets, get_ticket, create_ticket (la priorite « critique »
est reservee aux humains par la politique), close_ticket, delete_ticket
(admin + confirmation) ;search_directory, get_user,
group_members ;list_tables, query_inventory. Deux
verrous : la base est ouverte en mode=ro, et un autorisateur SQLite refuse
toute ecriture, PRAGMA ou ATTACH, meme cachee dans un WITH.Ops (--example ops) : service_status et list_containers en lecture,
restart_service limite aux unites listees par la politique, apres confirmation.
Pour brancher un vrai outil de tickets, un vrai annuaire LDAP ou une vraie base,
remplacer les classes de src/mcp_agent_template/examples/stores.py : les outils MCP et
la garde ne changent pas.
Un devcontainer est fourni (.devcontainer/).
Double licence :
Les contributions sont acceptees sous l'accord CLA.md.
Meme approche que fedora-agents (journal d'audit avec identifiant de correlation, annotations MCP) et Lyra, l'assistant vocal French-first qui fait confirmer l'humain avant chaque action sensible.
來源:README.md,提交 6a8960a
Lister les tickets
Tickets du support, les plus recents d'abord. status : ouvert, en_cours, resolu ou ferme.
limitstatusLire un ticket
Detail d'un ticket.
ticket_id必填Creer un ticket
Ouvre un ticket. priority : basse, normale, haute ou critique.
title必填priorityrequesterdescriptionClore un ticket
Passe un ticket a l'etat ferme avec sa resolution.
ticket_id必填resolution必填Supprimer un ticket
Supprime definitivement un ticket (confirmation humaine, role admin).
ticket_id必填Chercher dans l'annuaire
Personnes dont le nom, l'identifiant, le mail, la fonction ou le service contient query.
query必填include_inactiveFiche annuaire
Fiche d'une personne et ses groupes.
uid必填Membres d'un groupe
Identifiants des membres actifs d'un groupe de l'annuaire.
group必填Tables de l'inventaire
Tables et colonnes de la base d'inventaire (parc, licences, sauvegardes).
無需輸入參數。
Requete SQL (lecture seule)
Une requete SELECT sur l'inventaire ; toute ecriture est refusee par la base elle-meme.
sql必填limit已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
uvx mcp-agent-template --helpuvx mcp-agent-template serve --example enterprise # tickets, annuaire, inventaire (donnees fictives)uvx mcp-agent-template serve --example ops # systemd et dockeruvx mcp-agent-template check-policy policy.yaml # valide une politique et resume ses regles{ "mcpServers": { "entreprise": { "command": "uvx", "args": ["mcp-agent-template", "serve", "--example", "enterprise"], "env": { "MCP_AGENT_TEMPLATE_ROLE": "operateur" } } }}from mcp.server.mcpserver import MCPServerfrom 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.yamlversion: 1default: denytools: list_orders: {} cancel_order: allowed_values: order_id: ["1042", "1043"]uv syncuv run pytest # garde, politique, audit, exemples, protocoles 2025-11-25 et 2026-07-28, stdiouv run ruff check src tests