Skip to main content
Glama

homerun-mcp

Run your Homerun hiring from Claude.

Homerun is a great ATS, but day to day a lot of the work is manual: open each candidate, move them one by one through the stages, log in to reply to each of them, export numbers for the weekly update. This MCP server lets Claude (Desktop, Code, or any MCP client) do that work with you, for any role and any hiring process.

You:    How are our open roles doing? Who's been waiting more than 5 days?
Claude: 3 open vacancies, 47 active candidates. 6 have had no reply for 5+ days,
        4 of them in "New" for the Backend Engineer role. Report saved to
        ~/Documents/Homerun Reports/homerun-report-2026-10-20.xlsx

You:    Move the 4 in New to "Phone screen" and draft an invite for each.
Claude: [shows the 4 drafts] OK to create them as Gmail drafts and log a note in Homerun?

What you can do

See the pipeline

  • Funnel per vacancy and per stage, hired, disqualified, average rating

  • Who has been waiting for a first reply for more than N days

  • Time to first reply per vacancy

Act in bulk

  • Move many candidates to a stage in one go, with an optional note on each

  • Add notes to many candidates at once (screening summaries, "rejection sent on...")

  • Add sourced candidates (from LinkedIn, events, referrals) without opening Homerun

Reply to candidates

  • Claude drafts personal emails (rejection, next step, interview invite, status update) for a whole group

  • You review them all in one list; with Gmail or Outlook connected they become drafts there

  • Each candidate gets a note in Homerun so the team knows they were contacted

Report on a schedule

  • One-call report to Excel (Summary, Needs reply, Active, All candidates), CSV, or JSON

  • With a Google Drive connector, Claude can put it in Google Sheets

  • Pair it with a scheduled task in Claude to get it every Monday, or every 2-3 days

Related MCP server: Ashby MCP

Tools

Tool

What it does

hiring_report

Report across vacancies to xlsx / csv / json

pipeline_summary

Quick funnel for one vacancy

list_vacancies, get_vacancy

Openings, stages, candidate counts

list_job_applications, get_job_application

Candidates by vacancy, stage, hire date; notes and sources

bulk_move_candidates

Move many candidates to one stage (+ optional note)

bulk_add_notes

One note per candidate, many candidates

move_candidate, add_note

Same, one at a time

create_candidate, update_candidate

Add or edit candidates

upload_candidate_file

Attach a CV or assignment from your computer

delete_candidate

GDPR erasure, with confirmation

homerun_ping

Check the key

Prompts (in Claude Desktop: the "+" menu > homerun):

  • hiring_review: pipeline review + report + proposed next actions

  • reply_to_candidates: drafts replies for a group of candidates, then logs them

  • candidate_brief: one-page brief before an interview

Install

Claude Desktop (one click)

  1. Download homerun-mcp.mcpb from Releases.

  2. Double-click it (or Settings > Extensions > drag it in).

  3. Paste your Homerun API key: Homerun > Settings > Integrations > API.

Claude Code / other MCP clients

git clone https://github.com/MrMendiola/homerun-mcp && cd homerun-mcp
npm install && npm run build
claude mcp add homerun -e HOMERUN_API_KEY=your-key -- node "$PWD/dist/index.js"

Or in any mcpServers config:

{
  "mcpServers": {
    "homerun": {
      "command": "node",
      "args": ["/absolute/path/to/homerun-mcp/dist/index.js"],
      "env": { "HOMERUN_API_KEY": "your-key" }
    }
  }
}

Variable

Default

HOMERUN_API_KEY

required

Bearer key from Homerun

HOMERUN_REPORT_DIR

~/Documents/Homerun Reports

Where reports are saved

HOMERUN_NOTE_AUTHOR

Claude (AI assistant)

Name on notes Claude writes

Scheduled reports

In Claude Desktop, create a scheduled task (weekly, or every 2-3 days) with a prompt like:

Use the homerun hiring_review prompt with destination google_sheets and reply_sla_days 3.

Each run updates the report and gives you a short summary with proposed actions. Nothing is moved or sent without your OK.

Good to know

  • Scoped keys. For reports only, grant vacancies:read and job-applications:read. Add write scopes only if you want bulk moves and notes.

  • Humans decide. Claude proposes, you approve. The server never rejects anyone on its own, and notes written by Claude are labelled. In the EU, AI that evaluates candidates is high-risk under the AI Act: keep a human in the loop.

  • Replies go through your email. Homerun's public API has no endpoint to send messages, so replies are drafted in your email client (Gmail / Outlook connector) and logged in Homerun as a note. They will not show up in Homerun's own inbox.

  • Not in the API: application form answers, assignment content, email threads, stage change dates.

  • Rate limit. 60 requests/minute per key. The server throttles and retries automatically; a big bulk move may take a minute.

  • Local only. Runs on your machine: candidate data goes from Homerun to you and Claude, no third-party middleware.

  • Unofficial. Not affiliated with Homerun. Built on the public API v2.

Develop

npm install
npm run build
npm run pack     # builds homerun-mcp.mcpb

See docs/architecture.md for how it is put together.

License

