france-travail-mcp
MCP server connecting AI assistants to official France Travail APIs for real-time job offers, ROME code prediction, and hiring company search.
README
🇫🇷 France Travail MCP
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).
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.
Branchez 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.
C'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).
⚡ Installation en 30 secondes
Dans tous les cas, il vous faut des identifiants France Travail (gratuits) — voir Obtenir vos identifiants.
🖱️ Option A — La plus simple, sans terminal (Claude Desktop)
- Téléchargez le fichier
france-travail-mcp.mcpbdepuis la page Releases. - Double-cliquez dessus : Claude Desktop l'installe et vous demande votre
Client ID/Client Secretdans un formulaire (le secret est stocké dans le trousseau de votre système). - C'est prêt — aucune édition de fichier JSON.
⌨️ Option B — Une ligne (Claude Code)
claude mcp add france-travail \
-e FT_CLIENT_ID=PAR_xxxxx \
-e FT_CLIENT_SECRET=votre_secret \
-- npx -y france-travail-mcp
🧩 Option C — Copier-coller (Claude Desktop, Cursor, VS Code…)
{
"mcpServers": {
"france-travail": {
"command": "npx",
"args": ["-y", "france-travail-mcp"],
"env": {
"FT_CLIENT_ID": "PAR_xxxxx_xxxxxxxxxxxxxxxxxxxx",
"FT_CLIENT_SECRET": "votre_secret"
}
}
}
}
📖 Guide complet par client (Cursor, VS Code/Cline, et Ollama 100 % local) → INSTALL.md.
🔑 Obtenir vos identifiants
- Créez un compte sur francetravail.io.
- Créez une application dans votre espace.
- 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).
- Récupérez le Client ID (
PAR_…) et le Client Secret.
Prérequis : Node.js ≥ 18 (sauf l'option A, qui est autoportée).
🧰 Outils exposés
| Outil | Description | API France Travail | Statut |
|---|---|---|---|
ft_search_offres |
Recherche multicritères d'offres (mots-clés, ROME, géo, contrat, salaire…) | Offres d'emploi v2 | ✅ testé en live |
ft_get_offre |
Détail complet d'une offre | Offres d'emploi v2 | ✅ testé en live |
ft_list_referentiel |
Référentiels (communes, types de contrats…) codes ↔ libellés | Offres d'emploi v2 | ✅ testé en live |
ft_search_metiers |
Trouver un métier ROME et son code par texte | ROME 4.0 – Métiers | ✅ testé en live |
ft_get_metier |
Fiche d'un métier ROME (définition, accès) | ROME 4.0 – Métiers | ✅ testé en live |
ft_get_fiche_metier |
Compétences & savoirs d'un métier | ROME 4.0 – Fiches métiers | ✅ testé en live |
ft_predict_rome |
Deviner le code ROME d'un intitulé libre (IA) | ROMEO 2 | ✅ testé en live |
ft_search_entreprises |
Entreprises à fort potentiel d'embauche | La Bonne Boîte v2 | ⚠️ désactivé par défaut |
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'outilft_search_entreprisesest donc désactivé par défaut ; une fois l'accès accordé, activez-le avec la variable d'environnementFT_ENABLE_LABONNEBOITE=true(son endpoint exact reste à confirmer).Les autres outils s'activent automatiquement dès que l'API correspondante est souscrite, sans changement de code.
🧪 Exemple — l'agent enchaîne les outils tout seul
« Je suis pâtissier et je cherche un CDI vers Lyon. »
ft_predict_rome("pâtissier")→ code ROMED1104ft_search_offres(codeROME=["D1104"], commune="69381", typeContrat=["CDI"])ft_search_entreprises(...)pour les candidatures spontanées.
⚠️ Paris, Lyon et Marseille s'indiquent par arrondissement (Lyon 1er =
69381, Paris 1er =75101, Marseille 1er =13201) : les codes « globaux »69123/75056/13055sont refusés par l'API (erreur 400). Récupérez les bons codes avecft_list_referentiel.
🔐 Correspondance outils ↔ scopes OAuth
Chaque 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 :
| API à souscrire | Scope OAuth | Active |
|---|---|---|
| Offres d'emploi v2 | api_offresdemploiv2 o2dsoffre |
ft_search_offres, ft_get_offre, ft_list_referentiel |
| ROME 4.0 – Métiers | api_rome-metiersv1 nomenclatureRome |
ft_search_metiers, ft_get_metier |
| ROME 4.0 – Fiches métiers | api_rome-fiches-metiersv1 nomenclatureRome |
ft_get_fiche_metier |
| ROMEO 2 | api_romeov2 |
ft_predict_rome |
| La Bonne Boîte v2 | api_labonneboitev2 |
ft_search_entreprises |
🛠️ Développement
git clone https://github.com/jojolabagarre/france-travail-mcp.git
cd france-travail-mcp
npm install # installe les dépendances ET compile (script "prepare")
cp .env.example .env # renseignez FT_CLIENT_ID / FT_CLIENT_SECRET
npm run smoke # test de bout en bout contre l'API réelle
| Commande | Rôle |
|---|---|
npm run build |
Compile TypeScript → dist/ |
npm test |
Vérifie les types (tsc --noEmit) |
npm run smoke |
Test de bout en bout contre l'API réelle |
npm start |
Démarre le serveur (transport stdio) |
npm run bundle |
Génère le bundle .mcpb (Claude Desktop) |
Stack : TypeScript · @modelcontextprotocol/sdk · zod · axios. Transport stdio.
Architecture : src/services (auth OAuth2 + client HTTP + erreurs), src/schemas, src/tools (un fichier par domaine). Voir CONTRIBUTING.md.
📦 Publication (mainteneur)
La publication est automatique sur un tag de version (npm puis registre MCP officiel) :
npm version patch # met à jour la version, crée le commit + le tag
git push --follow-tags # déclenche le workflow de publication
Voir .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).
🔒 Sécurité
- Le fichier
.envn'est jamais committé (voir.gitignore). - Les identifiants sont fournis au serveur via les variables d'environnement du client MCP (ou le formulaire sécurisé du bundle
.mcpb). - Ne partagez jamais votre
client_secret. En cas de fuite, régénérez-le sur francetravail.io.
🗺️ Feuille de route
- [ ] La Bonne Alternance (offres + formations en alternance)
- [ ] Marché du travail (statistiques, tensions de recrutement par bassin)
- [ ] Validation/finalisation de
ft_search_entreprises(La Bonne Boîte) - [x] Publication npm + registre MCP + bundle
.mcpb
🤝 Contribuer
Les contributions sont bienvenues : ouvrez une issue ou une pull request. Voir CONTRIBUTING.md.
📄 Licence & avertissement
Sous licence MIT (voir LICENSE).
Projet 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. « France Travail », « ROME » et « La Bonne Boîte » sont des marques de France Travail.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。