Aller au contenu principal

Hébergement MCP (mcp-host)

Héberge les serveurs MCP stdio déclarés par tenant et par projet dans le Manager (navin-mcp-host) : chaque serveur est démarré à la demande, isolé dans son propre processus (isolation process) ou dans son propre conteneur Podman sans root sur le réseau de son projet de tenant (isolation container) avec ses limites de mémoire et de concurrence, et servi en HTTP streamable sous /t/{tenant}/p/{project}/s/{name}/mcp avec son propre jeton porteur. La liste des serveurs hébergés est écrite par le Manager (servers.json) et rechargée sans redémarrage.

Généré depuis catalog/services/mcp-host.yaml : ne pas modifier à la main.

Résumé​

Version1.0.0
Usageinstaller et configurer
Couchefonctionnelle (catalogue IA)
CatégoriePasserelles et répartition de charge
Méthodes d'installationpython
Connexion externenon
Réservé au bac à sablenon

Licence​

Identifiant SPDXApache-2.0
Politique de licencelicence socle (MIT ou Apache-2.0)
Exception de licence-
Composant de la plateformenavin-mcp-host

Paquets et artefacts​

Un paquet que publie le projet du service (son image, son archive binaire, son paquet Python ou système) porte la licence du service ; un paquet tiers porte la licence écrite sur sa ligne, lue dans les métadonnées officielles du projet amont.

TypePaquetVersionLicenceDétails
image de conteneurdocker.io/library/node22.23.4-bookworm-slimApache-2.0clé d'image node, condensé sha256:4b150b48b4116e2a22f2c39cc27025fbf4f153e2078fd3b14d159fdb5c7279da
image de conteneurdocker.io/astral/uv0.9.30-python3.12-bookworm-slimApache-2.0clé d'image python, condensé sha256:e5b65587bce7de595f299855d7385fe7fca39b8a74baa261ba1b7147afa78e58
paquet Pythonnavin-mcp-host1.0.0Apache-2.0interpréteurs, par ordre de préférence python3.12, python3.11, python3.10

Les images sont épinglées par étiquette dans le descripteur, et par condensé (digest) quand le descripteur en déclare un (le bundle hors ligne refuse alors une image téléchargée qui ne le porte pas) ; le condensé est enregistré dans le miroir du Manager à l'import du bundle hors ligne, et chaque téléchargement ou chargement est vérifié par rapport à lui.

Systèmes et architectures pris en charge​

MéthodeSystèmes d'exploitationArchitectures
pythonfamille RHEL (dnf), famille Debian (apt), Arch Linux (pacman)x86_64, aarch64 (non restreintes par le descripteur)

