How Wix scaled AI-native work to 5,000 employees with Willow
Read More
Enterprise Connectors
100Hires logo. 100Hires MCP server connector.

100Hires MCP Server

Official 100Hires MCP: AI ATS & Recruitment Software for candidates, jobs, applications, interviews.

ToolsTools
131
Last updatedLast Updated
CategoryCategory
All
✓Enterprise-grade security
✓SSO & authentication ready
✓Full governance & audit logs

What is the 100Hires MCP Server?

The 100Hires MCP server gives AI agents structured, permission-aware access to 100Hires through the Model Context Protocol. With 131 pre-built actions, agents can read, create, and update 100Hires data on behalf of authorized users.

Willow ships the 100Hires MCP server as part of an enterprise control plane. Every call runs behind SSO (Okta, Azure AD), enforces RBAC and least-privilege at runtime, writes to a full audit trail, and integrates with Splunk and Loki for SIEM visibility. Connect from Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code, n8n, or any custom agent. Install once, distribute org-wide, and see exactly how 100Hires is being used by every AI agent in your stack.

Tools

hires_list_candidates

List candidates with optional filters. Supports filtering by job, stage, email, name, LinkedIn, and date ranges. Returns paginated results. Recommended size <= 10: candidate payloads include the full profile answers array and can be large; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints — reduce size, narrow filters, or fetch a single record via hires_get_candidate.

hires_create_candidate

Create a new candidate profile. Optionally link to a job/stage and attach the candidate's resume as extracted text. Used for imports, inbound forms, and enrichment workflows. When the user provides an attached resume (PDF/DOCX/etc.), parse the file content yourself from the chat context — LLMs natively extract text from uploaded files — and pass the extracted text via resume_text. Do NOT attempt to inline binary file data: host function-call serializers truncate arguments above ~20KB.

hires_get_candidate

Get full candidate data including application summaries by candidate ID or alias.

hires_update_candidate

Update candidate fields, profile answers, and optional resume text. Used for bi-directional sync from ATS, CRM, sourcing, or enrichment tools. When the user provides an attached resume, parse it yourself from chat context and pass via resume_text — do not inline binary data.

hires_delete_candidate

Permanently delete a candidate by ID or alias.

hires_list_candidate_tags

List all tags assigned to a candidate. Useful for segmentation and audience-based automations.

hires_add_candidate_tags

Add one or more tags to a candidate. Used for campaign tagging, qualification labels, and source attribution.

hires_remove_candidate_tag

Remove a specific tag from a candidate.

hires_batch_add_tags

Add tags to multiple candidates in one request (max 100). Returns per-item results with partial success support.

hires_batch_remove_tags

Remove tags from multiple candidates in one request (max 100). Returns per-item results with partial success support.

hires_list_candidate_files

List all files attached to a candidate (resumes and other documents). Each entry has uuid, absolute download url (use Bearer auth), relative_time, file metadata (orig_file_name, file_ext, file_type/MIME, readable_size), and type (resume/other). Default response is compact; avoid include=text_content on candidates with many files — it adds parsed resume text per file which can exceed the response budget.

hires_upload_candidate_file

Upload a file for a candidate using a base64 payload. Used for portfolio uploads and document attachment. WARNING: host function-call serializers (both OpenAI and Anthropic) truncate tool arguments above ~20KB, so binary files larger than that will arrive corrupted. For resumes specifically, prefer hires_create_candidate / hires_update_candidate with resume_text — the model parses the file from chat context and passes extracted text, avoiding the size limit entirely.

hires_get_candidate_resume

Get the primary resume for a candidate. Returns uuid, absolute download url (use Bearer auth), relative_time, file metadata, type. Use include='text_content' to also get the parsed plain-text content in a `text` field without downloading the file.

hires_list_candidate_activities

List timeline activities for a candidate (comments, stage moves, AI responses, etc.). Supports filtering by event type. Recommended size <= 10: copilot responses and call transcriptions can be large per event; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.

hires_disqualify_candidate

