MCP (Model Context Protocol)
Melis intègre le Model Context Protocol pour que les agents IA puissent appeler des outils — lire/écrire des fichiers, faire des opérations base de données, scaffolder des modules — pendant une exécution. Cette page explique le fonctionnement et comment ajouter votre propre outil MCP.
Client uniquement, en v5
Dans cette documentation v5 figée, Melis agit uniquement comme client MCP : il lance des serveurs MCP locaux (processus PHP, transport stdio) et invoque leurs outils quand un modèle le demande. Exposer les outils de Melis à des clients MCP externes sort du périmètre de cette page, et le transport est stdio uniquement.
Cela a changé après la v5. Les versions actuelles agissent aussi comme serveur MCP, en exposant les outils en Streamable HTTP derrière une liste d'autorisation stockée en base. Voir le guide MCP actuel — cette page n'est pas mise à jour pour cela.
Serveurs MCP intégrés
Par défaut, le moteur fournit quatre serveurs MCP (déclarés dans melis-ai-engine/config/app.interface.php et les mcp.tools.php des modules) :
| Serveur | Module | Outils (exemples) |
|---|---|---|
file_operations | melis-ai | readFile, createFile, updateFiles, createDirectory, deleteFile… |
database_operations | melis-ai | getTableStructure, createDatabaseTable, selectData, insertData, updateData… |
tool_creator | melis-ai-tool-creator | createModule, activateModule, deactivateModule |
minitemplate_creator | melis-ai-community-extensions | readSiteAssets, getSitePublicUrl, renderMinitemplatePreview… |
Chacun tourne comme un exécutable autonome, p. ex. vendor/melisplatform/melis-ai/mcp/dbmcp/bin/server.php.
Le flux d'un appel d'outil
Quand un modèle (Claude/Gemini) demande à appeler une fonction pendant l'exécution d'un agent :
- Le service provider demande au service MCP si c'est un outil MCP —
MelisAIEngineMcpService::isMcpTool($name)(outils marqués'mcp' => true, ou connus d'un serveur). - Si oui,
invokeTool($name, $args)trouve le bon serveur, (ré)utilise son processus, et envoie une requête JSON-RPCtools/callvia stdio. - Le serveur exécute l'outil et renvoie le résultat, réinjecté dans le modèle.
Le client MCP vit dans melis-ai-engine/src/Service/MelisAIEngineMcpService.php (composé de traits pour la communication, la gestion des serveurs, la gestion des outils, la découverte de schémas, le circuit-breaking et le logging).
La config mcp.tools.php
Un module expose des outils MCP en fournissant un config/mcp.tools.php qui déclare (a) les schémas d'outils pour le moteur IA et (b) le serveur qui les traite. Exemple (abrégé, depuis melis-ai-tool-creator/config/mcp.tools.php) :
return [
'plugins' => ['melisaiengine' => ['datas' => [
'function_declarations' => [
[
'name' => 'createModule',
'description' => 'Create a Laminas module with all components.',
'mcp' => true, // routé vers un serveur MCP
'input_schema' => [
'type' => 'object',
'properties' => [
'moduleName' => ['type' => 'string'],
'functionality' => ['type' => 'string'],
'needDBTable' => ['type' => 'boolean'],
],
'required' => ['moduleName', 'functionality', 'needDBTable'],
],
],
],
]]],
'mcp' => ['servers' => [
'tool_creator' => [
'enabled' => true,
'module' => 'melis-ai-tool-creator',
'args' => [__DIR__ . '/../mcp/toolcreator/bin/server.php'],
'timeout' => 600,
'tools' => ['createModule', 'activateModule', 'deactivateModule'],
],
]],
];Ajouter votre propre outil MCP
1. Écrire le serveur
vendor/.../votre-module/mcp/votreserveur/bin/server.php :
#!/usr/bin/env php
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use Mcp\Server;
use Mcp\Server\Transport\StdioTransport;
use VotreNs\VosOperations;
$server = Server::builder()
->setServerInfo('votre-mcp', '1.0.0')
->addTool([VosOperations::class, 'faireQuelqueChose'])
->build();
$server->run(new StdioTransport());2. Implémenter les opérations
namespace VotreNs;
use Mcp\Capability\Attribute\McpTool;
class VosOperations
{
#[McpTool(name: 'faireQuelqueChose', description: 'Ce que fait cet outil')]
public function faireQuelqueChose(string $param1): array
{
return ['success' => true, 'result' => /* … */];
}
}3. Le déclarer & charger la config
Ajoutez un config/mcp.tools.php (comme ci-dessus) déclarant les function_declarations et l'entrée mcp.servers, puis includez-le depuis le Module::getConfig() de votre module.
Le moteur gère pour vous le lancement du processus, le JSON-RPC sur stdio, les timeouts, les retries et le circuit-breaking. Les modèles qui supportent l'appel d'outils peuvent alors invoquer votre outil pendant l'exécution d'un agent.
Inspecter les serveurs MCP
Le backoffice fournit un MCP Inspector (sous Melis AI) — contrôleur vendor/melisplatform/melis-ai/src/Controller/McpInspectorController.php — qui lance l'UI officielle MCP Inspector sur un serveur choisi pour parcourir et tester ses outils.
Sécurité
Les opérations MCP fichiers/DB sont sandboxées via allowed_paths / forbidden_paths configurés dans melis-ai-engine/config/app.interface.php (p. ex. module, public, config, /tmp autorisés ; /etc, /bin, /root… interdits). Vérifiez-les avant d'activer des outils en écriture.
Fichiers clés
| Sujet | Chemin |
|---|---|
| Service client MCP | vendor/melisplatform/melis-ai-engine/src/Service/MelisAIEngineMcpService.php |
| Trait gestion d'outils | vendor/melisplatform/melis-ai-engine/src/Service/Traits/Mcp/McpToolManagementTrait.php |
| Config des serveurs | vendor/melisplatform/melis-ai-engine/config/app.interface.php |
Exemple mcp.tools.php | vendor/melisplatform/melis-ai-tool-creator/config/mcp.tools.php |
| Exemple de serveur | vendor/melisplatform/melis-ai/mcp/dbmcp/bin/server.php |
| Inspector | vendor/melisplatform/melis-ai/src/Controller/McpInspectorController.php |