Developer Portal — MCP

100Hires ATS MCP Server

The 100Hires ATS MCP Server is the official remote Model Context Protocol server for 100Hires, an AI-native applicant tracking system (ATS). It connects 100Hires to Claude, ChatGPT, Cursor, and any MCP-compatible AI assistant, giving them secure access to 136 tools for candidates, jobs, applications, and interviews — driven entirely by natural-language prompts.

Endpoint https://mcp.100hires.com/mcp
  • MIT License
  • Glama.ai verified
  • Official MCP Registry

Recruiting MCP, ATS MCP, hiring AI integration — bring your applicant tracking system into Claude, ChatGPT and Cursor with secure OAuth 2.1. Building a direct integration instead? See the 100Hires REST API documentation. New to 100Hires? Start a 14-day free trial.

What is MCP?

Model Context Protocol is an open standard from Anthropic that lets AI assistants connect to external systems through a uniform interface — think of it as USB-C for AI tools.

Hosts

AI assistants and IDEs that talk to MCP servers — Claude (web, Desktop, Code), ChatGPT, Cursor, VS Code, Codex, Windsurf, Zed.

Clients

The transport layer inside the host that speaks MCP over Streamable HTTP or stdio.

Servers

100Hires MCP server — exposes 136 tools backed by the public REST API, secured by OAuth 2.1.

100Hires runs a remote MCP server, not a local one. There’s nothing to install, deploy or update on your machine — every client, including Claude Desktop and Cursor, points at https://mcp.100hires.com/mcp and authorizes via OAuth. New tools and bug fixes land server-side and reach all your assistants the next time they call tools/list.

What you can ask

Ten real prompts that work today, in plain English.

  • “Show me candidates who applied this week for the Senior PM role”
  • “Move all rejected candidates from this job to the talent pool”
  • “Schedule a 30-minute interview with Sarah next Tuesday for the Backend Engineer role”
  • “Draft a follow-up email to candidates who haven't replied in 5 days and send it”
  • “Open a new Senior Product Designer job in New York and publish it to LinkedIn”
  • “Find every LinkedIn candidate with Python on their resume and tag them 'pythonista'”
  • “What's on my interview calendar tomorrow?”
  • “How many candidates do we have at each stage in the Sales Rep pipeline?”
  • “Reject everyone still in 'Phone Screen' for the Marketing Manager job with reason 'No response'”
  • “Pull the resume and last 3 notes for the candidate I interviewed yesterday”

Quickstart

From zero to your first MCP prompt in under five minutes.

  1. Prerequisites

    A 100Hires account on any plan, including the 14-day free trial. The MCP endpoint is available to every workspace.

  2. Pick your AI client

    One-click install for Cursor and VS Code; copy a snippet for everything else. All clients connect to https://mcp.100hires.com/mcp over Streamable HTTP; stdio-only clients use the mcp-remote shim.

    Open 100Hires in ChatGPT

    Or in ChatGPT go to Settings → Apps and find 100Hires in the directory.

    Click Connect, sign in, and click Allow.

    In claude.ai, open the sidebar and click Customize.

    Claude sidebar with the Customize menu item
    Step 1 — open the sidebar → Customize.

    Go to Connectors, click +, and choose Add custom connector.

    Claude Customize → Connectors with the + menu showing Add custom connector
    Step 2 — Connectors → + → Add custom connector.

    In the Add custom connector dialog, fill in:

    • Name: 100Hires
    • Remote MCP server URL: https://mcp.100hires.com/mcp
    • Click Add.
    Claude Add custom connector dialog with Name and Remote MCP server URL fields
    Step 3 — fill in the form and click Add.

    Claude opens the 100Hires consent screen. Sign in, click Allow, and you’re connected.

    Install in Cursor

    Click Install in Cursor to add 100Hires MCP automatically. Or paste the snippet below into ~/.cursor/mcp.json.

    Install in VS Code

    Opens VS Code and registers the server. Or paste the snippet into .vscode/mcp.json in your workspace.

    Add the snippet to your Claude Desktop config and restart the app:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    Run this in your terminal:

    OpenAI Codex CLI — add the server, then run codex mcp login 100hires to authorize.

    From OpenAI Responses API

    Connect 100Hires MCP headless from your own scripts, backends, and AI agents — no desktop client required. Pass the server as a tool with type: "mcp" and the OpenAI platform calls the endpoint directly. The example exposes only the read-only hires_list_jobs tool and skips approval for that tool — add more tools to allowed_tools only after deciding which actions require approval.

    Requires an OAuth access token — your app obtains it via the OAuth 2.1 flow (see Authentication). OpenAI does not store the token: send it with every request and refresh it yourself when it expires (access tokens live 1 hour).

    from openai import OpenAI
    
    client = OpenAI()
    
    response = client.responses.create(
        model="gpt-5",
        tools=[{
            "type": "mcp",
            "server_label": "100hires",
            "server_url": "https://mcp.100hires.com/mcp",
            "authorization": "YOUR_OAUTH_ACCESS_TOKEN",
            "allowed_tools": ["hires_list_jobs"],
            "require_approval": "never"
        }],
        input="List all open jobs in 100Hires"
    )
    
    print(response.output_text)

    From Anthropic Messages API

    Connect 100Hires MCP headless from the Anthropic SDK — the MCP connector lets the Messages API call the server for you via mcp_servers, no local MCP client needed. The connector runs tools without approval prompts, so the example enables only the read-only hires_list_jobs tool — extend the allowlist in configs deliberately.

    Requires an OAuth access token — your app obtains it via the OAuth 2.1 flow (see Authentication). Anthropic does not store the token: send it with every request and refresh it yourself when it expires (access tokens live 1 hour).

    import anthropic
    
    client = anthropic.Anthropic()
    
    response = client.beta.messages.create(
        model="claude-opus-4-8",
        max_tokens=16000,
        messages=[{"role": "user", "content": "List all open jobs in 100Hires"}],
        mcp_servers=[{
            "type": "url",
            "url": "https://mcp.100hires.com/mcp",
            "name": "100hires",
            "authorization_token": "YOUR_OAUTH_ACCESS_TOKEN"
        }],
        tools=[{
            "type": "mcp_toolset",
            "mcp_server_name": "100hires",
            "default_config": {"enabled": False},
            "configs": {"hires_list_jobs": {"enabled": True}}
        }],
        betas=["mcp-client-2025-11-20"]
    )
    
    for block in response.content:
        if block.type == "text":
            print(block.text)

    For stdio-only clients (Zed, Windsurf, n8n, older builds) use the mcp-remote shim. It’s a third-party open source bridge: github.com/geelen/mcp-remote.

    Full list of MCP-compatible clients: modelcontextprotocol.io/clients.

  3. Authorize

    Your client opens the 100Hires consent screen. Sign in, review the requested scope, click Allow. Tokens are stored on the client; 100Hires never sees its credentials.

  4. Verify

    Ask your assistant: “List all open jobs in 100Hires.” If you get a list back — you’re wired up. If not, see FAQ.

  5. Next steps

