ooligo
mcp-server

Serveur MCP Workable pour Claude

Difficulty
intermédiaire
Setup time
90min
For
recruiter · recruiting-ops · talent-acquisition · recruiting-engineer
Recruiting & TA

Stack

Workable héberge son propre serveur Model Context Protocol sur https://mcp.workable.com/mcp : la question de le construire est donc réglée, vous vous connectez, vous n’en écrivez pas un. La question ouverte, c’est lesquels de ses 94 outils l’assistant de vos recruteurs a le droit de toucher. Workable a lancé le serveur le 2026-05-13 avec 38 outils et l’a étendu à 94 le 2026-07-20, et cette extension a ajouté un accès en écriture aux revues de performance, à la gestion des comptes et des permissions, et à la mise à jour des profils candidats. Le bundle d’artefacts dans apps/web/public/artifacts/mcp-server-workable-recruiting/ répond à cette question : une passerelle de moindre privilège (README.md, pyproject.toml, src/workable_gateway/policy.py, src/workable_gateway/server.py) qui relaie 33 outils, en place 13 derrière une validation humaine en deux temps et refuse les 48 autres.

Quand l’utiliser

Connectez le serveur hébergé dès que vos recruteurs travaillent déjà dans Claude sur des tâches adjacentes — brouillons d’outbound, synthèses de scorecard, points pour le hiring manager — et repassent sans arrêt dans Workable pour répondre à « à quelle étape est ce candidat », « quelles candidatures n’ont pas bougé cette semaine », « qui est dans la boucle d’entretien de cette req ». La connexion tient en une commande et ne coûte rien : Workable inclut le serveur MCP sans supplément sur tous ses plans d’abonnement.

Ajoutez la passerelle par-dessus quand la liste d’autorisation doit tenir de façon centralisée. Le settings.json d’un recruteur est appliqué par son client, sur sa machine, et il peut l’éditer. Un processus passerelle est appliqué une fois, par recruiting-ops, et le faire tourner, c’est la différence entre une politique et une préférence. La population concernée : une équipe de recrutement de cinq personnes ou plus partageant un compte Workable, dans une organisation où quelqu’un finira par demander qui a décidé que l’assistant pouvait désactiver un utilisateur.

Quand NE PAS l’utiliser

Laissez tomber la passerelle — pas le serveur — si votre client restreint déjà les outils par connecteur et que vous faites confiance à ceux qui l’utilisent. Claude Code adresse les outils MCP sous la forme mcp__<server>__<tool> et respecte permissions.deny dans settings.json. Le bundle fournit claude-code-permissions.example.json, la même politique exprimée ainsi, générée depuis le même policy.py. Elle ne coûte aucune infrastructure et c’est le bon premier geste. Ne passez à la passerelle que si vous avez besoin d’un caviardage des réponses, d’un journal d’audit central ou d’un jeton de validation lié à des arguments précis — trois choses qu’une deny list côté client ne donne pas.

Laissez tomber le workflow entier si votre compte Workable est aussi le système de référence RH, et pas seulement celui du recrutement. Le serveur de Workable couvre les salariés, les congés, le suivi du temps et tout le cycle des revues de performance depuis le même endpoint que les candidats. Un assistant branché sur ce compte atteint les contrats de travail via get_employee_documents et les enregistrements d’absence via get_timeoff_balances, sauf si quelque chose l’en empêche. Si personne n’est encore propriétaire de cette décision, faites d’abord valider la politique IA pour le recrutement.

Et laissez tomber si un seul recruteur constitue toute l’équipe. Le connecteur hébergé seul suffit à cette échelle ; l’installation de la passerelle et la revue de politique représentent environ une journée de travail pour une gouvernance que personne ne réclame encore.

Installation

Les instructions complètes sont dans apps/web/public/artifacts/mcp-server-workable-recruiting/README.md. La version courte : pip install -e ., définissez WORKABLE_ACCOUNT avec votre sous-domaine Workable, enregistrez la passerelle avec un chemin absolu et autorisez dans le navigateur au premier appel. Le serveur de Workable publie des métadonnées de serveur d’autorisation conformes à la RFC 8414 et accepte l’enregistrement dynamique de client conforme à la RFC 7591 : il n’y a donc pas de client ID à provisionner à la main ni d’API key à faire tourner.

