Build on Employbl data

Connect ChatGPT, Claude, Cursor or any MCP client to Employbl's 30,000+ companies, 100,000+ jobs, and 75,000+ funding rounds. Two or three steps per client, no token to paste.


Section I · Connect

Connect Employbl to your assistant

Employbl is a remote MCP server at https://www.employbl.com/api/mcp. Every client below connects the same way: add the URL, sign in to Employbl when the client asks, click Authorize. No token to paste. Any verified account works, and every call is free.

Pick your client. Each one is two or three steps.

ChatGPT

chatgpt.com → Settings → Connectors

  1. Open Settings → Connectors → Advanced, and turn on Developer mode.
  2. Choose Create. Name it Employbl, set the MCP server URL to https://www.employbl.com/api/chatgpt/mcp, and pick OAuth for authentication.
  3. Start a new chat, open the + menu, pick Employbl, and sign in to Employbl when ChatGPT asks.

ChatGPT gets a curated surface — company and job search, funding rounds, company profiles that render as a card in the conversation — rather than the full 27 tools. Adding it by hand needs Developer mode, which ChatGPT offers on its paid plans; the directory listing removes that step once it is live.

Claude (claude.ai and Desktop)

Settings → Connectors → Add custom connector

  1. In claude.ai or Claude Desktop, open Settings → Connectors.
  2. Choose Add custom connector. Name it Employbl and paste https://www.employbl.com/api/mcp.
  3. Click Connect, sign in to Employbl in the window that opens, and click Authorize.

One connection covers claude.ai, Claude Desktop and the Claude mobile apps on the same account.

Claude Code

The terminal

  1. Run the command below once.
  2. Inside a session, type /mcp and pick Employbl to sign in. A browser window opens; click Authorize.
claude mcp add --transport http employbl https://www.employbl.com/api/mcp

Cursor

Cursor → Settings → MCP

  1. Click Add to Cursor. Cursor opens with the server pre-filled; confirm Install.
  2. Click the sign-in prompt next to Employbl in Settings → MCP and authorize in the browser.
Add to Cursor

~/.cursor/mcp.json (or .cursor/mcp.json in a project)

{
  "mcpServers": {
    "employbl": {
      "url": "https://www.employbl.com/api/mcp"
    }
  }
}

VS Code (Copilot agent mode)

The MCP: Add Server command, or .vscode/mcp.json

  1. Click Add to VS Code and confirm the server. Or run MCP: Add Server from the command palette and paste the URL.
  2. Start the server from the MCP panel; VS Code opens a browser to sign in.
Add to VS Code

.vscode/mcp.json

{
  "servers": {
    "employbl": {
      "type": "http",
      "url": "https://www.employbl.com/api/mcp"
    }
  }
}

Codex CLI

~/.codex/config.toml

  1. Add the block below to ~/.codex/config.toml.
  2. Restart Codex. On first use it opens a browser to sign in to Employbl.

~/.codex/config.toml

[mcp_servers.employbl]
url = "https://www.employbl.com/api/mcp"

Gemini CLI

~/.gemini/settings.json

  1. Add the block below to ~/.gemini/settings.json.
  2. Run /mcp auth employbl inside Gemini CLI to sign in.

~/.gemini/settings.json

{
  "mcpServers": {
    "employbl": {
      "httpUrl": "https://www.employbl.com/api/mcp"
    }
  }
}

Windsurf

Windsurf → Settings → MCP

  1. Add the block below to ~/.codeium/windsurf/mcp_config.json (Settings → MCP → Manage opens it).
  2. Refresh the MCP list and authorize Employbl when prompted.

~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "employbl": {
      "serverUrl": "https://www.employbl.com/api/mcp"
    }
  }
}

Any other MCP client

Wherever your client keeps its server list

  1. Add a streamable-HTTP server named employbl at https://www.employbl.com/api/mcp.
  2. If the client supports OAuth, sign in when it asks. If it does not, create an access token at Profile → MCP and send it as a Bearer header.

Generic JSON shape

{
  "mcpServers": {
    "employbl": {
      "url": "https://www.employbl.com/api/mcp",
      "headers": {
        "Authorization": "Bearer {your-mcp-key}"
      }
    }
  }
}

