Skip to main content
Glama
Patricked-code

WealthTech MCP SSH Bridge

README.md
# WealthTech MCP SSH Bridge

## Fil d'Ariane historique permanent du programme MCP

**À toute arrivée, avant de choisir du travail, lire [le fil d'Ariane historique MCP](docs/governance/agent-historical-continuity-breadcrumbs-20261016.md)** : origine de l'audit depuis l'issue #65, jalons des PR, constats historiques, acquis attestés, lacunes non certifiées, dépendances et contrat de checkpoint commun. Ce document renvoie aux sources existantes et ne devient ni une autorité runtime ni une seconde Task Queue. Un nouvel agent doit pouvoir retrouver le passé et le `NEXT_ACTION` sans cette conversation ; réobserver GitHub et les autorités live avant toute mutation.

## Reprise immédiate : consigne INTAKE du 16 octobre 2026

**Tout agent qui arrive ou reprend doit lire [la directive de coordination dans l'issue #235](https://github.com/Patricked-code/MCP/issues/235#issuecomment-6203867094)**, puis appliquer la section « Protocole vérifiable d'entrée et de reprise » de [AGENTS.md](AGENTS.md). Ne pas confondre la PR #300 livrée avec la fin du programme : le prochain contrôle GWB04 porte sur `TB-W4-H-01` et `TB-W4-K-01`, sous réserve de relecture de l'état live et des propriétaires. Aucun commentaire GitHub ne réveille automatiquement un agent, ne crée une Task runtime ni n'autorise une mutation.

## Démarrage prioritaire des agents MCP

**La feuille de route d'exécution commune est [la carte de priorité et de convergence](docs/governance/mcp-priority-convergence-map-20261015.json)**, expliquée dans l'[index des 15 jalons](docs/governance/README.md). Avant toute écriture, lire `CLAUDE.md`, `AGENTS.md`, `SUIVI.md`, puis la carte et le Program Backlog V2. Elle permet de reprendre le programme sans dépendre d'une conversation, tout en respectant les Task/Session/Locks existants. Les étapes sont liées chronologiquement mais les scopes indépendants peuvent avancer en parallèle sous contrôle de collision.



## Reprendre l'audit et le programme gouverné (point d'entrée des nouveaux agents)

Pour reprendre **le projet MCP uniquement** (ne pas confondre avec `Governed-Repository-Template`), lire d'abord `CLAUDE.md` et `AGENTS.md`, puis l'[index de reprise de la gouvernance](docs/governance/README.md). Cet index renvoie à l'architecture cible, au pacte, au bloc des dix travaux GWB-00..09, aux archives d'audit, au Program Backlog V2 et à l'[issue maîtresse #235](https://github.com/Patricked-code/MCP/issues/235).

**Ne pas lire un ancien checkpoint comme l'état live :** réobserver le `main` actuel, les PR, les CI/déploiements et, quand nécessaire, les autorités Governed Task Queue / Sessions / Locks via des moyens autorisés. Les 94 blueprints sont de la planification et le workblock GWB ne crée aucune Task. Ordre de reprise : `READ → REOBSERVE → RECONCILE → RESUME_OWNED_FIRST → FIRST_COLLISION_FREE_IN_PROGRAM_ORDER → EXECUTE/VERIFY → CHECKPOINT → NEXT`.

Pour les opérations réalisables depuis GitHub, appliquer `.mcp/github-first-operational-policy.json` et GitHub Actions/OIDC. La correction de consentement OAuth et la continuité des refresh tokens restent dans la PR #207, sans fusion régressive ni réattribution de son claim.


Serveur MCP Node.js/TypeScript destiné à exposer à ChatGPT/Codex des outils contrôlés pour inventorier, documenter et préparer les opérations sur les serveurs WealthTech.

## Objectif

Ce dépôt contient le MCP `wealthtech_ssh_bridge`. Il doit permettre une connexion contrôlée vers :

- S1 : `root@212.227.212.33`
- S2 : `root@217.160.249.254`

Le mode initial est volontairement **read-only first** : aucune suppression, aucun redémarrage, aucun vidage de dossier, aucune migration destructive ne doit être activée dans la première version.

## URL cible

```text
https://mcp.wealthtechinnovations.com/mcp
```

## Authentification ChatGPT / OAuth MCP

Le serveur conserve l'authentification historique :

```text
Authorization: Bearer <MCP_AUTH_TOKEN>
```

Pour être découvrable par ChatGPT Apps SDK sans exposer `MCP_AUTH_TOKEN`, le serveur expose aussi une couche OAuth minimale compatible Authorization Code + PKCE :

```text
GET  /.well-known/oauth-protected-resource
GET  /.well-known/oauth-authorization-server
GET  /oauth/authorize
POST /oauth/authorize
POST /oauth/token
```

Principes de sécurité :

- `/mcp` reste protégé ;
- l'ancien `MCP_AUTH_TOKEN` reste accepté pour les tests administrateur et les scripts existants ;
- ChatGPT reçoit uniquement des access tokens OAuth temporaires signés côté serveur ;
- `MCP_AUTH_TOKEN` n'est jamais renvoyé dans les réponses OAuth ;
- le login web existant `/login` authentifie l'opérateur ;
- chaque connexion OAuth affiche ensuite une page de consentement (client, hôte de redirection, accès demandé) : le code n'est émis qu'après un clic « Autoriser » sur cette page, via un POST same-origin lié à la demande exacte et valable 10 minutes ; « Refuser » renvoie `access_denied` au client ;
- le serveur renvoie un header `WWW-Authenticate` sur les `401` MCP pour permettre à ChatGPT de découvrir `/.well-known/oauth-protected-resource`.

Tests publics attendus :

```bash
curl -i https://mcp.wealthtechinnovations.com/health
curl -i https://mcp.wealthtechinnovations.com/.well-known/oauth-protected-resource
curl -i https://mcp.wealthtechinnovations.com/.well-known/oauth-authorization-server
curl -i https://mcp.wealthtechinnovations.com/mcp
```

Le dernier test doit rester en `401 Unauthorized` sans token.

## Installation locale

```bash
npm install
cp .env.example .env
npm run build
npm run start
```

## Variables d’environnement

Voir `.env.example`.

Ne jamais pousser `.env`, les clés SSH, les dumps SQL, les sauvegardes ou les secrets.

## Outils MCP read-only initiaux

- `ping`
- `get_project_context`
- `check_disk_s1`
- `check_disk_s2`
- `pm2_status_s1`
- `pm2_status_s2`
- `docker_status_s1`
- `docker_status_s2`
- `list_domains_s1`
- `list_domains_s2`
- `list_large_files_s1`
- `list_large_files_s2`
- `list_backups_s1`
- `list_backups_s2`
- `curl_domain`

## Documentation obligatoire

La mémoire persistante du projet se trouve dans `docs/`.

Avant toute modification, lire :

1. `docs/GPT.md`
2. `docs/SUIVI.md`
3. `docs/ROADMAP.md`
4. `docs/TASKS.md`
5. `docs/SECURITY.md`
6. `docs/MCP_TOOLS.md`
7. `docs/AGENTS_ARCHITECTURE.md`
8. `docs/AI_SKILLS.md`

## Déploiement recommandé

- Hébergement : S1
- Dossier : `/opt/apps/wealthtech-mcp-ssh-bridge`
- Runtime initial : PM2 ou Docker Compose
- Reverse proxy : Nginx/Plesk vers `127.0.0.1:8787`
- HTTPS obligatoire
- Authentification historique : header `Authorization: Bearer <MCP_AUTH_TOKEN>`
- Authentification ChatGPT : OAuth minimal via les routes `.well-known` et `/oauth/*`

## Règle de sécurité

Le MCP ne doit pas devenir une console root libre. Il doit exposer uniquement des outils contrôlés, nommés, documentés, journalisés et validés.


---

## Règle permanente — double présence, non-régression et amélioration continue

GitHub est la source versionnée.

Le serveur MCP est la source exécutée.

Les deux doivent toujours être vérifiés ensemble avant et après toute intervention.

Aucune IA ne doit supposer que GitHub et le serveur sont synchronisés sans vérification.

Toute intervention humaine, IA ou automatisée doit respecter :

- non-régression obligatoire ;
- amélioration continue obligatoire ;
- aucune suppression destructive sans sauvegarde, justification et validation ;
- aucun secret dans GitHub ;
- vérification GitHub + serveur avant modification ;
- documentation dans `SUIVI.md` après modification ;
- vérification service, logs et endpoints après déploiement.