L’étape qui compte vraiment vient avant tout cela : décider avec quel membre Workable vous vous autorisez. Chaque session MCP hérite du rôle et des affectations de poste de l’utilisateur connecté — la formulation de Workable est que l’IA ne peut lire et agir que sur les données que l’utilisateur est déjà autorisé à voir. Cela ressemble à un modèle de permissions jusqu’à ce que vous voyiez qui installe ça en premier. Les responsables recruiting-ops sont admins. Vous autoriser avec votre propre compte donne à la passerelle une portée admin et fait de la liste d’autorisation le seul mur encore debout. Créez plutôt un membre Workable dédié avec un permission set resserré ; get_permission_sets liste ceux que votre compte a définis.

Ce qu’il faut retenir hors de portée

src/workable_gateway/policy.py répartit les 94 outils en trois niveaux plus une liste de caviardage. La fonction de niveau refuse par défaut : les 37 outils que Workable a ajoutés en une seule livraison le 2026-07-20 seraient donc restés éteints jusqu’à ce qu’un humain les classe — exactement le comportement attendu d’une surface qui a grossi de 65% en neuf semaines.

48 refusés d’emblée, en six groupes avec une justification chacun. Les quatre outils de gestion des membres sautent parce qu’un agent capable d’attribuer un permission set élargit sa propre portée à la session suivante. Les quatre outils de département sautent parce que merge_department n’a pas d’inverse et que les rapports de recrutement sont découpés par département : une fusion ratée réécrit l’historique du funnel sans lever d’erreur. Les cinq outils de validation — offres, requisitions, congés — sautent parce qu’une validation est un acte d’autorité d’une personne nommée, et la déléguer efface la preuve qu’un humain a décidé. Les six outils de suivi du temps sautent parce qu’ils touchent à la paie et que bulk_create_time_entries transforme une mauvaise inférence en erreur de paie de masse. Les quinze outils de revue de performance sautent parce que submit_review est définitif ; la documentation de Workable note qu’un second envoi échoue, donc un agent qui rejoue un appel expiré est précisément le danger. Les quatorze lectures HRIS sautent parce que les documents salariés contiennent des contrats, des lettres de rémunération et des pièces de visa ou médicales.

13 derrière un portail de validation — les écritures sur candidats et requisitions, de move_candidate et disqualify_candidate jusqu’à create_requisition. Appeler l’un d’eux sans _gateway_confirm renvoie un dry run au lieu d’une écriture. Le _gateway_token de ce dry run est un hash du nom de l’outil et des arguments exacts : une validation pour « déplacer le candidat 41 vers Onsite » ne peut pas être rejouée en « déplacer le candidat 88 vers Offre ».

33 relayés directement — 32 lectures plus add_comment, la seule écriture qui soit additive, attribuable et supprimable depuis l’interface Workable. En plus de celles-là, server.py définit trois outils propres : workable_policy_report, pour qu’un appel refusé produise « c’est bloqué, faites-le dans Workable » plutôt qu’une boucle de nouvelles tentatives ; workable_pipeline_snapshot, pour les comptes par étape et les candidats à l’arrêt en un seul balayage paginé ; et workable_stage_move_review, qui résout l’étape actuelle du candidat pour que le recruteur valide un diff et non une demande.

Choix d’ingénierie

Épingler le compte plutôt que laisser le modèle choisir. Tous les outils Workable sauf get_accounts prennent un sous-domaine account, et un utilisateur ayant accès à deux comptes — une marque en production et une autre, ou un bac à sable — obtient des réponses assurées et d’apparence correcte issues du mauvais tenant. La passerelle injecte WORKABLE_ACCOUNT sur chaque appel relayé et refuse tout appel où le modèle en a mis un autre. Deux comptes, deux processus passerelle.

Un token bucket plutôt qu’un retry sur 429. Le bucket OAuth 2.0 de Workable est de 50 requêtes par tranche de 10 secondes et renvoie un HTTP 429 avec X-Rate-Limit-Reset au-delà. « Montre-moi tous les candidats de tous les postes ouverts » se déploie en get_jobs plus un get_candidates paginé par req et épuise ça en deux secondes environ, après quoi un assistant qui réessaie repart droit dans le mur. WORKABLE_RATE_PER_SEC vaut 4/s par défaut, sous le débit soutenu de 5/s, ce qui laisse de la marge à tout ce qui, dans le tenant, tient le même jeton.