Or use an access token

For clients without an OAuth flow, generate a permanent access token at Profile → MCP and send it as a Bearer header. The token authenticates every MCP and REST request and is rate-limited per token.

{
  "mcpServers": {
    "employbl": {
      "url": "https://www.employbl.com/api/mcp",
      "headers": {
        "Authorization": "Bearer {your-mcp-key}"
      }
    }
  }
}

What to ask first

Once connected, your assistant can call the tools in Section II on your behalf. Three prompts that use the data well:

  • “Find Series A to C companies in San Francisco hiring senior backend engineers who use Go.”
  • “Which companies raised in the last 30 days and have open product roles?”
  • “Update my Employbl preferences: remote, staff level, fintech or developer tools.”

Section II · MCP Tools

Available tools (29)

All tools are premium-gated and rate-limited. Use natural language with Claude to invoke them — you don't need to memorize the exact names or parameters.

Funding & Market Intelligence

recent_funding_rounds

List recent venture funding rounds across 30,000+ companies and 75,000+ rounds. Filter by date range, round name, minimum USD amount, location, and job-feed coverage. Defaults to the last 90 days. A company with no synced roles may still be hiring — recently funded companies are the least likely to be covered. Every response states the date funding data is current through.

› "Show me companies in NYC that raised Series B in the last 6 months"

Profile Management

These tools write your own data — your profile, preferences, ratings and saved searches — so the assistant can tune what it returns for you.

get_profile

Fetch your complete profile including basic info, work experience, education, projects, certifications, and skills. Optionally specify which sections to retrieve.

› "Show me my work experience and skills"

update_profile

Update your basic profile information including name, job title, location, summary, LinkedIn, GitHub, personal website, and avatar.

› "Update my profile: I'm now a Staff Engineer at Anthropic in San Francisco"

add_work_experience

Add a work experience entry to your profile with title, company, dates, and description.

› "Add my last job: Senior Engineer at Google from Jan 2020 to Dec 2023"

update_work_experience

Edit one work experience entry by id — close out a role that has ended, fix a title or dates, rewrite the description. Partial: send only what changes. get_profile shows each entry's id.

› "My Apple contract ended in September — close it out on my profile"

delete_work_experience

Remove one work experience entry from your profile by id. Permanent; the assistant should confirm first.

› "Remove the Mondo recruiting job from my profile"

add_skills

Add or update your technical skills. This replaces your existing skills list with the provided skills.

› "Add my skills: Python, TypeScript, PostgreSQL, AWS, Docker, Kubernetes"

upload_profile_from_text

Build your entire profile from pasted text in one step. Paste a resume, LinkedIn About section, or bio — AI extracts your basic info, work history, and skills and writes them to your profile, then reports what's still missing. Uses your AI token allowance or BYOK key.

› "Here is my resume [paste] — set up my Employbl profile from it"

Job Search Preferences

Free, like everything else on the server since v0.18.0 — tuning your preferences costs nothing.

get_preferences

Retrieve your job search preferences including target seniority, industries, company stages, locations, skills, and minimum compensation.

› "Show me my current job search preferences"

update_preferences

Update your job search preferences. Merges with existing preferences (partial update). Supports role/function (engineering, product, design, …), seniority levels, company stages, industries, locations (any city worldwide, or "remote"), skills, and minimum compensation.

› "Set my preferences: engineering, Series A-B AI companies, senior roles, remote or SF, $180k+"

Saved Searches & Alerts

Free — saving a search and the alert emails it sends both cost nothing.

save_search

Save a job search and get a daily or weekly email when new matching jobs are posted. Filter by title, city/state, remote, company size, funding stage, and investors.

› "Watch for staff-level AI infra roles in SF and email me weekly"

list_saved_searches

List your saved searches with their filters, alert frequency, and when the last alert email went out.

› "What job alerts do I have set up?"

delete_saved_search

Delete a saved search by id and stop its email alerts.

› "Delete my old remote-fintech alert"

For Company Representatives

