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. »
Voir aussi : SDK TypeScript · Référence de l’API REST · Journal des modifications · Obtenir un jeton d’API
Configuration#
- 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.
- 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.tgzClaude 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.
| Variable | Signification |
|---|---|
HOSTWOLF_APPS_TOKEN | Obligatoire. Votre jeton d’API depuis Clés et jetons. |
HOSTWOLF_READONLY | 1 pour n’exposer que les outils qui lisent, sans jamais rien modifier. |
HOSTWOLF_APPS_URL | URL de la console (par défaut https://console.app.hostwolf.net). |
HOSTWOLF_NO_UPDATE_CHECK | 1 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/healthDocker
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-mcpPlacez-le derrière votre proxy HTTPS, puis pointez vos clients vers https://your-host/mcp comme dans la configuration hébergée ci-dessus.
| Variable | Signification |
|---|---|
PORT / HOST | Adresse d’écoute (par défaut 127.0.0.1:8791). |
MCP_PATH | Chemin de l’endpoint (par défaut /mcp ; contrôle de santé sur /mcp/health). |
HOSTWOLF_APPS_URL | URL de la console (par défaut https://console.app.hostwolf.net). |
MCP_TRUST_CF_IP | 1 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 sousDATABASE_URLet l’URL directe sousDATABASE_DIRECT_URL(ouREDIS_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) ouoverwriteest 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
destructiveHintet refusent de s’exécuter tant que l’assistant ne passe pasconfirm: 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 sansconfirm, 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_databasetransmet une URL à une app sans que l’assistant la voie jamais. HOSTWOLF_READONLY=1(ou?readonly=1sur 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