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 |
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_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
- 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/benmonopoli/open-greenhouse-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server