Free claim (sign in with your work Google account) unlocks the two profile tools below — no candidate subscription needed (and every account may call the whole server, free, at 60 requests a minute and 5,000 a day). Company Premium (annual, progressive pricing — see /pricing) unlocks unlimited use of the full Employbl toolkit — every company, job, and funding intelligence tool on this page — for up to 10 teammates; teammates get a seat automatically by claiming with their work Google account. Objective data (funding, investors, headcount, verified roles) is maintained by Employbl and can never be company-edited.

get_my_company

Fetch your claimed company's profile status: last-30-day candidate view counts, profile completeness by section, published/draft state, and synced open roles.

› "How is our Employbl company profile doing?"

update_company_profile

Update your company's profile — tagline, product description, highlights, candidate FAQ, work model, hiring focus, tech stack, notable customers, perks, culture, careers page URL, the story fields (one-liner, why join now, team snapshot, interview process) and the structured blocks (`products`, `case_studies`, `faq`, `press_links`) — plus headcount and founding year, which candidates then see labeled company-reported. Partial updates; changes go live on save. Photos are uploaded from the web editor.

› "Update our Employbl profile: we're hiring for ML infra and our stack is Rust + Kubernetes"

Personalized Recommendations

Reading recommendations and teaching the feed are both free — the 100-call allowance was removed in v0.18.0, and the only ceiling now is the per-token rate limit (60/min, 5,000/day).

get_recommended_jobs

Get personalized job recommendations based on your profile and preferences. Returns jobs matching your target seniority, industries, company stages, locations, and minimum compensation. Optionally includes reasoning for each match.

› "Show me 10 recommended jobs with explanations"

get_recommended_companies

Get personalized company recommendations based on your preferences. Returns companies matching your preferred industries, stages, and locations, sorted by hiring activity. Optionally includes reasoning. Open-role counts reflect Employbl's synced coverage, not whether a company is hiring.

› "What companies match my preferences?"

rate_job

Give feedback on a recommended job so recommendations improve. Thumbs up ranks similar jobs higher; thumbs down hides it and downranks similar roles. Optional free-text reason plus a structured `reason_category` (location, not_remote, role, seniority, compensation, not_interested for down; role_fit, company, location_fit, compensation_fit for up).

› "Thumbs down that job — too senior for me"

dismiss_job

Hide a single job from your recommendations everywhere (web feed and MCP). Optionally include a reason and `reason_category` so future recommendations learn why.

› "Hide that last job from my recommendations"

hide_jobs_matching

Hide a whole class of jobs by rule — a location, a title keyword, or anything not remote. Rules persist across the web feed and MCP.

› "Stop showing me jobs in India"


Section III · Example Queries

Ask in plain English

“Find Series B AI companies in San Francisco with open senior engineering roles”

find_companiessearch_jobs

“Show me my profile and recommend 5 jobs that match my preferences”

get_profileget_preferencesget_recommended_jobs

“What companies raised funding recently, and which have open roles on Employbl?”

recent_funding_roundsfind_companies

“Find companies similar to Stripe and summarize the top 3”

find_similar_companiessummarize_company

“Update my profile with my new job title and add my skills”

update_profileadd_skills

“Here's my resume [paste or attach] — build out my Employbl profile from it”

upload_profile_from_text

“Which Series A companies are in zip code 94133?”

find_companies

“Find startups within 10 miles of me that just raised, and show their open roles”

find_companies_near_merecent_funding_rounds

“Compare Anthropic, OpenAI, and Mistral as employers”

compare_companies

“Watch for staff-level AI infra roles in SF and email me weekly”

save_search

Section IV · REST API

The same data over plain HTTP

Every read endpoint below is served from the same indexes as the MCP tools — use it from scripts, notebooks, or any HTTP client. Base URL: https://www.employbl.com/api/v1. Machine-readable spec: OpenAPI 3.1.

Authentication: the same Bearer token as the MCP server, generated at Profile → MCP. Any verified account may call every endpoint. Rate limits (60/min, 5,000/day) are shared with MCP tool calls on the same token; every response carries X-RateLimit-Remaining-Minute and X-RateLimit-Remaining-Day headers.

Responses use a { data, meta } envelope; errors use { error: { code, message } }. Add format=csv to any list endpoint for the same rows as a spreadsheet-ready CSV, with pagination in X-Total-Count / X-Page / X-Limit headers.

Example response — GET /companies

