MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Data access / search

freehire

freehire.me: search 3.3M+ IT jobs from 294K company boards, track applications, tailor CVs.

Checks passed
13 / 22

1 failed · 8 not measured

Median response
461 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
51

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Outdated check

Last connection measurement is over 24 hours old. Current availability is unknown.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
310
Publisher identityCan the publisher be traced to its source?
402

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 461 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name freehire.

  • Pass
    Lists tools

    tools/list returned 51 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 461 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 461 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Fail
    Parameters documented

    133 of 285 parameters have a description (47%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-10-28T23:56:00.155122Z, within 180 days.

  • Not measured
    Open-source licence

    The GitHub licence lookup has not returned an OSI result yet.

Start using freehire

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http freehire https://freehire.me/api/v1/mcp

Capabilities

Tools 51

answer_bank_delete

Delete one of the person's saved screening answers by the id answer_bank_list shows.

Discovered
answer_bank_list

List the person's saved answers to employers' open-ended screening questions ("Why do you want to work here?", "Desired start date?"). Automatic applications reuse them on every form that asks the same question.

Discovered
answer_bank_save

Save the person's answer to one screening question an employer's form asks, so automatic applications can send it — use the question's wording from auto_apply_get. The answer is sent to employers in the person's name: pass on what THEY said, never an answer you composed or guessed. Replaces an earlier answer to the same question.

Discovered
apply_job

Mark a vacancy as applied to. This records the user's own application; it does not submit anything to the employer.

Discovered
auto_apply_cancel

Withdraw an automatic application that has not been submitted. Refused while it is being submitted. Its history is kept.

Discovered
auto_apply_get

Read where one automatic application stands: its status, the questions it stopped on, the answers still missing before submission, its full history, and what to do next. Call it again to follow progress — history only grows.

Discovered
auto_apply_list

List the person's automatic applications: every live one with its status and when anything last happened to it, and the ones submitted in the last 30 days. Use auto_apply_get for one attempt's questions and history.

Discovered
auto_apply_retry

Restart an automatic application that stopped — on an unanswered question, after repeated errors, or because the CV could not be tailored — or refresh one awaiting review so newly saved answers are reflected. Answer the open questions with answer_bank_save or screening_answers_set first. Refused for a declined attempt and for one that may already have reached the employer.

Discovered
auto_apply_review

Record the review of an automatic application whose status is pending_review. "approved" lets freehire submit it to the employer with the tailored CV and the answers auto_apply_get shows; "declined" stops it for good. One decision per attempt.

Discovered
auto_apply_start

Start applying to a vacancy automatically on the person's behalf. freehire tailors their CV to the vacancy, checks the employer's application form against their saved answers, and waits for a review (auto_apply_review) before submitting. Spends one of today's auto-apply allowance, so it needs a paid plan, and the account's switch letting agents apply. Only vacancies on supported applicant-tracking systems can be started. Follow progress with auto_apply_get.

Discovered
buddy_join

Join freehire's interview buddy network under a generated anonymous handle, or rejoin under the old one. Members can book and host 60-minute mock interviews with each other. Returns the membership status.

Discovered
buddy_leave

Leave the interview buddy network. Closes the person's buddy conversations and cancels every upcoming mock interview they host or attend; the other participants are told. Rejoining later restores the same handle.

Discovered
buddy_mock_book

Book a 60-minute mock interview with a host, the person attending as guest. starts_at must be one of the host's open slots exactly (RFC 3339) and topic one of the topics that host offers. Returns the booked mock with the counterpart's handle and the meeting link. A guest may hold at most 3 upcoming mocks.

Discovered
buddy_mock_cancel

Cancel one of the person's upcoming mock interviews, by id, before it starts. The other participant is told.

Discovered
buddy_mock_hosts

Members of the buddy network the person could book a 60-minute mock interview with now, soonest available first: each host's handle, a coarse card (category, seniority, country), the topics they offer, their next open slot and their review rating. Never includes a meeting link.

Discovered
buddy_mock_list

The person's own mock interviews, upcoming and past, as host or guest: id, role, the counterpart's handle, times, topic, status, the meeting link while confirmed, whether it can still be cancelled, and the reviews.

Discovered
buddy_mock_schedule_add_override

Add one dated override to the person's hosting schedule: on that date they host between start and end (HH:MM) instead of their weekly hours. An equal start and end closes the date. Returns the stored rule with its id.

Discovered
buddy_mock_schedule_delete

Delete one rule (weekly or dated override) of the person's hosting schedule, by its id.

Discovered
buddy_mock_schedule_get

The person's own mock-interview hosting setup: settings (time zone, meeting link, topics offered, paused) or null before they were first saved, and the schedule rules — weekly rules by weekday (0 = Sunday) and dated overrides, each with the id needed to delete it.

Discovered
buddy_mock_schedule_set_weekly

Replace the person's whole recurring weekly hosting schedule with these weekday rules (an empty list clears it). Times are HH:MM in their settings' time zone. Dated overrides are kept and are not accepted here.

Discovered
buddy_mock_settings_set

Replace the person's mock-interview hosting settings as a whole: the time zone their schedule is in, the meeting link guests receive, the topics they offer, and whether hosting is paused. Returns the saved settings.

Discovered
buddy_mock_slots

The open 60-minute mock-interview slots of one host, by handle, and the topics that host offers. Each slot's starts_at is the exact RFC 3339 instant to book. Covers the next 30 days unless from/to say otherwise, at most 62 days. Never includes a meeting link.

Discovered
buddy_status

Whether the person is a member of freehire's interview buddy network, and their anonymous handle there. Members are known to each other only by handle. Membership is needed for every mock-interview action.

Discovered
check_jobs_open

Check whether postings are still open, by the slugs search results carry — up to 50 per call. Use before acting on a saved shortlist: each posting answers open, closed or not_found, with when it closed or was last seen live.

Discovered
facets

List the live filter vocabulary. Without `facet`: every filter's name with how many values it has, plus numeric ranges. With `facet`: that filter's values with a vacancy count each, optionally only those containing `contains`. Filter values are the market's own; an invented one matches nothing.

Discovered
fetch

Read one posting in full by an id search returned: its full text, the employer, the board it came from and whether it still looks live.

Discovered
get_company

Read what freehire holds about one employer by the slug a result carries: what they do, which industries they are in, where they are based, and how many postings they have open.

Discovered
get_job

Read one posting in full by the slug a search result carries: the whole description, the stated requirements, which applicant tracking system handles applications, and whether the posting still looks live — when it was last seen open, a reality class, and any observed signs that it is not being filled. A closed posting carries closed_at.

Discovered
get_profile

Read the user's saved job-search profile: the roles and skills they want, the skills they want to avoid, where and how they will work, and their CV (headline, years, experience, education — contacts are not included). Call this before asking the user what they are looking for; only ask about what the profile does not answer. The experience section reports the SHAPE of what they have told us — which roles we know and how much evidence each carries — not the achievements themselves. Takes no arguments.

Discovered
job_market_stats

How many open postings match a set of filters, and their most common role families, seniorities, skills, work modes, countries and regions. Takes the same filters as a job search.

Discovered
list_filter_values

The values one job-search filter accepts — skills, categories, seniorities, sources, countries and the rest — each with how many open postings carry it, most common first. A value not listed matches no posting. Use it before filtering on a value you are not sure of.

Discovered
list_subscriptions

List the person's job alerts with every setting: id, name, a readable filter summary AND the search as the structured object the alert tools take (query, filters, salary_min/max; `other` holds website-only filters an update keeps), whether it is paused, and each delivery channel with its active flag, pending matches and last delivery. delivery_schedule is the account-wide digest timing every alert shares. Effect: none, read-only.

Discovered
market_fit

Score a skill list against the live open-vacancy market for a filtered role: what share of vacancies list at least one of the skills, which must-have skills are held, and which missing skills unlock the most vacancies. Here `skills` is the MEASURED set, not a filter.

Discovered
my_jobs

List the vacancies the user is tracking — saved, applied, viewed or the whole board — with each one's stage and note.

Discovered
report_job

File a report on a vacancy that looks fake, spam, a scam, irrelevant, or that never answers. It goes to freehire's moderators, who review it by hand; it does not hide the job or change the user's own board. Only report when the user asks for it, or after you have told them what you will send and they agreed. One open report per job per user.

Discovered
report_problem

Report a freehire operation you could not complete, a missing capability, or unexpected behavior for the team to triage. Give concise summaries of the user's goal, expected result, and actual failure. Include a tool name and error code when known. Do not include conversations, CV contents, credentials, tokens, personal contact details, or URL query strings. A successful receipt means the report was recorded for review; it does not mean the issue is fixed or that a reply is guaranteed. Repeated matching open reports for this account increase request_count. Use only for a problem met while doing what the user asked, and for a missing capability only when the user asked for it. Never file a test, sample or demonstration report: this tool needs no trial run. Never report a failure of report_problem itself recursively.

Discovered
salary_stats

Salary percentiles (25th, median, 75th) from open postings that state pay, scoped by role family, seniority and country, with the sample size behind each figure. Currencies and pay periods are reported separately, never converted.

Discovered
save_job

Bookmark a vacancy for the user. Idempotent.

Discovered
screening_answers_get

Read the person's answers to the six screening questions that repeat across application forms: countries they may work in, visa sponsorship, desired salary, notice period, relocation, and being 18 or older — plus privacy_consent, whether they agree to an employer's privacy / personal-data terms being accepted for them on every application. A missing field has not been stated.

Discovered
screening_answers_set

Record the candidate's own answer to one or more of the six screening questions that repeat across job-application forms: which countries they are authorized to work in, whether they need visa sponsorship, their desired salary, their notice period, whether they are willing to relocate, and whether they are 18 or older. Call this the moment the candidate states one of these facts, so it is available to fill their next application form. Only pass fields the candidate actually stated — never guess or infer one. A field you leave out keeps whatever was already recorded; it is not cleared. To withdraw an answer — the candidate says it no longer holds, or they no longer want it given to employers — name it in clear; auto-apply then asks them instead of answering. privacy_consent is a permission, not a fact: set it only when the candidate says, in so many words, that they agree to employers' privacy and personal-data terms being accepted for them on every application.

Discovered
search

Search freehire's IT job postings by free text. Returns matching postings as {id, title, url}.

Discovered
search_companies

Find employers in freehire's catalogue by name or by where they hire, with how many postings each has open. Use when the question is about a company rather than about a role.

Discovered
search_jobs

Search freehire's catalogue of IT job postings. Use for any question about which jobs are open — by technology, seniority, location, pay or employer. Returns a short preview of each posting. A role has several names: join two or three in one query with OR, e.g. title:SRE OR title:"site reliability". Location, work mode, seniority and skills go in their filters, never in the query. If suspiciously few results come back, loosen one constraint at a time and say which. Present results as a table of title, company, location, posted date and link (the employer's posting and ours), naming the source. Set semantic for a need described in words ("keep our payment systems secure"), not for a job title or a non-technical role, where plain keywords answer better.

