Skip to main content
Available to all organizations — Tenzo hosts a Model Context Protocol server that exposes the read endpoints of the Tenzo Public API as tools that any MCP-compatible AI client can call, plus a submit_feedback write tool the assistant uses to log questions it struggled with (internal feedback only).

Overview

Tenzo’s MCP server lets you point an MCP-compatible client (Claude.ai, Claude Desktop, Claude Code, Cursor, Windsurf, etc.) at your Tenzo workspace and ask natural-language questions like “summarize the last 20 calls for job X” or “list applications stuck in screening for more than a week.” The model can call Tenzo tools directly to fetch the data it needs. There are two ways to connect, depending on the client:
  • OAuth connector — for hosted clients like Claude.ai that support the MCP HTTP transport with OAuth 2.1. Sign in with your Tenzo account; no API key required.
  • .mcp.json configuration — for local clients (Claude Code, Cursor, Windsurf, Claude Desktop). Authenticated with a Tenzo API key.
The server is read-only for your recruiting data: the tools that proxy the Public API only expose GET endpoints. Write operations on recruiting data (creating jobs, upserting applications, posting comments) are not available through MCP — use the Public API directly for those. The one exception is submit_feedback, which lets the assistant record questions it struggled with so we can improve it; it writes only to an internal feedback log and exposes no recruiting data.

Option 1 — OAuth connector (Claude.ai and other hosted clients)

For Claude.ai, add Tenzo as a custom connector. The first time you use it, you’ll be redirected to Tenzo to sign in and approve access.
1

Open the connectors page in Claude

In Claude.ai, go to SettingsConnectorsAdd custom connector.
2

Provide the connector URL

Enter the Tenzo MCP server URL:
https://api.tenzo.ai/mcp
Leave the authentication type as the default (OAuth). Claude will discover Tenzo’s authorization server automatically.
3

Approve access

Claude opens Tenzo’s sign-in page in a popup. Log in with your normal Tenzo account, then click Approve on the consent screen.The connector now appears in Claude’s tools list and is ready to use.
Access is scoped to your Tenzo organization and the permissions on your account. The connector cannot see data from other organizations.

Revoking access

Tenzo issues short-lived access tokens only — no refresh tokens. Once the access token expires, the client has to send the user back through the OAuth flow to get a new one. To stop a connector from talking to Tenzo, remove it from the client (e.g. Settings → Connectors in Claude.ai); any in-flight token will stop working when it expires, and the client cannot mint a new one without going through consent again.

Option 2 — .mcp.json (Claude Code, Cursor, Windsurf, Claude Desktop)

Local clients read MCP server definitions from a .mcp.json (or equivalent) config file. Add the following entry:
{
  "mcpServers": {
    "tenzo": {
      "type": "http",
      "url": "https://api.tenzo.ai/mcp",
      "headers": {
        "Authorization": "Bearer ${TENZO_API_KEY}"
      }
    }
  }
}
1

Generate a Tenzo API key

Follow Generating an API Key to create a key in Settings → Developer Tools. Your key starts with tenzo_pk_.
2

Export the key

Export it as an environment variable so it stays out of your config file:
export TENZO_API_KEY=tenzo_pk_...
3

Add the entry to your client config

  • Claude Code — add to .mcp.json at the root of your project (or your global Claude Code config)
  • Cursor~/.cursor/mcp.json
  • Windsurf~/.codeium/windsurf/mcp_config.json
  • Claude Desktopclaude_desktop_config.json (see Anthropic’s docs for the platform-specific path)
4

Restart the client

Restart your MCP client. The Tenzo tools should appear in the client’s tool picker.
Treat your API key like a password. Anyone with the key has the same read access to your organization’s Tenzo data as you do. Revoke compromised keys from Settings → Developer Tools → API Keys.

Available tools

Every tool maps 1:1 to a GET endpoint in the Tenzo Public API. Click any tag link below to see the full request and response schemas for the underlying endpoint.

Analytics

ToolDescriptionPublic API
get_analytics_metricsAnalytics metrics and chart payloads for the dashboardAnalytics
get_sourcing_by_userSourced-candidate counts per recruiterAnalytics
get_grading_analyticsPer-question grading stats for a jobAnalytics
get_top_candidates_for_jobTop-ranked candidates for a jobAnalytics

Applications

ToolDescriptionPublic API
list_applicationsList applications with filteringApplicants
get_applicationGet a single application by Tenzo or remote IDApplicants
get_application_by_candidate_and_jobResolve a (candidate, job) pair to its applicationApplicants
list_application_commentsATS comments on an applicationApplicants
get_application_communications_emailEmail history for an applicationApplicants
get_application_communications_smsSMS history for an applicationApplicants