Un balayage, pas un appel par étape. workable_pipeline_snapshot pagine les candidats une fois et compte les étapes à partir des lignes, plafonné par WORKABLE_PAGE_CAP (5 pages, 500 candidats). Le coût est plat que le poste ait 4 étapes ou 14, et la réponse pose page_cap_reached pour que le modèle annonce un compte partiel comme partiel.

Caviardage sur la réponse, pas seulement sur la requête. Bloquer search_employees n’empêche pas get_candidate de renvoyer un champ d’auto-déclaration que votre compte collecte pour le reporting EEO. policy.REDACT_FIELDS vide les champs par nom de clé, récursivement, parce que Workable imbrique le détail candidat et renvoie les lignes de recherche détaillée sous leurs propres clés.

Le coût réel

Le serveur coûte $0 : les communiqués de lancement et d’extension de Workable indiquent tous deux qu’il est inclus sans supplément sur tous les plans d’abonnement, les trois outils Advanced Search étant réservés aux plans Premier+ et Enterprise. C’est le chiffre intéressant, parce que Workable facture sa propre IA produit en crédits : les lots publiés aujourd’hui sont 5 000 crédits pour $600, 10 000 pour $1 000 et 50 000 pour $4 750, soit $0,095 à $0,12 le crédit. Interroger l’IA de Workable brûle des crédits. Interroger Claude via le serveur MCP brûle des tokens Anthropic et zéro crédit Workable. Pour les équipes qui paient déjà des sièges Claude, faire passer le Q&A de recrutement de l’autre côté de cette ligne est un vrai transfert, pas un match nul.

En face : environ 90 minutes pour installer la passerelle et faire les vérifications de premier lancement, et une revue de politique plus proche de trois heures parce qu’elle implique quelqu’un à qui appartient la décision sur les données RH. Le connecteur direct seul, c’est une commande et une dizaine de minutes.

Modes de défaillance

L’assistant rejoue une écriture refusée jusqu’à trouver une formulation qui passe. Garde-fou : workable_policy_report existe pour que le modèle nomme le niveau et s’arrête, et chaque message de refus renvoie vers l’interface Workable au lieu de proposer un autre outil. Testez-le — l’étape 3 du README demande à l’assistant de désactiver un membre et attend un refus, pas une tentative.

Une validation ancienne est rejouée contre d’autres arguments. Garde-fou : le _gateway_token hache les arguments, pas seulement le nom de l’outil. Modifier l’identifiant du candidat après le dry run l’invalide et force une nouvelle validation.

Le caviardage rate un champ personnalisé. La liste de champs dans policy.py est générique, et les attributs d’auto-déclaration dépendent du compte. Garde-fou : le point 1 de la liste de TODO du README consiste à récupérer vos vraies clés d’attributs avec get_account_custom_attributes et get_candidate_detailed_fields avant que tout cela touche un compte de production. Tant que ce n’est pas fait, traitez le caviardage comme non testé.

Les CV et les notes atteignent un tiers. get_candidate_files est au niveau ALLOW parce que lire des CV, c’est le métier. Cela fait transiter des données RGPD et CCPA par Anthropic. Garde-fou : la validation de la politique IA et un registre des activités de traitement qui nomme le flux — avant la mise en service du connecteur, pas après la question de quelqu’un.

L’alternative qu’il faut nommer

La comparaison évidente, c’est le schéma du workflow MCP Greenhouse, où le bundle est le serveur parce que l’éditeur n’en héberge pas. Ce n’est pas l’arbitrage ici. Construire votre propre serveur sur l’API REST de Workable revient à réimplémenter 94 endpoints et à assumer le flux OAuth pour concurrencer quelque chose de gratuit et de première main — ne le faites pas.

L’arbitrage qui mérite d’être pesé, c’est un courtier. Composio et Zapier listent tous deux des endpoints MCP Workable hébergés, et tous deux placent un second fournisseur sur le chemin, détenteur de votre jeton OAuth, à leur propre tarif à la tâche ou au siège. N’en prenez un que si vous êtes déjà standardisés dessus pour d’autres connecteurs. Sinon le classement est : serveur Workable hébergé plus deny rules côté client pour la plupart des équipes, serveur hébergé plus cette passerelle quand la liste d’autorisation doit s’appliquer là où les recruteurs ne peuvent pas la modifier. Pour situer cette ligne, voyez l’accès en écriture MCP et quand l’accorder et les serveurs MCP expliqués.

Files in this artifact

Download all (.zip)