From 81873dc64fc326ac35080da86d57fa4973fcbf1d Mon Sep 17 00:00:00 2001 From: Lecat Baptiste Date: Mon, 28 Sep 2026 16:00:47 +0200 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20aligner=20le=20template=20sur=20le?= =?UTF-8?q?s=20managed=20settings=20d=C3=A9ploy=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La console impose managedMcpServers sous forme de tableau : elle valide contre le schéma schemastore, qui ne connaît que le format de Claude Desktop. Le template reprend ce qui est réellement déployé, et le README documente que Claude Code ignore ce format. Co-authored-by: Claude Code (TechTown) --- README.md | 15 ++++++++++++++- managed-settings.template.json | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d647844..1562c61 100644 --- a/README.md +++ b/README.md @@ -26,13 +26,26 @@ Les managed settings ne se déploient **pas par git** — ils vivent côté serv ## Ce que contient la config managée - **Sécurité** : `deny` des secrets (`.env`, `~/.ssh`, `~/.config/gcloud`, `~/.aws`, `~/.gnupg`) + `curl|sh` ; `ask` sur les effets destructifs (force push, `reset --hard`, `gcloud/gsutil/terraform delete`, `rm -rf`, formatage disque…). -- **Serveurs MCP fournis** : `managedMcpServers` distribue [Meetown](https://github.com/techtown-fr/meetown) (`https://mcp.meetown.techtown.fr/mcp`) à tout le monde — rien à installer, chacun s'authentifie une fois en OAuth via `/mcp` (Google SSO @techtown.fr). Visible sous **Managed MCPs**, non supprimable localement mais désactivable pour soi. Ces serveurs ne passent pas par l'allowlist `allowedMcpServers`. Requiert Claude Code ≥ 2.1.259, d'où `requiredMinimumVersion`. +- **Serveurs MCP fournis** : `managedMcpServers` déclare [Meetown](https://github.com/techtown-fr/meetown) (`https://mcp.meetown.techtown.fr/mcp`). ⚠️ **Sans effet aujourd'hui**, voir [Limite connue : `managedMcpServers`](#limite-connue--managedmcpservers). - **Marketplace TechTown** : `extraKnownMarketplaces` enregistre [techtown-marketplace](https://github.com/techtown-fr/techtown-marketplace) sur chaque poste (plus besoin de `claude plugin marketplace add`), avec `autoUpdate: true` pour que les nouvelles versions des plugins arrivent sans action. Enregistrer la marketplace n'installe aucun plugin : c'est `enabledPlugins` qui en impose. - **Gouvernance** : `forceLoginOrgUUID` (verrou org TechTown), `allowedMcpServers` + `allowManagedMcpServersOnly` (allowlist MCP : github, context7, playwright), `strictKnownMarketplaces` (2 marketplaces officielles Anthropic), `disableBypassPermissionsMode`. - **Conventions org** : `model` (claude-sonnet-4-6), `language` (français), `companyAnnouncements`, `attribution`, `includeGitInstructions`, `requiredMinimumVersion`. **Choix de design :** les `allow` ne sont **pas** verrouillés au niveau managé — chaque collaborateur garde ses `allow` projet/user. Le managé n'impose que les garde-fous `ask`/`deny` et la gouvernance. L'auto-mode n'est **pas** bloqué. +## Limite connue : `managedMcpServers` + +La même clé désigne deux formats différents : + +| Lecteur | Format attendu | Doc | +|---|---|---| +| Claude Code | **objet** indexé par nom : `{ "meetown": { "type": "http", "url": "…" } }` | [managed-mcp](https://code.claude.com/docs/en/managed-mcp#provide-servers-through-managed-settings) | +| Claude Desktop (déploiements tiers uniquement) | **tableau** d'entrées | [desktop](https://code.claude.com/docs/en/desktop#enterprise-configuration) | + +Le schéma schemastore, contre lequel la console valide, ne connaît que le format tableau de Desktop. La console refuse donc le format objet de Claude Code, et Claude Code ignore le tableau. Constaté le 2026-09-28 : le `~/.claude/remote-settings.json` récupéré juste après la mise à jour contient toutes les autres clés, mais pas `managedMcpServers`, et `claude mcp list` ne montre pas Meetown. + +Le tableau reste dans le template parce que c'est ce qui est déployé dans la console. Tant que le schéma n'est pas corrigé, la distribution de Meetown passe par le connecteur d'organisation sur claude.ai (voir la PR qui introduit cette section). + ## Niveaux de settings dans Claude Code ``` diff --git a/managed-settings.template.json b/managed-settings.template.json index d5fb714..51b5ecb 100644 --- a/managed-settings.template.json +++ b/managed-settings.template.json @@ -14,9 +14,9 @@ "commit": "Co-authored-by: Claude Code (TechTown)", "pr": "Co-authored-by: Claude Code (TechTown)" }, - "managedMcpServers": { + "managedMcpServers": [{ "meetown": { "type": "http", "url": "https://mcp.meetown.techtown.fr/mcp" } - }, + }], "allowManagedMcpServersOnly": true, "allowedMcpServers": [ { "serverName": "github" }, From 799f087b40535a761eb64b651f1d995dcf65c4dd Mon Sep 17 00:00:00 2001 From: Lecat Baptiste Date: Mon, 28 Sep 2026 16:07:43 +0200 Subject: [PATCH 2/2] chore(mcp): retirer allowManagedMcpServersOnly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'allowlist stricte bloquait tout MCP personnel hors github, context7 et playwright. L'allowlist devient souple : chaque collaborateur peut l'élargir dans ses propres settings. Co-authored-by: Claude Code (TechTown) --- README.md | 2 +- managed-settings.template.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1562c61..8a58f15 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Les managed settings ne se déploient **pas par git** — ils vivent côté serv - **Sécurité** : `deny` des secrets (`.env`, `~/.ssh`, `~/.config/gcloud`, `~/.aws`, `~/.gnupg`) + `curl|sh` ; `ask` sur les effets destructifs (force push, `reset --hard`, `gcloud/gsutil/terraform delete`, `rm -rf`, formatage disque…). - **Serveurs MCP fournis** : `managedMcpServers` déclare [Meetown](https://github.com/techtown-fr/meetown) (`https://mcp.meetown.techtown.fr/mcp`). ⚠️ **Sans effet aujourd'hui**, voir [Limite connue : `managedMcpServers`](#limite-connue--managedmcpservers). - **Marketplace TechTown** : `extraKnownMarketplaces` enregistre [techtown-marketplace](https://github.com/techtown-fr/techtown-marketplace) sur chaque poste (plus besoin de `claude plugin marketplace add`), avec `autoUpdate: true` pour que les nouvelles versions des plugins arrivent sans action. Enregistrer la marketplace n'installe aucun plugin : c'est `enabledPlugins` qui en impose. -- **Gouvernance** : `forceLoginOrgUUID` (verrou org TechTown), `allowedMcpServers` + `allowManagedMcpServersOnly` (allowlist MCP : github, context7, playwright), `strictKnownMarketplaces` (2 marketplaces officielles Anthropic), `disableBypassPermissionsMode`. +- **Gouvernance** : `forceLoginOrgUUID` (verrou org TechTown), `allowedMcpServers` (allowlist MCP souple : github, context7, playwright — sans `allowManagedMcpServersOnly`, chaque collaborateur peut l'élargir dans ses propres settings), `strictKnownMarketplaces` (2 marketplaces officielles Anthropic + techtown-marketplace), `disableBypassPermissionsMode`. - **Conventions org** : `model` (claude-sonnet-4-6), `language` (français), `companyAnnouncements`, `attribution`, `includeGitInstructions`, `requiredMinimumVersion`. **Choix de design :** les `allow` ne sont **pas** verrouillés au niveau managé — chaque collaborateur garde ses `allow` projet/user. Le managé n'impose que les garde-fous `ask`/`deny` et la gouvernance. L'auto-mode n'est **pas** bloqué. diff --git a/managed-settings.template.json b/managed-settings.template.json index 51b5ecb..d5f5a14 100644 --- a/managed-settings.template.json +++ b/managed-settings.template.json @@ -17,7 +17,6 @@ "managedMcpServers": [{ "meetown": { "type": "http", "url": "https://mcp.meetown.techtown.fr/mcp" } }], - "allowManagedMcpServersOnly": true, "allowedMcpServers": [ { "serverName": "github" }, { "serverName": "context7" },