{
  "markdown": "# 🇫🇷 France Travail MCP\n\n[![npm version](https://img.shields.io/npm/v/france-travail-mcp.svg)](https://www.npmjs.com/package/france-travail-mcp)\n[![CI](https://github.com/jojolabagarre/france-travail-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/jojolabagarre/france-travail-mcp/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Node](https://img.shields.io/node/v/france-travail-mcp.svg)](https://nodejs.org)\n\n> Serveur **MCP (Model Context Protocol)** pour les **API officielles de France Travail** : offres d'emploi, référentiel des métiers **ROME 4.0**, prédiction **ROMEO**, et entreprises qui recrutent (**La Bonne Boîte**).\n>\n> *An MCP server connecting any AI assistant (Claude, Cursor, VS Code…) to the official France Travail APIs: real-time job offers, the ROME occupational taxonomy, ROME-code prediction, and hiring-company search.*\n\nBranchez votre assistant IA sur le marché de l'emploi français : il **cherche des offres en temps réel**, **traduit un métier en code ROME**, et **cible les entreprises qui recrutent** — directement dans la conversation.\n\nC'est, à notre connaissance, le **premier serveur MCP basé sur les API REST officielles** de France Travail (les autres « MCP France Travail » sont des *scrapers* du site web, fragiles et non officiels).\n\n---\n\n## ⚡ Installation en 30 secondes\n\n> Dans tous les cas, il vous faut des identifiants France Travail (gratuits) — voir [Obtenir vos identifiants](#-obtenir-vos-identifiants).\n\n### 🖱️ Option A — La plus simple, sans terminal (Claude Desktop)\n1. Téléchargez le fichier **`france-travail-mcp.mcpb`** depuis la [page Releases](https://github.com/jojolabagarre/france-travail-mcp/releases).\n2. **Double-cliquez** dessus : Claude Desktop l'installe et vous demande votre `Client ID` / `Client Secret` dans un **formulaire** (le secret est stocké dans le trousseau de votre système).\n3. C'est prêt — **aucune édition de fichier JSON**.\n\n### ⌨️ Option B — Une ligne (Claude Code)\n```bash\nclaude mcp add france-travail \\\n  -e FT_CLIENT_ID=PAR_xxxxx \\\n  -e FT_CLIENT_SECRET=votre_secret \\\n  -- npx -y france-travail-mcp\n```\n\n### 🧩 Option C — Copier-coller (Claude Desktop, Cursor, VS Code…)\n```json\n{\n  \"mcpServers\": {\n    \"france-travail\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"france-travail-mcp\"],\n      \"env\": {\n        \"FT_CLIENT_ID\": \"PAR_xxxxx_xxxxxxxxxxxxxxxxxxxx\",\n        \"FT_CLIENT_SECRET\": \"votre_secret\"\n      }\n    }\n  }\n}\n```\n\n📖 **Guide complet par client (Cursor, VS Code/Cline, et Ollama 100 % local) → [INSTALL.md](INSTALL.md).**\n\n---\n\n## 🔑 Obtenir vos identifiants\n\n1. Créez un compte sur **[francetravail.io](https://francetravail.io)**.\n2. Créez une **application** dans votre espace.\n3. **Souscrivez** aux API souhaitées (au minimum *Offres d'emploi v2* ; puis *ROME 4.0 – Métiers*, *ROME 4.0 – Fiches métiers*, *ROMEO 2*, *La Bonne Boîte v2* selon les outils voulus).\n4. Récupérez le **Client ID** (`PAR_…`) et le **Client Secret**.\n\nPrérequis : **Node.js ≥ 18** (sauf l'option A, qui est autoportée).\n\n---\n\n## 🧰 Outils exposés\n\n| Outil | Description | API France Travail | Statut |\n|-------|-------------|--------------------|--------|\n| `ft_search_offres` | Recherche multicritères d'offres (mots-clés, ROME, géo, contrat, salaire…) | Offres d'emploi v2 | ✅ testé en live |\n| `ft_get_offre` | Détail complet d'une offre | Offres d'emploi v2 | ✅ testé en live |\n| `ft_list_referentiel` | Référentiels (communes, types de contrats…) codes ↔ libellés | Offres d'emploi v2 | ✅ testé en live |\n| `ft_search_metiers` | Trouver un métier ROME et son code par texte | ROME 4.0 – Métiers | ✅ testé en live |\n| `ft_get_metier` | Fiche d'un métier ROME (définition, accès) | ROME 4.0 – Métiers | ✅ testé en live |\n| `ft_get_fiche_metier` | Compétences & savoirs d'un métier | ROME 4.0 – Fiches métiers | ✅ testé en live |\n| `ft_predict_rome` | Deviner le code ROME d'un intitulé libre (IA) | ROMEO 2 | ✅ testé en live |\n| `ft_search_entreprises` | Entreprises à fort potentiel d'embauche | La Bonne Boîte v2 | ⚠️ désactivé par défaut |\n\n> **La Bonne Boîte** est une API à *accès conditionné* : la simple souscription ne suffit pas, France Travail exige une **habilitation validée manuellement** (sans elle, l'API renvoie `403 Invalid scope`). L'outil `ft_search_entreprises` est donc **désactivé par défaut** ; une fois l'accès accordé, activez-le avec la variable d'environnement `FT_ENABLE_LABONNEBOITE=true` (son endpoint exact reste à confirmer).\n>\n> Les autres outils s'activent automatiquement dès que l'API correspondante est souscrite, **sans changement de code**.\n\n---\n\n## 🧪 Exemple — l'agent enchaîne les outils tout seul\n\n> *« Je suis pâtissier et je cherche un CDI vers Lyon. »*\n> 1. `ft_predict_rome(\"pâtissier\")` → code ROME `D1104`\n> 2. `ft_search_offres(codeROME=[\"D1104\"], commune=\"69381\", typeContrat=[\"CDI\"])`\n> 3. `ft_search_entreprises(...)` pour les candidatures spontanées.\n\n> ⚠️ **Paris, Lyon et Marseille** s'indiquent par **arrondissement** (Lyon 1er = `69381`, Paris 1er = `75101`, Marseille 1er = `13201`) : les codes « globaux » `69123` / `75056` / `13055` sont refusés par l'API (erreur 400). Récupérez les bons codes avec `ft_list_referentiel`.\n\n---\n\n## 🔐 Correspondance outils ↔ scopes OAuth\n\nChaque API a son propre *scope*. Le serveur demande **un token par scope** (mis en cache ~25 min). Pour activer un groupe d'outils, votre application doit avoir souscrit à l'API correspondante :\n\n| API à souscrire | Scope OAuth | Active |\n|-----------------|-------------|--------|\n| Offres d'emploi v2 | `api_offresdemploiv2 o2dsoffre` | `ft_search_offres`, `ft_get_offre`, `ft_list_referentiel` |\n| ROME 4.0 – Métiers | `api_rome-metiersv1 nomenclatureRome` | `ft_search_metiers`, `ft_get_metier` |\n| ROME 4.0 – Fiches métiers | `api_rome-fiches-metiersv1 nomenclatureRome` | `ft_get_fiche_metier` |\n| ROMEO 2 | `api_romeov2` | `ft_predict_rome` |\n| La Bonne Boîte v2 | `api_labonneboitev2` | `ft_search_entreprises` |\n\n---\n\n## 🛠️ Développement\n\n```bash\ngit clone https://github.com/jojolabagarre/france-travail-mcp.git\ncd france-travail-mcp\nnpm install              # installe les dépendances ET compile (script \"prepare\")\ncp .env.example .env     # renseignez FT_CLIENT_ID / FT_CLIENT_SECRET\nnpm run smoke            # test de bout en bout contre l'API réelle\n```\n\n| Commande | Rôle |\n|---|---|\n| `npm run build` | Compile TypeScript → `dist/` |\n| `npm test` | Vérifie les types (`tsc --noEmit`) |\n| `npm run smoke` | Test de bout en bout contre l'API réelle |\n| `npm start` | Démarre le serveur (transport stdio) |\n| `npm run bundle` | Génère le bundle `.mcpb` (Claude Desktop) |\n\nStack : TypeScript · `@modelcontextprotocol/sdk` · `zod` · `axios`. Transport **stdio**.\nArchitecture : `src/services` (auth OAuth2 + client HTTP + erreurs), `src/schemas`, `src/tools` (un fichier par domaine). Voir [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## 📦 Publication (mainteneur)\n\nLa publication est **automatique** sur un tag de version (npm **puis** registre MCP officiel) :\n\n```bash\nnpm version patch        # met à jour la version, crée le commit + le tag\ngit push --follow-tags   # déclenche le workflow de publication\n```\n\nVoir [`.github/workflows/publish-mcp.yml`](.github/workflows/publish-mcp.yml). Secret requis dans le dépôt : `NPM_TOKEN` (jeton npm). L'authentification au registre MCP se fait par OIDC (aucun secret supplémentaire).\n\n## 🔒 Sécurité\n\n- Le fichier **`.env` n'est jamais committé** (voir `.gitignore`).\n- Les identifiants sont fournis au serveur via les **variables d'environnement** du client MCP (ou le formulaire sécurisé du bundle `.mcpb`).\n- Ne partagez jamais votre `client_secret`. En cas de fuite, **régénérez-le** sur francetravail.io.\n\n## 🗺️ Feuille de route\n\n- [ ] La Bonne Alternance (offres + formations en alternance)\n- [ ] Marché du travail (statistiques, tensions de recrutement par bassin)\n- [ ] Validation/finalisation de `ft_search_entreprises` (La Bonne Boîte)\n- [x] Publication npm + registre MCP + bundle `.mcpb`\n\n## 🤝 Contribuer\n\nLes contributions sont bienvenues : ouvrez une *issue* ou une *pull request*. Voir [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## 📄 Licence & avertissement\n\nSous licence **MIT** (voir [LICENSE](LICENSE)).\n\nProjet **non officiel**, non affilié à France Travail. Il consomme les API publiques de France Travail ; leur usage est soumis aux conditions d'utilisation de [francetravail.io](https://francetravail.io). « France Travail », « ROME » et « La Bonne Boîte » sont des marques de France Travail.\n",
  "bytes": 8562,
  "sha": "9cf258500663e27de423f4e72c9f5947101dc1748783ac9665998c4a9bd11a7b",
  "repo_slug": "jojolabagarre/france-travail-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_jojolabagarre_france_travail_m_9978af3a/readme"
}