ENTRA MCP — the first agent-ready job platform
Let your AI find your job. This MCP server connects Claude, ChatGPT, Cursor, Windsurf or any MCP client — locally via npx or hosted at https://mcp.entracareers.com/mcp — to ENTRA — thousands of verified AI & tech jobs aggregated straight from company hiring systems (OpenAI, Anthropic, SpaceX, Stripe + 300 more). Zero ghost jobs.
Agents search, match, rank and prepare. Humans decide and apply — no spam, no auto-submission.
Install
Claude Code
Claude Desktop — one-click extension (.mcpb)
Download entra-mcp.mcpb and open it with Claude Desktop (Settings → Extensions → Install from file). No Node install needed. Employers can paste their API key in the extension settings.
Claude Desktop (claude_desktop_config.json), Cursor (.cursor/mcp.json), Windsurf (~/.codeium/windsurf/mcp_config.json)
From source:
Requires Node 18+. No API key needed for candidate tools — they are read-only against the public ENTRA API. Employers add one env var, see Employer mode.
Then just ask: "Find me remote ML engineer roles paying $200K+, tell me which companies are hiring most, and prepare an application for the best fit."
Hosted endpoint (no install)
The same server runs at https://mcp.entracareers.com/mcp (MCP Streamable HTTP). Nothing to install, no account for candidate tools.
Employer mode over HTTP: send your key on every request as Authorization: Bearer entra_live_… and the 8 employer tools appear for that request (Cursor: add "headers": { "Authorization": "Bearer entra_live_…" } next to url). ChatGPT and claude.ai connectors cannot send custom headers today, so there you get candidate mode — employers use the local npx setup with ENTRA_API_KEY (Employer mode).
How the hosted server behaves:
- Stateless: every request stands alone (no sessions, no
Mcp-Session-Id), so it scales and redeploys without breaking clients. GET /mcp and DELETE /mcp answer 405 as the spec allows.
- The
Authorization header is used for that one request and is neither stored nor logged. No key is read from the server's environment.
- Rate limit 120 requests/minute per client IP on
/mcp; request bodies up to 1 MB; CORS open for browser-based agents. Health: GET /healthz.
- Same honesty rules as below — the hosted server is just another transport for the identical tools.
Tools
Every job in every response carries verified: true, a salary band when the company lists one, and an apply URL of the form https://entracareers.com/{country}/vacancies/{id}?utm_source=agent&utm_medium=mcp — we welcome agent traffic.
Sample: match_jobs
Honesty note
- Matching is deterministic — a keyword dictionary plus rules, no LLM in the loop.
fit_score is explainable, not a prediction; interview_chance_hint is derived from fit_score only (never a made-up percentage).
salary_stats uses listed bands only — roles without a published band are excluded, and nothing is estimated.
search_jobs rank_by: "salary" returns salaried listings only; posted_within_days is applied client-side over the most recent 500 matches.
- Nothing is submitted on your behalf.
prepare_application returns a link and a checklist; the human applies.
Employer mode (API key)
Same package, one env var: with ENTRA_API_KEY set, the 8 candidate tools stay and 8 employer tools are added — post jobs, manage listings, read applications, search and match candidates for your company.
- Create a key at entracareers.com/employer/profile?tab=api-keys (pick the scopes you need; the key is shown once).
- Connect:
Claude Code
Claude Desktop / Cursor / Windsurf
Then ask: "Post a Senior Sales Manager job in Dubai — hybrid, 15–22K AED/month, 45 days — then show me the 5 best candidates for it and who has already applied."
How it behaves:
- The key is read from the environment only (never from arguments). Without a key the employer tools are not registered;
--employer alone just prints a hint on stderr.
- Nothing is called at startup. The first employer call resolves your company and scopes via
GET /employer/api-keys/me and caches them.
- Only employer endpoints receive the bearer header; public lookups (countries, cities, specializations, job details) are made anonymously.
- Rate limit is 120 requests/minute per key; a
429 is retried once after retry-after.
Employer tools
Structured outcomes (no surprises)
Honesty notes (employer)
match_candidates is deterministic keyword scoring (skills overlap, headline vs role, seniority, location/remote) — explainable, not a prediction. Review profiles before contacting anyone.
- Contact details (email, phone, WhatsApp, LinkedIn, portfolio) are shown only when ENTRA returns them — i.e. the candidate applied to your job or accepted your invitation. Nothing is inferred or scraped.
post_job reports every guess it made: city / specialization match quality, a detected or defaulted experience_level (1_3_years if undetectable), and salary_period defaulting to monthly (the ENTRA default — pass "yearly" for annual figures).
- Nothing is deleted:
close_job sets isActive:false and can be undone with update_job {is_active:true}. Application status changes are not available through API keys — use the employer dashboard.
Why ENTRA is agent-ready (and others aren't)
- LinkedIn bans agents. Indeed's MCP is search-only. Tools that scrape break on CAPTCHAs.
- ENTRA owns the inventory — verified jobs from company ATSs — so agents get clean, legal, structured access with consented apply links.
- Every listing:
verified: true + salary bands + utm_source=agent (we welcome agent traffic).
AI matching is live via match_jobs — connect your profile at entracareers.com.
Roadmap
- Application status changes and invitations through API keys (today: read-only applications).
- OAuth on the hosted endpoint, so ChatGPT / claude.ai connectors can use employer mode without a local install.
Employers: entracareers.com/employer/pricing — Founding plan from $10.
Links
Development
Layout: src/server.ts builds the server (createServer({ apiKey? }) — tools + per-request key context), src/index.ts is the stdio entry (npx entra-mcp), src/http.ts the hosted Streamable HTTP entry.
Environment: ENTRA_API_KEY (stdio only — enables employer mode), ENTRA_API_URL (default https://entracareers.com/api), ENTRA_SITE_URL (default https://entracareers.com).
MIT © ENTRA
Privacy Policy
This server sends only your tool inputs to the public ENTRA API (https://entracareers.com/api). No telemetry, no third-party services. Locally (npx entra-mcp) employer mode uses your API key from the ENTRA_API_KEY environment variable; on the hosted endpoint (https://mcp.entracareers.com/mcp) the key comes from the Authorization header of each request, is forwarded only to ENTRA employer endpoints, and is never stored or logged. The hosted server keeps no sessions or request history beyond a short access log (method, tool name, status, timing). Full policy: https://entracareers.com/privacy-policy