Disqualify a candidate from all active applications. Optionally provide rejection reason IDs. Returns affected application IDs.

hires_list_candidate_interviews

List all interviews for a candidate across all applications. Useful for timeline views and scheduling conflict detection.

hires_list_candidate_messages

List email and messaging history for a candidate. Use is_scheduled=1 to filter only pending scheduled messages. Recommended size <= 10: messages include full HTML body; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.

hires_send_candidate_message

Schedule an email message to a candidate. If scheduled_at is omitted, the message is scheduled for 15 minutes after creation.

hires_list_applications

List applications across all accessible jobs. Supports filtering by candidate, job, stage, status, AI score range, and date ranges. Use for pipeline analytics, sync jobs, and ATS dashboards. Avoid include=candidate or include=cv.text on large pages (each embeds heavy nested data); if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints. Each application embeds its current `stage` (IdName) directly in the response — this is sufficient for rendering kanban/pipeline views; you DO NOT need to call hires_get_job to fetch workflow_stages separately when rendering a pipeline.

hires_create_application

Create an application by linking an existing candidate to a job. Use for sourcing workflows and manual application ingestion. The candidate must already exist.

hires_get_application

Get full application details including stage, status, and rejection context. Recommended before mutating stage transitions.

hires_update_application

Update application fields such as stage, disqualification flag, and CV. For explicit stage transitions prefer hires_move_application or hires_advance_application.

hires_delete_application

Permanently delete an application. This removes it from all list and view queries.

hires_move_application

