Skip to main content
Glama
jnot807

recruitee-mcp

by jnot807

Recruitee MCP

Arbeiten Sie Ihre Recruitee-/Tellent-Pipeline direkt aus Claude heraus. Schlagen Sie eine Rolle nach, lesen Sie einen Kandidaten und alles, was bereits über ihn aufgezeichnet ist, fügen Sie eine selbst gesourcte Person hinzu und verfassen Sie Ihre Interview-Bewertung – ohne die Unterhaltung zu verlassen.

Es läuft auf Ihrem eigenen Rechner mit Ihrem eigenen Recruitee-API-Token, daher wird alles, was es schreibt, in Ihrem Namen abgelegt, genau so, als hätten Sie selbst darauf geklickt.


Was es kann

Vierzehn Tools. Neun lesen, fünf schreiben, und jedes Schreiben zeigt Ihnen genau, was es tun wird, bevor es es tut.

Lesen

Tool

Was Sie bekommen

rt_list_offers

Ihre Rollen mit ihren IDs, Status und Kandidatenzahlen. Optional nach Titel gefiltert.

rt_get_stages

Die Pipeline-Stufen einer Rolle, jeweils mit aktuellem Zählerstand.

rt_offer_candidates

Alle Personen auf einer Rolle – ihre Stufe, ob sie disqualifiziert wurden, und etwaige Bewertungen. Wirklich auf diese Rolle begrenzt, nicht auf das gesamte Unternehmen.

rt_get_candidate

Ein vollständiger Datensatz: Kontaktdaten, Tags, jede Rolle, auf der sie sitzen, und ihre Bewerbungsantworten.

rt_search_candidates

Findet eine Person anhand des Namens.

rt_source_candidates

Durchsucht Ihre gesamte Datenbank, einschließlich CV-Text – siehe unten.

rt_get_rating_scale

Die Bewertungsskala, die für Ihr Konto konfiguriert ist, damit ein Urteil nie geraten wird.

rt_get_evaluations

Alle Bewertungen zu einem Kandidaten – Bewertung, Notiz, Stufe, Prüfer und Datum – in einer flachen Liste.

rt_get_notes

Bereits vorhandene Notizen zu einem Kandidaten, neueste zuerst.

Bewerbungsantworten verdienen ein Wort: Gehaltsvorstellungen und Ähnliches werden pro Rolle zurückgegeben, denn jemand, der sich auf drei Stellen beworben hat, hat die Frage dreimal beantwortet, und eine flache Liste kann diese Antworten nicht unterscheiden.

Schreiben

Tool

Was es tut

rt_create_candidate

Erstellt eine Person und platziert sie in einem Schritt auf einer Rolle. Nimmt E-Mail, Telefon, Links, Tags, einen Anschreiben-Block, die Quelle und eine anzuhängende Datei. Legt sie standardmäßig in Sourced ab.

rt_submit_evaluation

Schreibt die Daumen-Bewertung und Ihre Begründung für eine Rolle auf einen Kandidaten – den Tab „Evaluation“ seines Profils.

rt_set_stage

Verschiebt einen Kandidaten auf eine andere Stufe eines seiner Angebote. Lehnt eine disqualifizierte Platzierung ab, sodass niemand requalifiziert werden kann.

rt_attach_file

Hängt eine lokale Datei an einen vorhandenen Kandidaten an, optional als dessen CV.

rt_add_note

Fügt eine Notiz hinzu, öffentlich oder privat. Für Kontext, der kein Urteil ist – eine Gesprächszusammenfassung, Sourcing-Begründung, eine Zusammenfassung.

Wie sich die Schreibvorgänge verhalten

Sie nehmen Namen, keine IDs. „Dana Whitfield“, „Regional Sales Manager“. Wenn ein Name auf zwei Personen zutrifft, hält es an und listet sie auf, statt eine auszuwählen – ein Urteil auf der falschen Person abzulegen ist der Fehler, der hier wirklich zählt.

