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 listor--help.args(string[], optional) — positional values, flags, and flag values. Do not put the action inargsonly.
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.