MCP V1.1 â Transport HTTP Streamable (TLR-006)
Contexte :
tlr-mcpv0.1.3 ne supporte que le transport stdio (mcp:serve). Pour que les instances Claude Code se connectent directement au VPS sans dépendance locale (WSL + PHP), il faut implémenter le transport HTTP Streamable (spec MCP 2025-11-25). Résultat : un.mcp.jsonréduit à une URL, zéro WSL.
Spec V1 stdio de référence : ia-mcp.md.
1. Architecture cible
Claude Code (.mcp.json)
ââ url: https://mcp.telaria.dev/mcp
ââ Authorization: Bearer <token>
â
VPS â Apache
ââ mcp.telaria.dev â DocumentRoot /var/www/telaria-dev/public
ââ POST /mcp â JSON-RPC (rĂ©ponse JSON)
ââ GET /mcp â ouverture canal SSE (optionnel V1.1)
2. PérimÚtre tlr-mcp bundle
2.1 Nouveau contrĂŽleur McpHttpController
src/Controller/McpHttpController.php
Route POST /mcp â chemin principal :
- Lire
Authorization: Bearer <token>â 401 si absent - Valider le token :
hash('sha256', $token)â lookupmcp_api_client.token_hashâ 401 si invalide - VĂ©rifier non rĂ©voquĂ© + scopes â 403 si insuffisant
- Résoudre tenant/projet depuis
mcp_api_client â mcp_project â mcp_tenant - Parser le body JSON-RPC 2.0
- Dispatcher via
ExecutionPipeline(mĂȘme logique que stdio) - Logger dans
mcp_tool_audit_log - Retourner la réponse JSON-RPC (
Content-Type: application/json)
Route GET /mcp â canal SSE (optionnel) :
- Retourner
Content-Type: text/event-streamavec un événementendpoint - Permet aux clients MCP conformes 2025-11-25 de négocier le mode streaming
Header MCP-Session-Id :
- PremiĂšre requĂȘte : gĂ©nĂ©rer un UUID v4, le renvoyer dans le header
MCP-Session-Id - RequĂȘtes suivantes : si le header est prĂ©sent, le valider (optionnel V1.1 â log seulement)
Erreurs auth standardisées :
| Cas | HTTP | Code JSON-RPC |
|---|---|---|
| Token absent | 401 | -32001 AUTH_REQUIRED |
| Token invalide / révoqué | 401 | -32001 AUTH_REQUIRED |
| Scope manquant | 403 | -32003 FORBIDDEN_TOOL |
2.2 Auto-montage dans Symfony
Route dĂ©clarĂ©e dans Resources/config/routes.xml du bundle â telaria-app l'hĂ©rite sans modification de ses propres fichiers de config.
Aucune modification de security.yaml dans telaria-app â l'auth est entiĂšrement gĂ©rĂ©e dans le contrĂŽleur (stateless).
3. Infrastructure VPS
3.1 Sous-domaine mcp.telaria.dev
Nouveau vhost Apache sur le VPS staging. à intégrer dans tlr-ansible / tlr-vhosts.
<VirtualHost *:443> ServerName mcp.telaria.dev SSLEngine on SSLCertificateFile /etc/letsencrypt/live/telaria.dev/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/telaria.dev/privkey.pem DocumentRoot /var/www/telaria-dev/public <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.5-fpm.sock|fcgi://localhost" </FilesMatch> <Directory /var/www/telaria-dev/public> AllowOverride None Require all granted FallbackResource /index.php </Directory> ErrorLog ${APACHE_LOG_DIR}/mcp-telaria-dev-error.log CustomLog ${APACHE_LOG_DIR}/mcp-telaria-dev-access.log combined </VirtualHost>
Le sous-domaine partage le DocumentRoot de
telaria.devâ mĂȘme app Symfony, Symfony dispatche sur/mcp.
3.2 DNS + Certbot
- DNS : ajouter entrée
mcp.telaria.devâ mĂȘme IP quetelaria.dev - Certbot : Ă©tendre le certificat existant (
--expand) ou obtenir un certificat dédié
4. .mcp.json par instance (aprĂšs livraison)
{ "mcpServers": { "tlr-mcp": { "url": "https://mcp.telaria.dev/mcp", "headers": { "Authorization": "Bearer <token-instance>" } } } }
| Instance | DépÎt | Token |
|---|---|---|
| Atlas | C:/src/tlr-doc |
client id=1, déjà seedé sur telaria-dev |
| Lead Tech | C:/src/telaria-app |
à générer aprÚs livraison |
| Chef | C:/src/tlr-blueprint |
à générer aprÚs livraison |
Les tokens sont émis via app:mcp:seed sur le VPS staging (cf. mcp-mise-en-service.md).
5. Tests
ContainerWiringTest: vérifier queMcpHttpControllerest dans le conteneur- Test fonctionnel :
POST /mcpavec token valide â rĂ©ponse JSON-RPC 200 - Test fonctionnel :
POST /mcpsans token â 401 - Test fonctionnel :
POST /mcptoken rĂ©voquĂ© â 403
6. Hors périmÚtre V1.1
- SSE full streaming des résultats d'outils (réponses synchrones suffisantes en V1.1)
- Multi-tenant HTTP dynamique
- Invalidation de session active (
MCP-Session-Iden lecture seule) - Déploiement prod
telaria.frâ staging d'abord, prod aprĂšs feu vert Chef
Références
- Spec MCP 2025-11-25 â Streamable HTTP transport
- Spec V1 stdio : ia-mcp.md
- Guide mise en service : mcp-mise-en-service.md
- Gouvernance tokens : mcp-gouvernance-instances.md