Skip to main content
Glama
Comradery64

open-greenhouse-mcp

by Comradery64

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GREENHOUSE_API_KEYNoHarvest API key
GREENHOUSE_LOG_FILENoLog file path (defaults to stderr)
GREENHOUSE_LOG_LEVELNodebug, info, warning (default), errorwarning
GREENHOUSE_READ_ONLYNoSet true to enable read-only mode (shorthand for profile read-only)
GREENHOUSE_BOARD_TOKENNoJob board URL slug
GREENHOUSE_DIAGNOSTICSNoSet off to disable the diagnostics file
GREENHOUSE_ON_BEHALF_OFNoGreenhouse user ID for write audit trail
GREENHOUSE_TOOL_PROFILENorecruiter (default), read-only, or fullrecruiter
GREENHOUSE_DIAGNOSTICS_FILENoDiagnostics file path (defaults beside Claude's logs)
GREENHOUSE_MAX_RESULT_BYTESNoTool-result size budget in bytes (default 60000)60000

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
add_note_to_candidateA

Add a text note to a candidate's activity feed. Write operation.

Users say "add a note to Sarah's profile" or "log that I spoke with John." To get candidate_id: search_candidates_by_name.

get_candidateA

Get a candidate's full profile by ID. Read-only.

Returns name, contact info, all applications (with job names and statuses), tags, custom fields, and attachments. This is the central lookup — most workflows route through here after resolving a name via search_candidates_by_name. For a screening package with resume and location, use screen_candidate.

list_candidatesA

List candidates with optional filters. Read-only.

For finding a specific person, use search_candidates_by_name (by name) or search_candidates_by_email (by email) — faster and simpler. Use this tool for bulk operations: date-range queries, fetching by specific IDs, or paginating through the full database.

advance_applicationA

Move a candidate forward one stage in their job pipeline. Write operation.

Users say "advance Sarah to the next stage" or "move John forward." To get the application_id: search_candidates_by_name → get_candidate → match the application to the job. Stage IDs are optional — omit to advance to the natural next stage. To skip stages, use move_application_same_job. For bulk advancing, use bulk_advance.

get_applicationA

Get a single application by ID. Read-only.

Users rarely know application IDs. To find one: search_candidates_by_name → get_candidate → the applications array has each application's ID and job name. For a complete screening package with resume and location, use screen_candidate.

list_applicationsA

List applications with optional filters. Read-only.

Users say "show me applications for [job name]" or "what came in this week." To filter by job: list_jobs → find by name → use its job_id. To filter by candidate: search_candidates_by_name → candidate_id. For pipeline views grouped by stage, use pipeline_summary. For stale candidates, use stale_applications or candidates_needing_action.

reject_applicationA

Reject a candidate from a job. Write operation.

Users say "reject Sarah from the Backend role." To get the application_id: search_candidates_by_name → get_candidate → match the application to the job. For rejection_reason_id: list_rejection_reasons → match by name. For email templates: list_email_templates. Can be reversed with unreject_application. For bulk rejections, use bulk_reject.

unreject_applicationA

Reverse a rejection, returning the candidate to active status. Write operation.

Users say "undo the rejection for Sarah" or "bring Sarah back." To get the application_id: search_candidates_by_name → get_candidate → find the rejected application in their applications array.

get_jobA

Get full details for a job by ID. Read-only.

Returns name, status, departments, offices, hiring team, and custom fields. Use list_jobs to find the job_id by name first. For the public listing, use list_job_posts_for_job. For pipeline stages, use list_job_stages_for_job.

list_jobsA

List all jobs with optional filters. Read-only.

This is the primary tool for resolving job titles to job IDs. When a user mentions a job by name ("Backend Engineer"), use this to find the matching job_id. Filter by status ('open'/'closed'/'draft'), department_id (list_departments), or office_id (list_offices). For pipeline views, use pipeline_summary with the job_id.

list_job_stages_for_jobA

List pipeline stages for a specific job in order. Read-only.

This is the primary tool for resolving stage names to stage IDs. When a user says "move to the onsite stage," use this to find the stage_id. To find the job_id first: list_jobs → match by name.

get_scorecardA

Get a single scorecard by ID. Read-only.

Returns the interviewer's ratings, attribute scores, and overall recommendation. To find scorecard IDs: list_scorecards_for_application.

list_scorecards_for_applicationA

List scorecards submitted for a specific application. Read-only.

To find application_id: search_candidates_by_name → get_candidate → match the application to the job. Returns each interviewer's ratings and overall recommendation.

list_rejection_reasonsA

List all rejection reasons. Read-only.

Resolves rejection reason names to IDs. When a user says "reject for 'not enough experience'," use this to find the ID, then pass it to reject_application or bulk_reject.

add_tag_to_candidateA

Apply a tag to a candidate. Write operation.

Users say "tag Sarah as 'referred'" or "mark John as strong hire." For candidate_id: search_candidates_by_name. For tag_id: list_tags → match by name. For bulk tagging, use bulk_tag instead.

get_activity_feedA

Get a candidate's activity timeline. Read-only.

Users say "show me Sarah's history" or "what's happened with this candidate?" To find candidate_id: search_candidates_by_name. Returns notes, emails, stage changes, and other timeline events in chronological order.

candidates_needing_actionA

Find candidates that need attention — stale apps, missing scorecards. Read-only.

Users say "what needs my attention?" or "who's been sitting too long?" Pass job_id for one job (list_jobs → match by name) or omit for all active applications. Returns stale applications sorted by urgency and interviews missing scorecards.

pipeline_summaryA

Complete pipeline view for a job — candidates grouped by stage. Read-only.

Users say "show me the pipeline for Backend Engineer" or "how many candidates are in each stage." To find the job_id: list_jobs → match by name. Returns stages with candidate counts, names, days-in-stage, and last activity. One call replaces 5-10 sequential API calls.

stale_applicationsA

Applications with no activity for N days, sorted by stalest. Read-only.

Users say "who's been sitting untouched?" Use the results with bulk_reject for pipeline cleanup. Pass job_id (list_jobs → match by name) to filter to one job.

pipeline_metricsA

Conversion rates and stage metrics for a job. Read-only.

Users say "what are our conversion rates for the Backend role?" or "where are we losing candidates?" To find job_id: list_jobs → match by name. Returns per-stage counts, conversion percentages, and time-in-stage metrics.

source_effectivenessA

Which candidate sources produce the best results. Read-only.

Users say "which sources are working?" or "where should we spend recruiting budget?" Pass job_id (list_jobs → match by name) for one role, or omit for org-wide analysis. Returns volume, active rate, and hire rate per source.

time_to_hireA

Time-to-hire metrics for hired candidates. Read-only.

Users say "how long does it take to hire?" or "what's our average days-to-offer?" Pass job_id (list_jobs → match by name) for one role, or omit for org-wide metrics. Returns average, median, min, max days.

bulk_advanceA

Advance multiple applications to the next stage. Write operation — rate-limited.

Users say "move everyone past phone screen forward." Get application_ids from pipeline_summary or list_applications. Optionally specify from_stage_id (list_job_stages_for_job → match by name) to only advance candidates in that specific stage. Processes sequentially with rate-limit delays.

bulk_rejectA

Reject multiple applications in one call. Write operation — rate-limited.

Users say "reject everyone who's been inactive for 30 days on the Backend role." First use stale_applications to identify the targets, then pass their application_ids here. For rejection_reason_id: list_rejection_reasons → match by name. Processes sequentially with rate-limit delays.

bulk_tagA

Tag multiple candidates in one call. Write operation — rate-limited.

Users say "tag all the candidates from the hiring event." Pass candidate_ids from search or pipeline tools and a tag_name (created automatically if new). Processes sequentially with rate-limit delays.

search_candidates_by_emailA

Look up a candidate by exact email address. Read-only.

Use when the user provides an email instead of a name. Returns the candidate record directly. For name-based lookup, use search_candidates_by_name.

search_candidates_by_nameA

Find candidates by name. Read-only — the starting point for most workflows.

Users always refer to candidates by name, not ID. Use this first whenever a user mentions a candidate, then get_candidate on the match to see their full profile and application IDs. Case-insensitive substring match — "Sarah" finds "Sarah Chen", "Sarah O'Brien", etc.

download_attachmentA

Download content from a Greenhouse attachment URL. Read-only.

Use when you have a specific attachment URL from a candidate or application record (e.g., from get_candidate's attachments array).

read_candidate_resumeA

Download and return a candidate's most recent resume text. Read-only.

Users say "pull up Sarah's resume" or "show me John's CV." To find candidate_id: search_candidates_by_name. Returns extracted text from the most recent resume attachment. For batch reading, use batch_read_resumes.

fetch_new_applicationsA

Applications since a date, grouped by job — the daily digest. Read-only.

Users say "what new applications came in since yesterday?" Pass since as an ISO date. Optionally filter to one job with job_id (list_jobs → match by name). Returns applications grouped by job with candidate names, sources, stages, and screening answers.

screen_candidateA

Full screening package for one candidate application. Read-only.

Users say "screen Sarah for the Backend role" or "give me the full picture." To get application_id: search_candidates_by_name → get_candidate → match the application to the job name. Returns profile, resume text, location, screening answers, job description, and application history in one call.

scan_pipeline_resumesA

Search resume text in pipelines for skills and qualifications. Read-only.

Users say "find Rust engineers in our pipelines" or "search for distributed systems experience." The primary sourcing tool — ~90% of candidate data lives in resumes. Pass job_ids (list_jobs → get IDs for similar roles). Supports boolean search: keywords (OR), required_keywords (AND), exclude_keywords (NOT with word-boundary matching).

search_pipeline_candidatesA

Search pipelines by structured fields — title, company, education, tags. Read-only.

Users say "find VP-level candidates in our pipelines" or "who do we have from Google?" Pass job_ids (list_jobs → get IDs for similar roles). Best when structured data is populated. If few results, switch to scan_pipeline_resumes for resume-text search. Combine with batch_read_resumes to verify skill matches.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/Comradery64/open-greenhouse-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server