Discovered
similar_jobs

Postings most similar to one posting, by its slug, nearest first — for "show me more like this". Empty for the newest postings, whose neighbours are not computed yet.

Discovered
subscribe

Create a job alert: a saved search over ANY of the job search's filters whose new postings are delivered to the person on the channels their account has connected (email, Telegram, the mobile app, a webhook) — this conversation is not notified. e.g. remote senior Go roles in the EU paying at least 80k EUR is {"filters":{"work_mode":["remote"],"seniority":["senior"],"skills":["go"],"regions":["eu"],"salary_currency":["EUR"]},"salary_min":80000}. The search must narrow the catalogue. Values not in a filter's vocabulary are dropped and named in ignored_params. Leave channels empty for the default (email when alert mail is on, otherwise the first connected channel). The answer's alert.id addresses the alert from then on. Effect: saves the search on the account (or reuses the one already selecting the same postings) and delivers it on each channel; nothing existing is changed.

Discovered
subscription_updates

List the new postings the person's job alerts have matched — the same matches their alerts are built from, newest first, still-open postings only. Narrow to one alert by id, and to a window by since (RFC 3339) or days (default 7, max 30). An alert only matches postings that appeared after it was created, and matching runs every few minutes, so a new one starts empty. delivered says whether an alert already carried the posting. Effect: none, read-only.