Moves an application to a specific pipeline stage for explicit stage transitions in workflow orchestration. Requires the target stage_id (available via the job's pipeline_stages).

hires_advance_application

Advance an application to the next pipeline stage according to workflow order. No stage_id needed -- the system determines the next stage automatically. **Always pass `include=candidate,job`** when surfacing results in the widget — without it, the confirmation card can only show candidate/job IDs and cannot link to their backoffice pages.

hires_hire_application

Mark an application as hired. This is the finalization step in a hiring workflow. The application status changes to 'hired' and hired_at is set.

hires_reject_application

Reject an application with an optional rejection reason. Use GET /taxonomy/rejection-reasons to list available reason IDs. Set suppress_notification to skip the rejection email.

hires_unreject_application

Undo a rejection and reopen a previously rejected application. The status returns to active and rejected_at is cleared.

hires_transfer_application

Transfer an application to another job. A new application is created on the target job. Optionally specify a stage on the target job's pipeline.

hires_get_ai_score

Get the structured AI score for an application, including per-criterion scores, justifications, and follow-up questions. Returns null score if the application has not been AI-scored.

hires_list_application_stage_history

Get the full chronological stage transition history for an application, including the initial assignment. Each entry has from_stage_id/name, to_stage_id/name, moved_at (Unix seconds), moved_by_type (system, user, automation), and moved_by_user_id. Use this for funnel analysis and time-in-stage reports instead of paginating through /candidates/{id}/activities when only stage data is needed.

hires_list_application_attachments

List all file attachments linked to an application (resumes, cover letters, documents). Returns file metadata and download URLs.

hires_upload_application_attachment

Upload a file attachment to an application. Provide the file as base64-encoded data. Commonly used for signed documents and interviewer artifacts.

hires_list_application_evaluations

List all filled evaluation forms for an application. Each evaluation includes the evaluator, summary score (strong-yes to strong-no), and summary text.

hires_create_interview

Schedule a new interview for an application. Provide start/end times as Unix timestamps and a list of interviewer user IDs. Location is resolved to an existing record or created automatically.

hires_batch_move_applications

Move multiple applications to a pipeline stage in one request. Returns per-item results with partial success support. Max 100 application IDs per request.

hires_batch_reject_applications

Reject multiple applications in one request with an optional rejection reason. Returns per-item results with partial success support. Max 100 application IDs per request.

hires_list_jobs

List jobs with optional filters by status, date range, department, or search query. Returns paginated results. Use for career-site sync, reporting, and external system indexing. Recommended size <= 10: full job payloads include description HTML and can be large; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints — reduce size, narrow filters, or fetch a single record via hires_get_job.

hires_create_job

Create a job with taxonomy, location, salary, and workflow configuration. Primary endpoint for programmatic job publishing. Required fields: status, title, description, location_city, location_country.

hires_get_job

Get full details of a job by ID or alias. Use `include` to load related workflow, hiring team, or pipeline stages data.

hires_update_job

Update mutable job attributes. Only send fields you want to change. Preserves domain-level validation rules.

hires_delete_job

Delete a job. Use to align archived/removed positions across integrated platforms.

hires_set_job_status

Change job status via dedicated endpoint. Recommended for publish/unpublish/archive transitions and status automation workflows.

hires_list_job_boards

Get current board publication state for a specific job. Returns which job boards the job is published to. Useful for distribution dashboards and posting audits.

hires_publish_to_job_board

Activate selected job boards for a job. Sets boards to activation queue state. Use for controlled multi-board publishing workflows.

hires_remove_from_job_board

Deactivate selected board publications for a job. Stops the job from being listed on specified boards.

hires_batch_job_boards

Get board publication states for multiple jobs in one request. Optimized for batch monitoring and management UIs.

hires_batch_publish_to_boards

Activate board publication for multiple jobs in one request. Use for bulk job distribution workflows.

hires_batch_remove_from_boards

Deactivate board publication for multiple jobs in one request. Use for bulk depublishing workflows.

hires_list_hiring_team

List users currently assigned to a job's hiring team. Useful for notification routing and collaboration tooling.

hires_add_hiring_team_member

Add a company member to the job's hiring team. Use in workflow setup and ownership automation.

hires_list_job_webhooks

List webhooks configured for job-level events. Use to audit subscriptions and deployment state.

hires_create_job_webhook

Register a webhook URL for job-related events. Core step for outbound integration setup. URL must be HTTPS.

hires_delete_job_webhook

Delete a job webhook subscription by ID. Use for cleanup, rotation, and endpoint migration.

hires_list_messages

List messages sent or scheduled from a specific mail account. Returns outbound messages only (sent and scheduled), not received. Useful for monitoring cold outreach campaigns — check pending queue, delivery history, and plan next sends. Recommended size <= 10: messages include full HTML body; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.

hires_get_message

Get a scheduled message by ID. Returns scheduler-backed message details including sender account, schedule timestamps, and cancelability.

hires_update_message

Fully update (replace) a scheduled message before send time. All required fields must be provided.

hires_patch_message

Partially update a scheduled message before send time. Only provided fields are changed.

hires_delete_message

Cancel a scheduled message before it is processed by the mailbox scheduler.

hires_batch_create_messages

Create up to 100 scheduled messages in one request. Each item specifies its own candidate_id and message payload. Items are processed independently -- one failure does not stop others. Per-candidate RBAC is enforced for each item.

hires_get_notification_message

Get a notification email message (e.g. rejection email) by ID. Returns subject, body, sender, recipient, and schedule metadata. Use candidate messages list to discover notification message IDs.

hires_update_notification_message

Update a scheduled notification email before it is sent. Change subject, body, and optionally reschedule the send time. Only scheduled (not yet sent) messages can be updated.

hires_delete_notification_message

Cancel a scheduled notification email before it is sent. Already sent messages cannot be canceled.

hires_cancel_all_notification_messages

Cancel all scheduled notification emails for a candidate. Already sent notifications are not affected. Returns success even if no scheduled notifications exist.

hires_list_interviews

List interviews with optional filters by job, application, candidate, interviewer, date, or timestamps for incremental sync. Returns paginated results. **Always pass `include=candidate`** when surfacing results in the agenda widget — without it, the widget can only show candidate IDs and cannot link cards to candidate profiles. Avoid include=job on large pages (embeds full job description per interview); if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.

hires_get_interview

Get full details of a specific interview by ID. Use `include` to embed related candidate, application, or job data.

hires_list_notes

List notes by candidate. Returns paginated discussion notes for a candidate. Use for shared recruiter context and timeline synchronization. Notes can contain long free-form text; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.

hires_create_note

Create a discussion note for a candidate. Supports visibility control (all or private) and @mentions with email notifications. **Always pass `include=candidate`** when surfacing results in the widget — without it, the confirmation card can only show the candidate ID and cannot link to their backoffice profile.

hires_get_note

Get a single note with author and visibility metadata. Use include=user to load author details.

hires_update_note

Update note body and/or visibility without creating a new timeline item. Use for corrections and moderation workflows.

hires_delete_note

Delete a note. Use for moderation policies and data cleanup operations.

hires_get_evaluation

Get a filled evaluation form with all answers. Returns evaluator info, summary score, summary text, and individual question answers. Use for detailed review of evaluator feedback on a candidate application.

hires_list_forms

List application forms (paginated). Returns forms with their questions for the target company. Recommended size <= 10: each form embeds its full question list; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints.

hires_create_form

Create a new application form, optionally attaching existing questions by ID.

hires_get_form

Get form details including all questions with their statuses.

hires_update_form

Update form name and question composition.

hires_delete_form

Delete an application form.

hires_update_form_question

Update the status (required/optional/hidden) of a question inside a form.

hires_list_email_templates

List email templates for the target company. Returns paginated results with template name, subject, and body. Recommended size <= 10: templates include the full HTML body; if the response exceeds the budget the tool returns isError:true with error_code=response_too_large and retry hints — reduce size or fetch a single template via hires_get_email_template.

hires_create_email_template

Create a new email template with name, subject, and body. Subject and body support placeholders like {{first_name}}, {{job_title}}. To embed placeholders: 1) GET /template-placeholders to list them, 2) POST /template-placeholders/prepare to get the HTML tag, 3) insert the tag into the body.

