Why HiredSignal for agents
Job-search agents today waste the majority of their context budget on HTML cleanup. Every generic job board ships inconsistent markup, expired listings, recycled SEO spam, and no freshness signal. HiredSignal solves that: every endpoint returns typed JSON with a freshness state, source URL, and ISO timestamps — so your agent spends tokens on reasoning, not parsing.
Three integration surfaces
- MCP server. Connect Claude or any MCP-compatible host to your HiredSignal account. Exposes
list_jobs_by_stage,get_job_details,move_job,upload_cvas first-class tools — one OAuth sign-in, then Claude drives the tracker end-to-end. - REST API.
GET /api/v1/jobs/searchwith cursor pagination,GET /api/v1/jobs/:idfor full detail. JSON in, JSON out, every field typed. - Web surface. HTML pages ship schema.org/JobPosting JSON-LD so scrapers and agents that prefer HTML still get structured data for free.
Designed for agent workflows
Every listing carries a freshness state (fresh / verified / aging / expired) so your agent can filter out the dead ones without a second API call. Company aggregates let you search by employer. Freshness timestamps are ISO 8601, source URLs are absolute, and salary is normalised into min/max/currency — the stuff you'd otherwise wrangle with regex.
Crawler-friendly defaults
Our robots.txt explicitly allows GPTBot, ClaudeBot, PerplexityBot, Google-Extended, and CCBot by default — we treat AI training access as a feature, not a threat. If you run your own scraper, respect the standard rate limits and attribute links back to the source employer.
HiredSignal MCP — for job seekers using the tracker
One MCP connects Claude directly to your Hired Signal Tracker. Claude can list your pipeline, move jobs between stages, read a job's JD plus any notes you left on it, and upload tailored CVs back to the tracker — without you ever copying files or tokens.
Before you start
- You need a Hired Signal account.
- Move the jobs you want CVs for into the Prepping column on your Tracker board. Optionally add notes on each job — Claude will factor them into the CV.
- Have Node.js installed (required by
mcp-remote, the bridge Claude Desktop uses to talk to our server).
Installation
Option A — Claude Desktop
Open claude_desktop_config.json (Mac: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json) and merge:
{
"mcpServers": {
"hiredsignal": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://hiredsignal.com/api/mcp/hiredsignal"]
}
}
} Fully quit Claude Desktop (Cmd+Q on Mac — closing the window is not enough), then reopen. On first use Claude opens a browser to sign you in — that is the only setup step.
Option B — Claude Code (CLI)
claude mcp add --transport http hiredsignal \ https://hiredsignal.com/api/mcp/hiredsignal
Claude Code will prompt you to authenticate via your Hired Signal account on first use.
How to use it
Start a new Claude conversation, paste your own CV prompt/instructions, then say something like:
"Use the hiredsignal MCP. List my jobs in the prepping stage, read the JD and my notes for each, generate a tailored CV using the instructions above, then upload it."
Claude loops through your prepping jobs, reads each JD and your notes, writes the CV, and uploads it. Each CV appears under the job in your tracker immediately.
Tool reference
list_jobs_by_stage
Optional stage filter. Returns metadata only — no JD, no notes.
{
"count": 3,
"jobs": [
{ "jobUid": "abc-123", "title": "Portfolio Manager",
"company": "Acme Capital", "url": "https://…",
"stage": "prepping", "outcome": "active",
"appliedAt": null, "updatedAt": "2026-04-20T…" }
]
} get_job_details
Argument: jobUid. Returns the JD plus your notes (TipTap JSON). Call this per-job when tailoring a CV.
{
"jobUid": "abc-123",
"title": "Portfolio Manager",
"company": "Acme Capital",
"url": "https://…",
"jdHtml": "<p>Full job description HTML…</p>",
"notesJson": { "type": "doc", "content": [ … ] }
} move_job
Arguments: jobUid, plus at least one of toStage / toOutcome; optional reason (logged to transition history). Valid stages: saved → shortlisted → prepping → ready → applying → applied → screening_call → assessment → interview → offer → closed.
upload_cv
Arguments:
jobUid(required) — fromlist_jobs_by_stage.cvHtml(required) — rich-text HTML. The tracker renders CVs with TipTap, so markdown is rejected. Use<h1>for the name,<h2>for sections,<ul><li>for bullets.filename(optional) — defaults to"{jobUid}-tailored-cv.html".
Returns { success, materialId, filename, jobUid, uploadedAt } on success.
Authentication
The MCP uses your Hired Signal account. Claude handles OAuth sign-in automatically on first use — you never copy tokens manually. Every request is validated server-side and scoped to your account.
Coming soon
- Vector search — optimised for AI. Describe the role in plain English and get semantically matched results. Built for agents that reason about intent, not just keywords. Embeddings generated at ingest time, zero latency at query time. Coming soon
- Keyword search. Fast full-text search across job titles, descriptions, and company names. Filter by location, remote, salary range, and freshness in a single query. Coming soon
Get an API key
Email api@hiredsignal.com with your use case. We have a generous free tier for prototyping; paid tiers scale linearly with 1K-call buckets.