Skip to content

Recruitee MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Search Recruitee candidates, jobs, pipelines and interviews, and add notes, tags and tasks.

Deletes · 7

22 tools: 7 can delete or cancel things and 15 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http recruitee https://recruitee.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

22 tools

Deletes or cancels 7Claude Code: deny
  • recruitee_add_candidate_noteWRITE: add a note to a candidate's profile, visible to the team.No findings

    Why it is in this group

    • The name "recruitee_add_candidate_note" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: add a note to a candidate's profile, visible to the team. Recruitee: POST /c/{company_id}/candidates/{candidate_id}/notes.

    Annotations the server declares

    • title: Add a note to a candidate
    • destructiveHint: true
  • recruitee_add_candidate_tagsWRITE: add one or more tags to a candidate (existing tags are reused by name; new names create new tags).No findings

    Why it is in this group

    • The name "recruitee_add_candidate_tags" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: add one or more tags to a candidate (existing tags are reused by name; new names create new tags). Recruitee: POST /c/{company_id}/candidates/{candidate_id}/tags.

    Annotations the server declares

    • title: Tag a candidate
    • destructiveHint: true
  • recruitee_assign_candidate_to_offerWRITE: put an existing candidate on a job (or talent pool) — creates a placement in the pipeline's first stage.No findings

    Why it is in this group

    • The name "recruitee_assign_candidate_to_offer" says "assign": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: put an existing candidate on a job (or talent pool) — creates a placement in the pipeline's first stage. Pass exactly one of offer_id or talent_pool_id. Recruitee: POST /c/{company_id}/placements.

    Annotations the server declares

    • title: Add a candidate to a job
    • destructiveHint: true
  • recruitee_create_candidateWRITE: add a candidate manually (as if a recruiter added them in the app — no auto-confirmation email is sent), optionally assigning them straight to one or more jobs in the job's …No findings

    Why it is in this group

    • The name "recruitee_create_candidate" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: add a candidate manually (as if a recruiter added them in the app — no auto-confirmation email is sent), optionally assigning them straight to one or more jobs in the job's default stage. Recruitee: POST /c/{company_id}/candidates.

    Annotations the server declares

    • title: Create a candidate
    • destructiveHint: true
  • recruitee_create_taskWRITE: create a recruiting task, optionally about a candidate, assigned to team members (admin ids from recruitee_list_team_members), with an optional due date.No findings

    Why it is in this group

    • The name "recruitee_create_task" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: create a recruiting task, optionally about a candidate, assigned to team members (admin ids from recruitee_list_team_members), with an optional due date. Recruitee: POST /c/{company_id}/tasks.

    Annotations the server declares

    • title: Create a task
    • destructiveHint: true
  • recruitee_move_candidate_stageWRITE: move a candidate to another stage of a job's pipeline.No findings

    Why it is in this group

    • The name "recruitee_move_candidate_stage" says "move": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: move a candidate to another stage of a job's pipeline. Takes the PLACEMENT id (from recruitee_get_candidate → placements[].id, one per job) and the destination stage id (from recruitee_get_pipeline_template). Moving to a 'hired' stage also requires work_location_id. Stage automations configured in Recruitee may run. Undo by moving back. Recruitee: PATCH /c/{company_id}/placements/{id}/change_stage.

    Annotations the server declares

    • title: Move a candidate to another stage
    • destructiveHint: true
  • recruitee_update_candidateWRITE: update a candidate's name or contact details.No findings

    Why it is in this group

    • The name "recruitee_update_candidate" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: update a candidate's name or contact details. Only the fields you pass change; list fields (emails, phones, links) REPLACE the existing list, so pass the full list you want. Recruitee: PATCH /c/{company_id}/candidates/{id}.

    Annotations the server declares

    • title: Update a candidate
    • destructiveHint: true
