AI recruiter: create jobs, send candidates to WhatsApp interviews, read cited scores.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <Talpy API key with mcp:read (add mcp:write to create jobs and invite candidates)>. Create it in Talpy under API & integrations.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Creates a new job opening in the company's Talpy account and generates the interview profile Aya will use (competencies and weights). By default the job is created as a DRAFT (not public); set publish=true to open it right away. Counts against the plan's open-job limit. Requires an API key with the mcp:write scope. Returns in a few seconds with the job id, its status, the dashboard link and profileStatus: "generating" means the full competency profile is still being built in the background (usually under a minute) — call detalhar_vaga later to see it.
Job title, e.g. "Sales Representative".
Job description (at least 20 characters): responsibilities and requirements. Aya's evaluation criteria are derived from it.
Optional. true = publish the job now (status ATIVA, open to applications). Default false = draft (RASCUNHO) for a human to review.
Optional. Language of the job: Aya opens the candidate interview in it. Also used for the text of this response. Defaults to the account's language.
Optional seniority level, e.g. "Junior", "Mid-level", "Senior".
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Creates a new job opening in the company's Talpy account and generates the interview profile Aya will use (competencies and weights). By default the job is created as a DRAFT (not public); set publish=true to open it right away. Counts against the plan's open-job limit. Requires an API key with the mcp:write scope. Returns in a few seconds with the job id, its status, the dashboard link and profileStatus: "generating" means the full competency profile is still being built in the background (usually under a minute) — call detalhar_vaga later to see it.
| Argument | Type | Description |
|---|---|---|
| title* | string | Job title, e.g. "Sales Representative". |
| publish | boolean | Optional. true = publish the job now (status ATIVA, open to applications). Default false = draft (RASCUNHO) for a human to review. |
| language | string | Optional. Language of the job: Aya opens the candidate interview in it. Also used for the text of this response. Defaults to the account's language. |
| seniority | string | Optional seniority level, e.g. "Junior", "Mid-level", "Senior". |
| description* | string | Job description (at least 20 characters): responsibilities and requirements. Aya's evaluation criteria are derived from it. |
{
"type": "object",
"required": [
"title",
"description"
],
"properties": {
"title": {
"type": "string",
"description": "Job title, e.g. \"Sales Representative\"."
},
"publish": {
"type": "boolean",
"description": "Optional. true = publish the job now (status ATIVA, open to applications). Default false = draft (RASCUNHO) for a human to review."
},
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language of the job: Aya opens the candidate interview in it. Also used for the text of this response. Defaults to the account's language."
},
"seniority": {
"type": "string",
"description": "Optional seniority level, e.g. \"Junior\", \"Mid-level\", \"Senior\"."
},
"description": {
"type": "string",
"minLength": 20,
"description": "Job description (at least 20 characters): responsibilities and requirements. Aya's evaluation criteria are derived from it."
}
}
}Full evaluation of one candidate: score per competency, the evidence behind each score, red flags, highlights and the human decision if there is one. Read-only. Does NOT return phone, e-mail or résumé.
| Argument | Type | Description |
|---|---|---|
| language | string | Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language. |
| candidateId* | string | Candidate id, from listar_candidatos. |
{
"type": "object",
"required": [
"candidateId"
],
"properties": {
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language."
},
"candidateId": {
"type": "string",
"description": "Candidate id, from listar_candidatos."
}
}
}Shows one job in detail, including the competencies Aya (the AI interviewer) evaluates and the weight of each — the criteria behind every candidate score. Read-only.
| Argument | Type | Description |
|---|---|---|
| jobId* | string | Job id, from listar_vagas. |
| language | string | Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language. |
{
"type": "object",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "Job id, from listar_vagas."
},
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language."
}
}
}Adds a candidate to a job and immediately invites them to an interview with Aya, the AI recruiter. SIDE EFFECTS: with a phone number it sends a real WhatsApp invite to the candidate; without a phone but with an e-mail it sends a real e-mail with the link to the web interview. Uses one interview from the company's balance when the interview happens. Requires an API key with the mcp:write scope. Only invite people who applied or agreed to be contacted. Returns candidateId, interviewId and the invite channel.
| Argument | Type | Description |
|---|---|---|
| name* | string | Candidate's full name. |
| string | Candidate's e-mail. Used for the invite (web interview link) when there is no phone. | |
| jobId* | string | Job id, from listar_vagas or criar_vaga. |
| phone | string | Candidate's WhatsApp number in international format with country code, e.g. +5511912345678. If given, the invite goes by WhatsApp. |
| language | string | Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language. |
| resumeText | string | Optional résumé as plain text. Used to pre-score the candidate against the job profile. |
{
"type": "object",
"required": [
"jobId",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Candidate's full name."
},
"email": {
"type": "string",
"description": "Candidate's e-mail. Used for the invite (web interview link) when there is no phone."
},
"jobId": {
"type": "string",
"description": "Job id, from listar_vagas or criar_vaga."
},
"phone": {
"type": "string",
"description": "Candidate's WhatsApp number in international format with country code, e.g. +5511912345678. If given, the invite goes by WhatsApp."
},
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language."
},
"resumeText": {
"type": "string",
"description": "Optional résumé as plain text. Used to pre-score the candidate against the job profile."
}
}
}Lists the candidates of a job with their interview score, profile fit and pipeline stage, highest score first. Read-only. Does NOT return phone, e-mail or résumé.
| Argument | Type | Description |
|---|---|---|
| jobId* | string | Job id, from listar_vagas. |
| stage | string | Filter by pipeline stage (NOVO = new, CONVIDADO = invited, EM_ENTREVISTA = interviewing, AVALIADO = evaluated, APROVADO = approved, REJEITADO = rejected). Defaults to all. |
| language | string | Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language. |
| minScore | number | Only candidates whose interview score is at least this value (0 to 10). |
{
"type": "object",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "Job id, from listar_vagas."
},
"stage": {
"enum": [
"NOVO",
"CONVIDADO",
"EM_ENTREVISTA",
"AVALIADO",
"APROVADO",
"REJEITADO",
"all"
],
"type": "string",
"description": "Filter by pipeline stage (NOVO = new, CONVIDADO = invited, EM_ENTREVISTA = interviewing, AVALIADO = evaluated, APROVADO = approved, REJEITADO = rejected). Defaults to all."
},
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language."
},
"minScore": {
"type": "number",
"description": "Only candidates whose interview score is at least this value (0 to 10)."
}
}
}Lists the company's job openings with their status and how many candidates each one has. Read-only. Use it to find a job id before looking at candidates or inviting someone.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter by job status. ATIVA = open/published, RASCUNHO = draft. Defaults to ATIVA. |
| language | string | Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language. |
{
"type": "object",
"properties": {
"status": {
"enum": [
"ATIVA",
"RASCUNHO",
"EM_APROVACAO",
"PAUSADA",
"CONCLUIDA",
"ENCERRADA",
"REJEITADA",
"all"
],
"type": "string",
"description": "Filter by job status. ATIVA = open/published, RASCUNHO = draft. Defaults to ATIVA."
},
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language."
}
}
}Shows the company's current plan, this cycle's usage (interviews and open jobs against the limits), the plans available with prices, and the link to subscribe or change plan in the Talpy dashboard. Read-only: it never charges or changes the subscription — payment happens only in the dashboard.
| Argument | Type | Description |
|---|---|---|
| language | string | Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language. |
{
"type": "object",
"properties": {
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language."
}
}
}Company-wide recruiting numbers: open jobs, candidates, completed interviews, average score and plan usage. Read-only. Contains no personal data.
| Argument | Type | Description |
|---|---|---|
| language | string | Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language. |
{
"type": "object",
"properties": {
"language": {
"enum": [
"pt-BR",
"pt-PT",
"en",
"es",
"de",
"fr"
],
"type": "string",
"description": "Optional. Language for the text in this tool's response (labels, notes, messages). Defaults to the account's language."
}
}
}