Systèmes hôtes certifiés : RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). Le contrôle préalable des hôtes accepte ces systèmes (une autre version d'une famille connue donne un avertissement, une version en fin de vie est refusée) et les architectures x86_64 et aarch64.

Prérequis​

Hôte​

  • au moins 1024 Mo de mémoire (bloquant, memory).
  • le programme npx installé sur l'hôte, seulement quand isolation vaut process (avertissement, npx_present).
  • le programme uvx installé sur l'hôte, seulement quand isolation vaut process (avertissement, uvx_present).
  • le programme podman installé sur l'hôte, seulement quand isolation vaut container (bloquant, podman_present).
  • plages d'uid et de gid subordonnés de l'utilisateur navin-mcp-host dans /etc/subuid et /etc/subgid (créées par user.ensure sur un agent root avec usermod), seulement quand isolation vaut container (bloquant, subordinate_ids).

Réseau et ports​

ComposantNom du portPortOuvert dans le pare-feu de l'hôte
mcp-hostmcp8790/tcpoui

Services et connexions nécessaires​

Ce service n'a aucune dépendance.

Méthodes et modes d'installation​

MéthodeDéfautCe que la méthode utilise
pythonouiun environnement virtuel Python qui contient les paquets Python du descripteur

Composants​

ComposantTypeMéthodes d'installationPorts
Hôte MCP (mcp-host)maîtrepython8790/tcp

Instance unique (single) (par défaut)​

Une seule instance héberge tous les serveurs MCP du cluster.

Ce que le mode déploie :

ComposantPlacement
mcp-hostmin 1, max 1

Réparti (replicated)​

Deux instances ou plus ; chaque serveur MCP est placé sur une seule instance, choisie par int(sha256(id)[:8], 16) modulo le nombre d'instances triées par id.

Ce que le mode déploie :

ComposantPlacement
mcp-hostmin 2, recommandé 2

Installer ce service​

L'assistant d'installation du Navin Manager planifie, valide et exécute l'installation ; il faut la permission services:install sur le cluster.

  1. Ouvrez l'assistant. Dans Clusters, choisissez l'action de ligne Installer des services du cluster cible. L'assistant s'ouvre sur sa première étape, Service.

  2. Choisissez le service. À l'étape Service, sélectionnez Hébergement MCP. La carte affiche la licence Apache-2.0.

  3. Choisissez les hôtes et le mode. À l'étape Hôtes, cochez les hôtes, puis choisissez le Mode : single (par défaut), replicated. Chaque mode déploie les composants listés dans Méthodes et modes d'installation.

  4. Liaisons. Ce service n'a aucune dépendance : l'étape Liaisons n'a rien à lier.

  5. Configurez. À l'étape Configuration, relisez les paramètres (voir Paramètres de configuration). Les mots de passe laissés vides avec une valeur générée par défaut sont générés et scellés par le Manager.

  6. Relisez et installez. À l'étape Installation, le Manager valide le plan et affiche l'ordre d'installation ; quand il indique « Le plan est valide. Prêt pour l'installation. », choisissez Installer. Un mode hautement disponible n'est installé que si ses contrôles HA réussissent.

  7. Vérifiez. L'opération se termine quand les contrôles de santé de chaque instance réussissent (voir Contrôles de santé) ; le service apparaît alors en marche dans Services.

Haute disponibilité​

Clusteraucun (none)
Haute disponibilitéredondance (redundancy)
Basculeaucun (none)
Réplicationaucun (none)
Quorumaucun (none)
Découvertestatique (static)
Point d'entréen'importe quel nœud (any-node)
Documentation officiellehttps://modelcontextprotocol.io/specification/2025-03-26/basic/transports
Paramètre TLS entre pairstls_enabled
Authentification entre pairsAucun trafic entre les instances : chacune lit son propre servers.json écrit par le Manager.

Topologie par mode​

ModesNiveau le plus haut du catalogueRépartitionComposant du quorumDomaines de panneDescription
singleautonome (standalone)unique (single)--Une seule instance héberge tous les serveurs ; c'est un point unique de défaillance.
replicatedautonome (standalone)actif-actif (active-active)-2Les serveurs sont répartis sur les instances, chaque serveur sur une seule instance ; la charge est partagée, une instance en panne n'arrête que ses propres serveurs.

Remarques​

  • Répartition et non haute disponibilité : un serveur n'est pas déplacé quand son instance tombe ; le Manager le replace à la prochaine application de l'hébergement.

Paramètres de configuration​

Réseau​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Port MCP (port)port8790-nonnonouiPort du point d'accès HTTP streamable des serveurs hébergés, de /healthz et de /metrics.
TLS (tls_enabled)boolfalse-nonnonouiServir le point d'accès en TLS avec un certificat émis par l'autorité de la console.
Taille maximale des requêtes (max_body_kb)int1024min 16, max 65536nonnonnonKilo-octets acceptés dans une requête MCP ; les corps plus grands sont refusés avec 413.

Limites des serveurs hébergés​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Mémoire par serveur (default_memory_mb)int512min 64, max 65536nonnonnonLimite de mémoire par défaut (Mo) du processus d'un serveur hébergé ; un serveur peut fixer sa propre limite.
Requêtes simultanées par serveur (default_max_concurrency)int8min 1, max 256nonnonnonNombre par défaut de requêtes traitées en même temps par un serveur hébergé ; les autres attendent.
Délai des requêtes (request_timeout_s)int60min 1, max 3600nonnonnonSecondes avant l'abandon d'un appel à un serveur hébergé.
Délai d'inactivité (idle_timeout_s)int600min 10, max 86400nonnonnonSecondes sans requête après lesquelles le processus d'un serveur hébergé est arrêté (relancé à la requête suivante).
Nombre maximal de serveurs par instance (max_servers)int200min 1, max 10000nonnonnonServeurs hébergés acceptés par une instance ; les entrées en trop de servers.json sont ignorées et signalées.

Exécution​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
PATH des serveurs (runtime_path)string/usr/local/bin:/usr/bin:/bin-nonnonnonPATH donné aux processus des serveurs hébergés (où se trouvent npx, uvx ou les commandes des serveurs) ; avec l'isolation container, PATH des commandes podman (les serveurs gardent le PATH de leur image).
Origines autorisées (allowed_origins)json[]-nonnonnonEn-têtes Origin acceptés des navigateurs (liste JSON) ; vide refuse toute origine de navigateur.
Niveau de journalisation (log_level)enuminfodebug, info, warning, errornonnonnonVerbosité du journal de l'environnement d'exécution.

Isolation des serveurs​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Isolation (isolation)enumprocessprocess, containernonnonouiprocess : chaque serveur est un processus enfant de l'hôte (séparation par la configuration, serveurs validés du catalogue de l'entreprise seulement). container : chaque serveur tourne dans un conteneur Podman sans root, un réseau par projet de tenant, système de fichiers racine en lecture seule, aucune capacité, quotas de mémoire et de processus ; nécessaire pour les serveurs non fiables.
Processus par conteneur (container_pids_limit)int256min 16, max 65536nonnonnonNombre maximal de processus et de fils d'exécution d'un conteneur de serveur (podman --pids-limit).
Espace temporaire par conteneur (container_tmpfs_mb)int64min 1, max 4096nonnonnonTaille (Mo) du /tmp en mémoire d'un conteneur de serveur, seul dossier inscriptible avec /work.

