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 | Log level: 'debug', 'info', 'warning' (default), 'error' | warning |
| GREENHOUSE_BOARD_TOKEN | No | Job board URL slug | |
| GREENHOUSE_ON_BEHALF_OF | No | Greenhouse user ID for write audit trail | |
| GREENHOUSE_TOOL_PROFILE | No | Tool profile: 'full' (default), 'recruiter', or 'read-only' | full |
Capabilities
Features and capabilities supported by this server
| 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_attachmentB | Attach a file (resume, cover letter, etc.) to a candidate via base64 content or URL. |
| add_educationB | Add an education record to a candidate with school, discipline, degree, dates. |
| add_email_note_to_candidateC | Log an email interaction on a candidate's activity feed with to, from, subject, and body. |
| add_employmentB | Add an employment history record to a candidate with optional company, title, and dates. |
| add_note_to_candidateB | Add a text note to a candidate's activity feed with optional visibility (private/public). |
| add_prospectC | Create a new prospect with name and optional pool, stage, and owner assignment. |
| anonymize_candidateC | Anonymize specific fields on a candidate for GDPR/privacy compliance. |
| create_candidateC | Create a new candidate with name and optional company, title, phone, email, tags. |
| delete_candidateC | Delete a candidate by ID. |
| get_candidateB | Get a single candidate by ID. |
| list_candidatesA | List candidates with optional filters. Set paginate="all" to auto-fetch every page. Filters: email (exact), candidate_ids (list), created/updated date ranges (ISO). Default returns one page of 500. Use paginate="all" to get the complete dataset automatically. For name search, use search_candidates_by_name instead. For reading a candidate's resume, use read_candidate_resume. |
| merge_candidatesB | Merge a duplicate candidate into a primary candidate, preserving the primary's record. |
| remove_educationC | Remove an education record from a candidate. |
| remove_employmentC | Remove an employment history record from a candidate. |
| update_candidateC | Update a candidate's name, company, title, phone, email, tags, or custom fields by ID. |
| add_attachment_to_applicationC | Attach a file to an application via base64 content or URL. |
| advance_applicationA | Advance an application to the NEXT stage in the pipeline (within the same job). Use this to move a candidate forward one step, e.g. from "Phone Screen" to "Onsite". Requires from_stage_id (the candidate's current stage). If to_stage_id is omitted, advances to the next sequential stage. For moving between arbitrary stages in the same job, use move_application_same_job instead. For transferring to a different job entirely, use move_application. |
| convert_prospectC | Convert a prospect application to a candidate application on a specific job. |
| create_applicationC | Create an application for a candidate on a job with optional source and referrer. |
| delete_applicationC | Delete an application by ID. |
| get_applicationB | Get a single application by ID. |
| hire_applicationC | Mark an application as hired with optional start date, opening, and close reason. |
| list_applicationsA | List applications with optional filters. Set paginate="all" to auto-fetch every page. Filters: job_id, candidate_id, status ("active"/"rejected"/"hired"), date ranges. Default returns one page of 500. For pipeline views with candidates grouped by stage, use pipeline_summary instead. For finding stale candidates, use stale_applications or candidates_needing_action. For conversion rates and hire metrics, use pipeline_metrics. |
| move_applicationA | Transfer an application to a DIFFERENT JOB entirely. Use this when a candidate applied to the wrong role or a better fit opens up. Moves the application to new_job_id, optionally into a specific stage. This is NOT for moving between stages in the same job — use move_application_same_job or advance_application for that. |
| move_application_same_jobA | Move an application to a SPECIFIC stage within the SAME job (skip stages). Use this to jump a candidate to any stage, e.g. skipping from "Application Review" directly to "Onsite." Requires both from_stage_id and to_stage_id. For sequential advancement to the next stage, use advance_application instead. |
| reject_applicationA | Reject a single application. Optionally send a rejection email to the candidate. Pass rejection_reason_id (from list_rejection_reasons), notes for internal context, and rejection_email dict to trigger an email notification. For bulk rejections, use bulk_reject instead. |
| unreject_applicationA | Unreject a previously rejected application, returning it to active status. |
| update_applicationC | Update an application's source, referrer, or custom fields. |
| update_rejection_reasonC | Update the rejection reason on an already-rejected application. |
| create_jobC | Create a new job from a template with optional name, department, and offices. |
| get_jobB | Get a single job by ID. |
| list_jobsB | List all jobs with optional filters for status, department, office, dates. |
| update_jobB | Update a job's name, status, department, offices, requisition ID, or notes. |
| get_job_postB | Get a single job post by ID. |
| get_job_post_custom_locationsB | Get custom location data for a specific job post. |
| get_job_post_for_jobC | Get a specific job post scoped to a particular job. |
| list_job_postsB | List all job posts, optionally filtered to only live (published) posts. |
| list_job_posts_for_jobB | List all job posts associated with a specific job. |
| update_job_postC | Update a job post's title, location, or content. |
| update_job_post_statusC | Update a job post's publish status (e.g. live or offline). |
| get_job_stageB | Get a single job stage by ID. |
| list_job_stagesC | List all job stages across all jobs. |
| list_job_stages_for_jobA | List all interview stages for a specific job. For a full pipeline view with candidates grouped by stage, use pipeline_summary instead. |
| create_job_openingB | Create a new opening on a job with optional opening ID, status, and custom fields. |
| delete_job_openingB | Delete a specific opening from a job. |
| get_job_openingC | Get a specific opening on a job. |
| list_job_openingsB | List all openings for a job, optionally filtered by status (open/closed). |
| update_job_openingB | Update a job opening's status, close reason, or custom fields. |
| get_current_offerB | Get the current (most recent) offer for an application. |
| get_offerB | Get a single offer by ID. |
| list_offersC | List all offers, with optional created date range filters. |
| list_offers_for_applicationB | List all offers made on a specific application. |
| update_current_offerC | Update the current offer on an application with a new start date or custom fields. |
| get_scorecardB | Get a single interview scorecard by ID. |
| list_scorecardsC | List all interview scorecards, with optional created date range filters. |
| list_scorecards_for_applicationB | List all scorecards submitted for a specific application. |
| create_interviewC | Schedule an interview for an application with interviewers and a start/end time. |
| delete_interviewB | Delete a scheduled interview by ID. |
| get_interviewB | Get a single scheduled interview by ID. |
| list_interviewsC | List all scheduled interviews, with optional created date range filters. |
| list_interviews_for_applicationB | List all scheduled interviews for a specific application. |
| update_interviewC | Update a scheduled interview's start time, end time, or interviewers. |
| add_email_to_userB | Add an additional email address to a Greenhouse user, optionally sending verification. |
| change_user_permission_levelC | Change a user's global permission level (e.g. basic, admin, site_admin). |
| create_userB | Create a new Greenhouse user with first/last name and email, optionally sending an invite. |
| disable_userB | Disable a Greenhouse user, preventing them from logging in. |
| enable_userB | Re-enable a previously disabled Greenhouse user. |
| get_userB | Get a single Greenhouse user by ID. |
| list_usersB | List all Greenhouse users, with optional filters for email and created date ranges. |
| update_userC | Update a user's first or last name. |
| add_future_job_permissionB | Grant a user a role on all future jobs, optionally scoped to an office or department. |
| add_job_permissionC | Grant a user a specific role on a job. |
| list_future_job_permissionsB | List a user's future job permissions (auto-applied to new jobs by office/department). |
| list_job_permissionsB | List all job-level permissions granted to a user. |
| remove_future_job_permissionC | Revoke a user's future job permission by permission ID. |
| remove_job_permissionB | Revoke a user's job permission by permission ID. |
| create_departmentC | Create a new department with a name and optional parent department. |
| get_departmentB | Get a single department by ID. |
| list_departmentsC | List all departments in the organization. |
| update_departmentC | Update a department's name or parent department. |
| create_officeB | Create a new office with a name and optional parent office and location. |
| get_officeB | Get a single office by ID. |
| list_officesC | List all offices in the organization. |
| update_officeB | Update an office's name or location. |
| create_custom_fieldB | Create a new custom field with name, field_type, and value_type. |
| create_custom_field_optionsC | Add new options to a dropdown/multi-select custom field. |
| delete_custom_fieldC | Delete a custom field by ID. |
| delete_custom_field_optionsC | Delete specific options from a dropdown/multi-select custom field by option IDs. |
| get_custom_fieldB | Get a single custom field by ID. |
| list_custom_field_optionsB | List all options for a dropdown/multi-select custom field. |
| list_custom_fieldsB | List all custom fields, optionally filtered by field_type (candidate, job, etc). |
| update_custom_fieldC | Update a custom field's name or privacy setting. |
| update_custom_field_optionsC | Update existing options on a dropdown/multi-select custom field. |
| list_sourcesC | List all candidate sources (e.g. job boards, referrals, agencies). |
| list_rejection_reasonsC | List all rejection reasons available for rejecting applications. |
| get_email_templateB | Get a single email template by ID. |
| list_email_templatesC | List all email templates available in the organization. |
| add_tag_to_candidateC | Apply a tag to a candidate. |
| create_tagB | Create a new candidate tag with the given name. |
| delete_tagB | Delete a candidate tag by ID. |
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
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/benmonopoli/open-greenhouse-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server