ATS

ToolDescriptionPublic API
list_ats_integrationsATS integrations enabled for your orgATS
get_ats_integration_configurationConfiguration for one integrationATS
list_ats_integration_rulesSync rules for an integrationATS

Audit

ToolDescriptionPublic API
list_audit_eventsAudit log events with filteringAudit
get_audit_event_filter_optionsFilter options for the audit logAudit

Calls & interviews

ToolDescriptionPublic API
list_callsList calls with filteringInterviews, calls & media
get_callGet a single callInterviews, calls & media
get_call_transcriptFull call transcriptInterviews, calls & media
get_call_quality_evalQuality-eval scores for a callInterviews, calls & media
search_interviewsSearch interviews by candidate, job, or statusInterviews, calls & media
list_interview_resultsStructured interview-result rowsInterviews, calls & media
get_interview_resultsResult rows for a single applicationInterviews, calls & media

Candidates

ToolDescriptionPublic API
list_candidatesList candidates with filteringCandidates
get_candidateGet a single candidateCandidates
search_candidatesSearch candidates by nameCandidates
get_candidate_resumeParsed resume for a candidateCandidates
list_candidate_notesATS notes for a candidateCandidates
list_unanswered_candidate_questionsQuestions a candidate asked the AI that need a human replyCandidates

Jobs

ToolDescriptionPublic API
list_jobsList jobs with filteringJobs
get_jobGet a single jobJobs
search_jobsRich job search with filtersJobs
get_job_settingsEffective interview settings for a jobJobs
get_job_scriptActive script for a jobJobs
get_job_candidate_questionsCandidate-facing FAQ for a jobJobs
get_job_resume_requirementsResume requirements configured for a jobJobs

Folders

ToolDescriptionPublic API
list_folder_contentsContents of a folder (jobs / sub-folders)Jobs
search_foldersSearch folders by nameJobs

Media

ToolDescriptionPublic API
list_mediaAudio/video assets metadataInterviews, calls & media
get_media_itemA single media assetInterviews, calls & media

Meeting Copilot

ToolDescriptionPublic API
list_meeting_copilot_notesList Meeting Copilot notes for your orgMeeting Copilot
get_meeting_copilot_noteGet a single Meeting Copilot noteMeeting Copilot
list_meeting_copilot_templatesList Meeting Copilot templates (presets)Meeting Copilot
get_meeting_copilot_templateGet a single Meeting Copilot templateMeeting Copilot

Docs

ToolDescriptionPublic API
list_docsList doc paths in the public docs treeRead-only Getters
get_docGet the markdown content of a docRead-only Getters

Organization & users

ToolDescriptionPublic API
get_org_interview_settingsOrg-wide interview defaultsOrganization
get_interview_rulesActive rules-engine rulesOrganization
list_usersList users in your orgRead-only Getters
get_userGet a single userRead-only Getters
search_usersSearch users by nameRead-only Getters

Templates

Two tools cover every org-template family. Pass the family via the kind parameter instead of calling a per-family tool. Both map to the Templates tag in the Public API.
ToolDescriptionPublic API
list_templatesList your org’s templates of a given kind (optional name substring filter)Templates
get_templateGet one template by kind + template_idTemplates
Allowed kind values: script_generation, background_info, redaction, suggested_follow_up, voicemail_sms_prompt, flagged_event, summary, thank_you_email, custom_booking_outro, rejection_email, resume_feedback_email, interview_results_layout, question_constraints.
The REST API keeps a dedicated endpoint per template family (e.g. GET /api/v1/templates/summary) — only the MCP tool surface is consolidated into list_templates / get_template.

Troubleshooting

Make sure you’re signed in to Tenzo in the same browser. If you have multiple Tenzo accounts, sign out of the others first — the consent screen uses your active session to determine which organization to grant access to.
Your API key is missing, expired, or revoked. Re-export TENZO_API_KEY with a fresh key from Settings → Developer Tools → API Keys and restart your MCP client.
The tool was called with an ID that belongs to a different organization. MCP tools only return data scoped to your org. Double-check the ID is one your account can see in the Tenzo dashboard.
The MCP tools that proxy the Public API cover only its GET endpoints. Write operations on recruiting data (e.g. POST /api/v1/job) must be called via the REST API directly. (The assistant also has a submit_feedback tool that writes only to an internal feedback log, not to your recruiting data.)