Jede Schreiboperation zeigt zuerst eine Vorschau. Der erste Aufruf gibt genau das zurück, was geschrieben würde, und schreibt nichts. Erst nach Ihrer Freigabe wird etwas übernommen. Bei einem neuen Kandidaten führt die Vorschau außerdem eine Duplikatprüfung durch und teilt Ihnen mit, welche Angaben fehlen, sodass Sie es erfahren, bevor der Datensatz existiert, statt danach.

Bewertungen beziehen sich auf die tatsächliche aktuelle Stufe des Kandidaten – genau das bedeutet eine Bewertung. Sie können es bewusst überschreiben, aber Sie müssen es nie selbst herausfinden.

Ihre Absätze bleiben erhalten. Das Notizfeld von Recruitee akzeptiert Klartext, aber die Oberfläche rendert diesen Text als HTML. Eine in Absätzen geschriebene Notiz käme andernfalls als ein einziger durchgehender Block an. Die Zeilenumbrüche werden beim Übertragen konvertiert, und der Text wird zuerst maskiert, damit ein versehentliches < in Ihrem Text nicht verschluckt oder gerendert werden kann.

Bewertungen werden geprüft, nicht gerundet. Gültige Werte hängen von Ihrer konfigurierten Skala ab – eine 4-Punkte-Daumen-Skala hat kein „neutral“, eine 5-Punkte-Skala schon. Ein Wert, den die Skala nicht kennt, wird abgelehnt, statt stillschweigend in einen Nachbarwert umgewandelt zu werden.


Related MCP server: Recruitee MCP Server

Sourcing aus Ihrer eigenen Datenbank

rt_source_candidates führt dieselbe Suche aus wie der Candidates-Bildschirm, was etwas anderes ist als rt_search_candidates: Jenes gleicht Namen ab, dieses gleicht alles ab, einschließlich CV-Text, mit booleschen Operatoren.

query: "renewals AND churn"
query: "(SaaS OR B2B) AND \"net revenue retention\" NOT \"vice president\""

Das ist wichtig, weil Stellenbezeichnungen zwischen Unternehmen uneinheitlich sind und das, was jemand tatsächlich getan hat, im Lebenslauf steht. Nach den Belegen zu suchen ist besser, als nach der Stellenbezeichnung zu suchen.

Filter lassen sich kombinieren: offer, excludeOffer, jobStatus, stage, status, tags, sources. excludeOffer ist derjenige, der daraus ein Sourcing-Tool statt eines Suchfelds macht – er hält die Personen, die bereits auf einer Rolle sind, aus den Ergebnissen heraus, wenn Sie sie auffüllen.

Jedes Ergebnis enthält warum es übereinstimmte – die tatsächlichen Sätze, mit entferntem HTML – und jede Rolle, auf der die Person bereits sitzt, mit der Stufe und, wo sie abgelehnt wurde, dem Grund. Der letzte Teil ist keine Dekoration: Die meisten Personen in einem etablierten ATS wurden einmal abgelehnt. „Falscher Standort“ vor zwei Jahren mag heute nicht mehr zutreffen; „Assessment nicht bestanden“ gilt weiterhin. Niemand sollte ohne diese Information als neuer Fund präsentiert werden.

Warum der Filteraufbau paranoid wirkt

/search/new/candidates ignoriert still, was es nicht erkennt, und gibt ein ungefiltertes Ergebnis zurück, statt einen Fehler zu melden. Vier Wege, eine plausibel klingende, aber völlig falsche Antwort zu erhalten, alle an einem Live-Konto bestätigt:

Fehler

Was die API tut

Unbekannter Entitätsname

gibt die gesamte Datenbank zurück

nin statt not_in

gibt die gesamte Datenbank zurück

Unbekannte Sortierung

fällt stillschweigend auf Relevanz zurück

Zwei Filterobjekte für dieselbe Entität

das zweite ersetzt das erste

