DéveloppeursServeur MCP

Serveur MCP Hostwolf Apps

@hostwolf/apps-mcp permet aux assistants IA de déployer et de faire tourner vos apps sur Hostwolf Apps. Il fonctionne avec Claude, Cursor, VS Code et tout autre client compatible avec le Model Context Protocol. Demandez par exemple :

  • « Pourquoi le dernier déploiement de ma boutique a-t-il échoué ? »
  • « Déploie github.com/acme/api sur mon serveur d’applications, à l’écoute sur le port 8080. »
  • « Définis STRIPE_KEY sur l’app api et redéploie-la. »
  • « Crée une petite base de données Postgres à Amsterdam et connecte-la à la boutique. »
  • « Autorise la boutique à monter jusqu’à 4 copies, mais garde la mise à l’échelle automatique sous 40 $ par mois. »
  • « Ajoute un disque de 50 Go avec sauvegardes à mon serveur d’applications, et donne-moi d’abord le prix. »

Configuration#

  1. Créez un jeton d’API dans la console sous Clés et jetons → Jetons d’API. Cochez Lecture, Écriture et Déploiement pour un usage complet ; ajoutez Lecture des données sensibles si l’assistant doit lire les journaux et les valeurs des variables.
  2. Connectez votre client. Vous pouvez utiliser le serveur hébergé sur https://app.hostwolf.net/mcp (rien à installer), ou le lancer vous-même depuis le téléchargement (nécessite Node.js 18+).

Hébergé : https://app.hostwolf.net/mcp#

Rien à installer, et toujours la dernière version. Votre client envoie votre jeton avec chaque requête ; nous ne le stockons jamais.

Claude Code

claude mcp add --transport http hostwolf-apps https://app.hostwolf.net/mcp --header "Authorization: Bearer your_token"

Claude Desktop

Claude Desktop ne lance que des serveurs locaux ; il se connecte donc au serveur hébergé via mcp-remote. Ajoutez ceci à claude_desktop_config.json (Settings → Developer → Edit config) :

{
  "mcpServers": {
    "hostwolf-apps": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://app.hostwolf.net/mcp", "--header", "Authorization:${AUTH_HEADER}"],
      "env": { "AUTH_HEADER": "Bearer your_token" }
    }
  }
}

Cursor

Ajoutez ceci à ~/.cursor/mcp.json, ou à .cursor/mcp.json dans un projet :

{
  "mcpServers": {
    "hostwolf-apps": {
      "url": "https://app.hostwolf.net/mcp",
      "headers": { "Authorization": "Bearer your_token" }
    }
  }
}

VS Code

Ajoutez ceci à .vscode/mcp.json :

{
  "servers": {
    "hostwolf-apps": {
      "type": "http",
      "url": "https://app.hostwolf.net/mcp",
      "headers": { "Authorization": "Bearer your_token" }
    }
  }
}

