docs : config MCP HTTP par poste (token local, Fedora/Windows) + rotation token
Auto Tag Develop / tag (push) Successful in 8s
Auto Tag Develop / tag (push) Successful in 8s
Le serveur MCP HTTP (token Bearer) se configure dans la config Claude Code locale (jamais dans le .mcp.json versionné). Ajout de la méthode cross-OS (claude mcp add), des emplacements de fichier par OS (Fedora/Linux, Windows, macOS) et de la procédure de régénération du token (invalidé au reseed BDD). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -219,28 +219,60 @@ Lesstime expose un serveur MCP (Model Context Protocol) permettant aux assistant
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Configuration réseau (HTTP)
|
### Configuration réseau (HTTP) — par poste, hors git
|
||||||
|
|
||||||
|
Le transport HTTP nécessite un **token API** (Bearer), qui est un **secret** : il ne va **jamais**
|
||||||
|
dans le `.mcp.json` versionné (celui-ci ne contient que le serveur STDIO local, sans secret).
|
||||||
|
Chaque développeur configure le serveur HTTP dans sa **config Claude Code locale**.
|
||||||
|
|
||||||
|
**Méthode recommandée (identique sur Fedora, Windows et macOS) :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
claude mcp add --transport http --scope user lesstime \
|
||||||
|
http://project.malio-dev.fr/_mcp \
|
||||||
|
--header "Authorization: Bearer <api-token>"
|
||||||
|
```
|
||||||
|
- En prod : `http://project.malio-dev.fr/_mcp`
|
||||||
|
- En réseau local : `http://<ip-serveur>:8082/_mcp`
|
||||||
|
|
||||||
|
**Où c'est stocké** (si tu édites le fichier à la main, sous la clé `mcpServers`) :
|
||||||
|
|
||||||
|
| OS | Fichier de config Claude Code |
|
||||||
|
|----|-------------------------------|
|
||||||
|
| **Fedora / Linux** | `~/.claude.json` |
|
||||||
|
| **Windows** (collègue) | `%USERPROFILE%\.claude.json` (ex. `C:\Users\<user>\.claude.json`) |
|
||||||
|
| **macOS** | `~/.claude.json` |
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"lesstime": {
|
"lesstime": {
|
||||||
"type": "url",
|
"type": "http",
|
||||||
"url": "http://<ip-serveur>:8082/_mcp",
|
"url": "http://project.malio-dev.fr/_mcp",
|
||||||
"headers": {
|
"headers": { "Authorization": "Bearer <api-token>" }
|
||||||
"Authorization": "Bearer <api-token>"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Après modification, relancer la connexion avec `/mcp` dans Claude Code.
|
||||||
|
|
||||||
### Gestion des tokens API
|
### Gestion des tokens API
|
||||||
|
|
||||||
|
Générer / régénérer un token pour un utilisateur :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# En dev (container local)
|
||||||
docker exec -u www-data php-lesstime-fpm php bin/console app:generate-api-token <username>
|
docker exec -u www-data php-lesstime-fpm php bin/console app:generate-api-token <username>
|
||||||
|
|
||||||
|
# En prod (sur le serveur, dans infra/prod)
|
||||||
|
sudo docker compose exec -T -u www-data app php bin/console app:generate-api-token <username>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
⚠️ Le token est **invalidé à chaque reset/reseed de la base**. Symptôme : `/mcp` renvoie
|
||||||
|
`HTTP 401 "Invalid API token"`. Il faut alors le **régénérer** (commande ci-dessus) puis remplacer
|
||||||
|
la valeur `Bearer ...` dans ta config locale (par poste).
|
||||||
|
|
||||||
## Déploiement
|
## Déploiement
|
||||||
|
|
||||||
La prod tourne en **Docker** : l'image est buildée par la CI Gitea sur push de tag `v*`
|
La prod tourne en **Docker** : l'image est buildée par la CI Gitea sur push de tag `v*`
|
||||||
@@ -270,7 +302,7 @@ INFRA #146.
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Nature | process PHP qui tourne en continu | fichiers JS/HTML **statiques** (`nuxt generate`) |
|
| Nature | process PHP qui tourne en continu | fichiers JS/HTML **statiques** (`nuxt generate`) |
|
||||||
| Quand le DSN est lu | au **runtime** | **figé au build** (baké dans le JS) |
|
| Quand le DSN est lu | au **runtime** | **figé au build** (baké dans le JS) |
|
||||||
| Où mettre le DSN | `infra/prod/.env` (runtime) | **secrets Gitea** → build-args de la CI |
|
| Où mettre le DSN | `.env` du serveur (`/var/www/lesstime/.env`) — runtime | **secrets Gitea** → build-args de la CI |
|
||||||
|
|
||||||
> Les erreurs partent **toujours vers GlitchTip**, jamais vers la CI. La CI ne sert qu'à *écrire*
|
> Les erreurs partent **toujours vers GlitchTip**, jamais vers la CI. La CI ne sert qu'à *écrire*
|
||||||
> le DSN front dans le bundle au moment du build (il n'y a aucun process front en prod qui
|
> le DSN front dans le bundle au moment du build (il n'y a aucun process front en prod qui
|
||||||
@@ -278,7 +310,7 @@ INFRA #146.
|
|||||||
|
|
||||||
### Variables
|
### Variables
|
||||||
|
|
||||||
**Backend — fichier `infra/prod/.env` du serveur** (chargé via `env_file`) :
|
**Backend — fichier `.env` du serveur** (`/var/www/lesstime/.env`, chargé via `env_file` ; le repo ne fournit que le template `infra/prod/.env.example`) :
|
||||||
```env
|
```env
|
||||||
SENTRY_DSN=http://<clé>@glitchtip.interne:<port>/<id-projet-api>
|
SENTRY_DSN=http://<clé>@glitchtip.interne:<port>/<id-projet-api>
|
||||||
```
|
```
|
||||||
@@ -312,7 +344,7 @@ SENTRY_DSN=http://<clé>@glitchtip.interne:<port>/<id-projet-api>
|
|||||||
|
|
||||||
1. Dans GlitchTip : créer les projets `lesstime-api` et `lesstime-front`, récupérer les 2 DSN
|
1. Dans GlitchTip : créer les projets `lesstime-api` et `lesstime-front`, récupérer les 2 DSN
|
||||||
(+ un auth token pour les source maps).
|
(+ un auth token pour les source maps).
|
||||||
2. Backend : ajouter `SENTRY_DSN` dans `infra/prod/.env` du serveur.
|
2. Backend : ajouter `SENTRY_DSN` dans le `.env` du serveur (`/var/www/lesstime/.env`).
|
||||||
3. Frontend : ajouter les secrets Gitea ci-dessus.
|
3. Frontend : ajouter les secrets Gitea ci-dessus.
|
||||||
4. Tagger une version (`v*`) → la CI build l'image avec le DSN front baké → `deploy.sh`.
|
4. Tagger une version (`v*`) → la CI build l'image avec le DSN front baké → `deploy.sh`.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user