Tools

Keep human confirmation on for destructive tools. Feedback: [email protected].

  • hires_add_candidate_tags

    Add tags to a candidate.

    Parameters (2)
    id required
    Candidate id or alias
    tags array required
    —
  • hires_add_hiring_team_member

    Add a company user to the job's hiring team.

    Parameters (2)
    id required
    Job id or alias
    user_id number required
    —
  • hires_advance_application

    Advance an application to the next stage in workflow order; no stage_id needed.

    Parameters (2)
    id number required
    —
    include string
    Embed: candidate, cv.text, job. Pass candidate,job so the widget can link to the candidate and job pages
  • hires_batch_add_tags

    Add tags to up to 100 candidates; returns per-item results.

    Parameters (2)
    ids array required
    Candidate ids
    tags array required
    —
  • hires_batch_create_messages

    Create up to 100 scheduled messages in one request; items are processed independently, one failure does not stop the others.

    Parameters (1)
    messages array required
    —
  • hires_batch_job_boards

    Get board publication states for several jobs at once.

    Parameters (1)
    jobs array required
    Job ids
  • hires_batch_move_applications

    Move up to 100 applications to a stage in one request; per-item results, partial success allowed.

    Parameters (2)
    ids array required
    Max 100
    stage_id number required
    —
  • hires_batch_publish_to_boards

    Queue several jobs for publication on the given boards.

    Parameters (2)
    jobs array required
    Job ids
    boards array
    e.g. indeed, linkedin
  • hires_batch_reject_applications

    Reject up to 100 applications in one request, optionally with a reason; per-item results, partial success allowed.

    Parameters (2)
    ids array required
    Max 100
    rejection_reason_id number
    From hires_list_rejection_reasons
  • hires_batch_remove_from_boards

    Deactivate publication of several jobs on the given boards.

    Parameters (2)
    jobs array required
    Job ids
    boards array
    e.g. indeed, linkedin
  • hires_batch_remove_tags

    Remove tags from up to 100 candidates; returns per-item results.

    Parameters (2)
    ids array required
    Candidate ids
    tags array required
    —
  • hires_cancel_all_notification_messages

    Cancel all scheduled notification emails of a candidate; sent ones are unaffected.

    Parameters (1)
    candidate_id required
    Candidate id or alias
  • hires_create_application

    Link an existing candidate to a job, creating an application.

    Parameters (5)
    candidate_id required
    Candidate id or alias
    job_id number required
    —
    stage_id number
    Defaults to the first stage
    cv object
    —
    include string
    Embed: candidate, cv.text, job
  • hires_create_candidate

    Create a candidate, optionally with an application (job_id, stage_id) and resume text. Parse an attached resume yourself and pass the text via resume_text; never inline binary data.

    Parameters (13)
    company_id number
    —
    first_name string
    —
    last_name string
    —
    email string
    Used for deduplication
    phone string
    —
    profile object
    Profile answers keyed by question text or question_id
    job_id number
    Creates an application for this job
    stage_id number
    Initial stage; requires job_id
    city string
    Also used to resolve timezone
    state string
    —
    country string
    Name or ISO code
    timezone string
    IANA, e.g. America/Los_Angeles; resolved from city and country if omitted
    resume_text string
    Plain text extracted from the resume; stored as a text/plain attachment. No binary or base64.
  • hires_create_company

    Create a client company; provisions its public career site (slug) and public branding (name, logo).

    Parameters (8)
    name string required
    —
    company_owner_email string required
    —
    company_owner_name string required
    —
    website string
    —
    url string
    Company profile URL
    company_owner_phone string
    —
    is_staffing_agency boolean
    —
    logo object
    —
  • hires_create_email_template

    Create an email template. Subject and body accept placeholders such as {{first_name}}; get the exact tags from hires_list_template_placeholders and hires_prepare_template_placeholders.

    Parameters (4)
    name string required
    —
    subject string required
    Placeholders allowed
    body string required
    HTML; placeholders allowed
    company_id number
    —
  • hires_create_form

    Create an application form, optionally attaching existing questions.

    Parameters (3)
    name string required
    —
    company_id number
    —
    questions array
    Question ids to attach
  • hires_create_interview

    Schedule an interview for an application. The location is matched to an existing record or created.

    Parameters (6)
    id number required
    —
    start_time number required
    Unix seconds
    end_time number required
    Unix seconds, after start_time
    interviewer_ids array required
    Interviewer user ids
    location string
    Free text
    include string
    Embed: candidate, application, job
  • hires_create_job

    Create a job. Required: status, title, description, location_country; location_city unless is_remote is true.

    Parameters (30)
    company_id number
    —
    form_id number
    Omitted = new form named after the job
    status string required
    From hires_list_statuses, e.g. Draft, Public
    title string required
    —
    internal_title string
    Hiring team only
    internal_job_id string
    External reference id
    description string required
    HTML allowed
    language
    Job page locale, e.g. de-DE; null = follow the career site language. Values: hires_list_languages
    resume_field_status string
    —
    location_city string
    Required unless is_remote; empty = nationwide remote posting on Indeed
    location_country string required
    —
    location_state string
    —
    location_street_address string
    —
    location_full_address string
    —
    location_postal_code string
    —
    salary_min number
    —
    salary_max number
    —
    salary_currency string
    ISO code, e.g. USD
    salary_period string
    —
    is_remote boolean
    Remote job; with empty city, state and postal code Indeed posts it nationwide
    employment_type_id number
    From hires_list_employment_types
    department_id number
    From hires_list_departments
    category_id number
    From hires_list_categories
    education_level_id number
    From hires_list_education_levels
    experience_level_id number
    From hires_list_experience_levels
    workflow_id number
    Omitted = new workflow named after the job
    parent_job_id number
    Parent job; makes this a satellite job
    knockout_questions array
    Yes/No screening questions added to the application form
    ai_scoring_criteria array
    AI scoring criteria for ranking applicants
    include string
    Embed: workflow, hiring_team, pipeline_stages
  • hires_create_job_webhook

    Register an HTTPS webhook for this job's events. Returns signing_secret once; use it to verify the x-hires-signature-v2 header.

    Parameters (2)
    id required
    Job id or alias
    url string required
    HTTPS URL on a public host (no localhost, private or link-local IPs)
  • hires_create_note

    Create a discussion note for a candidate, with optional visibility (all or private) and @mentions that email the mentioned users.

    Parameters (6)
    candidate_id required
    Candidate id or alias
    body string required
    HTML allowed
    user_id number
    Author; defaults to the authenticated user
    visibility string
    all (default) or private
    mention_user_ids array
    Mentioned users get an email
    include string
    Embed: user (author), candidate. Pass candidate so the widget can link to the candidate profile
  • hires_create_nurture_campaign

    Create a nurture campaign with ordered steps (email, sms, voicemail, move_to_next_stage, assign_tag, assign_task), optionally triggered by a workflow stage.

    Parameters (11)
    company_id number
    —
    title string required
    —
    workflow_id number
    Workflow the campaign is bound to
    stage_id number
    Stage that triggers the campaign
    delay_time number
    Delay before the first step, seconds (max 86400); wins over relative_days + relative_time if both are sent
    relative_days number
    Days after the trigger for the first step; use with relative_time
    relative_time number
    Time of day for the first step, seconds from midnight
    timezone string
    IANA timezone, e.g. America/New_York
    send_to_all boolean
    Send to all candidates in the stage, not only new ones (default false)
    response_move_to_stage_id number
    Stage to move a candidate to when they reply
    steps array required
    Executed in order. Each field names the step types that use it and whether it is required there.
  • hires_create_question

    Create a reusable question; options apply to select/multiselect types.

    Parameters (4)
    text string required
    —
    type string required
    From hires_list_question_types
    company_id number
    —
    options array
    Answer options for select/multiselect types
  • hires_create_webhook

    Create a company-scoped webhook. signing_secret is returned once; use it to verify the x-hires-signature-v2 header on deliveries.

    Parameters (2)
    id number required
    Company id
    url string required
    HTTPS URL on a public host (no localhost, private or link-local IPs)
  • hires_delete_application

    Permanently delete an application.

    Parameters (1)
    id number required
    —
  • hires_delete_candidate

    Permanently delete a candidate.

    Parameters (1)
    id required
    Candidate id or alias
  • hires_delete_company

    Soft-delete a company; its public career site goes offline.

    Parameters (1)
    id number required
    —
  • hires_delete_email_template

    Soft-delete an email template; automations that used it cannot pick it for new actions.

    Parameters (1)
    id number required
    —
  • hires_delete_form

    Delete an application form.

    Parameters (1)
    id number required
    —
  • hires_delete_job

    Delete a job.

    Parameters (1)
    id required
    Job id or alias
  • hires_delete_job_webhook

    Delete a job webhook.

    Parameters (2)
    id required
    Job id or alias
    webhook_id number required
    —
  • hires_delete_message

    Cancel a scheduled message before it is sent.

    Parameters (1)
    id integer required
    —
  • hires_delete_note

    Delete a note.

    Parameters (1)
    id number required
    —
  • hires_delete_notification_message

    Cancel a scheduled notification email; sent messages cannot be canceled.

    Parameters (1)
    id integer required
    —
  • hires_delete_nurture_campaign

    Soft-delete a nurture campaign; running executions stop.

    Parameters (1)
    id number required
    —
  • hires_delete_question

    Delete a reusable question from the catalog.

    Parameters (1)
    id number required
    —
  • hires_delete_webhook

    Delete a company-scoped webhook.

    Parameters (2)
    id number required
    Company id
    webhook_id number required
    —
  • hires_disqualify_candidate

    Reject all active applications of a candidate; returns the affected application ids.

    Parameters (2)
    id required
    Candidate id or alias
    reasons array
    Rejection reason ids from hires_list_rejection_reasons
  • hires_download_attachment

    Download an attachment (resume, candidate or application file, mail attachment, call recording) by the url another tool returned. Returns file_name, mime_type, size and base64 data; files over 25 MB are rejected.

    Parameters (1)
    url string required
    Absolute url from another tool's response; must be on the 100Hires API host
  • hires_get_ai_score

    Get the AI score of an application with per-criterion scores, justifications and follow-up questions; null score until scored.

    Parameters (1)
    id number required
    —
  • hires_get_application

    Get an application with its stage, status and rejection context.

    Parameters (2)
    id number required
    —
    include string
    Embed: candidate, cv.text, job
  • hires_get_billing

    Get billing and feature flags of the current company.

  • hires_get_candidate

    Get a candidate with application summaries.

    Parameters (1)
    id required
    Candidate id or alias
  • hires_get_candidate_resume

    Get a candidate's primary resume: uuid, download url, file metadata, type. include=text_content adds the parsed plain text.

    Parameters (2)
    id required
    Candidate id or alias
    include string
    text_content: add the parsed plain text
  • hires_get_career_job

    Get a public job with salary, education and experience levels; 404 for draft, archived or internal jobs.

    Parameters (2)
    company_slug string required
    —
    id number required
    —
  • hires_get_career_site_settings

    Get career site settings: language is the locale the public site renders in (null = en-US); a job may override it with its own language field.

    Parameters (1)
    company_id number
    Omit for the API key's own company
  • hires_get_company

    Get a company profile with owner details.

    Parameters (1)
    id number required
    —
  • hires_get_email_template

    Get an email template with its subject and body.

    Parameters (1)
    id number required
    —
  • hires_get_evaluation

    Get a filled evaluation form: evaluator, summary score and text, answers.

    Parameters (1)
    id number required
    —
  • hires_get_form

    Get a form with its questions and their statuses.

    Parameters (1)
    id number required
    —
  • hires_get_interview

    Get an interview by id.

    Parameters (2)
    id number required
    —
    include string
    Embed: candidate, application, job
  • hires_get_job

    Get a job by id or alias.

    Parameters (2)
    id required
    Job id or alias
    include string
    Embed: workflow, hiring_team, pipeline_stages
  • hires_get_message

    Get a scheduled message with sender account, schedule timestamps and cancelability.

    Parameters (1)
    id integer required
    —
  • hires_get_note

    Get a note with its author and visibility.

    Parameters (2)
    id number required
    —
    include string
    Embed: user (author), candidate
  • hires_get_notification_message

    Get a notification email (e.g. a rejection email): subject, body, sender, recipient, schedule. Ids come from hires_list_candidate_messages.

    Parameters (1)
    id integer required
    —
  • hires_get_nurture_campaign

    Get a nurture campaign with all steps and schedule settings.

    Parameters (1)
    id number required
    —
  • hires_get_question

    Get a question with its type and options.

    Parameters (1)
    id number required
    —
  • hires_get_user

    Get a user by id. Its default_mail_account_id can serve as from_account_id when sending emails.

    Parameters (1)
    id number required
    —
  • hires_get_workflow_stages

    Get the stages of one workflow.

    Parameters (2)
    id number required
    Workflow id
    company_id number
    —
  • hires_hire_application

    Mark an application as hired: status becomes hired and hired_at is set.

    Parameters (2)
    id number required
    —
    include string
    Embed: candidate, cv.text, job
  • hires_list_application_attachments

    List an application's attachments with file metadata and download URLs.

    Parameters (1)
    id number required
    —
  • hires_list_application_evaluations

    List filled evaluation forms of an application with evaluator, summary score (strong-yes to strong-no) and summary text.

    Parameters (2)
    id number required
    —
    view string
    summary replaces summary_text with a 200-char summary_text_preview
  • hires_list_application_stage_history

    Chronological stage transitions of an application, including the initial assignment: from/to stage, moved_at, moved_by_type (system, user, automation), moved_by_user_id and source. Prefer it over candidate activities for stage reports.

    Parameters (1)
    id number required
    —
  • hires_list_applications

    List applications across accessible jobs with filters by candidate, job, stage, status, AI score and dates. Each item embeds its current stage, so a pipeline view needs no extra job call.

    Parameters (13)
    company_id number
    —
    candidate_id number
    —
    job_id number
    —
    stage_id number
    Best combined with job_id
    status string
    —
    created_after
    Unix seconds or ISO-8601
    updated_after
    Unix seconds or ISO-8601; for incremental sync
    ai_score_min number
    —
    ai_score_max number
    —
    sort string
    Default -created_at
    include string
    Embed: candidate, cv.text. Pass candidate for pipeline rendering (names instead of ids)
    page number
    —
    size number
    —
  • hires_list_boards

    List job boards available for publishing.

  • hires_list_candidate_activities

    List a candidate's timeline events. Prefer size <= 10. event_type values: comment, copilot_response, stage_moved, automation_action_triggered, assign_job, enrichment, call, validate_emails, profile_mutation, qualification, assign_tags, assign_sources, candidate_rate.

    Parameters (7)
    id required
    Candidate id or alias
    page number
    —
    size number
    Default 20, max 100
    event_type string
    Comma-separated; values listed in the tool description
    since
    Inclusive; Unix seconds or ISO-8601
    until
    Inclusive; Unix seconds or ISO-8601
    view string
    summary replaces copilot text, call transcription and comment body with 200-char *_preview fields
  • hires_list_candidate_files

    List a candidate's files (resume and other documents): uuid, download url, file metadata, type.

    Parameters (1)
    id required
    Candidate id or alias
  • hires_list_candidate_interviews

    List a candidate's interviews across all applications.

    Parameters (3)
    id required
    Candidate id or alias
    page number
    —
    size number
    —
  • hires_list_candidate_messages

    List a candidate's email history; is_scheduled=1 returns only pending scheduled messages. Prefer size <= 10.

    Parameters (5)
    id required
    Candidate id or alias
    page number
    —
    size number
    —
    is_scheduled number
    —
    view string
    summary omits the HTML body and attachment metadata
  • hires_list_candidate_tags

    List a candidate's tags.

    Parameters (1)
    id required
    Candidate id or alias
  • hires_list_candidates

    List candidates filtered by job, stage, email, name, LinkedIn or dates. Prefer size <= 10.

    Parameters (13)
    company_id number
    —
    job_id number
    —
    stage_id number
    Pipeline stage id; combine with job_id
    email string
    Exact match
    q string
    Partial match on name or email
    full_name string
    —
    linkedin string
    LinkedIn profile URL or alias
    created_after
    Unix seconds or ISO-8601
    updated_after
    Unix seconds or ISO-8601; for incremental sync
    include string
    Embed: applications (job titles and stages)
    page number
    —
    size number
    —
    view string
    summary omits the profile answers array
  • hires_list_career_jobs

    List public jobs of a company career site, filterable by department, employment type, city and country.

    Parameters (7)
    company_slug string required
    —
    department_id number
    —
    employment_type_id number
    —
    city string
    Exact match
    country string
    Exact match
    page number
    —
    size number
    —
  • hires_list_categories

    List global job categories.

  • hires_list_companies

    List companies accessible to the partner API key.

    Parameters (2)
    page number
    —
    size number
    —
  • hires_list_company_id_mail_accounts

    List mail accounts of all users in a given company (own or client).

    Parameters (3)
    id number required
    —
    page number
    —
    size number
    —
  • hires_list_company_mail_accounts

    List mail accounts of all users in the current company; use to resolve from_account_id for messages.

    Parameters (2)
    page number
    —
    size number
    —
  • hires_list_departments

    List departments of the company.

    Parameters (1)
    company_id number
    —
  • hires_list_education_levels

    List education level values.

  • hires_list_email_templates

    List email templates of a company.

    Parameters (4)
    company_id number
    —
    page number
    —
    size number
    —
    view string
    summary omits the HTML body
  • hires_list_employment_types

    List employment types (full-time, part-time, contract, etc.).

  • hires_list_experience_levels

    List experience level values.

  • hires_list_forms

    List application forms of a company.

    Parameters (4)
    company_id number
    —
    page number
    —
    size number
    —
    view string
    summary omits the questions array
  • hires_list_hiring_team

    List users on the job's hiring team.

    Parameters (1)
    id required
    Job id or alias
  • hires_list_interviews

    List interviews filtered by job, application, candidate, interviewer, date or timestamps. Pass include=candidate so the agenda widget can link cards to candidate profiles.

    Parameters (11)
    company_id number
    —
    job_id number
    —
    application_id number
    —
    candidate_id number
    —
    interviewer_user_id number
    —
    date string
    YYYY-MM-DD, UTC
    created_after
    Unix seconds or ISO-8601
    updated_after
    Unix seconds or ISO-8601; for incremental sync
    include string
    Embed: candidate, application, job
    page number
    —
    size number
    —
  • hires_list_job_boards

    List job boards the job is published to, with their state.

    Parameters (1)
    id required
    Job id or alias
  • hires_list_job_webhooks

    List webhooks subscribed to this job's events.

    Parameters (1)
    id required
    Job id or alias
  • hires_list_jobs

    List jobs filtered by status, creation/update time, department or search query.

    Parameters (11)
    company_id number
    —
    status string
    From hires_list_statuses, e.g. Public, Draft, Archived
    created_at_start
    Unix seconds or ISO-8601
    created_at_end
    Unix seconds or ISO-8601
    updated_after
    Unix seconds or ISO-8601; for incremental sync
    department_id number
    From hires_list_departments
    q string
    Search title or internal title
    include string
    Embed: workflow, hiring_team, pipeline_stages
    page number
    —
    size number
    —
    view string
    —
  • hires_list_languages

    List career site locales (e.g. de-DE) accepted by language parameters; is_default marks the one used when none is picked.

  • hires_list_messages

    List outbound messages (sent and scheduled) of one mail account; received mail is not included.

    Parameters (7)
    from_account_id integer required
    Mail account id from hires_list_company_mail_accounts or hires_list_user_mail_accounts
    status string
    Default: all
    date_from integer
    Unix seconds; filters on scheduled/sent time
    date_to integer
    Unix seconds
    page integer
    —
    size integer
    Default 20
    view string
    —
  • hires_list_notes

    List discussion notes of a candidate.

    Parameters (5)
    candidate_id required
    Candidate id or alias
    include string
    Embed: user (author), candidate
    page number
    —
    size number
    —
    view string
    summary replaces the body with a 200-char body_preview
  • hires_list_nurture_campaigns

    List nurture campaigns with their steps.

    Parameters (3)
    company_id number
    —
    page number
    —
    size number
    —
  • hires_list_origins

    List candidate origin values.

  • hires_list_question_types

    List supported question types.

  • hires_list_questions

    List the reusable question catalog of the company.

    Parameters (3)
    company_id number
    —
    page number
    —
    size number
    —
  • hires_list_rejection_reasons

    List rejection reasons configured for the company.

    Parameters (1)
    company_id number
    —
  • hires_list_sources

    List candidate sources of the company.

    Parameters (1)
    company_id number
    —
  • hires_list_statuses

    List job status labels (draft, published, on_hold, closed, archived).

  • hires_list_tags

    List all tags of the company.

    Parameters (1)
    company_id number
    —
  • hires_list_template_placeholders

    List email template placeholders; pass the chosen one to hires_prepare_template_placeholders to get its HTML tag.

    Parameters (6)
    company_id number
    —
    type string
    —
    is_notification number
    1 includes notification-only system placeholders (default 0)
    q string
    Label substring, case-insensitive
    page number
    —
    size number
    —
  • hires_list_user_mail_accounts

    List a user's connected mail accounts; use one as from_account_id when sending messages.

    Parameters (3)
    id number required
    User id
    page number
    —
    size number
    —
  • hires_list_users

    List company users with their roles.

    Parameters (3)
    company_id number
    —
    page number
    —
    size number
    —
  • hires_list_webhooks

    List company-scoped webhook subscriptions.

    Parameters (1)
    id number required
    Company id
  • hires_list_workflow_stages

    List pipeline stages, filtered by workflow or job.

    Parameters (3)
    company_id number
    —
    workflow_id number
    Workflow id from hires_list_workflows
    job_id number
    Stages of the job's assigned workflow
  • hires_list_workflows

    List workflows of the company with their stages.

    Parameters (1)
    company_id number
    —
  • hires_move_application

    Move an application to a specific pipeline stage; stage ids come from the job's pipeline_stages.

    Parameters (3)
    id number required
    —
    stage_id number required
    —
    include string
    Embed: candidate, cv.text, job
  • hires_patch_message

    Partially update a scheduled message before it is sent.

    Parameters (10)
    id integer required
    —
    to array
    Recipient emails
    subject string
    —
    body string
    HTML
    from_account_id
    Default: API key owner's default mail account
    cc array
    —
    bcc array
    —
    scheduled_at
    Unix seconds
    reply_to_email_id
    Mailbox message id to reply to
    send_in_new_thread boolean
    Send as a new thread
  • hires_prepare_template_placeholders

    Convert a placeholder reference into the HTML tag to insert into an email template body.

    Parameters (6)
    type string required
    system, candidate_column, job_variable, questionnaire_link or scheduling_link
    identifier string
    —
    qas_profile_question_id number
    Profile question id
    form_question_id number
    —
    system_column_title string
    —
    job_variable_id number
    —
  • hires_publish_to_job_board

    Queue the job for publication on the given boards.

    Parameters (2)
    id required
    Job id or alias
    boards array
    e.g. indeed, linkedin
  • hires_reject_application

    Reject an application, optionally with a reason and without the rejection email.

    Parameters (4)
    id number required
    —
    rejection_reason_id number
    From hires_list_rejection_reasons
    suppress_notification boolean
    Skip the rejection email to the candidate
    include string
    Embed: candidate, cv.text, job
  • hires_remove_candidate_tag

    Remove one tag from a candidate.

    Parameters (2)
    id required
    Candidate id or alias
    tag string required
    —
  • hires_remove_from_job_board

    Deactivate the job's publication on the given boards.

    Parameters (2)
    id required
    Job id or alias
    boards array
    e.g. indeed, linkedin
  • hires_restore_company

    Restore a soft-deleted company; its public career site comes back online.

    Parameters (1)
    id number required
    —
  • hires_rotate_job_webhook_secret

    Rotate the signing secret; the new one is returned once, the old stays valid for a grace window.

    Parameters (2)
    id required
    Job id or alias
    webhook_id number required
    —
  • hires_rotate_webhook_secret

    Rotate a company webhook signing secret with zero downtime: the new signing_secret is returned once and the old one stays valid for a grace window.

    Parameters (2)
    id number required
    Company id
    webhook_id number required
    —
  • hires_send_candidate_message

    Schedule an email to a candidate; without scheduled_at it is sent 15 minutes after creation.

    Parameters (11)
    id required
    Candidate id or alias
    to array required
    Recipient emails
    subject string required
    —
    body string required
    HTML
    from_account_id
    Mail account id; default: the API key owner's default account
    cc array
    —
    bcc array
    —
    scheduled_at
    Unix seconds; default: now + 15 min
    application_id
    —
    reply_to_email_id
    Mailbox message id to reply to
    send_in_new_thread boolean
    Start a new thread instead of replying
  • hires_set_job_status

    Change job status (publish, unpublish, archive).

    Parameters (3)
    id required
    Job id or alias
    status string required
    From hires_list_statuses, e.g. Draft, Public, Archived
    include string
    Embed: workflow, hiring_team, pipeline_stages
  • hires_submit_career_application

    Submit a career site application: creates the candidate and runs the pipeline automation.

    Parameters (10)
    company_slug string required
    —
    job_id number required
    —
    first_name string required
    —
    last_name string required
    —
    email string required
    —
    phone
    —
    resume
    —
    linkedin_url
    —
    source
    Source identifier
    answers
    Form answer objects
  • hires_submit_feedback

    Submit feedback about the API: missing features, issues, improvements. Rate limit: 5 per hour.

    Parameters (5)
    description string required
    Max 2000 chars
    endpoint string
    e.g. /v2/candidates
    issue_type string
    —
    suggested_improvement string
    Max 2000 chars
    context object
    Any JSON, max 4 KB
  • hires_transfer_application

    Transfer an application to another job by creating a new application there, optionally at a given stage.

    Parameters (4)
    id number required
    —
    job_id number required
    Target job
    stage_id number
    Stage on the target job; defaults to its first stage
    include string
    Embed: candidate, cv.text, job
  • hires_unreject_application

    Reopen a rejected application: status returns to active and rejected_at is cleared.

    Parameters (2)
    id number required
    —
    include string
    Embed: candidate, cv.text, job
  • hires_update_application

    Update application fields. stage_id performs a full stage transition with the target stage's automation, like hires_move_application.

    Parameters (5)
    id number required
    —
    stage_id number
    Target stage; runs its workflow automation
    is_disqualified boolean
    —
    cv object
    Replace or attach a CV
    include string
    Embed: candidate, cv.text, job
  • hires_update_candidate

    Update candidate fields, profile answers or resume text. For an attached resume pass the parsed text via resume_text; never inline binary data.

    Parameters (13)
    id required
    Candidate id or alias
    first_name string
    —
    last_name string
    —
    email string
    —
    phone string
    —
    profile object
    Profile answers keyed by question text or question_id
    job_id number
    Creates a new application for this job
    stage_id number
    Stage for that application; requires job_id
    city string
    Also used to resolve timezone
    state string
    —
    country string
    Name or ISO code
    timezone string
    IANA, e.g. America/Los_Angeles; resolved from city and country if omitted
    resume_text string
    Plain text extracted from the resume; stored as a text/plain attachment. No binary or base64.
  • hires_update_career_site_settings

    Set the public career site language; job and company pages follow it unless a job overrides it.

    Parameters (2)
    company_id number
    Omit for the API key's own company
    language
    Locale, e.g. de-DE; values from hires_list_languages. Omit to keep, null to reset to en-US
  • hires_update_company

    Update a company profile, owner contacts or logo; name, slug and logo changes alter the public career site.

    Parameters (9)
    id number required
    —
    name string
    —
    website string
    —
    url string
    Company profile URL
    company_owner_email string
    —
    company_owner_name string
    —
    company_owner_phone string
    —
    is_staffing_agency boolean
    —
    logo object
    —
  • hires_update_email_template

    Update an email template; omitted fields keep their values.

    Parameters (4)
    id number required
    —
    name string
    —
    subject string
    Placeholders allowed
    body string
    HTML; placeholders allowed
  • hires_update_form

    Update a form's name and question composition.

    Parameters (3)
    id number required
    —
    name string required
    —
    questions array
    Question ids to attach
  • hires_update_form_question

    Set a question's status (required, optional, hidden) on a form.

    Parameters (3)
    form_id number required
    —
    question_id number required
    —
    status string required
    —
  • hires_update_job

    Update a job. Send only the fields to change.

    Parameters (30)
    id required
    Job id or alias
    form_id number
    Application form to assign
    status string
    From hires_list_statuses, e.g. Draft, Public
    title string
    —
    internal_title string
    Hiring team only
    internal_job_id string
    External reference id
    description string
    HTML allowed
    language
    Job page locale, e.g. de-DE; null = follow the career site language, omit = keep current. Values: hires_list_languages
    resume_field_status string
    —
    location_city string
    Empty string clears it; remote without city = nationwide posting on Indeed
    location_country string
    —
    location_state string
    —
    location_street_address string
    —
    location_full_address string
    —
    location_postal_code string
    —
    salary_min number
    —
    salary_max number
    —
    salary_currency string
    ISO code, e.g. USD
    salary_period string
    —
    is_remote boolean
    Remote job; with empty city, state and postal code Indeed posts it nationwide
    employment_type_id number
    From hires_list_employment_types
    department_id number
    From hires_list_departments
    category_id number
    From hires_list_categories
    education_level_id number
    From hires_list_education_levels
    experience_level_id number
    From hires_list_experience_levels
    workflow_id number
    Workflow to assign
    parent_job_id number
    Parent job; makes this a satellite job
    knockout_questions array
    Yes/No screening questions added to the application form
    ai_scoring_criteria array
    Diff-replace by id: with id update, without id create, absent ones are removed; [] detaches all; omit to keep
    include string
    Embed: workflow, hiring_team, pipeline_stages
  • hires_update_message

    Replace a scheduled message before it is sent; all required fields must be provided.

    Parameters (10)
    id integer required
    —
    to array required
    Recipient emails
    subject string required
    —
    body string required
    HTML
    from_account_id
    Default: API key owner's default mail account
    cc array
    —
    bcc array
    —
    scheduled_at
    Unix seconds
    reply_to_email_id
    Mailbox message id to reply to
    send_in_new_thread boolean
    Send as a new thread
  • hires_update_note

    Update a note's body or visibility in place, without a new timeline item.

    Parameters (4)
    id number required
    —
    body string
    HTML allowed
    visibility string
    all (default) or private
    include string
    Embed: user (author), candidate
  • hires_update_notification_message

    Update the subject, body or send time of a scheduled notification email; sent messages cannot be changed.

    Parameters (4)
    id integer required
    —
    subject string required
    —
    body string required
    HTML
    scheduled_at
    Unix seconds; omit to keep the current schedule
  • hires_update_nurture_campaign

    Update a nurture campaign. Send the full steps list: existing steps with their id, removed steps with is_deleted=true.

    Parameters (11)
    id number required
    —
    title string required
    —
    workflow_id number
    Workflow the campaign is bound to
    stage_id number
    Stage that triggers the campaign
    delay_time number
    Delay before the first step, seconds (max 86400); wins over relative_days + relative_time if both are sent
    relative_days number
    Days after the trigger for the first step; use with relative_time
    relative_time number
    Time of day for the first step, seconds from midnight
    timezone string
    IANA timezone, e.g. America/New_York
    send_to_all boolean
    Send to all candidates in the stage, not only new ones (default false)
    response_move_to_stage_id number
    Stage to move a candidate to when they reply
    steps array required
    Executed in order. Each field names the step types that use it and whether it is required there.
  • hires_update_question

    Update the text, type or options of a question.

    Parameters (4)
    id number required
    —
    text string required
    —
    type string required
    From hires_list_question_types
    options array
    Answer options for select/multiselect types
  • hires_upload_application_attachment

    Upload a base64-encoded file as an application attachment.

    Parameters (2)
    id number required
    —
    file object required
    —
  • hires_upload_attachment

    Upload a base64 file as an attachment. voicemail: wav/mp3, max 20 MB, no object_id, the returned uuid serves as attachment_uuid in nurture voicemail steps. Returns uuid, url, file, relative_time.

    Parameters (4)
    category string required
    Determines allowed extensions and the object_id owner type
    company_id
    Company that owns object_id; default: the authenticated company
    object_id
    Owner id per category: candidate, application, comment, job note or company; omit for voicemail
    file object required
    —
  • hires_upload_candidate_file

    Upload a base64 file to a candidate. Hosts truncate tool arguments above ~20 KB, so for resumes prefer resume_text in hires_create_candidate or hires_update_candidate.

    Parameters (2)
    id required
    Candidate id or alias
    file object required
    —