Ajoutez ?readonly=1 à l’URL (https://app.hostwolf.net/mcp?readonly=1) pour n’exposer que les outils de lecture.

Le lancer vous-même#

Le même serveur, en téléchargement. Il tourne sur votre ordinateur, si bien que votre jeton n’en sort jamais.

Claude Code

claude mcp add hostwolf-apps -e HOSTWOLF_APPS_TOKEN=your_token -- npx -y https://app.hostwolf.net/dl/hostwolf-apps-mcp-0.2.1.tgz

Claude Desktop

Ajoutez ceci à claude_desktop_config.json (Settings → Developer → Edit config) :

{
  "mcpServers": {
    "hostwolf-apps": {
      "command": "npx",
      "args": ["-y", "https://app.hostwolf.net/dl/hostwolf-apps-mcp-0.2.1.tgz"],
      "env": { "HOSTWOLF_APPS_TOKEN": "your_token" }
    }
  }
}

Cursor

Ajoutez ceci à ~/.cursor/mcp.json, ou à .cursor/mcp.json dans un projet :

{
  "mcpServers": {
    "hostwolf-apps": {
      "command": "npx",
      "args": ["-y", "https://app.hostwolf.net/dl/hostwolf-apps-mcp-0.2.1.tgz"],
      "env": { "HOSTWOLF_APPS_TOKEN": "your_token" }
    }
  }
}

VS Code

Ajoutez ceci à .vscode/mcp.json :

{
  "servers": {
    "hostwolf-apps": {
      "command": "npx",
      "args": ["-y", "https://app.hostwolf.net/dl/hostwolf-apps-mcp-0.2.1.tgz"],
      "env": { "HOSTWOLF_APPS_TOKEN": "your_token" }
    }
  }
}

Réglages#

Pour le serveur que vous lancez vous-même ; le serveur hébergé accepte plutôt ?readonly=1 dans son URL.

VariableSignification
HOSTWOLF_APPS_TOKENObligatoire. Votre jeton d’API depuis Clés et jetons.
HOSTWOLF_READONLY1 pour n’exposer que les outils qui lisent, sans jamais rien modifier.
HOSTWOLF_APPS_URLURL de la console (par défaut https://console.app.hostwolf.net).
HOSTWOLF_NO_UPDATE_CHECK1 pour ignorer la recherche d’une version plus récente au démarrage.

Héberger vous-même le serveur HTTP#

hostwolf-apps-mcp --http lance le même endpoint Streamable HTTP que celui que nous hébergeons sur app.hostwolf.net/mcp, pour les équipes qui veulent le leur. Il est sans état : chaque requête porte le propre jeton de l’appelant sous la forme Authorization: Bearer …, et rien n’est stocké.

Node

npm install -g https://app.hostwolf.net/dl/hostwolf-apps-mcp-0.2.1.tgz
HOST=0.0.0.0 PORT=8791 hostwolf-apps-mcp --http
curl http://localhost:8791/mcp/health

Docker

cat > Dockerfile <<'EOF'
FROM node:22-alpine
RUN npm install -g --omit=dev https://app.hostwolf.net/dl/hostwolf-apps-mcp-0.2.1.tgz && npm cache clean --force
ENV HOST=0.0.0.0 PORT=8791
USER node
EXPOSE 8791
CMD ["hostwolf-apps-mcp", "--http"]
EOF
docker build -t hostwolf-apps-mcp .
docker run -d --name hostwolf-apps-mcp --memory 192m -p 127.0.0.1:8791:8791 hostwolf-apps-mcp

Placez-le derrière votre proxy HTTPS, puis pointez vos clients vers https://your-host/mcp comme dans la configuration hébergée ci-dessus.

VariableSignification
PORT / HOSTAdresse d’écoute (par défaut 127.0.0.1:8791).
MCP_PATHChemin de l’endpoint (par défaut /mcp ; contrôle de santé sur /mcp/health).
HOSTWOLF_APPS_URLURL de la console (par défaut https://console.app.hostwolf.net).
MCP_TRUST_CF_IP1 pour limiter les requêtes selon l’en-tête CF-Connecting-IP. À n’activer que si seul Cloudflare peut joindre votre proxy.

Limites : 300 requêtes par minute par adresse client et 180 par jeton, corps de requête de 2 Mo, 32 requêtes simultanées. Le journal d’accès enregistre l’heure, l’adresse, les 8 premiers caractères d’un SHA-256 du jeton, le nom de l’outil et le statut, jamais le jeton ni les arguments des outils.

Outils#

Applications :

  • list_apps : chaque app avec son état, ses domaines, sa source, son projet et son environnement.
  • get_app : réglages, serveurs, derniers déploiements et noms des variables.
  • get_app_logs : sortie récente du conteneur (le jeton doit pouvoir lire les données sensibles).
  • get_app_metrics : CPU et mémoire.
  • create_app_from_git, create_app_from_dockerfile, create_app_from_image.
  • update_app : nom, domaines, ports, branche, commandes, contrôle de santé.
  • deploy_app : lance le build et attend le résultat jusqu’à environ 40 secondes.
  • restart_app, stop_app, delete_app.

Variables d’environnement :

  • list_env_vars : les valeurs sont masquées sauf si vous demandez à l’assistant de les révéler.
  • set_env_vars : crée ou met à jour plusieurs variables d’un coup, éventuellement comme secrets impossibles à relire.
  • delete_env_var.

Déploiements :

  • list_deployments : les déploiements récents d’une app, ou ce qui tourne en ce moment.
  • get_deployment : état et fin du journal de build.
  • cancel_deployment.

Projets :

  • list_projects, create_project, create_environment, delete_project.

Serveurs :

  • list_servers : vos serveurs d’applications et VPS avec taille, ville, état et prix.
  • get_server : ce qui tourne sur un serveur, ses domaines et sa charge.
  • add_app_server, remove_app_server : faire tourner des copies d’une app sur plusieurs de vos serveurs.
  • get_traffic : le trafic sortant du mois et sa facture à ce jour, par serveur ou pour l’équipe.
  • list_regions : les villes avec le prix par taille, et celles où la mise à l’échelle automatique peut ajouter des serveurs.

Volumes de stockage (disques de vos serveurs) :

  • list_storage_volumes, get_storage_volume_price.
  • add_storage_volume, update_storage_volume (agrandissement, sauvegardes, croissance automatique) : l’assistant affiche le prix et demande votre confirmation.
  • detach_storage_volume, attach_storage_volume : déplacer un volume entre vos serveurs d’une même ville.
  • list_storage_volume_backups, backup_storage_volume, restore_storage_volume, delete_storage_volume.

Volumes d’app :

  • list_volumes, add_volume, delete_volume.
  • backup_volume : un planning de sauvegarde, une sauvegarde immédiate, ou les deux.

Bases de données managées :

  • list_databases, get_database_plans.
  • get_database : état, URL de connexion poolée et directe, avec le mot de passe masqué sauf si vous le demandez.
  • create_database : facturé à l’heure, il demande donc votre confirmation.
  • attach_database : enregistre l’URL poolée sous DATABASE_URL et l’URL directe sous DATABASE_DIRECT_URL (ou REDIS_URL) sans les afficher. Si l’application utilise déjà ces noms pour autre chose, rien n’est enregistré et un nom libre (env_key) ou overwrite est proposé.
  • upgrade_database : passer à une offre supérieure ; l’assistant affiche le nouveau prix et demande votre confirmation.
  • set_database_eviction_policy : ce que fait Redis quand sa mémoire est pleine.
  • backup_database, delete_database.

Mise à l’échelle automatique et équipe :

  • get_autoscaling : règle, copies en cours, CPU et dépenses du mois.
  • set_autoscaling : l’activer ou relever les limites demande votre confirmation.
  • get_team.

Sécurité#

  • Les outils destructifs (arrêt, suppression, retrait d’une copie sur un serveur, suppression de variables, de volumes ou de bases de données) sont marqués destructiveHint et refusent de s’exécuter tant que l’assistant ne passe pas confirm: true, ce qu’il ne peut faire qu’avec votre accord. Il en va de même pour les outils payants : créer une base de données ou la passer à une offre supérieure, ajouter ou agrandir un volume de stockage, et relever les limites de mise à l’échelle automatique. Appelés sans confirm, ces outils répondent avec le prix, pour que l’assistant puisse vous l’afficher d’abord.
  • Les mots de passe des bases de données et les valeurs des variables sont masqués sauf si vous les demandez. attach_database transmet une URL à une app sans que l’assistant la voie jamais.
  • HOSTWOLF_READONLY=1 (ou ?readonly=1 sur l’URL hébergée) retire tous les outils qui écrivent. Un jeton qui n’a que la permission Lecture fait la même chose côté API.
  • Le serveur hébergé vérifie votre jeton auprès de la console, ne garde rien entre les requêtes et n’enregistre jamais les jetons ni les arguments des outils. Ses requêtes sont limitées par adresse et par jeton.
  • Les jetons d’API ne peuvent ni acheter ni résilier de serveurs. Ces actions ne fonctionnent que dans la console.
  • Créez un jeton dédié à votre assistant, et révoquez-le à tout moment dans Clés et jetons.

Mise à jour#

Le serveur hébergé est toujours à jour. Pour celui que vous lancez vous-même, npx met le serveur en cache selon son URL, il ne se met donc jamais à jour tout seul. Chaque version a sa propre URL, et le serveur consulte app.hostwolf.net/dl/index.json au démarrage. Si une version plus récente existe, il l’indique dans son journal et l’ajoute au résultat de list_apps, pour que votre assistant vous prévienne. Pour mettre à jour, changez la version dans l’URL de votre configuration et redémarrez votre client.

Basé sur le SDK#

Les outils utilisent @hostwolf/apps-sdk, inclus dans ce paquet. Pour intégrer le serveur à votre propre app, installez les deux paquets :

npm install https://app.hostwolf.net/dl/hostwolf-apps-sdk-0.2.1.tgz https://app.hostwolf.net/dl/hostwolf-apps-mcp-0.2.1.tgz
import { HostwolfApps } from '@hostwolf/apps-sdk';
import { createHostwolfAppsMcp } from '@hostwolf/apps-mcp/server';

Licence#

MIT

Bloqué, ou il vous manque un endpoint ? Dites-le-nous sur app.hostwolf.net/contact ou à [email protected].