Serveur MCP
Connectez Claude, ChatGPT, Cursor, VS Code, Codex ou n’importe quel client MCP à Beeuni via OAuth ou un jeton d’accès personnel. Une seule URL donne accès à tous les projets que vous pouvez ouvrir. Rien à installer.
Expérimental. Ses outils peuvent changer sans préavis.
Beeuni dispose d’un serveur MCP hébergé :
https://api.beeuni.ai/v1/mcp
Ajoutez cette URL une seule fois à un client MCP. Au premier appel, vous devrez vous connecter à Beeuni dans le navigateur. Ensuite, le client agit en votre nom, avec vos autorisations, sur tous les comptes et projets que vous pouvez ouvrir — comme avec la CLI. L’URL ne désigne aucun projet : les outils prennent un project_id ou un session_id, et list_projects les répertorie. Rien à installer.
Ajouter le serveur à un client
Tous les clients ci-dessous vous connectent via OAuth lors de la première utilisation, sauf si les instructions indiquent un jeton. Ne remplacez rien : l’URL est la même pour tous les projets.
Claude Code
claude mcp add --transport http beeuni https://api.beeuni.ai/v1/mcp
Exécutez /mcp dans Claude Code et connectez-vous. Pour utiliser un jeton d’accès personnel à la place, ajoutez --header "Authorization: Bearer $BEEUNI_TOKEN" à la commande.
Claude Desktop et claude.ai
Settings → Connectors → Add custom connector. Collez l’URL et connectez-vous.
ChatGPT
Les connecteurs MCP personnalisés nécessitent le mode développeur. Selon le guide du mode développeur d’OpenAI, activez le Developer mode dans Settings → Security and login, puis créez une application en mode développeur depuis la page des plugins ChatGPT (bouton plus). Saisissez l’URL et choisissez l’authentification OAuth. OpenAI indique les forfaits et les noms des menus, qui peuvent changer : suivez ce guide si un libellé diffère.
Cursor
Utilisez le bouton Add to Cursor dans Connect MCP, ou ajoutez le serveur à ~/.cursor/mcp.json (tous les projets) ou à .cursor/mcp.json (un seul projet) :
{ "mcpServers": { "beeuni": { "url": "https://api.beeuni.ai/v1/mcp" } } }
VS Code
Ajoutez le serveur à .vscode/mcp.json. VS Code utilise servers, et non mcpServers, et nécessite type :
{ "servers": { "beeuni": { "type": "http", "url": "https://api.beeuni.ai/v1/mcp" } } }
Codex
codex mcp add beeuni --url https://api.beeuni.ai/v1/mcp
codex mcp login beeuni
Vous pouvez aussi modifier ~/.codex/config.toml. Pour utiliser un jeton d’accès personnel, indiquez la variable d’environnement qui le contient :
[mcp_servers.beeuni]
url = "https://api.beeuni.ai/v1/mcp"
bearer_token_env_var = "BEEUNI_TOKEN"
Autres clients
Ajoutez un serveur MCP distant (Streamable HTTP) avec l’URL. Un client qui ne prend pas en charge OAuth envoie un jeton d’accès personnel dans un en-tête (ci-dessous).
Ouvrez le menu de l’espace de travail (le nom du projet, en haut à gauche) et sélectionnez Connect MCP pour copier l’URL et les instructions pour Claude, Claude Code, Cursor et Codex.
Connexion
Le serveur utilise le flux OAuth 2.1 défini par la spécification MCP. Le client le gère sans configuration :
- Un appel sans jeton reçoit
401avecWWW-Authenticate: Bearer resource_metadata="…", scope="beeuni". - Le client lit le document RFC 9728 à l’adresse
/.well-known/oauth-protected-resource/v1/mcp. Il y est indiqué que Beeuni est le serveur d’autorisation. - Le client s’enregistre à
POST /v1/oauth/register(RFC 7591). Il obtient un client public qui s’authentifie uniquement avec PKCE. - Vous autorisez le client sur l’écran de consentement Beeuni. Un client auto-enregistré est marqué Unverified app, avec l’hôte vers lequel il vous redirige. Ne l’autorisez que si vous le connectez vous-même.
- Le client échange le code contre un jeton d’accès
beeuni_oat_(1 heure) et un jeton d’actualisation (30 jours, renouvelé à chaque utilisation). Lorsque le jeton d’accès expire, le client l’actualise sans vous le redemander.
Révoquer un client
Settings → Personal access keys → Connected apps répertorie toutes les applications que vous avez autorisées, sur l’ensemble de vos comptes : leur nom, leur méthode de connexion et la date de leur dernière activité. Un client MCP auto-enregistré est marqué Unverified app. Revoke access supprime votre autorisation et révoque ses jetons : sa prochaine requête échoue et il doit vous demander à nouveau l’autorisation. Depuis un terminal : beeuni tokens apps ls et beeuni tokens apps rm <client-id>. Les deux commandes ne fonctionnent que depuis une session de navigateur ou avec un jeton d’accès personnel, jamais avec le jeton propre à une application.
Ce qu’une application connectée ne peut pas faire
La portée beeuni lui permet d’agir en votre nom : une application connectée peut lire et modifier ce que vous pouvez lire et modifier. Elle ne peut pas créer un identifiant qui reste valide après la révocation de son propre jeton. Ces routes répondent 403 pour un jeton beeuni_oat_ :
- les jetons d’accès personnels (
POST /v1/accounts/tokens) et les jetons CLI de projet ; - les clés de passerelle ;
- les jetons SCIM ;
- les clients OAuth et la rotation de leurs secrets ;
- les comptes de service ;
- la liste des applications connectées et leur révocation (
/v1/oauth/grants).
Révoquez un client et son accès prend fin. Un jeton d’accès personnel est différent : il n’expire pas, sauf si vous indiquez --expires, et la révocation d’une application ne le révoque pas.
Jeton d’accès personnel
Un client sans OAuth, ou un script, envoie plutôt un jeton beeuni_pat_ — celui utilisé par la CLI. Créez-en un avec beeuni tokens new <name> ou dans Settings → Personal access keys, puis envoyez-le dans un en-tête :
{ "mcpServers": { "beeuni": { "url": "https://api.beeuni.ai/v1/mcp", "headers": { "Authorization": "Bearer beeuni_pat_…" } } } }
Outils
tools/list renvoie 23 outils. Les paramètres marqués d’un * sont obligatoires.
| Outil | Paramètres | Fonction |
|---|---|---|
list_projects |
aucun | Répertorie tous les projets que vous pouvez ouvrir, sur l’ensemble de vos comptes, avec leur project_id et votre rôle. |
start_session |
project_id, prompt, name, agent |
Démarre une session dans un projet avec un premier prompt. Renvoie le session_id. |
send_message |
session_id, text |
Met un message en file d’attente pour une session et la démarre si elle est arrêtée. |
read_session |
session_id*, limit, wait_seconds |
Renvoie l’état d’une session, indique si son tour est idle, booting, running ou queued, ainsi que ses messages les plus récents avec les entrées et sorties de chaque appel d’outil. limit est de 10 par défaut et de 100 au maximum. wait_seconds (jusqu’à 45) attend la fin du tour. |
list_sessions |
project_id*, limit, cursor |
Répertorie les sessions visibles dans un projet : identifiant, titre, état, agent, propriétaire, branche et dates. limit est de 20 par défaut et de 200 au maximum. |
run_command |
session_id*, command, cwd, timeout_seconds, job_id, cancel |
Exécute une commande bash dans le bac à sable d’une session et renvoie stdout, stderr et le code de sortie. Une commande longue renvoie un job_id sur lequel continuer d’attendre. |
read_file |
path*, session_id, project_id, ref, offset, limit |
Lit un fichier du bac à sable d’une session ou du dépôt git d’un projet à ref. Les images sont renvoyées sous forme d’images. |
write_file |
session_id, path, content*, encoding |
Écrit un fichier dans le bac à sable d’une session et crée ses répertoires parents. encoding est utf8 (par défaut) ou base64. |
list_files |
path, session_id, project_id, ref, offset |
Répertorie un répertoire du bac à sable d’une session ou tous les fichiers du dépôt d’un projet sous un chemin donné. |
read_skill |
name, file, project_id |
Répertorie les guides de la plateforme Beeuni ou renvoie un guide (name) ou l’un de ses fichiers de référence (file). Avec project_id, les compétences propres au projet sont répertoriées en premier, et une compétence de projet name renvoie son SKILL.md et les chemins de ses fichiers de référence. |
list_connectors |
project_id*, connector |
Répertorie les connecteurs d’un projet : slug, fournisseur, disponibilité de chacun (connected, utilisable par vous maintenant), nombre d’actions et comptes. Avec connector, répertorie tous les comptes de ce connecteur. |
search_connector_actions |
project_id*, query, connector, limit |
Recherche des actions de connecteur par objectif. Renvoie tool (<connector>.<action>), risk et une description en une ligne. Ne renvoie jamais de schémas. |
describe_connector_action |
project_id, tool |
Renvoie le schéma JSON d’entrée, le niveau de risque et la description d’une action. |
call_connector |
project_id, tool, args, account, reason |
Exécute une action en votre nom. Renvoie les données et le account qui l’a exécutée, un résultat pending_approval avec le lien d’approbation, ou un refus accompagné de son motif. |
upload_connector_attachment |
project_id, connector, filename*, content_base64 ou session_id + path |
Prépare un fichier et renvoie la référence {"$beeuni_attachment": "<id>"} à insérer dans args. |
connect_connector |
project_id, connector, owner, label |
Renvoie le lien qu’une personne ouvre pour connecter le compte du connecteur. |
search_connector_apps |
project_id, query, limit, cursor |
Recherche dans le catalogue des applications gérées auxquelles un connecteur peut être ajouté. |
add_connector |
project_id*, app ou provider + slug, name, url, transport, endpoint, spec, base_url |
Ajoute immédiatement un connecteur au projet (validé dans beeuni.yaml sur main, puis synchronisé). |
remove_connector |
project_id, connector |
Supprime un connecteur du projet. |
beeuni |
args*, project_id, session_id |
Exécute la véritable interface en ligne de commande beeuni en votre nom et renvoie exit_code, stdout (ou json pour la sortie --json) et stderr. Voir Exécuter n’importe quelle commande CLI. |
search_api |
query*, limit |
Recherche les routes de l’API Beeuni par mot-clé. |
describe_api |
method, path |
Renvoie les paramètres, le corps de la requête et le schéma de réponse d’une route. |
call_api |
method, path, project_id, query, body |
Appelle n’importe quelle route /v1/ en votre nom. project_id renseigne {projectId} dans le chemin. |
search_api, describe_api et call_api couvrent tout ce que font l’application Web et la
CLI, car elles sont toutes deux clientes de la même API. call_api
refuse /v1/oauth/* ainsi que tout chemin menant à un point de terminaison MCP. Renseignez vous-même chaque autre {placeholder} dans le chemin. Chaque appel applique la même autorisation et le même audit qu’une requête provenant de l’application Web. L’audit consigne chaque appel avec credential_kind: "oauth_app" et le nom de l’application connectée, car l’API consigne l’identifiant d’authentification utilisé, et non une étiquette envoyée par le client.
Exécuter n’importe quelle commande CLI
L’outil beeuni exécute la véritable CLI beeuni en votre nom. Toutes les commandes CLI fonctionnent avec cet outil : le serveur MCP dispose donc des mêmes capacités qu’un terminal, notamment pour les secrets, les déclencheurs, cr, review, les rappels, les agents, les modèles, la passerelle, les fournisseurs, les canaux, les bacs à sable, les applications, la marketplace, les fichiers, l’accès, les rôles, les autorisations, l’audit, les autorisations accordées, les membres, les groupes, les jetons, la facturation, les projets, les sessions et system-skills. Un seul outil remplace environ 200 outils de sous-commandes, qui dépasseraient la limite d’outils de clients comme Cursor.
args correspond aux arguments après beeuni, avec un élément de tableau par argument. Ce n’est jamais une ligne de commande shell.
{ "name": "beeuni", "arguments": { "args": ["--help"] } }
{ "name": "beeuni", "arguments": { "args": ["secrets", "ls", "--json"], "project_id": "<project_id>" } }
{ "name": "beeuni", "arguments": { "args": ["triggers", "ls", "--json"], "project_id": "<project_id>" } }
{ "name": "beeuni", "arguments": { "args": ["system-skills"] } }
- Découvrez les commandes avec
["--help"]et["<group>", "--help"]. Ajoutez--jsonaux sorties que vous analysez. project_iddéfinit le projet d’une commande liée à un projet.session_iddéfinit la session d’une commande qui agit sur une session.- Le résultat est au format JSON :
exit_code,stdout,stderr. Avec--json, la sortie de la commande est renvoyée sous forme de valeur JSON dansjsonau lieu destdout. Les sorties trop volumineuses sont tronquées et marquéestruncated; un JSON tronqué n’est pas valide, réduisez donc la portée de la commande. Unexit_codenon nul est une erreur MCP. Chaque flux est limité à 24 000 caractères (stdout) et 8 000 caractères (stderr), et le résultat l’indique danstruncated. - Toute commande qui s’exécute pendant plus d’environ 45 secondes est arrêtée. Le résultat contient
timed_out. - Le serveur exécute au maximum 4 commandes CLI simultanément. Un cinquième appel renvoie
Busy: réessayez. - Les sessions, les fichiers du bac à sable et les connecteurs disposent d’outils dédiés (
start_session,run_command,read_file,call_connector). Privilégiez-les.
La CLI s’exécute sur le serveur avec votre propre jeton et interroge cette API. Elle n’a accès à aucun identifiant du serveur : son environnement ne contient que votre jeton, l’URL de l’API, les identifiants du projet et de la session, ainsi qu’un répertoire personnel temporaire et un répertoire de travail vides. Le serveur supprime ces deux répertoires après l’exécution de la commande. L’autorisation et l’audit relèvent de l’API : le jeton d’un utilisateur externe bénéficie des mêmes 403 que depuis un terminal.
Ces commandes sont refusées avant toute exécution. L’erreur indique le motif et la solution de remplacement.
| Commande | Pourquoi | À utiliser à la place |
|---|---|---|
n’importe quel indicateur --host ou --host=, hosts |
Dirige la CLI vers un autre serveur et lui enverrait votre jeton. | Ce serveur agit déjà en votre nom. |
login, logout |
Connexion via navigateur et jetons stockés. | Vous êtes connecté via la connexion MCP. |
init, ship, deploy |
Lire ou écrire dans un répertoire local. | run_command dans un bac à sable de session, là où se trouve le code source. |
tools |
Lit et modifie un beeuni.yaml local, et le serveur n’a pas de copie de travail du projet. |
run_command dans un bac à sable de session : exécutez beeuni tools ls à cet endroit. |
apps deploy |
Déploie un répertoire local, que le serveur ne possède pas. | run_command dans un bac à sable de session : exécutez beeuni apps deploy <path> à cet endroit. |
env pull, env push |
Écrire ou lire un fichier local. | secrets ls, secrets set KEY=value. |
token, whoami --token-only |
Afficher le jeton d’accès brut. | whoami --json. |
update, uninstall |
Changer la machine qui exécute la CLI. | Aucun. |
tui, t, connect, attach, `sessions connect |
shell | forward` |
chat et sessions chat sans --prompt |
Ouvrir une discussion interactive. | start_session, send_message, ou ajoutez --prompt "<text>". |
L’audit consigne une commande CLI avec le même identifiant d’authentification que tous les autres appels
sur la connexion (credential_kind: "oauth_app"). Il ne peut pas distinguer l’outil beeuni
de call_api : les deux accèdent à l’API avec votre jeton.
Compétences du projet
read_skill avec un project_id répertorie les compétences propres au projet (les
fichiers skills/<slug>/SKILL.md du dépôt, ou le répertoire hérité
.beeuni/opencode/skills/) avant les guides de la plateforme. Passez le name de la compétence
pour lire son SKILL.md et les chemins de ses fichiers de référence, puis file pour lire
une référence. Vous voyez les compétences autorisées par votre rôle et vos droits d’accès.
Utiliser vos connecteurs
Les outils des connecteurs sont les outils MCP de la CLI beeuni connectors. Ils appellent les mêmes routes d’API que la CLI et le SDK ; les politiques des connecteurs, les approbations et les audits fonctionnent donc de la même façon sur toutes les interfaces.
list_connectorsindique ce qui est connecté. Un connecteur avecconnected: falsene peut pas exécuter d’actions : appelezconnect_connector, ouvrez le lien renvoyé, puis relancez l’énumération.search_connector_actionsrecherche une action par intention, par exemplesend an email.describe_connector_actionrenvoie ses arguments.call_connectorl’exécute. Le résultat indique leaccountqui a effectué l’appel. Un connecteur associé à plusieurs comptes et sans compte par défaut nécessiteaccount.- Passez
reasonpour une écriture dont les arguments ne sont que des identifiants (send_draft, suppression par identifiant). La personne chargée de l’approbation le voit à côté des arguments réels.
Une politique peut suspendre un appel en attente d’approbation. call_connector renvoie alors
status: "pending_approval" avec un approval_url. Une personne l’ouvre et
l’approuve. Rappelez le même outil, avec les mêmes arguments et le même compte dans les 15 minutes : l’appel approuvé s’exécute une fois. Un refus policy_block est définitif.
Un résultat de plus d’environ 40 000 caractères est renvoyé sous forme d’aperçu signalé
(data_truncated). Réduisez les arguments et rappelez l’outil. Pour joindre un fichier,
préparez-le avec upload_connector_attachment et placez la référence renvoyée dans
args. Les connecteurs utilisant le fournisseur composio n’acceptent pas les références de pièces jointes.
Taille des résultats et pagination
- Le résultat d’un outil est tronqué à 60 000 caractères et se termine par
…[truncated at 60000 chars]. read_filerenvoie les fichiers texte longs par pages d’environ 50 000 caractères au maximum. Un résultat tronqué se termine par leoffsetqui permet de poursuivre.offsetignore des lignes etlimitlimite le nombre de lignes renvoyées. Un fichier binaire n’est pas renvoyé sous forme de texte : lisez-le avecrun_command.list_filestronque les longues listes de la même façon. Passez leoffsetqu’il indique.list_sessionsrenvoienext_cursorlorsqu’il existe d’autres sessions. Renvoyez-le en tant quecursor.read_sessionrenvoie les derniers messageslimit. Il tronque chaque entrée et sortie d’outil, et supprime les messages les plus anciens lorsque le résultat ne tient pas (omitted_older).last_turn_errorindique un tour qui a échoué.- Une requête MCP reçoit une réponse en 55 secondes.
read_sessionavecwait_secondset un bac à sable encore en cours de démarrage s’arrêtent tous deux avant ce délai : rappelez l’outil.
Bacs à sable
run_command, read_file, write_file et list_files avec un session_id
accèdent au bac à sable actif de la session, comme le font le terminal Web et le panneau des fichiers. Les chemins relatifs sont résolus sous /workspace, la copie de travail Git de la session. Un bac à sable arrêté démarre lors du premier appel. La CLI beeuni dans le bac à sable est connectée en tant que session. Avec un project_id et sans session_id, read_file
et list_files lisent le dépôt Git du projet sans démarrer de bac à sable.
Une commande peut s’exécuter pendant plusieurs minutes. Un appel d’outil attend environ 50 secondes. Si la commande est toujours en cours à ce moment-là, run_command renvoie status: running, un job_id et la sortie obtenue jusque-là. Appelez run_command avec ce job_id pour continuer à attendre, ou avec cancel: true pour arrêter la commande. timeout_seconds (valeur par défaut : 600, maximum : 86400) arrête une commande qui s’exécute trop longtemps, avec le code de sortie 124. La sortie est conservée dans ~/.cache/beeuni-mcp/jobs/<job_id>/ dans le bac à sable ; le résultat de l’outil affiche les 24 000 derniers octets de chaque flux. Si un bac à sable s’arrête, les commandes en cours s’arrêtent aussi.
Le serveur est sans état : il répond à POST avec du JSON, et à GET et DELETE avec 405.