Der letzte Fall ist der übelste: Eine Rolle plus ein Jobstatus, als zwei Objekte gesendet, liefert alle mit diesem Jobstatus zurück, und nichts weist darauf hin, dass der Rollenfilter verworfen wurde. Deshalb wird jede Einschränkung für eine Entität in ein einziges Objekt zusammengeführt, und kein vom Aufrufer gelieferter Schlüssel erreicht jemals die API – Namen werden auf ein Vokabular abgebildet, das gegen die Live-API verifiziert wurde, und alles außerhalb davon wirft einen Fehler.

Ein falscher Wert ist dagegen sicher: Er liefert null, was für jeden, der es liest, offensichtlich falsch ist. Ein Null-Ergebnis kommt außerdem mit Ihren echten Stufennamen zurück, sodass sich ein falsch geschriebener Stufenname von einem leeren unterscheiden lässt.

node sourcing-test.js prüft das alles, einschließlich der Tatsache, dass der Client jeden der vier oben genannten Fehler ablehnt.

Einrichtung

Fünf Minuten, einmalig. Sie benötigen Node 18 oder neuer (node -v zum Prüfen) und Claude Code oder die Claude-Desktop-App.

1. Installieren

npm install

2. Erstellen Sie Ihren eigenen API-Token

In Recruitee: Settings → Apps and plugins → API tokens, bleiben Sie auf dem Tab Personal API tokens und klicken Sie auf + Add token. Es fragt nach Ihrem Passwort und zeigt den Wert dann einmal an.

Notieren Sie sich auf diesem Bildschirm Ihr Unternehmen aus dem Panel Current company details oben. Sowohl die numerische ID als auch die Subdomain funktionieren.

Das muss Ihr Token sein, kein geteiltes. Ein Recruitee-Token handelt als die Person, die es erstellt hat. Eine mit Ihrem Token geschriebene Bewertung erscheint daher als Ihre – genau darum geht es. Fügen Sie es niemals in einen Chat, eine E-Mail oder ein Ticket ein.

3. Speichern Sie es

npm run set-token -- <paste-your-token-here> <your-company>

Ein Token später zu rotieren ist einfach npm run set-token -- <new-token> – das Unternehmen wird gemerkt.

Es wird in session/token.json geschrieben, nur für Sie lesbar und von Git ignoriert. RECRUITEE_API_TOKEN in der Umgebung überschreibt die Datei, wenn Sie es lieber in einem Passwortmanager aufbewahren möchten.

4. Beweisen Sie, dass es funktioniert

npm run check

Sie möchten authenticated: true und einige Ihrer Rollen sehen.

5. Verbinden Sie es mit Claude

Führen Sie dies in diesem Ordner aus und starten Sie Claude dann neu:

claude mcp add recruitee -- node "$PWD/server.js"

Nutzen Sie stattdessen die Claude-Desktop-App? Öffnen Sie Settings → Developer → Edit Config und fügen Sie dies mit Ihrem echten absoluten Pfad hinzu (pwd gibt ihn aus):

{
  "mcpServers": {
    "recruitee": {
      "command": "node",
      "args": ["/absolute/path/to/recruitee-mcp/server.js"]
    }
  }
}

Dann fragen Sie Claude: „Listen Sie die offenen Rollen in Recruitee auf“.


So sieht es in der Anwendung aus

Sie: Wer ist in der Pipeline für „Regional Sales Manager“?

Sie: Zeig mir Dana Whitfield – was hat sie beim Gehalt angegeben, und welche Bewertungen gibt es bereits zu ihr?

Sie: Schreib eine Bewertung für sie zu dieser Rolle. Ein Ja: stark bei Verlängerungen und Expansion, führte ein Team von neun, keine PLG-Erfahrung.

Claude zeigt Ihnen die Bewertung, die Notiz, die Rolle und die Stufe und schreibt nichts.

Sie: Ja, senden.


Was es bewusst nicht kann

Ein Recruitee-API-Token trägt genau die Berechtigungen der Person, die es erstellt hat – die Dokumentation stellt ausdrücklich klar, dass es „dieselben Aktionen wie in der Web- oder Mobil-App im Namen dieses Benutzers ausführen“ kann. Es gibt kein Read-only-Token, das man ausstellen könnte.