hires_get_email_template

Get full details of a specific email template by ID, including subject and body content.

hires_update_email_template

Update an existing email template. Only provided fields are overwritten; omitted fields keep their current values. To add placeholders, use the same workflow as creation.

hires_delete_email_template

Soft-delete an email template. Templates already used in automations will stop being available for new actions.

hires_list_nurture_campaigns

List nurture campaigns with pagination. Returns campaign summaries including steps.

hires_create_nurture_campaign

Create a nurture campaign with steps. Steps are executed sequentially; each step has a type (email, sms, voicemail, move_to_next_stage, assign_tag, assign_task) with type-specific fields. Optionally bind to a workflow stage.

hires_get_nurture_campaign

Get a single nurture campaign by ID with all steps and configuration details.

hires_update_nurture_campaign

Update an existing nurture campaign. Pass all steps -- mark removed steps with is_deleted=true. Existing steps must include their id.

hires_delete_nurture_campaign

Delete (soft-delete) a nurture campaign. Active campaign executions will be stopped.

hires_list_users

List users for the target company with role context. Returns paginated results useful for access reviews and hiring-team management.

hires_get_user

Get a single user by ID within current tenant scope. Use for identity resolution in automation flows. The `default_mail_account_id` field can be used as `from_account_id` when sending emails.

hires_list_user_mail_accounts

List mail accounts connected to a user. Use to resolve `from_account_id` before creating scheduled emails via POST /candidates/{id}/messages.

hires_list_companies

List partner-accessible companies with pagination. Use for tenant discovery and management panels.

hires_create_company

Create a client company and link ownership context. Typical entrypoint for multi-tenant onboarding.

hires_get_company

Get company profile and owner metadata. Use before updates or ownership-sensitive actions.

hires_update_company

Update company profile, owner contact data, and optional logo. Supports partner-operated account management.

hires_delete_company

Delete a company. Use for lifecycle control in partner tenancy management.

hires_list_company_mail_accounts

List all mail accounts for all users in the current company. Use to resolve `from_account_id` before creating scheduled emails.

