freehire
This server lets you search, track, and apply to IT jobs on freehire.me, manage CVs, submit vacancies, and moderate job listings — all without a browser.
Authentication
whoami— Verify your API key and confirm authentication
Job Discovery
facets— Explore valid filter values (skills, roles, seniorities, locations, etc.) with live vacancy countssearch— Search open jobs by keyword and/or filters (remote, region, country, city, category, seniority, salary, etc.); results include full job descriptionsjob— Fetch a single job's full details by slugcompany— Fetch a company profile and its open jobs by slugmarket_fit— Score a skill set against live market demand to see coverage and skill gaps
Job Tracking & Applications
apply— Mark a job as appliedsave/unsave— Bookmark or remove a bookmark from a jobstage— Set the application stage (e.g., screening, interview, offer, accepted, rejected)note— Attach a free-text note to a tracked jobmy— List your tracked jobs (viewed/saved/applied) with their stage and notes
CV Management
cv_context— Get fit analysis to guide CV tailoring (missing skills you have vs. true gaps)cv_get— Retrieve a tailored CV's full documentcv_edit— Apply a field-level patch to a tailored CVcv_render— Render a tailored CV to a PDF (returned as base64)
Vacancy Submission
submit— Submit a vacancy for moderationmy_submissions— View your submitted vacancies and their moderation status
Moderation (requires moderator role)
jobs_add— Create a hand-curated job listingjobs_edit— Partially update an existing manual jobsubmissions_pending— View the pending submission review queuesubmission_approve— Approve a pending submission, making it a live jobsubmission_reject— Reject a pending submission with an optional reason
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@freehiresearch for remote senior software engineer jobs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
freehire MCP server
An MCP server over the freehire job API. It lets any MCP host — Claude Desktop, Claude Code, or a compatible agent — search, filter, and apply to IT jobs without a browser, authenticating with a personal API key. Postings are crawled straight from company career boards — 3.3M+ open roles across 294K companies, normalized into one schema and tagged with stack, seniority, region and work mode (live figures).
It mirrors the freehire CLI: same API, same credentials, exposed as MCP tools instead of shell commands.
Install
No global install needed — the host runs it via npx. Add it to your host's MCP
configuration (Claude Desktop → Settings → Developer → Edit config, or
~/.claude.json for Claude Code):
{
"mcpServers": {
"freehire": {
"command": "npx",
"args": ["-y", "freehire-mcp"],
"env": { "FREEHIRE_TOKEN": "fhk_xxxxxxxx" }
}
}
}Create the fhk_… key in the web app (freehire.me → account menu → API keys).
If you already use the freehire CLI (freehire auth login), you can omit env —
the server reads the same ~/.freehire/creds.json.
Related MCP server: job-monitor
Authentication
The token and API base URL resolve with precedence
env → ~/.freehire/creds.json → default https://freehire.me:
What | Sources |
Token |
|
API base URL |
|
The server only reads the credentials file (it never writes it — logging in stays the CLI's job). If no token is configured, tools return a clear "not authenticated" error rather than the server failing to start.
Tools
Tool | Purpose |
| Authenticated user (verify the key). |
| The filter/skill vocabulary: every facet's live values with counts. Call first. |
| Keyword + facet job search; returns jobs with their full description as markdown and the total match count. |
| Score a skill list against live market demand (coverage + gaps). |
| A single job's full content by slug. |
| A company and its open jobs by slug. |
| Mark a job applied. |
| Bookmark / remove a bookmark. |
| Set the application stage (server-validated). |
| Attach a free-text note. |
| The caller's tracked jobs (all/viewed/saved/applied) with stage + note. |
| Start (or reopen) tailoring for a vacancy; returns the CV id the other |
| The caller's tailored CVs with the vacancy each was written for. |
| The fit analysis a tailored CV should reframe toward (missing_have vs missing_gap). |
| A tailored CV's full document. |
| Apply a batch of path-addressed edits to a tailored CV, atomically (server-validated; uncited claims are refused). |
| Render a tailored CV to a PDF, returned as a base64 |
| The candidate's experience bank, with each achievement's provenance. |
| Record a place, or one piece of evidence. |
| Correct one. Field-level: what you do not name is kept. |
| Delete one. No undo; a place must be empty first. |
| Submit a vacancy for moderation. |
| The caller's submissions with status. |
| Moderator: author / edit a job (403 without the role). |
| Moderator: the review queue. |
| Moderator: decide on a submission. |
Filters. search, market_fit, and facets share the same market-filter
parameters: remote, region, country, city, company, category, role,
seniority, employment_type, english_level, exclude_skill, salary_min, visa,
plus a generic facets map ({"source": "greenhouse"}) for any other facet in the
vocabulary. Discover valid values with the facets tool — do not invent them. In
search, skills is a filter; in market_fit, skills is the measured set.
Geography widens. region, country and city are ONE OR-group: region: ["eu"]
with country: ["IT"] means "in Europe or in Italy" and returns everything the
region alone would. To search a single country, pass country and omit region. The
three name a single concept — where — so picking two places reads as "either", which
is what makes region: ["eu"] with country: ["BR"] ("Europe or Brazil") useful. There
is no AND to switch on: _mode=and does not apply to geography.
Unread params are ignored, not refused. A filter key the API does not recognize
does not fail the request, it widens it. Such keys come back in the result's ignored
list, with did_you_mean when only the grammatical number was wrong. search reports it
alongside total; facets and market_fit answer a single object, so they wrap it as
{data, ignored} — and only then, leaving a clean call's shape untouched. Any number from
a result carrying ignored answers a broader question than the one asked — retry with the
suggested name before reporting it.
Descriptions. search reads the API's agent endpoint, so every hit already carries
the posting's full description rendered as markdown — a host can screen a result set
without a job call per hit. Descriptions are long, so keep limit modest.
The evidence rule. Every achievement in the bank records who asserted it.
cv_import, stated_in_chat and manual mean the candidate did, and may be cited on a
CV; agent_inferred means a model read it into the record, and may not. cv_edit
refuses any claim about the candidate without an evidence_id pointing at a citable one,
which is why experience_list is the tool that makes cv_edit usable at all.
Correcting an achievement does not move that label: an agent_inferred one stays
uncitable however it is reworded. The only way it becomes citable is to ask the
candidate, then record what they say with experience_add_achievement.
Removing is final — the bank has no undo. A place must be emptied before it can go, because deleting one would take every achievement under it. Folding two achievements into one, keeping the numbers from both, is on the site.
Each tool returns the raw API data as JSON text; an API error becomes an isError
result carrying the HTTP status (a 401 adds an auth hint).
Develop
npm install
npm test # vitest: config, client (mock server), facets, tool dispatch
npm run build # tsc → dist/License
MIT — see LICENSE. The freehire backend and CLI are MIT too.
Maintenance
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
Alicense-qualityAmaintenanceMCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.1,2962MIT- Alicense-qualityCmaintenanceSearches LinkedIn, Indeed, USAJobs, and Google Jobs from the command line, deduplicates across sources, and optionally finds hiring manager emails; also runs as an MCP server for AI agents.MIT
- Flicense-qualityBmaintenanceEnables job search on LinkedIn through MCP tools, including keyword and location search, filtering by remote, easy apply, experience level, job type, and date, and retrieving job details.
- Alicense-qualityCmaintenanceEnables to interact with job application workflows through MCP, allowing users to find jobs, generate non-trivial applications with proof-maps, and build offline dashboards, all without auto-submitting.Apache 2.0
Related MCP Connectors
Search live startup jobs from Claude, Cursor, or ChatGPT via MCP. Free, no account needed.
GetJobzi MCP server for job search, application tracking, and career forecasting.
RemoteOK MCP — remote-work job board (tech-heavy), keyless.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/strelov1/freehire-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server