{
  "data": [
    {
      "name": "Anthropic",
      "slug": "anthropic",
      "city": "San Francisco",
      "state": "CA",
      "latest_round": { "name": "Series F", "date": "2026-03-04", "amount": 3500000000, "currency": "USD" },
      "job_listing_count": 214,
      "hiring": true,
      "profile_url": "https://employbl.com/companies/anthropic"
    }
  ],
  "meta": { "total": 1287, "count": 1, "page": 1, "limit": 1 }
}

GET/companies/{slug}

Full company profile: description, address, size, funding history, social links, and (when published) premium fields under premium_profile. The company-authored story is included only while the company holds Company Premium; otherwise story_withheld carries a note with the member and unlock URLs.

ParamTypeDescription
slugpathCompany slug, e.g. anthropic.
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \
  "https://www.employbl.com/api/v1/companies/anthropic"

GET/companies/{slug}/similar

Curated similar companies for a given company — useful for exploring a market segment or finding alternative employers.

ParamTypeDescription
slugpathCompany slug to find peers for.
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \
  "https://www.employbl.com/api/v1/companies/stripe/similar"

GET/jobs/{id}

Single job listing with the complete job description (not truncated) and company info.

ParamTypeDescription
idpathNumeric listing id from the search results.
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \
  "https://www.employbl.com/api/v1/jobs/12345"

GET/funding-rounds

Recent venture rounds across 75,000+ rounds. Defaults to the last 90 days. meta.data_current_through gives the newest round date in the dataset.

ParamTypeDescription
sincedateISO date lower bound, e.g. 2026-01-01.
roundscsvRound names, e.g. Series A,Series B.
min_amount_usdintMinimum raise amount (USD rows only).
city / statestringCompany HQ filters.
hiringbooltrue = only companies whose job listings Employbl has synced. Recently funded companies are the least likely to be covered, so this hides many that are actively hiring.
sortenumrecency (default) or amount.
limitintResults per page, 1-50. Default 20.
pageintPage number, starting at 1.
formatenumjson (default) or csv. CSV returns the same rows flattened for a spreadsheet — nested fields become dotted columns (company.name), lists are ;-joined — with X-Total-Count, X-Page and X-Limit headers in place of meta. A text cell that begins with =, +, - or @ is prefixed with an apostrophe so a spreadsheet reads it as text, not a formula.
curl -H "Authorization: Bearer $EMPLOYBL_TOKEN" \
  "https://www.employbl.com/api/v1/funding-rounds?rounds=Series%20B&min_amount_usd=10000000&limit=5"

Error codes

CodeHTTPMeaning
UNAUTHORIZED401Missing or invalid Bearer token.
VALIDATION_ERROR400A query or path parameter failed validation; message says which.
NOT_FOUND404No entity with that slug/id.
RATE_LIMITED429Token exceeded 60/min or 5,000/day. Retry-After header included.
INTERNAL500Unexpected server error.

Section V · Rate Limits & Auth

Authentication and limits

Authentication: all MCP tools and REST API endpoints require a valid Employbl access token, sent as a Authorization: Bearer <token> header. Any verified account can create one. Tokens are permanent until revoked and should be kept secure.

Cost: nothing. Every verified account gets the whole server and the whole REST API, with no call allowance and no paid tier for volume — a free account and a paying one make identical calls. The only ceiling is the rate limit below, which is the same for everyone.

Rate limiting: each token gets 60 requests per minute and 5,000 per day, shared across MCP and the REST API. REST responses include X-RateLimit-Remaining-* headers; exceeding a limit returns a clear error with retry-after guidance.

AI token usage: tools like summarize_company, personalize_search, and upload_profile_from_text consume AI tokens from your monthly allowance (or use your BYOK Anthropic key if configured). Each call uses approximately 1-6K tokens.


Section VI · Support

Questions and resources

Questions or issues? Email us at connor@employbl.com

Feature requests: we're actively expanding the MCP and REST API surface. Have an idea for a new tool or endpoint? Let us know.

Model Context Protocol: learn more about MCP at modelcontextprotocol.io


Section VII · Version History

What changed