136 tools

Loading tools…

Tools list temporarily unavailable.

Authentication

OAuth 2.1 with PKCE and Dynamic Client Registration. Hosts onboard themselves — no API keys to copy and paste, no client secrets to leak.

Flow

AI client → GET  /.well-known/oauth-authorization-server   (RFC 8414)
          → POST /oauth/register                            (DCR, RFC 7591)
          → GET  /oauth/authorize  + PKCE                   (consent in 100Hires)
          → POST /oauth/token                               (code → access_token)
          → POST /mcp  Authorization: Bearer <token>

Client identity

Two ways to identify a client are supported: Dynamic Client Registration (RFC 7591) and, where the server metadata advertises client_id_metadata_document_supported, OAuth Client ID Metadata Documents: the client uses the HTTPS URL of its metadata document as client_id, skips registration, and the server fetches the document and matches redirect_uri against it. In both cases an https redirect URI must point at a known AI client host; loopback and native-app redirects are always accepted.

Scopes

A single scope, mcp:full, mirrors the permissions of the authorizing user.

Token lifetime & refresh

  • Access tokens expire after 1 hour.
  • Refresh tokens are issued automatically; clients refresh transparently.
  • Tokens are bound to the authorizing user and revoked when they leave the workspace.

Manage sessions

Settings → Integrations → Connected AI clients lists every active session: client name (from DCR), last used, IP, scope, and a one-click Revoke.

