Skip to content

Curriculo ATS MCP server

On this page

Connect your Curriculo ATS to Claude, Cursor and any MCP client that speaks Streamable HTTP, or to ChatGPT through a Custom GPT. Ask in plain language to review candidates, move pipelines, reply to applicants, schedule interviews and pull analytics. Your AI client does the work directly in your ATS.

EndpointTransportAuthScopesTools
https://mcp.curriculo.me/mcpStreamable HTTPOAuth 2.1, or a personal access tokenats:read, ats:write25

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

A different product from the public API, with different authentication. MCP talks to Curriculo ATS and the user signs in. A public API key_ does not reach these tools, and the public API does not reach your ATS.

What is the Curriculo ATS MCP server?

The Curriculo ATS MCP server is a hosted endpoint, https://mcp.curriculo.me/mcp, that lets Claude, ChatGPT, Cursor and other MCP clients read and act on your Curriculo ATS. You sign in once with OAuth or a personal access token, then ask in plain language to review candidates, move stages, reply to applicants or schedule interviews.

Quickstart

Use this endpoint everywhere:

https://mcp.curriculo.me/mcp

The fastest path is Claude's connector flow:

  1. Open Claude, then Settings, then Connectors.
  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, for example, "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.

Connect a client

Any client that speaks Streamable HTTP works. Authenticate with OAuth 2.1 or with a personal access token sent in an Authorization: Bearer header. Setup for common clients follows.

Claude

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

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.

Claude Code

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.

Cursor

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, and the tools turn green.

VS Code and other clients

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"]

ChatGPT (Custom GPT Actions)

ChatGPT connects through a Custom GPT with Actions, using a REST surface that mirrors the 25 MCP tools.

  1. In ChatGPT, create a GPT and open Configure, then Actions, then Create new action.

  2. Import the schema from this URL:

    https://mcp.curriculo.me/api/v2/mcp/openapi.json
  3. Set Authentication to OAuth, with these values from the schema:

    SettingValue
    Authorization URLhttps://mcp.curriculo.me/api/v2/ats/oauth/authorize
    Token URLhttps://mcp.curriculo.me/api/v2/ats/oauth/token
    Scopeats:read ats:write (or only ats:read)
  4. Save, then sign in to Curriculo ATS and approve access when the GPT first calls an action.

Authentication

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

Interactive clients (Claude, Cursor, ChatGPT) use OAuth 2.1 with the authorization code flow. Dynamic client registration is supported, PKCE (S256) is required for public clients, and redirect URIs must be https. You sign in to Curriculo ATS, approve the connection, and the client stores a short-lived token it refreshes automatically. There are no secrets to copy or rotate by hand. Server metadata is published at https://mcp.curriculo.me/.well-known/oauth-authorization-server.

Personal access token

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. It is shown once.
  4. Pass it as Authorization: Bearer <token>, as shown in the setup steps above.

Scopes

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

ScopeAllows
ats:readList and read jobs, applicants, inbox, interviews and analytics.
ats:writeCreate and change data: move stages, send email, schedule interviews, update jobs.

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

Twenty-five tools. The access type tells you the risk:

  • Read only looks.
  • Write changes ATS data.
  • Write+ changes data and reaches outside: an email leaves, an invite is sent, or an AI job starts.

Seventeen of the twenty-five tools are read-only. The six Write+ tools have outside consequences, and the assistant confirms intent before using them. No tool deletes anything.

Jobs

ToolAccessWhat it doesParams
list_jobsReadLists jobs in your organization, most recently updated first. Optional status filter.status, page, limit
get_jobReadFull detail for one job, including its funnel stages and applicant count.jobId (required)
create_jobWriteCreates a job and opens it immediately: it is live and accepting applications, not a draft. Default stages are Leads + Applications, Screening, Interview, Offer. Only a title is required.title (required), description, location, type, headcount, must_have_skills, preferred_skills, salary_min, salary_max, salary_currency
update_job_statusWrite+Changes a job's status (DRAFT, OPEN, PAUSED, CLOSED, ARCHIVED). Closing or pausing can email candidates who have not reached Offer, when candidate notices are enabled; unsubscribed and live-interview applicants are skipped. Use it deliberately.jobId, status (both required)

Applicants