Die Zurückhaltung steckt also stattdessen in diesem Code. Disqualifizieren, Requalifizieren, Löschen, Verbergen und Anonymisieren sind alles echte, dokumentierte Endpunkte, die dieser Server nicht implementiert. Nicht hinter einem Flag versteckt, nicht auskommentiert – schlicht nicht vorhanden, sodass keine Anweisung, kein Prompt und kein Bug sie erreichen können. Einen Kandidaten abzulehnen bleibt eine Entscheidung, die Sie in der UI treffen.

Stufenwechsel sind das Einzige, was erlaubt ist. rt_set_stage bewegt einen Kandidaten entlang der Pipeline eines Angebots, denn das ist Buchhaltung und kein Urteil, und eine Pipeline, die Sie von hier aus nicht voranbringen können, gerät aus dem Takt mit dem, wo auch immer Sie sie sonst verfolgen. Die Grenze wird bei der Disqualifikation gezogen und sie wird durchgesetzt, nicht nur dokumentiert: Der Wechsel lehnt eine Platzierung ab, die bereits disqualifiziert wurde, denn eine Änderung ihrer Stufe würde die Person requalifizieren – also jemandes Ablehnung als Nebeneffekt eines Buchhaltungsaufrufs rückgängig machen.

npm run smoke stellt bei jedem Lauf diese Eigenschaften sicher: dass kein destruktives Tool exponiert wird, dass der Stufenwechsler eine disqualifizierte Platzierung ablehnt und auf ein Angebot begrenzt ist, und dass jede Schreiboperation ihr Bestätigungsgate ankündigt. Die letzte Prüfung leitet die Schreiboperationen aus den Tool-Schemas ab, statt aus einer Liste von Namensmustern – die frühere Version deckte neue Tools stillschweigend nicht mehr ab und ließ rt_set_stage durch, ohne es überhaupt zu testen.


Wissenswertes

{"type": "text"}

Neue Kandidaten landen in „Sourced". Der Create-Endpoint von Recruitee legt Personen immer in „Applied" ab, was alle von dir gesourcten Personen unter den echten Bewerbern ablegen würde. Daher werden sie direkt nach der Erstellung verschoben und du wirst informiert, falls das nicht klappt. Übergib stage, um das zu überschreiben — "Applied" für jemanden, der sich tatsächlich beworben hat, oder eine spätere Stufe für jemanden, der sich bereits im Prozess befindet. Um sie danach zu verschieben, verwende rt_set_stage.

Das Setzen eines Lebenslaufs ersetzt den bereits vorhandenen. Das set_as_cv von Recruitee fügt keinen Lebenslauf hinzu, es tauscht den Slot und stuft die vorherige Datei zu einem einfachen Anhang herab. rt_attach_file weigert sich daher, einen Lebenslauf bei einem Kandidaten zu setzen, der bereits einen hat, es sei denn, du übergibst replaceCv — ein Lebenslauf in der Akte ist eine Entscheidung von jemandem, und die einzige Spur des Überschreibens ist eine zusätzliche Zeile in der Anhangsliste.

Bewertungen werden unter dir abgelegt. Sie erscheinen als „Du hast bewertet", nicht unterscheidbar von einer manuell angeklickten. Schreibe niemals eine für ein Gespräch, das du nicht geführt oder nicht gelesen hast, und wenn das Urteil von einem Kollegen stammt, erwähne das in der Notiz.

Die Zuordnung ist auf dem Rückweg unzuverlässig. Alles, was über irgendein API-Token geschrieben wird, wird dem Besitzer dieses Tokens zugeordnet, daher kann der Bewerter bei einer Bewertung, die jemand synchronisiert hat, derjenige sein, der sie synchronisiert hat, und nicht derjenige, der das Interview geführt hat. Die Notiz nennt normalerweise den wahren Namen.