Safety

  • Access is controlled by your API key permissions.
  • Read operations are always safe.
  • Destructive actions (delete, reject) require explicit IDs.
  • Rate limiting with automatic retry is built-in.
  • API key is never sent to third-party hosts.

Access model

Every token — OAuth or API key — is bound to a single 100Hires user. The MCP server only ever sees data that user could see in the UI; cross-company access is impossible. Sessions are listed under Settings → Integrations → Connected AI clients.

Destructive tools

These tools modify or remove data and always require explicit IDs — assistants cannot batch-delete by query:

  • hires_delete_*
  • hires_reject_application
  • hires_disqualify_candidate
  • hires_batch_reject_applications

Best practices

  • Don’t hand AI assistants a blanket “delete by filter” permission — keep human confirmation on for destructive tools.
  • Use a separate token per client so you can revoke one without disrupting the others.
  • Revoke unused sessions on a regular cadence.
  • For CI, prefer a restricted API key over a personal token.

FAQ

I’m getting 401 Unauthorized or Internal server error

Your access token has likely expired or was revoked. Disconnect and reconnect the MCP server in your client.

Claude clients store tokens locally. To force a fresh OAuth flow:

rm -rf ~/.mcp-auth/100hires
I’m getting an error from the server

Email [email protected] with the failing tool name, the time of the request and the error message your client showed.

WSL / Windows quirks with npx mcp-remote

Run mcp-remote from the same shell as your client (e.g. WSL → WSL, not WSL → Windows host). Clear the on-disk token cache (~/.mcp-auth/100hires) when switching environments.

Does the server support Streamable HTTP?

Yes. Both application/json and text/event-stream responses are supported. If you’re reverse-proxying, set proxy_buffering off for the SSE path.

We use cookies to offer you our service. By continuing to use this site, you consent to our use of cookies as described in our policy