Skip to content

MCP connector

The Zero Hiring MCP connector exposes 13 domain-scoped tools that forward to the local zero CLI. Agents should prefer these tools over shelling out to zero directly.

Each tool takes the same payload shape:

  • command (string, required) — Zero action handled by this tool, e.g. jobs list or --help.
  • args (string[], optional) — positional values, flags, and flag values. Do not put the action in args only.

To discover flags for any action, call get_help with the action and --help:

tool: get_help
command: "candidates list"
args: ["--help"]

For workflows, pricing, and Jenny-specific guidance, see the agent skill reference.

Tools

Getting help

Tool ID get_help
Access Read-only

Inspect the current Zero account and discover available Zero actions. For 'what account / employer / user am I?' use command: "whoami" — it returns email, company, and employer_id from the backend. For 'what commands exist?' use command: "--help" (or command: "<subcommand>", args: ["--help"]). Also handles status show and billing reads.

Also accepts root discovery calls such as --help, --version, and <action> --help.

Allowed commands

help, whoami, status show, billing docs, billing show

Managing authentication

Tool ID manage_auth
Access Write

Log in, log out, or update local authentication settings.

Allowed commands

login, logout, internal configure

Reading jobs

Tool ID read_jobs
Access Read-only

List jobs and inspect role details. For RPO accounts, use clients list first when the operator names a client, then pass --client-id <client_uuid> to jobs list or internal jobs list to see jobs under that specific client.

Allowed commands

jobs list, jobs current, jobs show, internal jobs list, internal jobs get

Managing jobs

Tool ID manage_jobs
Access Write

Create, update, delete, select, or parse roles. hire run --description and internal jobs create/update --description are source material for the hosted JD generator; use --use-description-as-jd only for an explicit polished HTML final JD; plain text is still formatted with AI. Once you've run intake and assembled a structured role summary, pass it as --role-summary-json (a JSON object with at least title) on hire run: it is threaded into both JD generation and the job record so the JD, the job, and the pipeline brief all match the confirmed intake. For RPO accounts, pass --client-id <client_uuid> on hire run or internal jobs create to create the role under that client; omit it only for roles owned directly by the agency. For requests to create, add, set up, update, or load screening questions, interview questions, or custom questions, generate with internal ai generate-questions --structured --json when needed, then save with internal jobs update <job_id> --screening-questions-json <json>; the JSON must be an array of {text,order,source} question objects. --custom-questions is legacy fallback only.

Allowed commands

hire run, jobs use, jobs delete, internal jobs create, internal jobs update, internal jobs delete, internal jobs parse-jd

Reading candidates

Tool ID read_candidates
Access Read-only

Review candidates, applications, interview results, metrics, and transcripts.

Allowed commands

candidates list, candidates detail, results show, results detail, internal applications list, internal interviews results, internal interviews metrics, internal interviews events

Managing candidates

Tool ID manage_candidates
Access Write

Invite, send offers, reject, discard sourced candidates, rank, create applications or interviews, and upload files. Use candidates discard when the user wants to remove a sourced candidate from active sourcing; it also stops future outreach. Use candidates hire to send a DocuSign offer; billing happens after candidate signature. close run remains a legacy alias. For invite send, always pass --interview-type explicitly. Use realtime for audio, phone_call for phone call / AI phone call / AI telephony invites, and video for video/avatar interview invites. Example phone args: ["--candidate", candidate, "--interview-type", "phone_call"]; example video/avatar args: ["--candidate", candidate, "--interview-type", "video"] (the CLI defaults video invites to the Jenny Anam avatar, avatar_id 80d32804-14cc-445c-9005-e641b41f8f18, unless an explicit --avatar-id is provided). Ambiguous invite send calls without --interview-type are rejected. For employer preview links after creating a role, use internal interviews test --job-id <job_id> --interview-type video --json; it creates a test interview with the same default Jenny Anam avatar and returns a clickable interview_url.

Allowed commands

invite send, invite manual, candidates hire, candidates reject, candidates discard, close run, internal applications create, internal applications rank, internal interviews create, internal interviews test, internal interviews trigger-call, internal applicants create, internal applicants update-phone, internal files upload