Discovered
suggest_dictionary_term

Request review of a missing specialization, skill or company industry, as on freehire's dictionary page. This records a suggestion, not a new working filter or a vacancy. Existing terms and aliases are refused. Repeated requests share the existing queue entry and increase request_count; status is the entry's review state. Use for a specialization, skill or industry the user wanted to filter by but the dictionary cannot resolve; an empty job search alone is not evidence of a missing term. Send the user's original term once per missing term, without requiring a separate request to suggest it. Tell the user it was requested for review, not added to the filters.

Discovered
track_job

Set the application stage and/or a free-text note on a vacancy the user is tracking. Omit a field to leave it unchanged. Valid stages: preparing, applied, screening, responded, interview, offer, accepted, rejected, withdrawn, expired.

Discovered
unsave_job

Remove a vacancy from the user's bookmarks. Idempotent.

Discovered
unsubscribe

Stop one job alert by its id, on every channel or on the one named. Effect: deletes the alert's delivery on those channels and their record of matches; the saved search itself stays on the account as a bookmarked search.

Discovered
update_subscription

Change one of the person's job alerts by its id. Every field is optional and only the ones given change: name; the search (query, filters, salary_min, salary_max — each replaces that part, an empty filters object clears the facet filters, a salary bound of 0 clears it; website-only filters in `other` are kept); channels (the full set to deliver on — added ones must be connected, missing ones stop); paused (true stops every channel, false resumes them). The new search must still narrow the catalogue, and unknown values are dropped and named in ignored_params. e.g. remote senior Go roles in the EU paying at least 80k EUR is {"filters":{"work_mode":["remote"],"seniority":["senior"],"skills":["go"],"regions":["eu"],"salary_currency":["EUR"]},"salary_min":80000}. Digest timing is account-wide and not changed here. Effect: overwrites the alert's name, search, channels or paused state; a removed channel's record of matches is deleted with it.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected461 ms51