C Curriculo MCP Docs Open ATS Quickstart
Model Context Protocol

Curriculo ATS MCP Server

Connect your Curriculo ATS to Claude, Cursor, and any MCP-compatible AI client. Ask in plain language to review candidates, move pipelines, reply to applicants, schedule interviews, and pull analytics — your AI does the work directly in your ATS.

Endpoint mcp.curriculo.me/mcp Transport Streamable HTTP Auth OAuth 2.1 + PAT Scopes ats:read · ats:write Tools 25

The Curriculo ATS MCP server is a remote, hosted server — nothing to install or run locally. Point any MCP client at the endpoint, authenticate once, and the client gains a set of tools that read and act on your hiring data in real time.

Quickstart #

Connect in under a minute. Use this endpoint everywhere:

Server URL https://mcp.curriculo.me/mcp

The fastest path is Claude’s one-click connector flow:

  1. Open ClaudeSettingsConnectors.
  2. Click Add custom connector and paste the server URL above.
  3. Complete the OAuth sign-in when prompted — Claude connects to your organization.
  4. Start a chat and ask, e.g. “What’s sitting in each stage of my open roles?”
New here?
Follow the step-by-step tutorial: run your ATS in Claude, with screenshots that walk through connecting, ranking candidates by AI fit, and scheduling interviews from a chat.
Tip
Prefer the command line or a different client? See Connect a client for Claude Code, Cursor, and VS Code, including token-based setup.

Connect a client #

The server speaks Streamable HTTP and supports both interactive OAuth and a Personal Access Token via an Authorization: Bearer header. Pick your client below.

In Claude (web or desktop), go to Settings → Connectors → Add custom connector, then enter:

# Custom connector URL
https://mcp.curriculo.me/mcp

Click Add, complete the OAuth sign-in, then open the connector to enable the specific tools you want Claude to use.

Add the server with a single command (OAuth opens in your browser via /mcp):

claude mcp add --transport http curriculo https://mcp.curriculo.me/mcp

Or pass a Personal Access Token directly with a header:

claude mcp add --transport http curriculo https://mcp.curriculo.me/mcp \
  --header "Authorization: Bearer YOUR_CURRICULO_PAT"

Run /mcp inside Claude Code to check status or trigger the OAuth login.

Open Cursor Settings → Tools & MCP → New MCP Server and add this to mcp.json:

{
  "mcpServers": {
    "curriculo": {
      "url": "https://mcp.curriculo.me/mcp"
    }
  }
}

Cursor shows Needs login — click it to run the OAuth consent flow, then the tools turn green.

Any client without native remote-MCP support can use the mcp-remote bridge:

{
  "mcpServers": {
    "curriculo": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.curriculo.me/mcp"]
    }
  }
}

To authenticate headlessly, append a header argument:

"args": ["-y", "mcp-remote", "https://mcp.curriculo.me/mcp",
        "--header", "Authorization: Bearer YOUR_CURRICULO_PAT"]

Authentication #

Two ways to authenticate. Both resolve to a user in one organization with scoped permissions.

OAuth 2.1 (recommended)

Interactive clients (Claude, Cursor) use OAuth with dynamic client registration. You sign in to Curriculo, approve the connection, and the client stores a short-lived token it refreshes automatically. No secrets to copy or rotate by hand.

Personal Access Token (PAT)

For CLI or headless setups, generate a token in the ATS and send it as a Bearer header:

  1. Sign in at ats.curriculo.me.
  2. Go to Settings → API & Integrations → Personal Access Tokens.
  3. Create a token, choose its scopes, and copy it (shown once).
  4. Pass it as Authorization: Bearer <token> as shown in the setup tabs.

Scopes

Tokens carry one or both scopes. Grant only what you need:

  • ats:read  List and read jobs, applicants, inbox, interviews, analytics.
  • ats:write  Create and change data: move stages, send email, schedule interviews, update jobs.
whoami
Not sure who a token is acting as? Call the whoami tool — it returns the authenticated user, organization, auth method, and granted scopes.

Tools reference #

25 tools across six groups. read tools never change data; write tools create or modify records and may trigger emails, calendar events, or automations.

Jobs

4 tools
list_jobsread

List jobs in your organization, newest-updated first. Optional status filter.

Params: status, page, limit
get_jobread

Full details of one job by UUID, including funnel stages and applicant count.

Params: jobId (required)
create_jobwrite

Create a job posting with default funnel stages. Only the title is required; opens in draft state.

Params: title (required), description, location, type, headcount, must_have_skills, preferred_skills, salary_min/max, salary_currency
update_job_statuswrite

Change a job’s status (DRAFT / OPEN / PAUSED / CLOSED / ARCHIVED). Closing or pausing re-indexes the careers feed and emails non-offered candidates — use deliberately.

Params: jobId, status (both required)

Applicants

8 tools
list_applicantsread

List applicants, optionally scoped to a job, with starred / rejected / archived filters.

Params: jobId, starred, rejected, archived, page, limit
get_applicantread

Full applicant detail: funnel stage, job link, notes, and activity history.

Params: applicantId (required)
search_candidatesread

Semantic search across all candidates. Natural-language queries return ranked matches with matched resume segments and reasoning.

