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.
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:
https://mcp.curriculo.me/mcp
The fastest path is Claude’s one-click connector flow:
- Open Claude → Settings → Connectors.
- Click Add custom connector and paste the server URL above.
- Complete the OAuth sign-in when prompted — Claude connects to your organization.
- Start a chat and ask, e.g. “What’s sitting in each stage of my open roles?”
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/mcpClick 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/mcpOr 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:
- Sign in at ats.curriculo.me.
- Go to Settings → API & Integrations → Personal Access Tokens.
- Create a token, choose its scopes, and copy it (shown once).
- 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 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 toolslist_jobsreadList jobs in your organization, newest-updated first. Optional status filter.
status, page, limitget_jobreadFull details of one job by UUID, including funnel stages and applicant count.
jobId (required)create_jobwriteCreate a job posting with default funnel stages. Only the title is required; opens in draft state.
title (required), description, location, type, headcount, must_have_skills, preferred_skills, salary_min/max, salary_currencyupdate_job_statuswriteChange a job’s status (DRAFT / OPEN / PAUSED / CLOSED / ARCHIVED). Closing or pausing re-indexes the careers feed and emails non-offered candidates — use deliberately.
jobId, status (both required)Applicants
8 toolslist_applicantsreadList applicants, optionally scoped to a job, with starred / rejected / archived filters.
jobId, starred, rejected, archived, page, limitget_applicantreadFull applicant detail: funnel stage, job link, notes, and activity history.
applicantId (required)search_candidatesreadSemantic search across all candidates. Natural-language queries return ranked matches with matched resume segments and reasoning.
query (required), jobId, timestamp, page, limitmove_applicant_stagewriteMove an applicant to another funnel stage. Fires funnel automations; moving into Offer may auto-close a filled job.
applicantId, funnelId (required), reasonadd_applicant_notewriteAdd a note to an applicant. Private by default; optionally tag a PASS/FAIL decision and interview round.
applicantId, content (required), noteType, decisionFlag, roundNameget_applicant_resume_textreadParsed resume text and structured data for an applicant (no PDF bytes).
applicantId (required)get_applicant_evaluationreadAI agent-graph evaluation: suitability score, AI tags, summary, and gap status.
applicantId (required)reprocess_resumewriteRe-run the resume pipeline (parse + evaluation + graph ingest) for an applicant. Async.
applicantId (required)Inbox & email
5 toolsget_applicant_email_threadreadFull email thread (inbound + outbound) for an applicant.
applicantId (required)list_inbox_emailsreadList inbound emails in the org inbox. Filter by job, status, or free-text search.
jobId, status, search, page, limitget_inbox_statsreadInbox summary stats: unread counts and totals.
reply_to_applicant_emailwriteReply to an applicant, threading onto the latest inbound email from the job’s address. Requires a connected Gmail.
applicantId, body (required), subjectsend_bulk_emailwriteSend an email to one or more applicants by id (outreach or updates). Requires a connected Gmail.
applicantIds, subject, messageBody (all required)Interviews
2 toolslist_interviewsreadList interviews. Filter by job, applicant, status, type, or date range.
jobId, applicantId, status, type, dateFrom, dateTo, page, limitschedule_interviewwriteSchedule an interview: adds interviewers, mints feedback links, and (with Gmail) syncs a calendar event and emails everyone. Optional auto-generated Zoom/Meet link.
applicantId, jobId, title, scheduledStart, scheduledEnd (required), type, location, meetingProvider, participantIds, externalInterviewers, timezone, instructionsAnalytics
2 toolsget_analyticsreadOrg analytics overview: total applicants, period change, pipeline-by-stage, top jobs, source mix. Defaults to last 30 days.
dateFrom, dateToget_dashboardreadInbox plus per-job funnel breakdown of active applicants — an at-a-glance view of every open pipeline.
Automations & imports
3 toolslist_job_automationsreadList funnel automations configured for a job (email, schedule-interview, tag, notify, etc.).
jobId (required)get_automation_executionsreadExecution history for a single automation, paginated.
automationId (required), page, limitget_import_batchreadStatus of a candidate import batch: progress, per-file status, and errors.
batchId (required)Account
1 toolwhoamireadReturn the authenticated user, organization, auth method, and granted scopes. Use it to confirm identity before acting.
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?”
ats:read if you just want analysis.FAQ & troubleshooting #
Do I need to install or host anything?
https://mcp.curriculo.me/mcp. Point your client at the URL and authenticate.Which clients are supported?
mcp-remote bridge.My tools show “Needs login” or won’t connect.
/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.
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?
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?
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:writescopes. - 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.