Skip to main content
Glama
Bamba4700

mcp-asterisk-socle

by Bamba4700

Module 1 — Socle Framework MCP & Sécurité

Serveur MCP sécurisé pour la supervision d'un PBX Asterisk.

Responsables : Khadim GUEYE, Gnilane NIANE Projet : Supervision Asterisk via Model Context Protocol

Ce module fournit le socle sur lequel se branchent :

  • Module 2 — Outils de supervision Asterisk (ARI/AMI)

  • Module 3 — Pipeline vocal Speech-to-Speech


Démarrage rapide

git clone https://github.com/Bamba4700/mcp-asterisk-socle.git
cd mcp-asterisk-socle
docker compose up -d

Trois conteneurs démarrent :

Service

Port

Rôle

keycloak-db

interne

Base PostgreSQL de Keycloak

keycloak

8080

Serveur d'identité (realm importé automatiquement)

mcp-server

8000

Le serveur MCP

Console Keycloak : http://localhost:8080 (admin / admin) Endpoint MCP : http://localhost:8000/mcp


Related MCP server: enterprise-auth-mcp-server

Comptes de test

Utilisateur

Mot de passe

Rôle

admin_demo

admin

admin — accès complet

superviseur_demo

admin

superviseur — lecture, analyse, écoute

operateur_demo

admin

operateur — lecture seule


Obtenir un jeton JWT

source load_secret.sh    # récupère le client_secret depuis Keycloak

curl -s -X POST http://localhost:8080/realms/mcp-asterisk/protocol/openid-connect/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password" \
  -d "client_id=mcp-server" \
  -d "client_secret=$KC_CLIENT_SECRET" \
  -d "username=admin_demo" \
  -d "password=admin"

Le jeton est valable 5 minutes.


Ajouter un outil (Modules 2 et 3)

Créez votre fichier dans src/tools/, puis importez-le dans src/server.py.

Outil de lecture (RBAC seul)

from fastmcp.server.dependencies import CurrentAccessToken
from src.server import mcp
from src.security.rbac import require_role
from src.hitl.sanitizer import sanitize

@mcp.tool()
def list_active_channels(token=CurrentAccessToken()) -> dict:
    """Liste les canaux actifs du PBX."""
    require_role(token, "operateur")
    resultat = ...           # votre code ARI/AMI
    return sanitize(resultat)

Outil de pilotage (RBAC + confirmation humaine)

from fastmcp import Context
from src.hitl.confirmation import demander_confirmation

@mcp.tool()
async def hangup_channel(
    channel_id: str,
    ctx: Context,
    token=CurrentAccessToken(),
) -> str:
    """Raccroche un canal Asterisk."""
    require_role(token, "admin")
    await demander_confirmation(
        ctx, f"Confirmez le raccrochage du canal {channel_id} ?"
    )
    ...                      # votre code ARI/AMI
    return sanitize(f"Canal {channel_id} raccroche.")

Règles à respecter

  1. Tout outil appelle require_role(token, "...") en première ligne

  2. Tout outil de pilotage appelle demander_confirmation(...) avant d'agir

  3. Toute sortie passe par sanitize(...) avant d'être retournée


Sécurité implémentée

Exigence (cahier des charges A.6)

Implémentation

RBAC 3 rôles

src/security/rbac.py

Jetons JWT via Keycloak (OIDC)

src/security/auth.py — JWTVerifier

Interdiction du token passthrough

Le jeton n'authentifie que la session MCP

Consentement humain obligatoire

src/hitl/confirmation.py — primitive Elicitation

Sorties = entrées non fiables

src/hitl/sanitizer.py


Avertissement

Cette configuration est destinée au développement local. Avant tout déploiement réel : changer les mots de passe (admin/admin, POSTGRES_PASSWORD), activer HTTPS, et remplacer start-dev par start.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Security-enforcing MCP proxy that sits between an AI agent and any number of downstream MCP servers, intercepting every tool call through a capability-token policy gateway that can allow, deny, or escalate to human approval before the call reaches any real tool. It also exposes built-in operator tools for approval workflows, audit trail queries, token management, voice/HUD output, and hierarchical
    21
    14
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for enterprise authentication and authorization — JWT validation, OIDC token inspection, OAuth 2.0 introspection, and role-based access control for AI agents.
    8
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a secure gRPC transport layer for the Model Context Protocol (MCP) with mutual TLS, token-based authentication, and fine-grained authorization. Includes comprehensive telemetry and a real-time visualization dashboard for monitoring AI model interactions and security events.
    1
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that lets AI assistants inspect and control Asterisk and FreeSWITCH PBX systems, enabling natural language queries about live switch status, channels, registrations, and call control.
    10
    37 npm
    16
    MIT