Params: query (required), jobId, timestamp, page, limit
move_applicant_stagewrite

Move an applicant to another funnel stage. Fires funnel automations; moving into Offer may auto-close a filled job.

Params: applicantId, funnelId (required), reason
add_applicant_notewrite

Add a note to an applicant. Private by default; optionally tag a PASS/FAIL decision and interview round.

Params: applicantId, content (required), noteType, decisionFlag, roundName
get_applicant_resume_textread

Parsed resume text and structured data for an applicant (no PDF bytes).

Params: applicantId (required)
get_applicant_evaluationread

AI agent-graph evaluation: suitability score, AI tags, summary, and gap status.

Params: applicantId (required)
reprocess_resumewrite

Re-run the resume pipeline (parse + evaluation + graph ingest) for an applicant. Async.

Params: applicantId (required)

Inbox & email

5 tools
get_applicant_email_threadread

Full email thread (inbound + outbound) for an applicant.

Params: applicantId (required)
list_inbox_emailsread

List inbound emails in the org inbox. Filter by job, status, or free-text search.

Params: jobId, status, search, page, limit
get_inbox_statsread

Inbox summary stats: unread counts and totals.

Params: none
reply_to_applicant_emailwrite

Reply to an applicant, threading onto the latest inbound email from the job’s address. Requires a connected Gmail.

Params: applicantId, body (required), subject
send_bulk_emailwrite

Send an email to one or more applicants by id (outreach or updates). Requires a connected Gmail.

Params: applicantIds, subject, messageBody (all required)

Interviews

2 tools
list_interviewsread

List interviews. Filter by job, applicant, status, type, or date range.

Params: jobId, applicantId, status, type, dateFrom, dateTo, page, limit
schedule_interviewwrite

Schedule an interview: adds interviewers, mints feedback links, and (with Gmail) syncs a calendar event and emails everyone. Optional auto-generated Zoom/Meet link.

Params: applicantId, jobId, title, scheduledStart, scheduledEnd (required), type, location, meetingProvider, participantIds, externalInterviewers, timezone, instructions

Analytics

2 tools
get_analyticsread

Org analytics overview: total applicants, period change, pipeline-by-stage, top jobs, source mix. Defaults to last 30 days.

Params: dateFrom, dateTo
get_dashboardread

Inbox plus per-job funnel breakdown of active applicants — an at-a-glance view of every open pipeline.

Params: none

Automations & imports

3 tools
list_job_automationsread

List funnel automations configured for a job (email, schedule-interview, tag, notify, etc.).

Params: jobId (required)
get_automation_executionsread

Execution history for a single automation, paginated.

Params: automationId (required), page, limit
get_import_batchread

Status of a candidate import batch: progress, per-file status, and errors.

Params: batchId (required)

Account

1 tool
whoamiread

Return the authenticated user, organization, auth method, and granted scopes. Use it to confirm identity before acting.

Params: none

Example prompts #

Once connected, ask in plain language. The client picks the right tools.

  • “Show me what’s sitting in each stage of my open roles, and flag anything stalled.”
  • “Find senior React engineers with team-lead experience and summarize the top five.”
  • “Move Priya to Second Interview and draft a reply asking for her availability next week.”
  • “Schedule a 45-minute video interview with this candidate on Thursday 2pm ET and add a Google Meet link.”
  • “How did applicant volume change vs last month, and which job is converting best?”
Heads-up
Write tools have real side effects — sending email, changing pipelines, closing jobs. Keep tool approvals on for write actions until you trust a workflow, and grant only ats:read if you just want analysis.

FAQ & troubleshooting #

Do I need to install or host anything?
No. The server is fully hosted at https://mcp.curriculo.me/mcp. Point your client at the URL and authenticate.
Which clients are supported?
Any MCP client that supports remote servers over Streamable HTTP — Claude (web/desktop), Claude Code, Cursor, VS Code, and others. Clients without native remote support can use the mcp-remote bridge.
My tools show “Needs login” or won’t connect.
Re-run the OAuth flow (in Claude Code, type /mcp; in Cursor, click Needs login). If you use a PAT, confirm the header is exactly Authorization: Bearer <token> and the token hasn’t been revoked or expired.
An email or interview tool returns an error.
Email and calendar tools (reply_to_applicant_email, send_bulk_email, the email side of schedule_interview) require an active Gmail connection on the organization. Connect Gmail in the ATS, then retry.
How do I limit what the AI can do?
Issue a token with only ats:read for analysis-only access, and use your client’s per-tool permission settings to disable specific write tools.
Which organization does it act on?
The one tied to your token. Call whoami to confirm the user, organization, and scopes at any time.

Security #

  • Scoped access. Every token is bound to one user and organization and carries explicit ats:read / ats:write scopes.
  • Least privilege. Grant the narrowest scope that does the job; prefer read-only tokens for analysis.
  • Revoke anytime. Personal Access Tokens can be revoked in Settings → API & Integrations; OAuth connections can be removed from your client’s connector settings.
  • Transport security. All traffic is HTTPS over Streamable HTTP. Never paste a token into untrusted clients or share it in plain text.
© 2026 Curriculo. Built for recruiters who’d rather hire than click. curriculo.me  ·  Open ATS