Fragebogen-Scorecards werden nicht unterstützt. Nur die einfache Bewertungskarte. Die API dokumentiert die Antworten pro Frage in jeder Antwort, aber nie in einem Request-Body, daher müsste die Schreibform zuerst an einer echten Übermittlung beobachtet werden. Es könnte für dein Konto auch keine Rolle spielen: Wenn /results/scorecards für Personen, die Interview-Stufen durchlaufen haben, leer zurückkommt, werden einfache Bewertungskarten verwendet und es fehlt nichts. Es lohnt sich, das zu prüfen, bevor sich jemand in den Fragebogen-Weg investiert.


Wo das funktioniert

Dies ist ein lokaler stdio-MCP-Server — Claude startet ihn als Prozess auf deiner Maschine, und dein Token verlässt sie nie.

  • Claude Code (Terminal, Desktop-App, IDE-Erweiterungen) ✅

  • Claude-Desktop-App ✅

  • claude.ai im Browser ❌ — das verbindet sich nur mit entfernten MCP-Servern, die über HTTPS erreichbar sind, was bedeuten würde, dies zu hosten und die Recruitee-Tokens aller auf diesem Host zu speichern.


Konfiguration

Variable

Zweck

RECRUITEE_API_TOKEN

Ein Token aus der Umgebung verwenden statt des gespeicherten

RECRUITEE_COMPANY_ID

Ein Unternehmen aus der Umgebung verwenden statt des gespeicherten

Fehlerbehebung

Was du siehst

Was zu tun ist

„No Recruitee API token"

Schritt 3 wurde nicht ausgeführt oder in einem anderen Ordner. cd hierher zurück und npm run check versuchen.

"authenticated": false

Das Token wurde falsch getippt oder widerrufen. Ein neues erstellen und Schritt 3 wiederholen.

Claude sieht die Tools nicht

Claude richtig neu starten — beenden, nicht nur das Fenster schließen. Prüfen, dass Schritt 5 aus diesem Ordner heraus ausgeführt wurde.

„That name matches two candidates"

Funktioniert wie vorgesehen. Die Person in Recruitee öffnen und Claude die Nummer vom Ende der URL geben.

Alles andere

npm run smoke ausführen und senden, was ausgegeben wird.

Entwicklung

npm run smoke     # self-check: tool list, no destructive tools, confirm gates, one live read
npm run sourcing  # 20 checks on the search filters, including the four silent-failure modes
npm run check     # prove the token
npm start         # run the server directly (it speaks JSON-RPC on stdin/stdout)

Zwei Implementierungshinweise, beide durch Ausprobieren gefunden statt aus der Dokumentation:

  • Der Datei-Upload ist undokumentiert. Die Referenz beschreibt einen JSON-Body mit einem serverseitigen path, erklärt aber nie, wie man diesen erhält. Ein einfacher Multipart-POST funktioniert, wobei der Dateiteil attachment[file] heißt — ein nacktes file liefert 500, und die Übergabe der Kandidaten-ID als Query-Parameter erstellt einen Anhang, der mit niemandem verknüpft ist. Das Befördern einer Datei in den Lebenslauf-Slot ersetzt sie durch eine neue ID und einen generierten Dateinamen, daher werden Uploads anhand der Lebenslauf-URL des Kandidaten verifiziert statt anhand der gerade hochgeladenen ID.

  • /search/new/candidates ignoriert seinen eigenen Query-Parameter und gibt jeden Datensatz im Unternehmen zurück, daher läuft die Namenssuche stattdessen über /candidates?query=. Pipeline-Stufen kommen aus /offers/{id}/placements, gruppiert nach Stufe, nicht aus /offers/{id}/pipeline_templates, das für eine Rolle verfügbare Vorlagen ohne deren Stufen auflistet.

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables extraction and analysis of candidate profiles from Recruitee recruitment pipelines, optimized for LLM evaluation with clean, bias-free data.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects your Ashby recruiting data to Claude, enabling natural language queries and management of candidates, applications, jobs, interviews, offers, and team information.
    36
    MIT
  • F
    license
    B
    quality
    C
    maintenance
    Enables Claude to manage Zoho Recruit ATS operations including candidates, jobs, interviews, analytics, email, and AI-assist through natural language.
    20

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jnot807/recruitee-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server