v0.21.0Current — Work history is editable over MCP, not just appendable: update_work_experience (partial — close out a role with end_date, reopen it with is_current, fix a title, rewrite the description) and delete_work_experience, both by the id get_profile now prints next to every entry. Until now a wrong row — a contract that had ended, a title that had changed — could be fixed only in the web editor. 29 tools on /api/mcp; the ChatGPT surface is unchanged
v0.20.0 — A second MCP surface at /api/chatgpt/mcp, for the ChatGPT plugin. It carries the seven read-only dataset tools — find_companies, search_jobs, recent_funding_rounds, get_company, find_similar_companies, compare_companies, get_job_listing — plus the search / fetch pair ChatGPT's search surfaces expect, and leaves out everything that writes to your account. Tool definitions are shared with /api/mcp, not forked, so both surfaces always describe the same thing. New on it: every tool carries explicit readOnlyHint / destructiveHint / openWorldHint annotations, and get_company renders an interactive company card inside the conversation. /api/mcp is unchanged — 27 tools, same URL, same tokens
v0.19.0 — search_jobs gains department — the function of the role (engineering, data-ml, product, design, marketing, sales, customer-success, operations, finance, people, legal, it, healthcare), classified from the title and the employer's own department label, independent of level. "Sales roles at Series B companies" was previously a title guess. REST GET /jobs accepts the same department csv, and the /jobs page gains a Department chip
v0.18.0 — The 100-call cap is gone: every verified account gets the whole server and the whole REST API, and the only ceiling is the per-token rate limit (60/min, 5,000/day), which is the same for everyone. search_jobs gains country — ISO alpha-2 codes matched against the LISTING's own location, with names and alpha-3 accepted (Spain, ESP → ES) — because "jobs in Spain" was previously expressible only by enumerating exact city keys, and the keys callers guessed were wrong: non-US job_locations keys carry an EMPTY state segment (London__GB, two underscores), which the parameter description now states and the filter now corrects. A search that matches nothing names which filter value matched nothing, what the other filters alone would return, and which countries have listings — instead of "No job listings matched those filters." The query description now says it matches job title and company name only, so a place name in it is never a location filter. REST GET /jobs gains the same country parameter; 402 FREE_ALLOWANCE_EXHAUSTED and the X-Free-Calls-* headers are removed
v0.17.2 — search_jobs level gains three people-management values — manager, director, executive — alongside the six individual-contributor rungs. Management titles were unlevelled before: nearly a quarter of listings with no level were a Manager, Director or VP. REST GET /jobs level accepts the same nine values
v0.17.1 — get_company and REST GET /companies/{slug} say when a company's story is withheld instead of omitting it silently: one sentence naming where signed-in members read it and how the company makes it public. The story itself is still absent unless the company holds Company Premium. REST carries it as story_withheld {note, member_url, unlock_url}
v0.17.0 — update_company_profile gains the story fields (one_liner, why_join_now, team_snapshot, hiring_process_summary) and structured blocks — products [{name, description, kind: product|feature|capability|integration, url}], case_studies [{customer, title, url, summary, metric_value, metric_label, quote, quote_by}], faq [{question, answer}] — and press_links items now carry an optional published_on. A malformed list is refused with the field named instead of silently dropped. Products, case studies, photos and news render on the public page while the company is on a trial or subscribed. careers_url is now advertised in the schema (the handler always accepted it)
v0.16.1 — sector now works on both find_companies and search_jobs. Since v0.8.2 the parameter was declared on search_jobs (where it was silently ignored) and missing from find_companies (where the server stripped it), so the only industry filter that reached the index was the legacy Diffbot industry tag — and industry: ["AI"] matched nothing. Both parameters now list the 17 sectors and 58 subsectors, and shorthand like AI, fintech, devtools or climate in either parameter is mapped to the sector. REST GET /jobs gains the same sector query parameter
v0.16.0 — update_company_profile gains headcount and year_founded — a claimed company may correct its own objective facts; the public page labels them company-reported, and Employbl's data pipelines never overwrite a company-asserted value afterwards. Funding rounds and the logo are edited from the web dashboard
v0.15.1 — rate_job and dismiss_job accept role as a negative reason_category — the job is the wrong kind of work, not the wrong level or place. The dashboard's thumbs-down offers the same "Wrong role" chip; a program-manager listing recommended to an engineer had no honest answer among the five
v0.15.0 — update_preferences accepts any city for locations. It was an enum of ten values — nine US metros plus remote — so update_preferences({ locations: ["Mumbai"] }) was a validation error and no city outside them could be set from an assistant at all. Those slugs remain valid; anything else is taken as a city label and now reaches job matching instead of being discarded
v0.14.0 — The server is open to every verified account. Keys were Premium-only; now any account may make 100 metered tool calls for the life of the account, and the tools that write your own data — profile, preferences, rate_job, dismiss_job, hide_jobs_matching, saved searches — never count and keep working after the cap. Metered tools past the cap return an upgrade message instead of a result; REST returns 402 FREE_ALLOWANCE_EXHAUSTED with a quota body and X-Free-Calls-Remaining headers. Premium and Company Premium seats are unlimited
v0.13.0 — Preferences gained roles — the role/function vocabulary (engineering, data-ml, product, design, marketing, sales, operations) the onboarding question and the jobs-for-you feed now weight highest. update_preferences accepts it, get_preferences reports it, and get_recommended_jobs counts a roles-only selection as having preferences instead of answering "No preferences set yet"
v0.12.0 — Company search gained location filters: find_companies now takes zip and near (radius around any geocoded US location), and both match satellite offices rather than only the HQ. find_companies_near_me gained latest_round, min_employees and max_employees, so "Series A companies near me" is a single call instead of an unanswerable one
v0.11.0 — Hiring status now says what it actually means. "Not currently hiring" was returned for any company with zero synced listings — but Employbl only tracks an ATS for ~9% of companies, so it was a claim about the employer we had no basis for. Responses now distinguish "we sync their ATS and it is empty" from "we have not found their job feed yet", and every tool description says so. get_recommended_companies hiring_only now defaults to false (it defaulted to true, silently limiting recommendations to the ~9% with a synced feed)
v0.10.0 — Recommendations are now country-gated (jobs must be hirable in your country; unknown-location jobs still pass). rate_job and dismiss_job accept a structured reason_category alongside free text; dismiss_job gains an optional reason. Fixed update_preferences silently erasing hide-rules
v0.9.1 — Fixed OAuth sign-in: the consent redirect now returns 303, so browser callbacks reach Claude Desktop / claude.ai / Claude Code as GET. Previously every OAuth attempt failed with a 405 at the callback step; token-based auth was unaffected
v0.9.0 — Added recommendation-feedback tools (rate_job, dismiss_job, hide_jobs_matching): rate jobs up/down, hide a single listing, or hide whole classes of jobs by location / keyword / non-remote. Feedback steers both the web "Jobs For You" feed and get_recommended_jobs, which now excludes hidden jobs and hide-rules
v0.8.4 — recent_funding_rounds responses now end with "Funding data current through {date}" so staleness is visible; same marker in the REST meta.data_current_through field
v0.8.3 — update_company_profile gains careers_url (rep-editable careers page link, rendered on the public profile)
v0.8.2 — find_companies gains a sector filter over the curated industry taxonomy (17 sectors, 58 subsectors — see employbl.com/industries); legacy industry tags deprecating
v0.8.1 — find_companies tech-stack filtering now matches technologies extracted from live job descriptions (2,400+ companies with job-derived stacks) in addition to company-reported stacks
v0.8.0 — Added company-representative tools (get_my_company, update_company_profile): claim-gated, no candidate subscription required, descriptive fields only
v0.7.0 — Added compare_companies (side-by-side comparison of 2-5 companies) and saved-search tools (save_search, list_saved_searches, delete_saved_search) wired to the same email-alert system as the website
v0.6.0 — Added find_companies_near_me (geo search over 29,000+ geocoded company HQs) and upload_profile_from_text (build your profile from a pasted resume or bio) tools
v0.5.0 — Added find_similar_companies tool
v0.4.0 — Added profile management tools (get_profile, update_profile, add_work_experience, add_skills), preference tools (get_preferences, update_preferences), and personalized recommendation tools (get_recommended_jobs, get_recommended_companies)
v0.3.0 — Initial public release with company search, job search, funding rounds, and AI-powered tools