hires_list_company_id_mail_accounts

List all mail accounts for all users in a specific company. The company must be accessible (own company or a client).

hires_restore_company

Restore a previously deleted company and re-enable it for active use. Use for recovery and rollback scenarios.

hires_list_webhooks

List webhook subscriptions configured at company scope.

hires_create_webhook

Create a company-scoped webhook subscription. Use for outbound company-level event integrations.

hires_delete_webhook

Delete a company-scoped webhook subscription by ID. Use for endpoint retirement and security rotation.

hires_list_sources

List candidate sources for the company. Use for attribution sync and reporting consistency.

hires_list_origins

List candidate origin taxonomy values. Use for attribution analytics and source normalization.

hires_list_rejection_reasons

List configured rejection reasons for the company. Use to validate rejection actions and analytics.

hires_list_statuses

List job status labels (draft, published, on_hold, closed, archived). Cache to validate job status updates.

hires_list_departments

List departments for the company. Use for job organization filters and reporting dimensions.

hires_list_categories

List global job categories. Use for job classification and consistent taxonomy mapping.

hires_list_education_levels

List education level taxonomy values. Useful for job requirements and structured matching.

hires_list_experience_levels

List experience level taxonomy values for role seniority modeling.

hires_list_employment_types

List supported employment types (full-time, part-time, contract, etc.). Use for validation and normalization.

hires_list_boards

List available publishing boards with metadata. Use for distribution setup and board selection.

hires_list_tags

List all tags for the company. Returns paginated results. Recommended to cache for fast tagging UX.

hires_list_workflows

List workflows with embedded stages for the company. Use to build stage-aware integrations and routing rules.

hires_list_workflow_stages

List pipeline stages filtered by workflow or job. Useful for transition UIs and workflow validation.

hires_get_workflow_stages

Get stages for a specific workflow by ID. Equivalent to hires_list_workflow_stages with workflow_id filter.

hires_list_questions

List paginated question catalog for the company.

hires_create_question

Create a reusable question with optional answer options for dropdown types. Used by forms and questionnaires.

hires_get_question

Get a question definition including type and options by ID.

hires_update_question

Update text, type, or options of an existing question definition.

hires_delete_question

Delete a reusable question from the catalog. Use cautiously when deprecating question banks.

hires_list_question_types

List available question types supported by the platform. Use to drive dynamic form builders.

hires_list_template_placeholders

List available placeholders for email templates with pagination. Use `type` to filter by category, `q` to search by label. Discover placeholders here, then use hires_prepare_template_placeholders to get an HTML tag for insertion.

hires_prepare_template_placeholders

Convert a placeholder reference into an HTML tag for insertion into an email template body.

hires_get_billing

Get billing/pricing capability flags for the current company. Use before invoking paid-only API behaviors.

hires_submit_feedback

Submit structured API feedback about missing features, issues, or workflow improvements. Rate limited to 5 requests per hour.

hires_download_attachment

Download an attachment (resume, candidate file, application file, mail attachment, call recording). Pass the absolute URL returned by another endpoint (e.g. `message.attachments[].url`, `cv.url`, `resume.url`) — it MUST belong to the configured 100Hires API host; other hosts are rejected to avoid leaking the Bearer token. Returns `{file_name, mime_type, size, data}` where `data` is base64-encoded bytes. Files larger than 25 MB are rejected up-front (Content-Length check / streaming abort) without being loaded into memory.

hires_upload_attachment

Upload a file and create an attachment. Supported categories: `voicemail` (wav/mp3, max 20 MB, no object_id — returned `uuid` is usable as `attachment_uuid` in nurture voicemail steps); `candidate` (candidate ID); `application` (application ID); `candidate_comment` (comment ID); `job_note` (job-note ID); `company_favicon`/`company_header`/`company_link_preview` (company ID). Object ownership is strictly verified against the authenticated API key's company. Returns `{uuid, url, file, relative_time}`.

hires_list_career_jobs

List publicly visible jobs for a company career site. Supports filtering by department, employment type, city, and country. Use to power a custom careers page.