Points d'accès​

Point d'accèsSchémaComposantPortCheminParamètre TLSParamètres de liaisonSecrets de liaisonCommande de provisionnement
mcphttpmcp-host8790 (port)-tls_enabled---

Commandes​

CommandeComposantCibleDescription
État (status)mcp-hosttous les hôtesDemande à chaque instance si elle répond sur /healthz.
Journaux récents (logs)mcp-hosthôte choisiDernières lignes du journal de l'environnement d'exécution.

Contrôles de santé​

Vivacité (par instance)​

ComposantContrôleDétails
mcp-hostHTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.ip or '127.0.0.1' }}:{{ config.port }}/healthzAttendu 200 ; 30 tentatives ; intervalle 2 s ; délai 5 s

Disponibilité (contrôle du service)​

ContrôleDétails
HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.ip or '127.0.0.1' }}:{{ config.port }}/healthzAttendu 200 ; 10 tentatives ; intervalle 2 s ; délai 5 s

Contrôles préalables​

ContrôleTypeSignificationSévéritéComposants
memorymemory_mb {"min": 1024}au moins 1024 Mo de mémoirebloquanttous les composants
mcp_port_freeport_free {"param": "port"}port 8790 libre sur l'hôtebloquanttous les composants
npx_presentbinary {"name": "npx"}le programme npx installé sur l'hôte, seulement quand isolation vaut processavertissementtous les composants
uvx_presentbinary {"name": "uvx"}le programme uvx installé sur l'hôte, seulement quand isolation vaut processavertissementtous les composants
podman_presentbinary {"name": "podman"}le programme podman installé sur l'hôte, seulement quand isolation vaut containerbloquanttous les composants
subordinate_idssubordinate_ids {"user": "navin-mcp-host"}plages d'uid et de gid subordonnés de l'utilisateur navin-mcp-host dans /etc/subuid et /etc/subgid (créées par user.ensure sur un agent root avec usermod), seulement quand isolation vaut containerbloquanttous les composants

Désinstallation​

Chemins supprimés quand les données sont purgées : {{ paths.data }}, {{ paths.log }}.

Liens rapides​

  • Métriques : {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn }}:{{ config.port }}/metrics

Documentation amont​