Reading outreach

Tool ID read_outreach
Access Read-only

Review saved sourcing searches, shortlists, sequences, enrollments, and outreach stats. Does not run sourcing search; use manage_outreach with command: "sourcing search" for that.

Allowed commands

outreach sequences example-steps, outreach sequences list, outreach sequences show, outreach enrollments list, outreach stats, sourcing show, sourcing shortlist list

Managing outreach

Tool ID manage_outreach
Access Write

Run sourcing searches and manage shortlists, outreach sequences, and enrollments. For a normal sourcing search, call this tool once with command: "sourcing search" and args [query, "--job", full_job_uuid, "--limit", limit, "--depth", "cheap", "--wait", "--json"]; use the user's requested count when it is below 50, otherwise use "50" when the user asks for 50+, or gives no count. Run at most one sourcing search per user sourcing request; after one successful result, summarize and ask whether to continue rather than self-initiating another paid search. If the user explicitly asks for more/again after a previous search, include "--source-more" in that single call and reuse the same role/search intent rather than changing the query unless the user explicitly changes criteria. If the user explicitly names multiple countries, cities, or regions, do not split them into separate tool calls; append one repeatable --location value per requested location in the same args array so the backend performs one combined search and the limit applies once across all locations. Use --limit 1 only for explicit smoke tests. In dev/staging, normal sourcing returns demo candidates; if the user explicitly asks for real candidates, add --real and the backend caps that live non-production call to 5 profiles. For fake/demo sourcing, call command: "sourcing demo-candidates add" with args ["--job", job_id, "--json"]; this creates the same five fake sourced candidates, including Muluken and Alan, without calling PDL. For safe demos, create a sourced-style test candidate with command: "sourcing test-candidate add" and args ["--job", job_id, "--email", test_email, "--phone", test_phone, "--json"]; this uses the real sourced application/outreach pipeline without emailing real sourced candidates. For stop-only requests like 'stop outreach for Jane but keep them in sourcing', use command: "outreach enrollments stop-by-candidate" with args [candidate_ref, "--job", job_id, "--json"]; this stops future emails without discarding the candidate. For outreach sequences create in MCP/Jenny, pass steps with --steps-json; the server cannot read Claude-local files or stdin.

Allowed commands

sourcing search, sourcing demo-candidates add, sourcing shortlist add, sourcing test-candidate add, sourcing invite, outreach sequences create, outreach sequences activate, outreach sequences deactivate, outreach enroll, outreach enrollments pause, outreach enrollments resume, outreach enrollments stop, outreach enrollments stop-by-candidate

Reading pipelines

Tool ID read_pipelines
Access Read-only

Inspect hiring pipeline runs and platform status.

Allowed commands

status show, pipeline status, pipeline list

Managing pipelines

Tool ID manage_pipelines
Access Write

Create, advance, abort, or simulate hiring pipeline work.

Allowed commands

pipeline run, pipeline advance, pipeline abort, pipeline autopilot, demo, demo run, demo seed, demo interviews

Reading admin data

Tool ID read_admin_data
Access Read-only

Review team members, employer analytics, and RPO clients. Use clients list to see all managed clients; clients show <client_id> for details.

Allowed commands

team list, internal employers analytics, clients list, clients show

Managing admin data

Tool ID manage_admin
Access Write

Invite teammates by email with team invite (team add is a legacy invitation alias), remove members, change employer records, manage RPO clients, or run internal AI helpers. For RPO client management: clients add --name <name> creates a new client; clients remove <client_id> soft-deletes one. internal ai generate-jd accepts --role-summary-json (a JSON object with at least title) to fold the confirmed structured intake into the generated JD. Use internal ai generate-questions --structured --json to draft role-specific screening, interview, or custom questions, then save them with manage_jobs internal jobs update --screening-questions-json; do not stop at a draft unless the operator explicitly asked to review one first.

Allowed commands

team invite, team add, team remove, clients add, clients remove, internal employers create, internal ai generate-jd, internal ai generate-questions, internal ai extract-skills

Install

See the MCP server README for Node requirements, Claude Desktop .mcpb bundles, and HTTP transport setup.