hires_get_career_job

Get full details of a single public job by ID. Returns salary, education level, experience level, and other extended fields. Returns 404 for draft, archived, or internal jobs.

hires_submit_career_application

Submit a job application on behalf of a candidate. Creates a candidate record and triggers the career-site pipeline automation.

Customize tools

Customize Tools

Edit descriptions, modify arguments, select tools, or add new ones

ReviewEdit descriptions
ConfigureChange arguments
ApproveSelect tools
Create NewAdd tool

Set Up Your 100Hires MCP Server in Minutes

Add the following configuration to your MCP client. Authentication is handled via OAuth. Compatible with Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code, n8n, and any MCP-compatible agent.

Claude Desktop

claude_desktop_config.json
{
  "mcpServers": {
    "willow-100hires": {
      "type": "http",
      "url": "https://<org>.mcp-s.com/mcp/mcp/100hires"
    }
  }
}

Cursor

.cursor/mcp.json
{
  "mcpServers": {
    "willow-100hires": {
      "type": "http",
      "url": "https://<org>.mcp-s.com/mcp/mcp/100hires"
    }
  }
}

Claude Code

CLI
claude mcp add willow-100hires --transport http https://<org>.mcp-s.com/mcp/mcp/100hires

n8n

HTTP Request Node
{
  "url": "https://<org>.mcp-s.com/mcp/mcp/100hires",
  "method": "POST"
}

Or click "Install with Willow" above to set up automatically with SSO and RBAC preconfigured.

Enterprise Governance for 100Hires

Willow adds the layer 100Hires and every other SaaS doesn't ship out of the box: every call runs behind SSO (Okta, Azure AD), enforces RBAC and least-privilege at runtime, writes to full audit logs, and detects shadow AI usage across your stack. One MCP gateway. Any agent. Every tool.

100Hires MCP Server FAQ

What is the 100Hires MCP server?

The 100Hires MCP server is a Model Context Protocol implementation that lets AI agents like Claude, Cursor, and ChatGPT read and write 100Hires data through a standardized interface. Willow hosts and governs this server so enterprises can roll it out without a security review backlog.

How is Willow's 100Hires MCP server different from the official one?

The official 100Hires MCP server is scoped to a single user's account and does not include enterprise governance. Willow's version adds SSO, RBAC, audit logging, shadow AI detection, and centralized control over which actions agents can take across the entire org.

Which AI clients work with the 100Hires MCP server?

Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code with MCP support, n8n, and any custom agent built with OpenAI Agents SDK, LangChain, Vercel AI SDK, or Anthropic SDK.

Is the 100Hires MCP server secure? How does Willow handle authentication?

Every call runs behind your existing SSO (Okta, Azure AD). Per-user OAuth scopes the agent to exactly what that user can do in 100Hires, nothing more. No credentials reach the LLM. Every action writes to an audit trail.

Can I limit which 100Hires actions agents can take?

Yes. Willow lets you scope agents to specific actions, specific projects, or specific environments. Toggle actions on or off in the dashboard, or enforce policy via infrastructure-as-code through GitHub.

How do I detect shadow 100Hires MCP servers in my org?

Willow's browser extension and discovery service surface unmanaged MCP servers, skills, and AI agents across the org. If a developer installed an unapproved 100Hires MCP locally, you'll see it.

What does the 100Hires MCP server cost?

Pricing depends on org size and deployment model (SaaS, dedicated cloud, self-host). See withwillow.ai/pricing or contact sales for a quote.

How do I install the 100Hires MCP server with Willow?

Install via the Willow Connect Panel in one click, or paste the JSON snippet above into your Claude Desktop, Cursor, or Claude Code config. SSO and RBAC inherit from your existing Willow setup.

Compare Willow MCP Gateway

See how Willow stacks up against other MCP platforms on governance, security, and enterprise readiness.

Your agents are already in the wild.

Give them a Basecamp. Go from AI chaos to AI work, in minutes.