Only reads 15Claude Code: allow
  • recruitee_get_candidateFetch one candidate's full profile: contact details, sources, tags, cover letter, CV URL, custom fields, ratings, and `placements` — one per job they are on, each with its placemen…No findings

    Why it is in this group

    • The name "recruitee_get_candidate" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one candidate's full profile: contact details, sources, tags, cover letter, CV URL, custom fields, ratings, and `placements` — one per job they are on, each with its placement id and current stage. The placement id is what recruitee_move_candidate_stage needs. Recruitee: GET /c/{company_id}/candidates/{id}.

    Annotations the server declares

    • title: Get one candidate
    • readOnlyHint: true
  • recruitee_get_current_userFetch the Recruitee user the API token belongs to — name, email, role, role abilities and company id.No findings

    Why it is in this group

    • The name "recruitee_get_current_user" says "get": a word for reading.
    Description, as the server wrote it
    Fetch the Recruitee user the API token belongs to — name, email, role, role abilities and company id. A cheap way to confirm the token and company id are right. Recruitee: GET /c/{company_id}/admin.

    Annotations the server declares

    • title: Get the current user
    • readOnlyHint: true
  • recruitee_get_offerFetch one job or talent pool by id with its full details: description, requirements, location, salary, employment type, candidate counters and pipeline_template_id.No findings

    Why it is in this group

    • The name "recruitee_get_offer" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one job or talent pool by id with its full details: description, requirements, location, salary, employment type, candidate counters and pipeline_template_id. Recruitee: GET /c/{company_id}/offers/{id}.

    Annotations the server declares

    • title: Get one job
    • readOnlyHint: true
  • recruitee_get_pipeline_templateFetch a pipeline template with its ordered stages (id, name, group, category).No findings

    Why it is in this group

    • The name "recruitee_get_pipeline_template" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a pipeline template with its ordered stages (id, name, group, category). A job's `pipeline_template_id` (from recruitee_list_offers / recruitee_get_offer) names its pipeline; the stage ids here are what recruitee_move_candidate_stage takes. Recruitee: GET /c/{company_id}/pipeline_templates/{id}.

    Annotations the server declares

    • title: Get a hiring pipeline
    • readOnlyHint: true
  • recruitee_list_candidate_notesList the notes on a candidate's profile, with replies, author admin_id and visibility.No findings

    Why it is in this group

    • The name "recruitee_list_candidate_notes" says "list": a word for reading.
    Description, as the server wrote it
    List the notes on a candidate's profile, with replies, author admin_id and visibility. Recruitee: GET /c/{company_id}/candidates/{candidate_id}/notes.

    Annotations the server declares

    • title: List a candidate's notes
    • readOnlyHint: true
  • recruitee_list_candidatesList candidates, newest first, optionally narrowed to one job, a name/job search, qualified or disqualified only, specific ids, or those created after a date.No findings

    Why it is in this group

    • The name "recruitee_list_candidates" says "list": a word for reading.
    Description, as the server wrote it
    List candidates, newest first, optionally narrowed to one job, a name/job search, qualified or disqualified only, specific ids, or those created after a date. Paginate with limit + offset (next offset = offset + limit). Recruitee: GET /c/{company_id}/candidates.

    Annotations the server declares

    • title: List candidates
    • readOnlyHint: true
  • recruitee_list_departmentsList the company's departments with their ids and job counts.No findings

    Why it is in this group

    • The name "recruitee_list_departments" says "list": a word for reading.
    Description, as the server wrote it
    List the company's departments with their ids and job counts. Recruitee: GET /c/{company_id}/departments.

    Annotations the server declares

    • title: List departments
    • readOnlyHint: true
  • recruitee_list_disqualify_reasonsList the company's configured disqualification reasons (id, name, position).No findings

    Why it is in this group

    • The name "recruitee_list_disqualify_reasons" says "list": a word for reading.
    Description, as the server wrote it
    List the company's configured disqualification reasons (id, name, position). Useful for reading why candidates were disqualified. Recruitee: GET /c/{company_id}/disqualify_reasons.

    Annotations the server declares

    • title: List disqualify reasons
    • readOnlyHint: true
  • recruitee_list_evaluationsList interview results — evaluations (rating + note) and questionnaire scorecards — optionally for one candidate or by selected reviewers.No findings

    Why it is in this group

    • The name "recruitee_list_evaluations" says "list": a word for reading.
    Description, as the server wrote it
    List interview results — evaluations (rating + note) and questionnaire scorecards — optionally for one candidate or by selected reviewers. Recruitee: GET /c/{company_id}/interview/results.

    Annotations the server declares

    • title: List evaluations
    • readOnlyHint: true
  • recruitee_list_interview_eventsList scheduled interview events (candidate_id, offer_id, stage_id, start time, duration, location, attendees).No findings

    Why it is in this group

    • The name "recruitee_list_interview_events" says "list": a word for reading.
    Description, as the server wrote it
    List scheduled interview events (candidate_id, offer_id, stage_id, start time, duration, location, attendees). Defaults to upcoming events for the whole company; narrow by candidate, date range or interviewer. Recruitee: GET /c/{company_id}/interview/events.

    Annotations the server declares

    • title: List interviews
    • readOnlyHint: true
  • recruitee_list_offersList the company's jobs (Recruitee calls them offers) with id, title, status, slug, department_id, recruiter_id, hiring_manager_id and pipeline_template_id.No findings

    Why it is in this group

    • The name "recruitee_list_offers" says "list": a word for reading.
    Description, as the server wrote it
    List the company's jobs (Recruitee calls them offers) with id, title, status, slug, department_id, recruiter_id, hiring_manager_id and pipeline_template_id. Filter by status, department, location, recruiter, hiring manager, tag and more; add heavy fields with `include` (e.g. counters for candidate counts, description, salary, location_ids). Paginated with limit + page (default 1000 per page); `meta.total_count` gives the total. Recruitee: GET /c/{company_id}/offers.

    Annotations the server declares

    • title: List jobs
    • readOnlyHint: true
  • recruitee_list_tagsList the company's candidate tags with ids and usage counts.No findings

    Why it is in this group

    • The name "recruitee_list_tags" says "list": a word for reading.
    Description, as the server wrote it
    List the company's candidate tags with ids and usage counts. Tag ids are used in recruitee_search_candidates filters. Recruitee: GET /c/{company_id}/tags.

    Annotations the server declares

    • title: List candidate tags
    • readOnlyHint: true
  • recruitee_list_tasksList recruiting tasks (title, description, due date, completed, candidate_id).No findings

    Why it is in this group

    • The name "recruitee_list_tasks" says "list": a word for reading.
    Description, as the server wrote it
    List recruiting tasks (title, description, due date, completed, candidate_id). With candidate_id, lists that candidate's tasks (Recruitee: GET /c/{company_id}/candidates/{candidate_id}/tasks — only `status` applies). Otherwise lists company tasks with scope, assignee, sorting and paging (Recruitee: GET /c/{company_id}/tasks).

    Annotations the server declares

    • title: List tasks
    • readOnlyHint: true
  • recruitee_list_team_membersList the company's team members (memberships): admin_id, role, whether they are a recruiter or hiring manager, and the jobs they can access.No findings

    Why it is in this group

    • The name "recruitee_list_team_members" says "list": a word for reading.
    Description, as the server wrote it
    List the company's team members (memberships): admin_id, role, whether they are a recruiter or hiring manager, and the jobs they can access. Use admin_id values for task assignees and filters. User names/emails are in the `references` array. Recruitee: GET /c/{company_id}/memberships.

    Annotations the server declares

    • title: List team members
    • readOnlyHint: true
  • recruitee_search_candidatesSearch the company's candidates with Recruitee's candidate search (the same engine as the app's filters).No findings

    Why it is in this group

    • The name "recruitee_search_candidates" says "search": a word for reading.
    Description, as the server wrote it
    Search the company's candidates with Recruitee's candidate search (the same engine as the app's filters). `query` is a free-text search across name, emails, phones, tags, sources, job assignments, current stage, cover letter and CV content. `filters` accepts Recruitee filter objects verbatim, e.g. {"field":"created_at","gte":1548975600} (Unix seconds), {"field":"has_cv","eq":true}, {"filter":"tags","id":{"in":[12]}}, {"filter":"stages","name":{"in":["Phone interview"]}}. Returns `hits` (with each candidate's placements: job + current stage) and `total`. Recruitee: GET /c/{company_id}/search/new/candidates.

    Annotations the server declares

    • title: Search candidates
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http recruitee https://recruitee.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__recruitee__recruitee_get_current_user",
      "mcp__recruitee__recruitee_list_team_members",
      "mcp__recruitee__recruitee_search_candidates",
      "mcp__recruitee__recruitee_list_candidates",
      "mcp__recruitee__recruitee_get_candidate",
      "mcp__recruitee__recruitee_list_candidate_notes",
      "mcp__recruitee__recruitee_list_offers",
      "mcp__recruitee__recruitee_get_offer",
      "mcp__recruitee__recruitee_get_pipeline_template",
      "mcp__recruitee__recruitee_list_departments",
      "mcp__recruitee__recruitee_list_tags",
      "mcp__recruitee__recruitee_list_disqualify_reasons",
      "mcp__recruitee__recruitee_list_tasks",
      "mcp__recruitee__recruitee_list_interview_events",
      "mcp__recruitee__recruitee_list_evaluations"
    ],
    "ask": [],
    "deny": [
      "mcp__recruitee__recruitee_create_candidate",
      "mcp__recruitee__recruitee_update_candidate",
      "mcp__recruitee__recruitee_add_candidate_note",
      "mcp__recruitee__recruitee_add_candidate_tags",
      "mcp__recruitee__recruitee_assign_candidate_to_offer",
      "mcp__recruitee__recruitee_move_candidate_stage",
      "mcp__recruitee__recruitee_create_task"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as recruitee. Review it before you use it.