MIT

Available Tools

15 tools
add_noteAdd note to candidateB

Add a note to a candidate's timeline. Notes written by Claude are signed with the configured author name so the team can tell them apart from human notes.

Inputs: note (required), job_application_id (required), is_sensitive.

bulk_add_notesAdd notes to many candidatesB

Add one note per candidate in one go, e.g. a screening summary or 'rejection email sent on '.

Inputs: notes (required).

bulk_move_candidatesMove many candidatesA
Idempotent

Move a list of candidates to the same stage in one go (rate-limited, keeps going if one fails). Show the user the list and get explicit confirmation first. Optionally leave the same note on each.

Inputs: stage (required), job_application_ids (required), note.

create_candidateAdd a candidateB

Create a job application, e.g. for someone sourced on LinkedIn or met at an event. Without vacancy_id the candidate lands in the general candidates pool.

Inputs: email (required), last_name (required), first_name (required), city, +8 more.

delete_candidateDelete candidateA
Destructive

Permanently delete a job application (e.g. GDPR erasure request). Irreversible: only call after explicit user confirmation.

Inputs: job_application_id (required).

get_job_applicationGet candidateB
Read-only

Full details of one candidate, optionally with notes, sources and vacancy.

Inputs: job_application_id (required), include.

get_vacancyGet vacancyA
Read-only

Full details of one vacancy, including its description and (optionally) its stages and candidate count.

Inputs: vacancy_id (required), include.

hiring_reportHiring report (Excel / CSV / data)A

Build a hiring report across all open vacancies (or the ones given): funnel per stage, hired, disqualified, average rating, time to first reply, and the list of candidates who have waited more than reply_sla_days without any reply. format=xlsx writes an Excel file (sheets: Summary, Needs reply, Active, All candidates); csv writes one flat table (easy to import into Google Sheets); json returns the data only, e.g. to push it into a Google Sheet with another connector.

Inputs: format, output_path, vacancy_ids, include_closed, +1 more.

homerun_pingCheck Homerun connectionA
Read-only

Verify the API key works.

Inputs: no named parameters.

list_job_applicationsList candidatesA
Read-only

List job applications (candidates). Filter by vacancy (comma-separated ids allowed), by stage name, or by hire date.

Inputs: page, stage, include, perPage, +2 more.

list_vacanciesList vacanciesA
Read-only

List job openings (vacancies). Use include=['stages','total_candidate_count'] to see the hiring pipeline of each job.

Inputs: page, status, include, perPage.

move_candidateMove candidate to stageA
Idempotent

Move a candidate to another existing stage of the hiring process (stage name must exist in the vacancy). Cannot move back to 'New'. Always confirm with the user before calling.

Inputs: stage (required), job_application_id (required), vacancy_id.

pipeline_summaryPipeline summaryA
Read-only

Snapshot of one vacancy's funnel: candidates per stage, disqualified count, average rating, candidates still waiting for a first reply. Pulls all pages (mind the 60 req/min limit).

Inputs: vacancy_id (required).

update_candidateUpdate candidate detailsC

Update contact or profile fields of a candidate.

Inputs: fields (required), job_application_id (required).

upload_candidate_fileUpload CV or assignmentB

Attach a local file (resume or assignment) to a candidate.

Inputs: type (required), file_path (required), job_application_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 15 tools

    Disambiguation4/5

    Most tools are clearly distinct: list/get pairs for vacancies and applications, and explicit single-vs-bulk pairs (move_candidate/bulk_move_candidates, add_note/bulk_add_notes). However, the same entity is referred to as both 'candidate' (update_candidate, list_job_applications returns candidates) and 'job_application', and pipeline_summary vs hiring_report both produce funnel data, which could occasionally confuse selection.

    Naming Consistency4/5

    Names follow a mostly consistent snake_case verb_noun pattern (list_vacancies, get_vacancy, create_candidate, move_candidate, etc.) with clear bulk_ prefixes for batch variants. Minor deviations are noun-only names (pipeline_summary, hiring_report) and the server-prefixed homerun_ping, plus the candidate/job_application terminology split.

    Tool Count5/5

    15 tools is well-scoped for an ATS integration, covering reads, writes, reporting, and batch operations without redundancy. Each tool has a distinct, justified role.

    Completeness4/5

    Strong coverage of the candidate lifecycle: create/update/delete/get/list, notes, file upload, stage moves, and reporting. Minor gaps exist (no note or file deletion, no vacancy create/update), but these are plausibly out of scope and unlikely to block core workflows.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects your Ashby recruiting data to Claude, enabling natural language queries and management of candidates, applications, jobs, interviews, offers, and team information.
      50 npm
      MIT
    • F
      license
      B
      quality
      Not graded
      maintenance
      Enables Claude to manage Zoho Recruit ATS operations including candidates, jobs, interviews, analytics, email, and AI-assist through natural language.
      20
      -
    • F
      license
      A
      quality
      D
      maintenance
      Connects Claude to the Pandapé recruitment API, enabling natural language management of vacancies, structured candidate review against custom criteria, pipeline stage updates, and CV downloads.
      14
      -