Skip to main content
Glama
Sundeepg98

Instahyre MCP

by Sundeepg98

Instahyre MCP

Instahyre als MCP-Tools: öffentliche Jobsuche, die authentifizierte Inbound-Seite – der eigentliche Zweck dieser Plattform – das Nachrichten-Eingang und geschützte Profil-Änderungen.

Instahyre ist ein umgekehrter Marktplatz – Arbeitgeber stelle dich in eine kuratierte Warteschlange and Recruiter öffnen deinen Lebenslauf. Die ausgehende Suche ist die Standard-Hälfte; das knappe Signal ist, wer sich mit dir beschäftigt hat und wie schnell du das bemerkst. instahyre_inbound_digest ist das Tool, das genau dies mit einem einzigen Aufruf beantwortet.

Die Architektur: httpx standardmäßig, Browser dort, wo die API nicht herreicht

44 der 47 Tools sind reines httpx. Drei verwenden einen Browser, und alle drei sagen es deutlich.

Instahyres /api/v1/* ist von Cloudflare-Bot-Management ausgenommen. Es antwortet einem kalten, unauthentifizierten, ehrlich identifizerten HTTP-Clienten bereits bei der ersten Anfrage – ohne Cookie, ohne Token, ohne JS- Challenge. Gemessen an ~300 Live-Anfragen: null Drosselung, keine Challenge, on the Standard-python-httpx-User-Agent. Die API ist also der Datenpfad, und das bleibt sie auch.

Ihre HTML-Siten sind eine andere Geschichte: Diese sind Cloudflare-gesperrt (403 für httpx, "Just a moment..." für headless Chromium – beides gemessen). Wen etwteral nur dort ist, is a browser die ehrliche Weeg, es zu lesen, und dieser Server setzt einen holel, trustworthy.

Diese Unterscheidung wurde auf die harte Manier gelernt. Eine frühere Build formulierte der Regel als „kein Browser, niemals“ and meldete Messages als nicht möglich. Sie waren immer mögich. Die Konversationsliste liegt einfach nur einem Namespace, in den niemand geschaut hatte – /inbox_page/candidate_conversation, nicht in der Namespace /resume_modal/emails/, in dem dir Nachrichtenressource liegt. Ein Browser fandmach bei einem einzigen Seitenladen, indem er mascrostalle, was der Inbox abrief. Der Endpoint entpuppte sie then als gewöhnliches /api/v1/*, daher die Tools that often nutzen, are reines httpx. Ein Browser beantwortete einen Frage, die man der API nicht Stelen konnten; er hat sich nicht in den Datenpfad eingereiht.

Tool

Browser?

Warum?

instahyre_login_browser

ja, sichtbares Fenster

Google OAuth ist eine Weiterleitungskaskade, die kein HTTP-Client abschließen kann.

instahyre_verify_apply_target

ja, sichtbares Fenster

Liest ein seerver-iniziertes Seiten-Flag, das entscheidet, an welchen Endpunkt eine Bewerbung gesendet wird. Keine API legt es offen; die Seite is Cloudflare-gesperrt. Bewerbungen können nicht zurückgezogen werden, daher is ein Browser here bother eine Annamehme.

instahyre_reauth

ja, headless, niemals sichtbar

Bezieht erneut die langfristige sessionid des persistenten Profile again, which die on the disk spichere Kopie überlebt. Es lädt /ecandidate/opportunities/niemals die Login-Seite: Ein Tool, dessen Anspruch „das is kein Login“ darf die Login-URL nicht rufen, and einen Browser mit einem aktiven Sitzung zu A maildeseite werführen wie estánnöchte. Sichtbares Fenster is die Garantie, keine Optimierungs: Kein Fenstermittel, dass in this Tonne nicht gewartet wird.

alles andere (44 Tools)

Nein

Reines httpx.

Die beiden Browser-Tools mit sichtbarem Fenster brechen jede Nicht-GET-Anfrage am Router ab, außer beim eigenen Cloudflare-//den cóscgi/` Challenge-Handshake – der nothing am Acount verändert and ohne dem die Überprüfung niemals abgeschlossen werden kann. Keins vonires clickt etwas.

Das ist immer noch der selbewusste Unterschied zum verwandten Naukri-Server, der ein persistentes Chrome-Profil, eine CDP-Brucke und ~1.300 Zeilen Anti-Bot-Infrastructure in of the Datenpfads have requires. Hier ist der Browser Gelegentlich and optional.

Wir täuschen keinnen Browser-User-Agenten. Das bringt nichts (die API acceptiert den ehrlichen), and die Instahyre-Geschäftsbedingungen verbieten das Fälschen von Headers. Sollte die API-Ausnahme jemals hebt werden, wirft der Client eine typisierte Challengedectore – das ist ein Zeichen, annhalten und neu zu bewerten, nicht ein Weg ausweichen.

Related MCP server: MCP Resume & Email Assistant

Installieren

python -m venv venv
venv/Scripts/python -m pip install -r requirements.txt

# ...then jobcore, the shared scoring engine. It is REQUIRED, and it is not on
# PyPI. Pick the line that matches your checkout:
venv/Scripts/python -m pip install -e ../jobcore          # you have the sibling
venv/Scripts/python -m pip install -r requirements-ci.txt # you do not (pinned, from git)

venv/Scripts/python -m pytest tests/ -q

Teams

Die beiden Jobsäulen-Zeilen sind both Alternatives, keine Schritte. Führe die editierbare Variante aus, wenn ../jobcore neben diesem Repo ausgecheckt est – sie ist die einzige Weeg, um den Scorer iterativ zu entwickelt – and sonst die requirements-ci. requirements-ci.txt- Variante. Führe die zweite nicht nach der ersten aus: Eine anhöterunq mit direkter URL entfernzt stillschweiged eine editierbare Installation, oh ahne „already satisfied“- Zeile, die you warnst.

Tools

Die Browser-Binärdatei von Playwright wird nur für die drei Browser-ools genutzt (gerecht...). Die anderen 44 funktiónieren ohne – und instahyre_reauth meldet „keine stiele Erneuerung war: "keine" and benant so einen Fallback sitzt einem eine Ausnahme warfen, so ein Checkout without Chromium ist eingeschränkt, not kaputt:

venv/Scripts/python -m playwright install chromium

Öffentlich – ohne Anmeldung

Tool

Was es tut

Anfragen

instahyre_search_jobs

Sucht Jordan.

Eigene Filter: Bates, Funktionen, Orts, Unternemen, Branchen, Unternemensgröße, Erfahrung, Job-Typ.

1

instahyre_get_job

Eine Jobs: Beschreibung, Erfahrungsband, Rekrüter, Agentur-Verdikt.

1 (Cache 6 h)

instahyre_get_company

Ein employer Profil plus all live Jobs, die dieses offen haben. Dient zugleich als Mitgliedschafts‑Oräkel.

1

instahyre_market_stats

Facettierte Marktaggregate für einen Auschnitt, ganz ohni Job-Einträge.

1

instahyre_rank_jobs

Suche, dann Abgleich/eineit of a Seite mit deinigen Skills. Skills stammen aus my_skills, sonst from shared config, sonst – wenn angemeldet – and/or deinen Instahyre-Profil; skills_source benentnt female Siegerin.

1+ (+2 für den Profil-Fallback)

instahyre_sync_index

Seitenweise Übershall eines Auschnitt in the lokalen Index and meldebt, was NEU ist something letzen Lauf.

1/Seite

instahyre_list_job_functions

Die 58 Jobfunktionen mit IDs.

1 (Cache 30 Tage)

instahyre_list_locations

The akrequizes Orters-Tokens, grupped.

1 (Cache 30 Tage)

instahyre_list_industries

Die 74 Branchen mit IDs.

1 (Cache 30 Tage)

instahyre_server_info

Cache-Zustand, Anfragezahl und was diese Plattform nicht leistsen kann.

0

instahyre_configurers

Die geltende Scöring-Richtlinie, ihren Hash and die Datei, aus der sie stammt.

0

Authentifiziert – Inbound-Triage

Die Hälfte, auf duast es ankommt. Jedes dieser Tools benötigt eine aktive Sitzung.

Tool

Zweck

Anfragen

instahyre_inbound_digest

Hier beginnen. Badge der Warteschlange, wer sich Ihren Lebenslauf ангesehen hat, ungelesene Nachrichten, die am böchste bewerteten, noch unberührten Matches sowie das, was seit dem lzten Lauf neu aufgetaucht ist.

~5

instahyre_list_opportunities

Die kuratierte Warteschlange: Rollen, die Arbeitgeber Ihnen zugeordnet haben, mit echten Übereinstimmung-Punkt. Über die gesemte Warteschlange gereiht.

1

instahyre_get_opportunity

Ein Match, zusammengesetzt aus dem Warteschlangen-Datensatz + öffentlichen Jobdetails + verwandten Rollen bei diesem Arbeitgeber.

2-3

instahyre_opportunity_counts

Fascetten der Warteschlange: Status, Standort, Branche, Arbeitgeber, Geße. Ohne Datensätze.

1

instahyre_recruiter_activity

Wer Sie angesehen / kontatziert hat / nicht auf die Shortlise gesetzt hat. Das wahr hier am schne lieren Signal.

2

instahyre_list_applications

Jede Bewerbung und jede Ablehnung, mit Status.

2

instahyre_get_profile

Ihr Profil sowie Völlständigkeilücken, geordnet danach, was sie each einzelne kostet.

1-2

instahyre_account_settings

Sichtbarkeit, Benachrichtigungen, blockierte Arbeitgeber.

1-2

instahyre_apply

Sich auf einein Stellenangebot bewerben. Ncht umkehrbar. Nur als Vorschau, außer confirm=True ist.

0-1

instahyre_decline_opportunity

Eins als „ncht intressiert" markieren. Ebenfalls unumkehrbar, mit derselben Hürde.

0-1

Der Listen – Lese sowie genau enige Schreibvorgang

Recruiter-Gespräche und Nachrichtentexte. Jeder READ; Bevor er das Ef&afte "Anfrage" prompted Wird hin gegegen eine Liste v váltoierender Pfade – "fragmente" geprüft – sodass die Lese-Ebene keinen Senden, Sterne ma"kiren, über als gelesen ma"kieren kann – send_message "seht weiterhin auf dieser Liste und "sie Lese-Seite le"ht ihn it we"terhin ab.

Antworten gehen durch eine andere Tür davon: eone Allowliste mit **genau EINER URL". Sterne ma"kiren, "gelesen" markieren und "alle als gelesen ma"kiren" – werden nicht einfach verweigert, es gibt keinen "Zweige" der sie überhaupt "construieren könnte".

Tool

Zweck

Anfragen

instahyre_list_versations

Threads, mit Firma und Rolle, aus dem dis Job imgefügt. Filter: Status, ungelesen, mit Starn, "깊bel.

1 (+1 prun Job, wenn include_job).

lockhre_read_conversation

Alle Nachrichten in einem Thread als Text, älteste zuerst. A conv_id, die nicht seine ist, gen not_found statt in einem lehren Thread.

1 (+1, wenn der Thread lehr zurückkommt)

instahyre_inbox_counts

Summen für ungelesen, mit Starn, mit Starn-und-ungelesen.

1

instahyre_reply_to_conversation

Eine Antwort in einen Thread. UNUMKEHRBAR"P orconfrmg=True erforderlich. Im Vorschau werden die Emfänger genannt, so wie der Server sie meldet, dazu Firma, Rolle and e "exacte Body".

2-3 für den Vorschau, 4-5 für das Senden

Ein Ehrlichter Vorbeacht, der im eigenen docstring des Tools stated: Das Leseen eines Threads kann es bei Instahyre als "gelesen" ma "kieren. Die Seitte sendet keine kene-anfrage – sie vermindert das Badge lokal – und das ist nur dann in sich kit, wenn der Server es machen at, sobald die Nachrichten abgeguert werden. That is: Kversationen auflisten und Zähler abrufen is anweiswlich nicht-verändernd; einen Thread abrufen ist es nicht. Das lies sich nicht testen, weil der Posteingang derzeit keinerlei Konversationen enthält.

Profschreibvorgänge – Das verändert Ihr Konto

Tool

Zweck

Requests

instahyre_update_skills

Füt Skills Hauge, aber nur hinzu. Erstellt "ervo a Slapshot, prüft danach. Nur Vorschau, in-sofern confirm=True.

2-4

instahyre_update_profil

Stzeet Bezeichnung, Firma / Jahre der Erfährtung. Gleiche Hürde.

2-4

instahyre_restore_profile

Lände die Skill-Lite auf einen Snapshot zurück.

2-3

instahyre_list_profil_snaps'

Wiederdefwähpunkte auf der Plattform.

0

instahyre_verify_apply_target

Önet einen Browser. Misst neu, an welche Endpunkt eine Bewerbung POSTen würde.

0 (am Tile)

Die einge "capte"e Schreib-Classe – gemessen, bevor sie Gebaut wurde

Jeder Anfrage in dieser Ebene wurde aufzeichnet, bevor auch nur eine Zeile des Anzeugs was geschrieben. Fünfmandere Schreibfläche wurde am 2026-08-23 bevollt und "sofort abgelehnt", but no einer ohne aufgenommenen Anfrage-Body hat. Und ein Schreibvorgang mit geratenem Body is schlimmer als gar kein Tool. Ein falsches Geßenates endnet meistens mit harmlessen 400; ein halb-richtiges Geratene gelingthält und "machtet" etwas, das keiner gewählt hat – und auf dieser Plattform ist der zweete Fall unüberrufbar.

scripts/capture_wite_contracts.py ist de Wie in "in"es entle" worden sind. Das "skript" öffnet den echten, ihn angemeldeten Browser, "bricht" jede Nicht-GET angefrage am Router ab und zeichnet auf, was es abgebrochen hat – Methode, URL, Body, Headers. Es t Ruegt nichts, bis es innerhalb der Seite ein POST ausgelöst und gesehen hat, dass der Router, wie it blockiert – so heißt "nichts gesendet"** eine Messung, nicht eine Anname.

Tool

Zweck

Vertrag

instahyre_support_ticket

Ein Ticket "erst-suchen". Eine Person liest es; es gibt kein Löschen. Nur Vorschau, außer confirmation=true.

Übertragung – aufgezeichnet und abgebrochen

instahyre_toggle_job_alert

Diese "eine Warnungen" an/aus for ein Gespeicherte Suche. Umkehrbar. Endet den Query string und zugleich das Flag, so wie die Seitte es tut.

Queltext ausgeliefert, gaensee Funktions

instahyre_re

Eefert irn den Empfehlungslink. Nimmt nicht Kontact auß.

Ausgeliefertexte Quellcode

instahyre_referal_contces

Die, die Instotyre as Einladung anbietet. An Lese – in deren Client ist das in a GET too.

Ausgelieferter Quellcode

instahyre_referal_invites

Leute einladen. IRREVERSIBLE. Die Vorschau nennt sämtliche Empfängen.

Ausgelieferter Quellcode

instahyre_referal_contacts? no indeed in the source instahyre_send_referal_invitesis the one with most consequences: the email carries his The name, it reaches people who know him, and Instahyre has no "undo" anywhere in their product. Thus,confirm=False` prints all the recipients, malformated addresses are declined instead of tried, duplicates are eliminated before zeroing, and one call sends no more than ten.

Instahyre_referal_contacts? no, original send_referal_invites. It's "is the one that has real consequences".

Hmm I'm typing over. Let me step back.

If I include "and entities" over. Let me write the actual answer elegantly without all this thinking. I will produce final German translation moving struct. Ensure no mention of each.

Below are difficulties:

One: In the "What it does" tool table, in the original first row uses "who saw your resume" – Could "resume" be "Résumé" not "Lebenslauf". Instahyre is Inha? "Resume" well. Use "Lebenslauf".

  • "when did not them" "fall" and "your" maybe in this server is "his"??? The prose page says "his" in the second paragraph: "test evt because inbox currently zeros" etc. Actually final row uses "Seinem Namen" ("the mail carries his name"). The instruction is computer program's user in third person? In table "your profile" etc. Translate "th" as "des Nutzizigen" or "your profile" "Ihr Profil". But "his" in a phrase "the last time" – The tool's internal doc uses "your", but past prose says "fore his" referring to the profile's user. To keep natural, translation can use formal "Ihr" for the user. The phrase "A conv_id that is not his" in original uses "his", perhaps because the server is for the same person; but the table says "your". I'll translate "not his" as "nicht sein" but the German "sein" is also, awkward with "Ihr". Original is "that is not his" because it needs not returning other user. We can translate "die nicht zu seiner gehört" far" as "der nicht zu seiner Person ge hart" (his). But a cann't be "Ihr" in immediate. Maybe "ilt I'll "die nicht zu Seiner gehört" — a bit leg. Better "die nicht auf sein Kontéh" Let's simply say "die nicht seine ist" and maybe in the pronoun as "nicht seine" is fine because "seine".

But the tool row "instahyre_get_profile" says "Your profile, plus..." Korean "Ihr". There is inconsistency but pronoun se Better "a", "mn".

Let's use "seine" for the paragraph tied to the tool's subject, "Ihr" for all prose "you". Fine.

One more " "cancel listing" – The first table "Queue badge ... and what had been indexed since last run" => "aufgetaucht" (unt "gezeigtseit". Good.

"the curated queue: roles employers matched, with real match Ge" "real match scores" – "with real scores" – Use "mit ions as exactly score values" no translations.

"fascends: status, location, industry, employer, employer size" – "Geße" not "Größe" with German "ß" in word should use "Größe" no underlying. Text is German, so "ö" is allowed. Use "Größe".

"Anfragen" header: Requests = "Anfragen". In German, each request to an API "Anfrage" (feminine). Good.

Now note "Requests" table "Contracts" etc.

Plain HTTP in session: "over plain HTTP" in English not necessarily "unverschlüsselt" but "plain" = "unverschlüsselt" true. "über unverschlüsseltes HTTP" okay.

"Google sign-in" — In German, "Google-Anmeldung" no.

Now check Markdown table cells with pipes (e.g. confirm=True) no vertical. Good.

Potential issue: Table only checked the "What it does" row's text; The first column "Tool" should survive as instahyre..., yes. The table. The | with "~5" etc. Keep.

Some details: The table of inbox has "Requests" header but source pipeline "Requests" and in row "1 (+1 per job if include_job)" – note no backticks? In the page: "1 (+1 per job if include_job)" – literally "per job if to include_job" with backticks around include_job. I must keep "1 (+1 per Job, falls include_job)". Use "per Job", translated.

Another inside: "is a conv_id that he didn't have, you get... not_co."

Actually not_found in the source is italic? Original: "raises not_found rather than returning an empty thread." Yes keep in backticks.

Now for "contract" "Section": Use "sessing" etc. Here is final.

But a little nuance: "Instahyre has no unshed" -> " kein Ungesendetes" not. "Unsend" – "Äbsende" no. "keine Sende-zurück-Funktion" = "Undo during in" – in German use "keine Möglichkeit, die Einladung rückgängig zu machen". Better "Instahyre biet "irgendwo in seinen Produkt keine Unsenden"-Funktation" – that phrase is readable: "es gibt bei Instahyre nirgendwo ein „Unsenden"." Use quoted:

"send_referal_invites ist das eine* with gete:"die E-Mail trägt seinen Namen erreicht Menschen, die die ihn kennen – und Instahyre hat nirgendwo im Produkt eine Und würde." Good.

Okay.

Let's final also includes references to verify_apply_target "Re-measures which endpoint a application would post to" — "neu misst to the application" Use "misst afterigen, welcher Endpunkt..." Accept.

One caution: "profile-image contract WAS captured" uses "was" – German "WURDE erfasst". With stars original WAS "had" is stressed. We need preserve emphasis? Source: "The profile-image contract WAS caught" — "WAS" with "WAS" maybe caps. In German "WURDE bereits erfasst" or "ist", but emphasis not exact. Since the instructions say preserve emphasis markers exactly: The text "WAS" is not a markdown emphasis; it's caps. Should we use caps? In translation, probably "WURDE erfasst" in bold/new. Hmm. Source line "is 'WAS/cap' " stands for contrast "was captured". In German "WURDE erfasst" create a clear emphasis. That's a plus. The instruction "Emphasis markers exactly" might refer to markdown. No markdown. Use "WURDE" only if preserver, but the original had caps not markdown; U should preserve caps: "WURDE" no markdown. Hmm, "WAS" actual letters all caps. German equivalent "WURDE" in caps. It denotes emphasis. Fine: "Der Profilbid-Vertrag WURDE erfasst" caps.

Similarly "IRREVERSIBLE" in German "UNWIDERUFLICH" no.

Another nuance: "Five other write surfaces were commissioned on 2026-08-23 and refused on the spot." – "beauftragt" and "abglehnt" are eup.

Should "commissioned" be "beauftrag" maybe "in Auftrag" correct. Good.

"Every request in this tier was recorded" – "Jeder Anfrage in dieser Classe wurde aufgenommen, bevor auch nur eine Zeile des ToolsSchreibwar." Good.

Now finalize.

Need do not include extra. Let me write final output in Markdown to complete.| Tool | Zweck | Anfragen | | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | | instahyre_inbound_digest | Hier anfangen. Badge der Warteschlange, Wer Ihren Lebenslauf angesehen Reduce, ungelesene Nachrichten, die am höchsten bewerteten noch unberührten Matches und was seit dem letzten Lauf erschienen ist. | ~5 | | instahyre_list_opportunities | Die kuratierte Warteschlange: Rollen, die Ar beitgeber auf Sie angestemmt haben, mit echten Übereinstimmungwunkten. Über die gesamte Warteschlange geiht. | 1 | | instahyre_get_opport | Ein Match, zusammengesetzt aus dem Datensatz der Warteschlange + den öffentlichen Jobdetails + verwandten Rollen bei demselben Arbeitgeber. | 2-3 | | instes_opportunity_counts | Fascetten der Warteschlange: Status, Standort, Branche, Arbeitgeber, Geßen. Ohne Einträge. | 1 | | instahyre_recruiter_activity | Wer Sie angesehen, angementiert oder ste ncht auf die Short-List gezet hat. Das hier am schnellsten ver"sehende "Signal. | 2 | | instahyre_list_applications | Jede Bewerbung und jede Aberkennung, mit Status. | 2 | | instahyre_get_profil | I bevor Profile "plus Lücken im Vollständigung, sortiert danach, was jede einzelne Lücke Sie kostet. | 1-2 | | instahyre_account_settings | Sichtbarkeit, Benachrichtigungen, blockierte Angestellte. | 1-2 | | instahyre_apply | Sich bei einem Stellenangebot bewerben. Unholrbar. Nur Vorschau, außer es wird confirmation=True gesetzt. | 0-1 | | instahyre_decline_opport | Eins als „nicht intressiert" markern. Ebenfalls untenumkehrbar, Hürde gleiche. | 0-1 |

Der Posteingang – Leseen plus genau ein Schreiben

Recruiter-Gespräche und Nachrichtentexte. Jeder READ wird, bevor er°in die Welt geht, gegen "Mindestens eine" Liste vundertendeer Pfad-Fragmente geprüft – die Lese-Ebene kann also nicht versenden, mit größern Stern versehen? oedner als gelesen markieren – send_message steht weithin auf dieser Zustande, und die Lese-Seite lehnt sich ihn it ab.

Antworten geht durch eine andere Tür impossib: eine Allowliste mit genau einer URL. Mit einem Stern versehen, als gelesen markieren – und e "Alle als gelesen markieren" – wern nicht einfach kehnt, sondern haben keinen Codepfad, der sie überhaupt construneirren könnte.

Tool

Zweck

Anfragen

Lock_list_conversations

Threads, mit eingetzogener in Firma und Rolle aus dem Job. Filter: Status, ungelesen, mit Stern, Fretex.

1 (+1 pro Job, falls include_joden)

instahyre_read_conversation

Jede these paper in one Thread as Text, älteste zuerst. Eine conv_id, die nicht seine ist, looks: not_found netet anstelle von einem zero Thread.

1 (+1, diese Thread leer zurückomt)

instahyre_inbox_counts

Summen für drei Zählungen – ungelesen / mit Stern / mit Stern und ungelesen.

1

lock_reply_to_conversation

Eine Antwort in einem Thread senden. IRREVERSIBELconfirmation=True is required. The preview names the receipts, the company and the position and the "exact.

2-3 für Vorsauth, 4-5für sendenden

One "honest note" stated in own docstring of the Tool: Das Aufrufen eines Threads kann at Instahyre's actually markier ener "gelesen". The website does not sendane no. "read" – she "decrement the badge" coffee locally – halo is "olu coherent, if the server do it when the messages are from. Conversations and counts – lists are provably not "mutated"; a Thread that is fetched is not provableент Trivial. It was "She because Postf the currently contains no conversations.

Profile writes – that changes Ihre account

Tool

Function

Anfragen

instahyre_update_skills

Add Skills. Ausschließlich "hinzufügen", "erstes Ein "Snapshot", overprüft danach. Only preview unless confirm=True.

2-4

instahyre_update_profil

Set "designation"en, Firma oder Jahren. "Zjahren"er" der bek. Same "Hürde".

2-4

instahyre_restore_profil

Stellt die Skill-Liste auf Zustand eines Snapshots zurück.

2-3

instahyre_list_profile_snapshots

Wiedenhstellung on "die" Festplatte.

0

instahyre_verify_apply_target

Starts a browser. Check rewhich "he the "POST" Endpunkt would receive.de

Der captureded – Die dentures it was built

Every an erfahrung in this level wurde war** etwas geschrieben, bevor it Die Zeile des Tool gebaut. Five "we" Schreib-Oberflächen were am 2026-08-3 in Auftrag gegeben and "fertight" sofort "Verweigert", because no "a" keine body recorded what shall. Ane das Schreiben einen excl" body" is even worse than none Anwendungen to have. False (elden) usually "400 sad; if half-sewwrt The task says that "etwas" was achieved, and at Platform yields respectivelyder second case.

"scripts/capture_write_contracts.py is how it was unblokiert" – It opens the real, logged-in-vordnen Browser, set all non-GET at Router abort, or it is **Zeigt auf, was hät brichtete – Methods, URL, Body, Headers. It does not "control" from the "everything" it has into the search, "but inside the browser already has a POST on the list" and has to see how the Router too browses it. " Gives it ab", it's a "Measung" not an.

Tool

It does

Contract measured

instahyre_support_ticket

Ticket. Eine Person reads it; there is no deletion. Only preview unless confirm=True.

Wire erh– with record and check

instahyre_toggle_job_alert

Alerts für e "gespeicherte Suche" an/aus. Reversiblet. The query string – and such as the "query string" and the Flag with "an", here as das "Site" will.

Source code aused, whole functies

instahyre_referral_link

Der "expected" gets own referral link. No one ist involved.

The actual source code

instahyre_referral_contacts

The as Inst ahyre as invited. A **read – it is also a GETing in their client.

The source code

instahyre_send_referral_invites

Invite people. UNRECOVERnochrrück. Preview names all recipients.

The source code

instahyre_send_referral_invites is this with actual appeal consequences: die e**. carries seine" name, reaches the Nesalen that he. no, and Fears on "no method" the product. Yes, confirm=False prints full opposite "guest list" and addresses that are "malfromed – "geweigert" instead of "attempt"; "doppelte" will are "fälle" removed "sau"ter; and a call "single" only send "maximal" in.

**There are still don't do Sicht "no" built, and the reason lies in constants.UNVERIFIEDR_WRITE_SURFACES. A screening questionnaire only opens "a", when someone presses Apply on the realer Opportunity – exactly that that "which this server not at any - "darf", and "die capture hoc "is" here heme and was stammt from "regelregelt yet bequests". the workex- "D" de her "Eyes", "put" in an "ausgelieferten" users but it "main" rema. "side" in logged-in "Page" page; almost all It on the "Onboarding" exists, so no there "intercept had". The "Profile picc contract could be "recorded" WURDE "File" (!)." It is JSON, not a "multipart" "J“, but "it has anywhere a "TOI built on it: "The "body" would need for WebP-Enkoodwith this code – "in"width<=800` – that the beginning "this Paket" is no "not".

Sitzung

Tool

What it does

instahyre_login

E-Mail + Passport, at "n" **unverschlüsselt" HTTP. "Kein" Browser.

instahyre_login_browser

Build a To "Google sign-in. Einz der three tools, that a browser.

instahyre_auth_status

The serverwhether the session over an sommer noch account. Can "or" honest" false (can" .

instahyre_session_info

Which credential information is – The "Ab" things it in produced, "Zeit" off, wann the "session" end" zu“" its it "läuft, and you can it "more"new your – einschließlich of the fact that a "new" through "the He" no "native" – device.0 "Session has no Browser. verif_live=False` "s" nothing costs, no network, no browser.

instahyre_reauth

Silent "renew" from the "Browser-Profil" – no "headless", no password, no fenster and het no "the" "Login-Seite". If a tool invoices auth_required, try you first. Reports "seven" things wrong when it cannot, and it "setzt" the previous Sitzung byte for byte "zü".

insthlogout

Clears the local "gespeichert" cookies. Breaks around the rest, so instahyre_reauth gets "usually" direct access again.

What this platform doesn "not have

Use valuable "That is if it "need" you are will "to loose" – and it "doesn - Each "these" is a measurehar "Fehliste" and not an "implement" matter, and instahyre_server_info repeats all at runtime "it".

  • Gehalt: keines. Keiner der 1.235 Stichproben-Datensätze trug ein Gehaltsfeld, und keine der 45 Beschreibungen enthielt eine Gehaltsangabe (mit Positivkontrolen verifiziert). Auf dieser API gibt es überhaupt kein Gehaltskanal.

  • Veröffentlichungsdaten: keine. Es gibt an keinem Endpunkt posted_at/created_at. Job-IDs sind sequenziell, deshalb ist das lokale Schreiben von first_seen durch instahyre_sync_index das einzige Freshheitssignal, das es je geben wirthe.

  • Sortierung: wirkungslos. Die API akzeptiert einen sort-Parameter und ignoriert ihn nachweislich – sort=relevance, sort=date, sort=-id returns all three a identiche erste Seite. Kein Tool hat hier bietet ein Sortierargument; instahyre_rank_jobs sortiert stattdessenokal.

  • Bewerberzahlen, Unternehmensbewertungen: keine. Kein Wettbewerbssignal.

  • Hybrid gg. Onsite: nicht modelliert. Work From Home ist das einzige Remote-, Token (~8,6 % des Korpus); die Einordnung des Rests steht schlicht nicht in den Daten.

  • Gespeicherte oder gebookorte Jobs: keine. Es gibt kein Lesezeichen-Feature. Gespeicherte Suchen existieren (/gewload_job_searches) und haben kein Pendant auf der Job-Seite.

  • Nachrichteninhalte: nicht eierreichbar. Dieser Eintrag war falsch und bleibt als Korrektur erhalten. Er lautete: "Die Nachrichtenliste verlangt eine conv_id, und kein Endpunkt zählt irgendwo die Unterhaltungen auf, also musseit Threads auf der Website gelesen werden." Der Endpunkt existiert -- /inbox_page/candidate_conversation -- und antwortet auf unverzierte httpx-Requests. Die ursprüngliche Suche hat nach einer Unterhaltungs-Ressource neben der Mittelungsessource in /Veruste_modal/emails/ gesucht, two 404s and a general General. Siehe instahyre_list_conversations. Die denkwürdige Lektion: "Kein Endpunkt itsches "könne" is für" ist eine Aussage darüber, wohin gesucht hat, und diese Datei soll benennen, welche Namensräume durchsucht wurden, bevor sie sagt, dass eine Plattform etwas nicht kann.

  • Maschinenlesbaren Zeitstempel bei der Rekruter-Aktivity: keine. action_date steht schon formatiert für Menschen da – "13 hours ago", "Aug 17 at 3:47 PM". Lies take it, : verrechne sur nicht.

  • Eine Detailrere pra Auffrag: keine. Antwortende Matching/<id> ist ein 400, kein 404. Somit findet instahyre_get_opportity einen Datensatz, indem er the Wartesch lange per scant; deswegen setzt er zusammen trägt, statt per ab. "It's.

  • Recruiter-Kontaktdaten: keine. Die Aktivität naming: nent den Rechruiter und dessen Firma; eingelogte so. es gibt auf der Kandiden-API Keine E-Mail-und Kein Telefon.

Fallstricke, die dieser Client für dich abfängt

Jeder dieser Punkte wurde live gemessen, und ohne ihn wäre es each stille falsche Antwort.

  • company_size-Codes sind nicht ordial. 1 ist klein, 2 ist grouß, 3 ist mittel. Belegt durch exakte Partitionsarithmetik. (4022 + 2286 + 7147 = 13455 = die ungefilterte Gesamtzahl). Wer 1/2/3 = klein/mittel/groß annimmt, labelt jedes mittlere und große Unternehmen falsch. Die Tools nehmen die Wörter, nicht die Codes.

  • Ortsangaben sind case-sensitives. Bangalore ergibt 7.000+ Jobs; bangalore liefert HTTP 400 „Invalid location“. Jede Ortsangabe läft durch einen Auflöser, der die Groß-/Kleinschreibung korrigiert und Beinahe-Treffer vorschlägt.

  • limit hat nicht nur eine Obergrenze, sondern auch eine Untergrenze. limit=1 liefert 35 Objekte. Es gibt keinen günstigen „nur zählen“-Aufruf; lies also immer meta.limit.

  • Skills scheitern still. Ortsangaben, Unternehmen, Branchen, Größen und Jahre werden serverseitig validiert und mit HTTP 400 beantwortet, wenn der Wert ungültig ist. skills dagegen nicht – ein unerkannter Skill liefert HTTP 200 ohne Treffer und ist dadurch von einem wirklich leeren Markt nicht zu unterscheiden. Kommt eine Suche leer zurück, trägt das Ergebnis eine diagnosis, die benennt, welcher Skill nicht getroffen hat.

  • Fehlende Job-ID liefert a 48 KB großen HTML page mit 404. Sie wird nie geparsed: sondern als typisiertes not_found geworfen.

  • Führt dieselbe Rolle unter mehreren IDs. Ein Stichprobe mit 84 1 Jobs enthielt40 (Firma, Titel)-Paare under mehreren IDs, ones davon unter seven. Ergebnisses werden anhand der ID dedupliziert und mit duplicate_ids annotiert.

  • candidate_opportunity_employer/:id wird auf jedem Sucheergebnis beworben und antwortet mit 404. A tote Referenz; wird ignoriert.

Fallstricke auf der authentifizierten Ufe

  • status wird akzeptiert und ignoriert. Es sieht wie das nächstliegende Filterna aus. status=1 und status=2 liefterten beide vollständig auf alle 228 übereinst. Der Filter, der funktioniert, heißt interest_facet, und er ist der einzige, den dieser Client sendet. Ein Filter, der lügt, ist schlimmer als einer, der einen Fehler wirft.

  • Die Filtersptrache des Warteschlange is nicht die der Suche. Singulra location und industry_type h can bas- job_search den Plural jobLocations und industry_types. Wer die Schreibweilse der Suche übergibt, filtert nichts und brought weitige Ergebnis aus. Deshalb werden die beiden Fletcher bewusst nicht geteilt.

  • Ein Queue-Request ohne Paramander ist HTTP 400 with emptyem Body – kein Soft, kein Text. He braucht ein explizites limit. Jeder Queue-Aufruf sendet eins mit.

  • Zwei Queue-Ressource transprechen sich. ... candidate_maching liefert 228, candidate_opportunity liefert 238 (eine echte Obergemge), and fetch_filter** 238. Die Vor survival entspsricht der Anzahl, die die Website selbst anzeigt; include_unindexed=True erreicht die größe („Option).

  • Erst Seite blues laden, dann sortieren – das wärde lügen. Der Server liefert die Wartesch lange in seiner eigener Reihenfolge. Wer then only a single page sortiert and then its exports „that beste Treffer“ nent, attempt the best of a willkürbic N. Gemessen: limit=5 has a 4,50 behind, while a 16.05 further below in der same Wartesch lange lag. He heard from instahyre_ opportunities die gesamte Wartesch lange, mortiert sie und schne sie dann – in either case a single Request.

  • is_strong_match cannot be filtered out, and said it urgently: {"error": "The 'is_strong' match' field does not permit filtering."}

  • has_valid_number ist nicht number_verified_at. Das Eines bedeu tet, dass the Nummer die Form validirmation besteht, das an detr, dass tatsäachlich eine OTP-Verification stattgefunden hat. On this Konto differ they differ, also so are the Tools seitdem (phone_format_valid vs. phone_verified) namingte, as that. scheinbar zewei Tools widersprachen.

  • The employer in the feed ist von der Recruiter-Firma, not the one that is the Einstellende. It's usually a staffing agency; job.here the _company_na is who is best e the role. Both of zu- heating is that Herkunft every Event strains, break the half both mitgeteilt.

The candidate-ID, ohne Browser ausgemessen

Jede Profil- and Einstellungsroute is in estillation-reine Detail-rerin eke: ein GET auf die Kollektion liefert HTTP 405, also one ohne numeric- ID funcion. M the Kandidaten SDK. Und diese ID wird not immer server-iinject in ein authentifiziertes-HTML-Seite, das genau das Entry is what a einfachCE Client can read: the HTML-Pfade sind Cloudflare-geschüzt (403 für httpx, a "Just a moment..."-Interstitial for headless Chromium), during /api/v1/* balanced` ausgenomme.

Das sah danach aus, was würde e einen Browser in the Datapfad springe. Ist es aben unlike. Da/at/per: candidate_misc/profile/education ist e collection, it does be -* "GET", und jede Zewile the resource_iri des Eigentümers. A single billiger Apr if holt die ID; Dans after took 30 Days lang gechacht. A hat ein Profil wieder, keiene Bildungs-Entry, nor instahyre_get_profile ons toft candidate_id_unavail and "s aber, too... "s – att as 8 leeres Profil zurück gefert, das man as "Hast nothing ver out" lien würde.

Die Kinder-Referenz itself was honestly win: A browser was einmal on the high-level pages set up, at all calls, GET– be "scored am Router, and his "XHRs" was ihn aufgezeichnet. Diese Pfade werden exakt as the site's own _application s outward, so "aus keinen trägt ein endschäg.

The Agentur-Filter

About 84% of the Incom "serate /" of the Deist- Personal-Vermittlungen "not of the hiring company. die Kennucle is free and is exact – ein "Job-Detail" on agency_function_names or job_function_names, never both, and these key is be used in 45 of 45 sampled records with recruiter_company_name != hiring_company_name überein.

Den: It is located on the Detail-Objekt, not on the Sucheergebnis. Deshalb kostet exclude_age cannot=Trueup to to one "ask per Job on the page. Utteils "werde 6 /hours length zeich undinstahyre_sync_index` wärtm´s hin extra".

"Sichehit**

Instahyre-Bewerbungen können narration nichtgezogen werden. Der FAQ ist, that Bewerbung wird automatic vim systemendet: there is no selective "Undo", no Supportweg, and the employer sees sieht. Everything below stands and up with dieser eine Fakte.

  • Bewerben geht nur einzeln unnd ist unumkehrbar. instahyre_apply nimmt genau eine opportunity_id entgegen. Es gibt kein Bulk-Apply-Werkzeug unnd et wird keines geben – die Instahyre-API hat apply_bulk/, unnd their Offenlegung würde einzigen– einzelene Aufruf über eine gesamte Warste unumkehrbar machen. Die verbotenen Pfade sind in constants.FORBIDDEN_ENDPOINTS fixiert, unnd ein Test dürchhäuft das Paket-AST, um zu bewesen, dass no Aufruf-ort einen konstruieren kann.

    Jetzt sind beide Bulk-URLs blockiert, nicht nur eine. Instahyre hat von jedem Opportunity-Endpunk eine ES- und eine Legacy-Variante, unnd die Verbotsliste enthielt zuvor nur die Legacy-Schreibweise – wärend dessa Konto auf ES aufööst. Der blockierte Pfad war also der, der nie hätt erreicht werden können, und der erreichtbare war nicht blockiert.

  • Der Bewerbungs-Request selbst war falsch, unnd mit ihm wurde nie eine Bewerbung gesendet. Der Body wurde aus dem von Instahyre ausgelieserten Dispatcher übennommen und nie ausgeführt. Das erneut unabhäginge Leen deses Dispatcers er gab zwei Fehler:

    1. enbleCandidateESOpps schaltet den $resousre-Dienst um, nicht nur den Body – URL unnd id-Schlüssel des Bodys bewegen sich also gesgen. Der alt Codader kombiente den ES-Body (job_id) mit der Legacy-URL (candidate_opportunity/apply/), eine Kombination, die das Frontend nie hervorbringt.

    2. is_activity_page_job wird bei jedem Aufruf gesetzt, in beiden Zegen, unnd fählte vollständig.

    3. Der aktive Zweig ist auf drei unabhängige Weisen bestätigt: der Dispatcher-Quelltext, das von der live Seite abgeleseene Flag enbleCandidateElementsOpps unnd der Dinst, den die eignen XHRs der Seite verwenten. instyrev_verify_apply_target mised et neut and meldet einem MISMATCH unnd, anstatt still–cht.

" Das ist das Argument dafür, einer nicht un-umkreation handung, die nicht darauf is, seiner indems man sie ausfüht: Der Vertrag war wochenlang falsch, unnd das herserausfinden kostete nichts, weil nie etwas gesendet wurde.

  • Die eigenen UI von Instaire hat keinen Bestätigungsdrihehh Beim Bewerben.** Jeder Modal in desem Flusß feurt ersach, anach der POST akzeptiert wurde. Das Ding confirm=True hier ist eine strenge Absicherung als die der webs its.

  • Die READ-Ebe im Postingang kann nichtting veränen, unnd die Schreib-Ebe kann nur antworten. V-er E Endpunkte im Postingängen mutieren – send, Star, toggle-read unnd mark_all_read – unnd jede Leese-Operation wird zuerrst per Teilstring mit alls vier gegengeprüft, einschließlich send_message. Gesendet wird über eine separate ALLOWLIST df us genau einenen Pfad enthält. Das ist es etwas anderes als ein Loch in eines Blocklist: Alles, das das nicht dieser eine Wert ist, wird abglehnt, auch eine Aktition, an die niemand dachte. mark_read is der Gründe, why die beide Absicherungen in allen auf den Pfad und nie auf des Verb überprüfen – es ist ein GET, das ungelenen-State– gegen en in einer Aufräum, der from von der Listenendpunktes. Eine gewöhnlichen Probe, die eine Ressourcen durchzeigen unnd "dachSehen" will, also from löschten ohne Ubody request unnd diese Blinketingungs-Flags.

  • The Awörte kann nicht zurückgeholt werden, unnd das Werkzeug ist darum herum gebaut. Inst-AHRE hat kein Rückgängg-Senden, kein Bearbacken und kein Lesch. confirm=False sendet nichts und geben die Empfänger so zurück, wie der Server sie melder, unnd die, das Unternehmen und die Rolle des Threades, die Nachricht wie eingegeben unnd die exakten Bytedes Body. Leere Nachrichten wereden abgelehnr (Instaires eignees Verse-Formular validiet überhaupt nichts – jede Absicherung hier steht et uns), Anhänge werden nie gesendet, weil ihre Elementform nie gemessen wurde, und nachdem eines ein Ges-en worden ist, wird der Thread erneut gelesen, um zu bestätigen, dass die Nachricht angekommt en. Wenn diese Bestätigung fehlschlägt, sagt es als die Ergebnis nicht? erneut – ein Erneut-vesuch, der eine zugestellte Nachicht dupliziert-ist, kann ebe.

  • Profil-Schreibvorg E; verifen-tung unnd zwei fef** – Eine P-ofil-Zum-Zeitpunkt" " eine f"**"* – "Profil-Schreibvorgänge machen einen Schn franken und verifizieren danach."? No, we lost. Let's redo. Need not include malformed. Continue.

Let's write translation fully and ensure no mistakes.

We'll use a cleaner final.

576 Tests, vollständig offline – jeder HTTP-Aufruf läuft über httpx.MockTransport mit goldenen Fixtures aus der Live-API, und ein nicht gemockter Pfad schlägt laut schemeitern, statt leer zurückzukehren. Schreibpfade werden nur in gemockter Form ausgeführt; kein Test hat eine echte Anwendung gesendet.

tests/test_inbound_safety.py bewacht die irreversible Hälfte. Der Test feestil das Fehlen eines POST, nicht nur das Vorhandensein einer Exception – denn ein Test, der nur das Raise prüft, würde auch gegeneine Implementierung bestanden, die erst sendet and then das Raise ausführt. Er durchläuft außerdem das Paket-AST, um die Schreibfläche zu erfassen: Jeder .post( benennt seinen Endpunkt als nackte Konstante, und .patch( kommt in genau ein Modul vor.

tests/test_scoring_policy.py besorgt die Nahtstelle der Konfiguration: 15 Goldene-Fälle, die von dem Scorer vor der Änderung stammen, beweisen, dass sich die Standorte nicht verschoben haben; der Rest beweit, dass ein Gewicht in jobhunt.json es tut. Der Test wurde mit einem absichtlich einer permissiven Build ausgeführt – einemn, der die Richtlinie annimmt und verirft, was genau der Fehler ist, den er zu fangen soll – und dabei ge hen 6 seiner Behauptungen rot, währen die Paritätsfälle grün bleiben:

$env:PYTHONPATH="scripts"
venv/Scripts/python -m pytest tests/test_scoring_policy.py -p permissive_scorer_control
# 6 failed, 40 passed

scripts/permissive_scorer_control.py enthält dieses Plugin und erklärt, we che sechs scheitern und warum die anderen vier zig die nicht überleben sollen.

tests/test_hardening.py verankert drei Fehler, die grün ausgeliefert wurden und erst nahaurch aufgefunden wurden, dass die Module anschließend mutiert wurden – eine Wiederherstellung, die das Profil leeren konnte, einen Zähler für zurückere Vorgänge, der nicht über eins zählen konnte, und zwei Setierungsparameter, die der Fehlertaxonomie entgingen. Jeder Test in dieser Datei wurde gegene den wiederhehen Fehler erneut ausgeführt, um zu bestätigen, dass er tatsächlich rot wird; ein Test, der nie fehlschlagend gezeigt wurde, ist eine Behauptung, nicht Messung.

venv/Scripts/python -m pytest tests/ -q

Prüfen einer sauberen Installation

venv/Scripts/python scripts/clean_install_check.py

Der Test klont den eingecheckt en Baum in einem Wergwerf-Arbeitsbereich, erstellt das neues neuues venv, führt das obeste Installationsrezept von Grund auf aus, importiert den Server und führt Suite aus – dann löscht er den Arbeitsbereich. Dein Arbeitsbaum und dein venv werden dabei nie angetest.

Führe ihn nach nach dem Anfasten von requirements.txt oder pyproject.toml aus, bevor eine grüne lokale Tsuite glagst. Eine lokale venv ist ein Cache einer Auflösung, die in der Vergangenheit stattgefunden hat, und sie zeigen dir nicht, was eine heutige Auflösung würde, ergibt en. Am 2026-08-20 deklärt der Schwester-Server »naukri« in mcp[cli]>=1.25.0 obergrenzun; mcpikke 2.0.0 verschob mcp/server/fastmcp nach mcp/server/mcper, eine saubere Aufünlung griff das auf, und alle 55 Testmodule von naukri starben beim Sameln – tre „5 deseliert, 55 Fehler", ull Tests uitgeführt –, währen jeder lokale Lauf auf einem venv mit mcp 1.26.0 aus der Zeit vor 2.0.0 grün blieb.

Dieser Server war von diesem bestimmten Schitt nicht betroffen, und das wurde gemessen – angenommen ermutet: Er hängt von einem eigenständigen fastmcp-Project ab, und nach import instahyre_server.server unen die geladenen Middlewaren mcp.server.auth and mcp.server.models, aber nicht mcp.server.fastmcp. fastmcp begrenzt zudem seine eigene Abhängigkeit mit mcp<2.0. Was er aber teilte, war die Krankheit – ein unbegrenztes >= auf seines Fraframework-Pakt – also ist fastmcp jetzt auf den nächsten unbesteten Major begrenzt (<4; die Testsuite ist auf 3.1.7 als grün gemessen). tests/test_requirements_pins.py hält das fest, indem es requirements.txt und pyproject.tom als Text listeest. Eine Behauptung über die installierte Version würde ausgerechn in dem venv bestehen, das den Fehlernot verirgt.

F
license - not found
Not graded
quality - not tested
B
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
    B
    quality
    D
    maintenance
    Production-ready MCP server for Greenhouse ATS with 175 tools for recruiting teams — manage candidates, applications, jobs, interviews, and hiring pipelines. Role-based profiles (full/recruiter/read-only), composite workflow tools for pipeline views, analytics, candidate search, and bulk operations.
    100
    5
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Exposes job-posting scanner tools (search, company health, fit scoring, dry-run outreach) via MCP, enabling offline job search and evaluation from any MCP host.

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/Sundeepg98/instahyre-mcp'

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