open-greenhouse-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GREENHOUSE_API_KEY | No | Harvest API key | |
| GREENHOUSE_LOG_FILE | No | Log file path (defaults to stderr) | |
| GREENHOUSE_LOG_LEVEL | No | debug, info, warning (default), error | warning |
| GREENHOUSE_READ_ONLY | No | Set true to enable read-only mode (shorthand for profile read-only) | |
| GREENHOUSE_BOARD_TOKEN | No | Job board URL slug | |
| GREENHOUSE_DIAGNOSTICS | No | Set off to disable the diagnostics file | |
| GREENHOUSE_ON_BEHALF_OF | No | Greenhouse user ID for write audit trail | |
| GREENHOUSE_TOOL_PROFILE | No | recruiter (default), read-only, or full | recruiter |
| GREENHOUSE_DIAGNOSTICS_FILE | No | Diagnostics file path (defaults beside Claude's logs) | |
| GREENHOUSE_MAX_RESULT_BYTES | No | Tool-result size budget in bytes (default 60000) | 60000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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