ToolAccessWhat it doesParams
list_applicantsReadLists applicants, optionally for one job, with starred, rejected and archived filters.jobId, starred, rejected, archived, page, limit
get_applicantReadOne applicant in full: current stage, job link, notes and activity history.applicantId (required)
search_candidatesReadPlain-language search across the whole candidate pool. Returns ranked matches with the CV passages and reasoning behind each.query (required), jobId, timestamp, page, limit
move_applicant_stageWrite+Moves someone to another stage. Triggers that stage's automations; reaching Offer may auto-close the job once headcount is met.applicantId, funnelId (required), reason
add_applicant_noteWriteAdds a note, optionally tagged with a PASS or FAIL decision and the round it belongs to. Private by default.applicantId, content (required), noteType, decisionFlag, roundName
get_applicant_resume_textReadThe parsed CV content as text and fields, with no file attached.applicantId (required)
get_applicant_evaluationReadThe AI assessment: suitability score, tags, summary and gaps.applicantId (required)
reprocess_resumeWrite+Re-runs the full AI pipeline on a CV (parse, evaluate, index). Runs in the background.applicantId (required)

Inbox and email

ToolAccessWhat it doesParams
get_applicant_email_threadReadThe complete conversation with one candidate, both directions.applicantId (required)
list_inbox_emailsReadLists inbound mail, filtered by job, status or text search.jobId, status, search, page, limit
get_inbox_statsReadUnread counts and totals.none
reply_to_applicant_emailWrite+Replies on the existing thread, from Curriculo's sending mailbox or from your organization's mailbox that received the conversation. No mailbox connection is needed.applicantId, body (required), subject
send_bulk_emailWrite+Sends one message to one or many candidates, for outreach or status updates, from Curriculo's sending mailbox. No mailbox connection is needed.applicantIds, subject, messageBody (all required)

Interviews

ToolAccessWhat it doesParams
list_interviewsReadLists interviews by job, applicant, status, type or date range.jobId, applicantId, status, type, dateFrom, dateTo, page, limit
schedule_interviewWrite+Books the interview, adds interviewers and creates feedback links. With a calendar connected, it also creates the event, invites the candidate and generates the video link: Google Meet through a Google calendar, Microsoft Teams through a Microsoft calendar. meetingProvider: ZOOM is stored as a label only and generates no link. The interview is saved either way.applicantId, jobId, title, scheduledStart, scheduledEnd (required), type, location, meetingProvider, participantIds, externalInterviewers, timezone, instructions

Analytics

ToolAccessWhat it doesParams
get_analyticsReadTotals, period-over-period change, stage breakdown, top jobs and source mix. Last 30 days by default.dateFrom, dateTo
get_dashboardReadInbox plus a per-job funnel breakdown of everyone currently active.none

Automations and imports

ToolAccessWhat it doesParams
list_job_automationsReadLists the automations configured on a job: email, interview scheduling, tagging and notifications.jobId (required)
get_automation_executionsReadRun history for an automation.automationId (required), page, limit
get_import_batchReadProgress of a candidate import: per-file status and any errors.batchId (required)

Account

ToolAccessWhat it doesParams
whoamiReadConfirms which user and organization the assistant is acting as, with auth method and granted scopes. Worth running first in any session.none

Email tools send from Curriculo's sending mailbox, so they work without a connected mailbox. Interview scheduling also works without a calendar: it still saves the interview and reports that invites were not sent.

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 at 2pm ET and add a Google Meet link."
  • "How did applicant volume change vs last month, and which job is converting best?"

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.

Security

  • Scoped access. Every token is bound to one user and organization and carries explicit ats:read or ats:write scopes. Everything the assistant sees is limited to your own organization.
  • 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.

Part of the Curriculo ATS MCP hub, which links the setup guides, the tools reference and the connector docs.

Next steps

FAQ and 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, with OAuth 2.1 or a personal access token: Claude (web and desktop), Claude Code, Cursor, VS Code and others. Clients without native remote support can use the mcp-remote bridge. ChatGPT connects through a Custom GPT with Actions.

My tools show Needs login or will not connect.

Re-run the OAuth flow (in Claude Code, type /mcp; in Cursor, click Needs login). If you use a personal access token, confirm the header is exactly Authorization: Bearer <token> and the token has not been revoked or expired.

Do email tools need a connected mailbox?

No. send_bulk_email and reply_to_applicant_email send from Curriculo's sending mailbox. A reply goes out from your organization's mailbox when that mailbox received the conversation. To send from your own address in general, see the Email Agent setup guide.

Does schedule_interview create Zoom links?

No. Video links come from a connected calendar: Google Meet with Google, Microsoft Teams with Microsoft. Without a calendar, the interview is saved with no link.

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.

Was this page helpful?

Updated