mcpField
M
mcp-agent-template

mcp-agent-template

Local
github.comDeveloper Tools0Updated 1w ago

About mcp-agent-template

mcp-agent-template is a guarded MCP server template for enterprise teams that need to give agents tools while controlling permissions and auditing calls. It checks caller roles, allowlist policies and human approval for destructive actions, and includes local examples.

Key features

  1. 01Allowlist-based tool policy
  2. 02Role-based call permissions
  3. 03Allowed parameter values
  4. 04Human approval for destructive actions
  5. 05JSONL audit logs with correlation IDs
  6. 06Enterprise and operations examples

Use cases

  1. 01Set tool access rules for internal agents
  2. 02Require approval before restarting services
  3. 03Audit ticket, directory or inventory calls
  4. 04Build a guarded MCP server from local examples

MCP support

This template builds MCP servers that check each tool call against policy, caller role and parameter constraints, with human confirmation where required, and record calls in a JSONL audit log. It uses the official MCP SDK, and its examples run over stdio with MCP clients.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"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>"
}
}
}
}
Run commanduvx mcp-agent-template
Environment variables to set
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.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypimcp-agent-template0.2.0

Tools

10

Saved tool list · updated 1w ago

ParameterTypeRequiredDescription
limitintegerNo
statusanyNo

Details

From the project README

mcp-agent-template — un agent MCP d'entreprise, garde

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.

Ce que fait la garde

Chaque appel d'outil passe, dans l'ordre :

  1. Liste blanche (policy.yaml) : un outil absent est refuse.

  2. Role de l'appelant : le role minimal vient du type d'outil, et la politique peut seulement le durcir.

    Type d'outilAnnotation MCP publieeRole minimal
    lecturereadOnlyHintlecteur
    ecriture non destructrice—operateur
    destructifdestructiveHintadmin + confirmation humaine
  3. Valeurs permises : par exemple, seules certaines unites systemd peuvent etre redemarrees.

  4. 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.

  5. 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.

Essayer

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

Dans un client MCP (Claude Code, Claude Desktop...) :

{
  "mcpServers": {
    "entreprise": {
      "command": "uvx",
      "args": ["mcp-agent-template", "serve", "--example", "enterprise"],
      "env": { "MCP_AGENT_TEMPLATE_ROLE": "operateur" }
    }
  }
}
VariableRoleDefaut
MCP_AGENT_TEMPLATE_ROLErole de l'appelant : lecteur, operateur, adminlecteur
MCP_AGENT_TEMPLATE_CONFIRMelicit : l'humain confirme via le client ; client : le client confirme deja lui-meme (il lit destructiveHint)elicit
MCP_AGENT_TEMPLATE_AUDIT_DIRdossier du journal d'audit~/.local/state/mcp-agent-template
MCP_AGENT_TEMPLATE_DATA_DIRbases SQLite des exemples~/.local/state/mcp-agent-template-demo

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.

Les exemples

Entreprise (--example enterprise), sur des donnees FICTIVES d'une societe « Exemple SA » creees en local, sans aucun service externe :

  • support : list_tickets, get_ticket, create_ticket (la priorite « critique » est reservee aux humains par la politique), close_ticket, delete_ticket (admin + confirmation) ;
  • annuaire en lecture seule, facon LDAP : search_directory, get_user, group_members ;
  • inventaire en SQL lecture seule : 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.

Ecrire son propre serveur

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"]

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.

Developpement

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

Un devcontainer est fourni (.devcontainer/).

Licence

Double licence :

  • AGPL-3.0 (LICENSE) : gratuite pour les particuliers, les associations et l'enseignement ou la recherche ;
  • licence commerciale pour les entreprises, quelle que soit leur taille : voir COMMERCIAL-LICENSE.md.

Les contributions sont acceptees sous l'accord CLA.md.

Fait partie de l'ecosysteme Lyra

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.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.