Skip to main content
Glama
recruitee-mcp

recruitee-mcp

by jnot807

Recruitee MCP

Claude 안에서 Recruitee / Tellent 파이프라인을 작업하세요. 역할을 조회하고, 지원자와 그에 대해 이미 기록된 모든 정보를 읽고, 소싱한 인물을 추가하고, 면접 평가를 작성할 수 있습니다 — 대화를 떠날 필요 없이요.

이 도구는 여러분의 컴퓨터에서 여러분의 Recruitee API 토큰으로 실행되므로, 기록되는 모든 것은 여러분의 이름으로 작성되며, 직접 클릭한 것과 똑같이 처리됩니다.


할 수 있는 일

열네 개의 도구. 아홉 개는 읽기, 다섯 개는 쓰기이며, 모든 쓰기 도구는 실행 전에 정확히 무엇을 할지 보여줍니다.

읽기

도구

제공 내용

rt_list_offers

역할 목록과 각각의 id, 상태, 지원자 수. 제목으로 선택적으로 필터링할 수 있습니다.

rt_get_stages

한 역할의 파이프라인 단계와 각 단계의 실시간 인원 수.

rt_offer_candidates

한 역할의 모든 지원자 — 단계, 불합격 여부, 평점. 회사 전체가 아닌 해당 역할에만 국한됩니다.

rt_get_candidate

전체 기록: 연락처 정보, 태그, 속해 있는 모든 역할, 지원 답변.

rt_search_candidates

이름으로 한 사람을 찾습니다.

rt_source_candidates

전체 데이터베이스 검색, 이력서 텍스트 포함 — 아래 참조.

rt_get_rating_scale

계정에 설정된 평점 척도. 판정을 추측하지 않도록 합니다.

rt_get_evaluations

지원자에 대한 모든 평가 — 평점, 메모, 단계, 평가자, 날짜 — 하나의 목록으로 평탄화.

rt_get_notes

지원자에게 이미 달린 메모, 최신순.

지원 답변은 한마디 할 가치가 있습니다: 급여 기대치 같은 것은 역할별로 반환됩니다. 세 곳에 지원한 사람은 그 질문에 세 번 답했기 때문에, 평탄한 목록으로는 그 답변들을 구분할 수 없습니다.

쓰기

도구

기능

rt_create_candidate

인물을 생성하고 한 번에 역할에 배치합니다. 이메일, 전화, 링크, 태그, 자기소개 블록, 유입 경로, 첨부 파일을 받습니다. 기본적으로 Sourced 단계에 배치됩니다.

rt_submit_evaluation

한 역할에 대해 엄지 평점과 근거를 지원자에게 기록합니다 — 프로필의 Evaluation 탭.

rt_set_stage

지원자를 그들이 속한 역할 중 하나의 다른 단계로 이동합니다. 불합격 배치를 거부하므로, 누구도 재자격화할 수 없습니다.

rt_attach_file

로컬 파일을 기존 지원자에게 첨부하며, 선택적으로 이력서로 지정할 수 있습니다.

rt_add_note

공개 또는 비공개 메모를 추가합니다. 판정이 아닌 맥락용 — 통화 요약, 소싱 근거, 요약.

쓰기 동작 방식

이름을 받지, id를 받지 않습니다. "Dana Whitfield", "Regional Sales Manager". 이름이 두 사람과 일치하면 하나를 고르는 대신 멈추고 목록을 보여줍니다 — 잘못된 사람에게 판정을 기록하는 것이 여기서 실제로 중요한 실패이기 때문입니다.

모든 쓰기는 먼저 미리보기를 보여줍니다. 첫 호출은 기록될 내용을 정확히 반환하며 아무것도 기록하지 않습니다. 승인한 후에만 실제로 기록됩니다. 새 지원자의 경우 미리보기에서 중복 확인도 실행하고 누락된 세부 정보를 알려주므로, 기록이 생긴 후가 아니라 생기기 전에 알 수 있습니다.

평가는 지원자의 실제 현재 단계에 대해 기록됩니다. 그것이 평가가 의미하는 바입니다. 의도적으로 재정의할 수는 있지만, 직접 알아낼 필요는 없습니다.

문단이 유지됩니다. Recruitee의 메모 필드는 일반 텍스트를 받지만 인터페이스는 그 텍스트를 HTML로 렌더링하므로, 문단으로 작성된 메모는 그대로 두면 한 덩어리의 연속 텍스트가 됩니다. 줄바꿈은 전달 과정에서 변환되고, 텍스트는 먼저 이스케이프되므로 작성 중 우연히 들어간 <가 삼켜지거나 렌더링되지 않습니다.

평점은 확인되며, 반올림되지 않습니다. 유효한 값은 구성된 척도에 따라 다릅니다 — 4점 엄지 척도에는 "중립"이 없고, 5점 척도에는 있습니다. 척도에 없는 값은 조용히 이웃 값으로 바뀌지 않고 거부됩니다.


Related MCP server: zoho-recruit

자체 데이터베이스에서 소싱

rt_source_candidates는 Candidates 화면이 실행하는 것과 동일한 검색을 실행합니다. 이는 rt_search_candidates와 다른 것입니다: 그쪽은 이름을 매칭하고, 이쪽은 모든 것, 이력서 텍스트 포함을 불리언 연산자로 매칭합니다.

query: "renewals AND churn"
query: "(SaaS OR B2B) AND \"net revenue retention\" NOT \"vice president\""

회사마다 직함이 일관되지 않고, 어떤 사람이 실제로 한 일은 이력서에 적혀 있기 때문에 이것이 중요합니다. 직함을 검색하는 것보다 증거를 검색하는 것이 낫습니다.

필터는 결합됩니다: offer, excludeOffer, jobStatus, stage, status, tags, sources. excludeOffer가 이 도구를 검색 상자가 아닌 소싱 도구로 만드는 핵심입니다 — 역할에 이미 있는 사람들을 결과에서 제외하여 인력을 보충할 때 사용합니다.

모든 결과는 왜 매칭되었는지 — HTML이 제거된 실제 문장 — 와 그 사람이 이미 속해 있는 모든 역할을 단계와 함께, 거절된 경우 그 사유까지 포함하여 제공합니다. 마지막 부분은 장식이 아닙니다: 기존 ATS의 대부분은 한 번은 거절된 적이 있습니다. 2년 전의 "지역이 안 맞음"은 오늘은 해당하지 않을 수 있지만, "평가 탈락"은 여전히 유효합니다. 아무도 그 정보 없이 새로운 발견으로 제시되어서는 안 됩니다.

필터 구성이 과해 보이는 이유

/search/new/candidates는 인식하지 못하는 것은 조용히 무시하고 오류 대신 필터링되지 않은 결과를 반환합니다. 그럴듯하지만 심각하게 잘못된 답을 얻는 네 가지 방법이 있으며, 모두 실제 계정으로 확인되었습니다:

실수

API가 하는 일

알 수 없는 엔티티 이름

전체 데이터베이스 반환

not_in 대신 nin

전체 데이터베이스 반환

알 수 없는 정렬

조용히 관련성 순으로 대체

같은 엔티티에 대한 두 개의 필터 객체

두 번째가 첫 번째를 대체

마지막 것이 가장 교묘합니다: 역할과 직무 상태를 두 개의 객체로 보내면 해당 직무 상태를 가진 모든 사람이 반환되고, 역할 필터가 삭제되었다는 어떤 표시도 없습니다. 그래서 엔티티에 대한 모든 제약은 단일 객체로 병합되고, 호출자가 제공한 키는 API에 도달하지 않습니다 — 이름은 실제 API에 대해 검증된 어휘에 매핑되며, 그 밖의 것은 예외를 던집니다.

반대로 잘못된 값은 안전합니다: 0을 반환하며, 읽는 사람에게 명백히 잘못된 것으로 보입니다. 0 결과에는 실제 단계 이름도 함께 반환되므로, 오타가 난 단계와 빈 단계를 구분할 수 있습니다.

node sourcing-test.js는 위 네 가지 실수 각각을 클라이언트가 거부하는지 포함하여 모든 것을 검사합니다.

설정

5분, 한 번만 하면 됩니다. Node 18 이상(node -v로 확인)과 Claude Code 또는 Claude 데스크톱 앱이 필요합니다.

1. 설치

npm install

2. 자신의 API 토큰 생성

Recruitee에서: Settings → Apps and plugins → API tokens, Personal API tokens 탭에 머물러 + Add token을 클릭합니다. 비밀번호를 요구한 후 값을 한 번 보여줍니다.

그 화면에 있는 동안 상단의 Current company details 패널에서 회사를 확인하세요. 숫자 ID 또는 subdomain 중 아무거나 작동합니다.

이것은 여러분의 토큰이어야 하며, 공유 토큰이 아니어야 합니다. Recruitee 토큰은 생성한 사람으로 작동하므로, 여러분의 토큰으로 작성된 평가는 여러분의 것으로 표시됩니다 — 그것이 핵심입니다. 채팅, 이메일, 티켓에 절대 붙여넣지 마세요.

3. 저장

npm run set-token -- <paste-your-token-here> <your-company>

나중에 토큰을 교체하려면 npm run set-token -- <new-token> — 회사는 기억됩니다.

session/token.json에 기록되며, 사용자 본인만 읽을 수 있고 gitignore됩니다. 환경 변수 RECRUITEE_API_TOKEN이 파일을 덮어쓰므로, 비밀번호 관리자에 보관하고 싶다면 그렇게 할 수 있습니다.

4. 작동 확인

npm run check

authenticated: true와 몇 개의 역할이 보이면 됩니다.

5. Claude에 연결

이 폴더 안에서 실행한 후 Claude를 재시작하세요:

claude mcp add recruitee -- node "$PWD/server.js"

Claude 데스크톱 앱을 사용하시나요? Settings → Developer → Edit Config를 열고 실제 절대 경로(pwd로 확인)로 다음을 추가하세요:

{
  "mcpServers": {
    "recruitee": {
      "command": "node",
      "args": ["/absolute/path/to/recruitee-mcp/server.js"]
    }
  }
}

그런 다음 Claude에게 물어보세요: "Recruitee의 공개 역할을 나열해 줘".


사용 예시

You: Regional Sales Manager 파이프라인에 누가 있나요?

You: Dana Whitfield를 찾아봐 — 급여로 뭘 적었고, 이미 어떤 평가가 있나?

You: 그 역할에 그녀 평가를 작성해 줘. 긍정: 갱신과 확장에 강하고, 9명 팀을 이끌었으며, PLG 경험은 없음.

Claude 평점, 메모, 역할, 단계를 보여주고 아무것도 기록하지 않습니다.

You: 네, 보내세요.


의도적으로 할 수 없는 것

Recruitee API 토큰은 생성한 사람의 권한을 정확히 가집니다 — 문서에는 "해당 사용자의 이름으로 웹 또는 모바일 애플리케이션에서와 동일한 작업을 수행할 수 있다"고 명시되어 있습니다. 발급할 수 있는 읽기 전용 토큰은 없습니다.

그래서 절제는 이 코드에 있습니다. 불합격 처리, 재자격화, 삭제, 숨김, 익명화는 모두 실제로 존재하고 문서화된 엔드포인트이지만, 이 서버는 구현하지 않습니다. 플래그 뒤에 숨겨진 것도, 주석 처리된 것도 아닙니다 — 아예 없으므로 어떤 지시, 프롬프트, 버그도 도달할 수 없습니다. 지원자 거절은 UI에서 직접 내리는 결정으로 남습니다.

단계 이동만 허용됩니다. rt_set_stage는 지원자를 한 역할의 파이프라인을 따라 진행시킵니다. 이는 판단이 아니라 장부 기록이며, 여기서 진행할 수 없는 파이프라인은 다른 곳에서 추적하는 것과 어긋나게 됩니다. 경계선은 불합격 처리에 그어져 있으며 문서화만 된 것이 아니라 강제됩니다: 이미 불합격된 배치는 거부됩니다. 단계를 변경하면 그 사람이 재자격화되기 때문입니다 — 장부 기록 호출의 부작용으로 누군가의 거절을 뒤집는 일을 방지합니다.

npm run smoke는 매 실행마다 다음 속성을 검증합니다: 파괴적 도구가 노출되지 않음, 단계 이동기가 불합격 배치를 거부하고 한 역할에 국한됨, 모든 쓰기가 확인 게이트를 광고함. 마지막 검사는 이름 패턴 목록이 아닌 도구 스키마에서 쓰기를 파생합니다 — 이전 버전은 새 도구를 조용히 놓치고 rt_set_stage를 전혀 테스트하지 않고 통과시켰습니다.


알아두면 좋은 것들

새 후보자는 "Sourced"에 배치됩니다. Recruitee의 create 엔드포인트는 항상 사람들을 "Applied"에 넣기 때문에, 소싱한 모든 사람이 실제 지원자들 사이에 분류될 수 있습니다. 그래서 생성 직후에 이동시키며, 이동이 실패하면 알려줍니다. stage를 전달하면 이를 덮어쓸 수 있습니다 — 실제로 지원한 사람은 "Applied", 이미 진행 중인 사람은 이후 단계를 지정하면 됩니다. 이후에 이동하려면 rt_set_stage를 사용하세요.

CV 설정은 기존 CV를 대체합니다. Recruitee의 set_as_cv는 CV를 추가하는 것이 아니라 슬롯을 교체하고 이전 파일을 일반 첨부 파일로 강등시킵니다. 따라서 rt_attach_file은 replaceCv를 전달하지 않는 한 이미 CV가 있는 후보자에게 CV를 설정하는 것을 거부합니다 — 파일로 존재하는 CV는 누군가의 결정이며, 이를 덮어쓴 흔적은 첨부 파일 목록의 추가 행 하나뿐입니다.

평가(evaluation)는 사용자 명의로 기록됩니다. "You evaluated"로 표시되어 직접 클릭한 것과 구분할 수 없습니다. 하지 않았거나 읽지 않은 대화에 대해 평가를 작성하지 마세요. 판단이 동료로부터 온 것이라면 메모에 그 사실을 명시하세요.

귀속(attribution)은 역방향으로는 신뢰할 수 없습니다. 어떤 API 토큰을 통해 작성된 것은 모두 해당 토큰 소유자에게 귀속됩니다. 따라서 누군가 동기화한 평가의 리뷰어는 실제 인터뷰를 진행한 사람이 아니라 동기화한 사람일 수 있습니다. 메모에 보통 실제 평가자를 명시합니다.

설문지 스코어카드는 지원되지 않습니다. 일반 평점 카드만 지원됩니다. API 문서는 모든 응답에 질문별 답변을 포함하지만 요청 본문에는 절대 포함하지 않으므로, 쓰기 형식은 실제 제출을 관찰해야만 파악할 수 있습니다. 계정에서도 문제가 되지 않을 수 있습니다: 인터뷰 단계를 거친 사람들에 대해 /results/scorecards가 비어 있다면 일반 평점 카드가 사용 중이며 누락된 것이 없다는 뜻입니다. 누군가 설문지 경로에 투자하기 전에 확인해 볼 가치가 있습니다.


작동 환경

이것은 로컬 stdio MCP 서버입니다 — Claude가 사용자 머신에서 프로세스로 실행하며, 토큰은 절대 머신을 벗어나지 않습니다.

  • Claude Code (터미널, 데스크톱 앱, IDE 확장) ✅

  • Claude 데스크톱 앱 ✅

  • 브라우저의 claude.ai ❌ — HTTPS로 접근 가능한 원격 MCP 서버에만 연결되므로, 이 서버를 호스팅하고 모든 사용자의 Recruitee 토큰을 해당 호스트에 저장해야 합니다.


구성

변수

용도

RECRUITEE_API_TOKEN

저장된 토큰 대신 환경 변수의 토큰 사용

RECRUITEE_COMPANY_ID

저장된 회사 대신 환경 변수의 회사 사용

문제 해결

표시되는 내용

조치 방법

"No Recruitee API token"

3단계가 실행되지 않았거나 다른 폴더에서 실행되었습니다. 여기로 cd 후 npm run check를 시도하세요.

"authenticated": false

토큰이 잘못 입력되었거나 폐기되었습니다. 새 토큰을 생성하고 3단계를 다시 수행하세요.

Claude가 도구를 인식하지 못함

Claude를 제대로 다시 시작하세요 — 창을 닫는 것이 아니라 완전히 종료하세요. 5단계가 이 폴더 안에서 실행되었는지 확인하세요.

"That name matches two candidates"

의도된 동작입니다. Recruitee에서 해당 인물을 열고 URL 끝의 숫자를 Claude에게 알려주세요.

기타 모든 경우

npm run smoke를 실행하고 출력된 내용을 보내주세요.

개발

npm run smoke     # self-check: tool list, no destructive tools, confirm gates, one live read
npm run sourcing  # 20 checks on the search filters, including the four silent-failure modes
npm run check     # prove the token
npm start         # run the server directly (it speaks JSON-RPC on stdin/stdout)

문서가 아닌 탐색을 통해 발견한 두 가지 구현 참고 사항:

  • 파일 업로드는 문서화되어 있지 않습니다. 참조 문서에는 서버 측 path를 담은 JSON 본문이 설명되어 있지만, 그 path를 얻는 방법은 설명되어 있지 않습니다. 파일 부분 이름을 attachment[file]로 지정한 일반 multipart POST가 작동합니다 — 단순한 file은 500을 반환하며, 후보자 id를 쿼리 매개변수로 전달하면 아무에게도 연결되지 않은 첨부 파일이 생성됩니다. 파일을 CV 슬롯으로 승격하면 새 id와 생성된 파일 이름으로 대체되므로, 업로드는 방금 업로드된 id가 아닌 후보자의 CV URL을 기준으로 검증됩니다.

  • /search/new/candidates는 자체 쿼리 매개변수를 무시하고 회사의 모든 레코드를 반환하므로, 이름 검색은 대신 /candidates?query=를 사용합니다. 파이프라인 단계는 단계별로 그룹화된 /offers/{id}/placements에서 가져오며, 역할에 사용 가능한 템플릿을 단계 없이 나열하는 /offers/{id}/pipeline_templates에서는 가져오지 않습니다.

Available Tools

14 tools
rt_add_noteA

Add a note to a candidate. Use for context that is not a verdict — an assessment summary, sourcing rationale, or a call recap. Accepts a name or an id. Two-call gate.

Visibility "public" means anyone with access to the candidate can read it, which is usually what you want for a shared hiring record.

NameRequiredDescriptionDefault
bodyYes
confirmNo
candidateYesFull name, or a candidate id.
visibilityNoDefault public.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and largely delivers. It discloses a notable behavioral trait ('Two-call gate') and explains the visibility semantics for shared hiring records. It drops a point because 'two-call gate' is cryptic — the agent isn't told what the two calls are or how confirm factors into them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences with front-loaded purpose and no fluff. Each sentence contributes new information. Slight deduction because 'Accepts a name or an id' restates candidate param detail, and the cryptic 'Two-call gate' fragment could have been replaced with a half-sentence explanation at no length cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations and no output schema, the description covers a lot: purpose, usage boundaries, a behavioral quirk, and visibility implications. Gaps remain — no return value discussion, no explanation of the two-call flow or when confirm is needed — but the most decision-critical context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, so the description must compensate for body and confirm. It adds 'Two-call gate' (a hint at confirm's role) and 'Accepts a name or an id' (redundant with the candidate param). Body is never addressed, and confirm's role is only hinted at. Partial compensation, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description leads with a specific verb+resource pair, 'Add a note to a candidate', and immediately carves out scope with 'context that is not a verdict'. The examples (assessment summary, sourcing rationale, call recap) clearly distinguish it from the sibling rt_submit_evaluation, so the agent can differentiate at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance with concrete examples and an exclusion clause ('not a verdict') that points toward when NOT to use it. While it doesn't name the sibling tool (rt_submit_evaluation) directly, the 'not a verdict' contrast plus the visibility default explanation gives clear decision context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_attach_fileA

Attach a local file to an existing candidate — a CV, or a summary document. Set asCv to make it their CV rather than a plain attachment; a record with no CV shows "No CV or resume yet" in Tellent.

Setting a file as the CV REPLACES any CV already on file, demoting theirs to a plain attachment — so that is refused unless you pass replaceCv.

Only ever attach a file the user named. Never go looking for one, and never substitute a different file if the named one is missing. Two-call gate: preview, then confirm.

The upload is verified against the candidate afterwards; if it comes back unlinked, say so rather than reporting it as attached.

NameRequiredDescriptionDefault
asCvNoMake it the candidate's CV. Default false.
confirmNo
filePathYesAbsolute path to the local file.
candidateYesFull name, or a candidate id.
replaceCvNoAllow replacing a CV already on file. Default false — setting a CV REPLACES the existing one and demotes it to a plain attachment, so that needs saying out loud.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly. It discloses the destructive CV replacement behavior, the requirement for replaceCv, the two-call confirmation gate, and the post-upload verification expectation: "if it comes back unlinked, say so rather than reporting it as attached."

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then covers side effects, safety rules, and verification behavior. Every sentence earns its place, and the structure moves from high-level action to specific constraints without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no annotations and no output schema, the description is impressively complete: it covers the key side effect, required confirmation flow, file-source restriction, and post-verification behavior. It does not detail file-type limits or exact response shapes, but those are not essential for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is 80%, the description adds meaningful semantics beyond the schema: it explains asCv's role, replaceCv's side effect of demoting an existing CV, and the confirm parameter via the "preview, then confirm" gate. This goes well above the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: "Attach a local file to an existing candidate — a CV, or a summary document." It clearly distinguishes itself from sibling tools like rt_add_note or rt_create_candidate by focusing on file attachment and the CV-vs-plain-attachment distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear procedural context: attach only files the user named, never substitute files, and use a two-call gate (preview, then confirm). It does not explicitly name alternatives or say when not to use the tool, but the usage boundaries are well implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_create_candidateA

Create a candidate in Recruitee/Tellent AND place them on a role, in one call. Works entirely from what you are told here — nothing has to exist anywhere else first.

WHAT YOU NEED. Required: the role (its title is enough, e.g. "VP of Customer Success") and the person's full name. Strongly recommended, because a record without them is close to useless to a recruiter: email, and either a LinkedIn URL or a CV file. Optional: phone, tags, a coverLetter block for their background and why they are worth a look, and where they came from. If the user has not given you the recommended fields, ASK for them before creating — the preview call lists exactly what is missing.

TWO-CALL GATE, ALWAYS. The first call (confirm omitted or false) returns what would be created, what is missing, and any existing candidates with the same name — and writes nothing. Show that to the user. Only call again with confirm true once they have approved THIS person for THIS role. One person per confirmation.

THIS CREATES A REAL RECORD FOR A REAL PERSON, visible to the whole hiring team and counted in reporting. The preview always runs a duplicate check; if it finds a match, resolve that with the user rather than creating a second record that splits their history.

DO NOT INVENT DETAILS. An empty field beats a guessed one.

STAGE. Defaults to "Sourced", which is right for anyone we went looking for. Pass stage: "Applied" only for someone who genuinely applied. Recruitee's create endpoint has no stage parameter, so this moves them immediately after creation and tells you if that did not take.

NameRequiredDescriptionDefault
asCvNoTreat the attached file as their CV rather than a plain attachment. Default true when attachFile is a CV.
nameYesFull name.
tagsNo
emailNoStrongly recommended — without it nobody can contact them from the ATS.
linksNoProfile URLs, e.g. their LinkedIn.
offerYesRole title or offer id, e.g. "VP of Customer Success" or 2683651.
phoneNo
stageNoStage name. Default "Sourced".
confirmNoFalse/absent = preview only.
sourcesNoWhere they came from, e.g. ["LinkedIn"].
attachFileNoAbsolute path to a local file to attach — a CV, or a summary document.
coverLetterNoFree text: their background, and why they are worth looking at.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and does so effectively. It discloses that this creates a real, visible record affecting reporting, always runs a duplicate check in preview, moves the stage immediately after creation, and reports if that stage change fails. It also warns against inventing details, providing a clear safety profile for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but exceptionally well structured with clear headings (WHAT YOU NEED, TWO-CALL GATE, etc.) and front-loaded purpose. Every sentence provides actionable information—no filler or repetition. The length is justified by the tool's complexity and the absence of annotations or output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 12 parameters, no annotations, and no output schema, the description covers all critical operational context: prerequisites, recommended fields, the preview/confirm workflow, duplicate handling, stage behavior, and fallback when the stage move fails. An agent has everything needed to invoke the tool correctly and avoid common pitfalls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (83%), but the description adds substantial meaning beyond it: 'offer' can be title or ID, 'confirm' false/absent means preview only, 'stage' defaults to 'Sourced' with rationale, and it explains the interplay between attachFile/asCv and the recommended fields. This helps the agent map user intent to parameters accurately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific and complete statement: 'Create a candidate in Recruitee/Tellent AND place them on a role, in one call.' This clearly names the resource (candidate), the action (create + place on role), and the composite nature that distinguishes it from single-action siblings like rt_set_stage or rt_attach_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use and how-to-use guidance: required vs. recommended fields, asking for missing info before creating, the two-call gate (preview then confirm), when to pass stage 'Applied' vs. default 'Sourced', and handling duplicate candidates. It also explains the composite action's benefit over separate calls, though it doesn't name sibling tools directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_get_candidateA

Full record for one candidate: contact details, tags, every placement with its stage, and their application answers. Salary answers live in groupedOpenQuestionAnswers and are PER OFFER — read the offer id on each, because someone who applied to several roles carries several answers and the flat list cannot tell them apart.

NameRequiredDescriptionDefault
candidateIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must reveal behavior. It warns about per-offer salary answers and the need to read the offer id, which is a subtle but critical nuance. It doesn't explicitly state read-only, but a 'get' operation implies that. The extra context about the flat response is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first lists the returned content, the second flags a caveat. No filler, front-loaded purpose. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what is returned and highlights a tricky aspect of the data shape (per-offer answers). It doesn't explain the response envelope, but with no output schema present, the description could mention the return format. Still, it's fairly complete for a single-record GET.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required parameter (candidateId) with type number, and the description does not elaborate on it. While the meaning is obvious from context, the description adds no parameter detail, and schema coverage is 0%. A brief mention of what to pass would raise this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Full record for one candidate' and enumerates the contents (contact details, tags, every placement, application answers). This clearly distinguishes it from sibling tools like rt_get_notes or rt_search_candidates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the tool to use when a complete single-candidate snapshot is needed)Skip. It doesn't explicitly contrast with alternatives, but the

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_get_evaluationsA

Every evaluation on a candidate: rating, note, stage, reviewer and date, flattened into one list, newest last.

READ THIS BEFORE WRITING ONE, so you build on what other interviewers recorded instead of duplicating it.

IF YOU ARE COPYING THESE SOMEWHERE ELSE, carry the evaluation id across so a second sync updates the same row instead of duplicating it.

ATTRIBUTION IS UNRELIABLE COMING BACK. Recruitee files everything written through an API token under the token owner, so reviewer may be the token holder rather than whoever ran the interview. The note usually names the real one. Do not present the reviewer as fact when the note disagrees with it.

NameRequiredDescriptionDefault
offerIdNoScope to one role. Recommended.
candidateIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full disclosure responsibility. It reveals the output ordering (newest last), flattening behavior, and critically warns that reviewer attribution is unreliable due to API token ownership, advising to rely on the note field. This goes beyond a simple read operation and provides valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose in the first sentence, then adds critical usage warnings in subsequent blocks. It is somewhat verbose with repeated advice about duplication and syncing, but each sentence provides actionable information. The structure is organized and not unnecessarily padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with two parameters and no output schema, the description covers the essential aspects: what data is returned, ordering, and key caveats. It also includes practical usage guidance. The lack of pagination or limit details is a minor gap, but overall it is sufficiently complete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes offerId but leaves candidateId without a description (50% coverage). The tool description mentions 'candidate' but does not elaborate on parameter semantics or constraints. It adds minimal meaning beyond the schema; candidateId is implied as the key but not explicitly explained, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all evaluations for a candidate, listing specific fields (rating, note, stage, reviewer, date) and the output format (flattened list, newest last). This is a specific verb+resource combination that distinguishes it from siblings like rt_get_notes (notes only) and rt_submit_evaluation (writing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs users to read this before writing an evaluation, implying it should be used before rt_submit_evaluation to avoid duplication. It also advises carrying the evaluation ID when syncing to prevent duplicates. While it doesn't name alternative tools, the context clearly indicates when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_get_notesA

Notes already on a candidate, newest first.

NameRequiredDescriptionDefault
limitNo
candidateIdYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that notes are returned 'newest first', which is a behavioral detail. However, it does not disclose whether this operation is read-only or destructive, or if it requires authentication, or if there are any side effects. For a simple 'get' operation, it might be safe to assume it's read-only, but the description doesn't explicitly state that. The lack of annotations means the description should have provided more safety context, but it does add the sorting behavior. Since it does not contradict annotations (none exist) and discloses a behavior, a 3 is reasonable. Adding 'read-only' or 'does not modify' would elevate it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence: 'Notes already on a candidate, newest first.' It is highly concise, front-loaded with the purpose, and includes a key sorting detail. No wasted words. Perfectly sized for a simple tool. This is a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple: it retrieves notes for a candidate. With 2 params, no output schema, and no nested objects, the description is almost sufficient. It provides the sorting order. However, it lacks any information about the output format (though no output schema exists), and does not mention whether it returns all notes or if pagination is implied. Also, it doesn't clarify what 'notes' are in this system—are they internal notes? Since there is a sibling 'rt_add_note', it likely are notes added by users. The description could have added a bit more context about the notes' source or content, but given the simplicity, a 3 is appropriate. It gives the essential purpose and sorting, but lacks some depth.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter documentation. It does not mention any parameters in the description: candidateId is required but its semantic is obvious from its name; limit is also self-explanatory as a numeric limit. The description does not explicitly state that candidateId identifies the candidate whose notes are retrieved, but that's implied by the tool name and description. Since there are only 2 parameters and both are fairly clear from their names, the description doesn't need to elaborate much. However, because coverage is 0%, the description could have added a sentence like 'Provide candidateId to fetch notes, and optionally set limit to cap the result count.' That would improve it. Given the simplicity, a 3 is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states what the tool does: it retrieves notes for a candidate, sorted newest first. It clearly identifies the resource (notes) and the subject (candidate). It does not explicitly distinguish from siblings like rt_add_note or rt_get_candidate, but the verb 'get' and resource 'notes' are clear. Slight ambiguity: 'Notes already on a candidate' implies it's a read operation, but it doesn't explicitly say 'retrieve' or 'list'. However, the meaning is clear enough. Not quite a 5 because it doesn't differentiate from rt_get_evaluations or others that might also be about candidate details, but it's specific to notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool vs alternatives. It implies it is for reading notes, but without context on when to choose this over rt_add_note or rt_get_candidate. It lacks any mention of prerequisites, ordering, or alternatives. However, the tool name 'rt_get_notes' and description are self-explanatory enough for a simple read operation. A 3 is appropriate for a description that gives basic context but no explicit when-to-use alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_get_rating_scaleA

The rating scale this company is configured for. Read it BEFORE writing an evaluation: the valid rating values differ per tenant (a 4-point thumbs scale has no "neutral", a 5-point one does), and guessing files the wrong verdict on a real person.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It discloses that rating values vary by tenant and warns that incorrect guessing can file a wrong verdict, adding meaningful behavioral context. However, it does not explicitly note that the tool is read-only or describe the return structure, which is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, followed by a concise justification. No wasted words; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool, the description is fully sufficient. It states what it returns, why it's critical to use it before evaluations, and gives an example of tenant-specific differences. It covers the essential context for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific information, but none is needed. It doesn't clutter with unnecessary param talk.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves the company's configured rating scale. It uses an implicit 'get' verb and specific resource ('rating scale'), distinguishing it from sibling tools like rt_get_stages or rt_get_notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use it: 'Read it BEFORE writing an evaluation.' It also explains why (rating values differ per tenant), giving clear context for selection and timing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_get_stagesA

The pipeline stages of one offer, with their ids. Needed before writing an evaluation, because an evaluation is filed against a stage.

NameRequiredDescriptionDefault
offerIdYesFrom rt_list_offers.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It implies a read operation via 'get' but does not explicitly state it is non-mutating or side-effect-free. The description adds minimal behavioral context beyond the basic retrieval.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise—two sentences that front-load the purpose and usage. Every word contributes value, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one parameter and no output schema, the description is sufficiently complete. It explains what is returned (stages with IDs) and why it is needed, covering all necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes the parameter ('From rt_list_offers'), and the description adds no additional parameter-level detail. With 100% schema coverage, the description does not need to compensate, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves pipeline stages for a specific offer, including their IDs. It also explains its role as a prerequisite for evaluations, distinguishing it from sibling tools like rt_set_stage or rt_get_evaluations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when this tool is needed ('Needed before writing an evaluation'), providing clear usage context. It does not explicitly mention alternatives or when not to use, but the context sufficiently guides the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_list_offersA

List the roles (offers) in Recruitee/Tellent with their ids, status and candidate counts. Start here — every other tool is keyed on an offer id.

NameRequiredDescriptionDefault
limitNoMax offers (default 50).
queryNoFilter by title, e.g. "Customer Success".

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clearly indicates a read/list operation that returns ids, status, and candidate counts, implying no side effects. It also subtly reveals that the response contains offer ids needed elsewhere, but it does not detail pagination or return envelope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The first sentence states purpose and outputs; the second provides navigational guidance. Everything earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (two optional params, no output schema). The description sufficiently covers what it returns and why it should be used first. It lacks explicit return format details, but given the schema and the description's scope, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes both parameters (limit and query) with 100% coverage. The description adds no additional parameter-level nuance, so baseline 3 is appropriate; it does not compensate beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and names the resource 'roles (offers) in Recruitee/Tellent' with the exact fields returned (ids, status, candidate counts). It also distinguishes itself as the starting point, making its role clear among sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Start here — every other tool is keyed on an offer id' is explicit guidance on when to use this tool first and why: to obtain offer ids for the other tools. This effectively tells the agent to use this tool before any other tool that requires an offer id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_offer_candidatesA

Everyone on ONE offer, with their stage, disqualification state and ratings — genuinely scoped to that offer rather than the whole company database.

NameRequiredDescriptionDefault
limitNoMax candidates (default 100).
offerIdYesFrom rt_list_offers.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the scope (single offer) and the data returned (stage, disqualification, ratings), but does not mention pagination behavior, default limit, or any side effects. Since it's a read operation, the lack of mutation warnings is acceptable, but more detail on output structure would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that packs essential information: scope, data returned, and differentiation from broader queries. No fluff, front-loaded with the key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no output schema), the description is sufficient. It explains the core functionality and scope. However, it could mention that the output includes a list of candidates and possibly pagination, but the schema covers the limit parameter, so the description is adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds context that the tool is scoped to one offer, which clarifies the offerId parameter's role. The limit parameter is self-explanatory, so the description adds minimal extra value, but the scoping note enhances understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns candidates for a single offer, including stage, disqualification state, and ratings. It explicitly distinguishes itself from a company-wide database query, which differentiates it from sibling tools like rt_search_candidates or rt_get_candidate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving candidates scoped to a specific offer, and the schema notes offerId comes from rt_list_offers, providing a clear prerequisite. However, it does not explicitly state when not to use it or mention alternatives, though the scoping hint helps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_search_candidatesB

Find candidates by name or keyword across the company.

NameRequiredDescriptionDefault
limitNoDefault 25.
queryYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description gives minimal behavioral detail. It does not mention whether the operation is read-only, any side effects, return format, pagination, or ordering, leaving the agent uncertain about the tool's effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the core action. No unnecessary words or details, making it easy to parse and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks essential context such as the return structure, whether results are paginated, or any error/edge case behaviors. Without an output schema, the agent cannot anticipate what the tool returns, making the description incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The query parameter's semantics are partially clarified by the description ('by name or keyword'), but the limit parameter is not described. The schema only provides type and default, so its meaning (e.g., maximum number of results) is not explicitly stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to find candidates by name or keyword. It distinguishes itself from sibling tools like get_candidate by indicating a search across the company rather than a specific lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when searching by name or keyword, but does not explicitly contrast with alternatives such as get_candidate or list_candidates. There is no direct guidance on when to prefer this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_set_stageA

Move an existing candidate into another pipeline stage on ONE of their roles — to advance them, or to mirror a move already made wherever your pipeline is tracked. Scoped to an offer because a candidate can sit on several pipelines at once.

Call rt_get_stages first if you do not know the offer's stage names; an unknown name is refused and the real ones are listed back. If you are mirroring a move from another system, do not assume the two name stages the same way — ask which stage is meant rather than picking the nearest word.

THIS IS NOT A REJECTION TOOL. It cannot disqualify anyone, and it refuses to move a candidate who has already been disqualified, because that would requalify them. Only move somebody because a person moved them or told you to — never because a meeting was booked, a score looked good, or the pipeline seemed stale.

Two-call gate: preview, then confirm. The move is verified by re-reading the candidate afterwards; if it did not land, that is reported rather than claimed as done.

NameRequiredDescriptionDefault
offerYesRole title or offer id — which pipeline to move them along.
stageYesTarget stage name (or id) on that offer, e.g. "P&C Interview".
confirmNo
candidateYesFull name, or a candidate id.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that the tool refuses to move disqualified candidates, cannot disqualify anyone, requires a preview-then-confirm two-call gate, and verifies the move by re-reading the candidate afterward. This is rich behavioral context beyond any structured field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but every sentence earns its place. It is front-loaded with the core action, then systematically covers prerequisites, mirroring caveats, non-goals, and the confirmation flow. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's mutation risk, the absence of annotations, and no output schema, the description is remarkably complete. It covers prerequisites, failure behavior, safety constraints, confirmation requirements, and post-move verification. It leaves little ambiguity for an agent deciding whether and how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, with the `confirm` parameter lacking a description. The description compensates by explaining the two-call gate ('preview, then confirm'), which gives meaning to `confirm`. It also clarifies stage-name behavior ('an unknown name is refused and the real ones are listed back'), adding value beyond the schema's basic parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Move an existing candidate into another pipeline stage on ONE of their roles.' It clearly distinguishes itself from sibling tools like rt_get_stages (read-only stages) and explicitly disclaims rejection functionality, making its scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: advance a candidate or mirror an external move. It also provides alternatives and exclusions: call rt_get_stages first if stage names are unknown, ask which stage is meant when mirroring across systems, and never use as a rejection tool. This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_source_candidatesA

SEARCH THE WHOLE CANDIDATE DATABASE — every person who ever applied or was added, not just one role. This is the sourcing tool: use it to find people already in the ATS before going out to LinkedIn, because someone who applied to a similar role last year is the cheapest good candidate there is.

IT SEARCHES CV TEXT, not just names and titles. query takes boolean operators exactly as the Recruitee search bar does: "renewals AND churn", "(SaaS OR B2B) AND expansion". Every result carries whyMatched — the actual sentences that matched — so a coincidental hit can be dismissed without opening the profile.

SEARCH FOR THE EVIDENCE, NOT THE JOB TITLE. Titles are inconsistent between companies; what someone DID is written in their CV. Prefer "quota AND renewals" over "Account Manager", and run several narrow searches rather than one broad one.

MOST OF THIS DATABASE WAS REJECTED ONCE. Every result lists each role the person sits on with its stage and, where they were turned down, the reason. Read it before you suggest anybody: "wrong location" two years ago may not apply now, "failed the assessment" still does. Never present someone as a fresh find without saying they have been through the process before, and for which role.

excludeOffer keeps people already on a role out of the results, which is what you want when topping one up. Combine filters freely — they AND together.

NameRequiredDescriptionDefault
pageNoFor paging past the first set.
tagsNoTag names. An unknown tag throws and lists the real ones.
limitNoMax 100, default 25.
offerNoLimit to people on this role (title or id).
queryNoFull-text, boolean, across CV and profile. e.g. "renewals AND churn".
stageNoPipeline stage name, e.g. "Applied". A stage this company does not have returns nothing and lists the real ones.
sortByNorelevance_desc (default) | created_at_desc | created_at_asc | last_activity_at_desc.
statusNoqualified | disqualified | new | viewed | overdue.
sourcesNoSource names, e.g. "linkedin.com".
jobStatusNopublished | archived — the status of the role they are on.
excludeOfferNoExclude people already on this role (title or id).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations given, the description carries the full burden of behavioral disclosure. It explains that the tool searches CV text, that results include whyMatched for validation, that it lists role stages and rejection reasons, and that filters AND together. It even warns about interpretation: 'wrong location' two years ago may not apply now, 'failed the assessment' still does. This is rich, useful behavioral context beyond what schema or annotations would provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but every sentence earns its place. It is front-loaded with the core purpose, then progressively adds query syntax, result interpretation, rejection history caution, and filter combination advice. The structure is clear and easy to scan, and despite the length, it is not verbose—each paragraph introduces new, useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, no output schema, and no annotations, this description is remarkably complete. It covers the tool's scope (whole database), search semantics (boolean, CV text), output characteristics (whyMatched, role history), filtering behavior (AND combination, excludeOffer), and provides actionable best practices. It leaves minimal gaps for the agent to infer incorrectly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds extra meaning for 'query' by specifying boolean operator support and giving examples, and for 'excludeOffer' by explaining its intended use case. However, it does not add such depth to every parameter, though all are already documented in the schema. This is a good increment over the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens by clearly stating 'SEARCH THE WHOLE CANDIDATE DATABASE — every person who ever applied or was added, not just one role.' This distinguishes it from the sibling tool rt_search_candidates (which likely targets a single role). It also labels itself as 'the sourcing tool,' giving it a clear role within the offer lifecycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use it: 'use it to find people already in the ATS before going out to LinkedIn.' It also explains when NOT to use it or how to narrow down: 'excludeOffer keeps people already on a role out of the results, which is what you want when topping one up.' It advises on query syntax and search strategy ('Search for the evidence, not the job title'), and warns about rejection history.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rt_submit_evaluationA

Write an evaluation (a thumbs rating plus a note) onto a candidate for one role — the "Evaluation" tab of their profile.

WORKS BY NAME. Give the person's name and the role title and the text; ids are not needed. If a name matches more than one candidate it refuses and lists them rather than guessing — filing a verdict on the wrong person is the failure that matters here.

THE STAGE IS AUTOMATIC. It files against wherever the candidate actually sits on that role, which is what an evaluation means. Only pass stage to override that deliberately.

TWO-CALL GATE, ALWAYS. First call previews, second call with confirm true writes.

IT IS FILED IN THE TOKEN OWNER'S NAME. Confirmed in practice: it appears in Tellent as "You evaluated", indistinguishable from one clicked by hand. So never write one as though it were another interviewer's verdict, and never write one for a conversation the token owner did not have or has not read. If the judgement came from someone else, say so in the note.

CALL rt_get_rating_scale IF UNSURE. Valid ratings depend on the configured scale. This company is on a 4-point thumbs scale: strong_no, no, yes, strong_yes ("yes" scores 4/5, 75%). A value the scale does not have is rejected rather than rounded.

PUT THE REASONING IN ratingNote. A bare rating nobody can audit is not worth writing. Where the verdict came from a screen or interview, say which.

Structured questionnaire scorecards (per-question answers) are NOT supported — only the rating card. If a role uses a questionnaire template, say so rather than flattening a multi-question scorecard into a single rating.

NameRequiredDescriptionDefault
offerYesRole title, or an offer id.
stageNoOptional override. Defaults to where they actually are.
ratingYesstrong_no | no | yes | strong_yes.
confirmNoFalse/absent = preview only.
candidateYesFull name, or a candidate id.
ratingNoteNoThe reasoning, in the words that should stand on the record.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does so excellently: it reveals that the tool operates by name, refuses ambiguous matches to avoid mis-filing, automatically determines the stage, requires a two-call gate with explicit confirmation, and files in the token owner's name (with practical implications). It also notes that structured questionnaires are not supported, which is critical behavioral context. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose but highly dense with critical usage constraints. It uses all-caps headings for key points, making it scannable despite length. However, some repetition exists (e.g., the two-call gate is mentioned multiple times, and the 'IT IS FILED IN THE TOKEN OWNER'S NAME' section is extensive). It could be more concise without losing essential details, but the structure aids comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity (6 parameters, critical safety implications, no output schema or annotations), the description is remarkably complete. It covers the purpose, usage criteria, behavioral constraints, parameter uses, and edge cases (ambiguous names, unsupported questionnaires). The lack of an output schema is compensated by explaining the two-call preview/write flow, making the behavior fully predictable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameters descriptively (candidate, offer, rating, ratingNote, stage, confirm), but the description goes further by clarifying the meaning of 'offer' (role title or id, not an offer object) and 'candidate' (full name, not id). It also emphasizes that ratingNote should contain auditable reasoning. Although it doesn't detail every parameter's syntax, the high schema coverage (100%) reduces the need. The description adds value by explaining the two-call gate and the confirmation semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes an evaluation (rating + note) onto a candidate for a role, targeting the 'Evaluation' tab. It explicitly distinguishes it from sibling tools like rt_get_evaluations (which reads) and rt_add_note (which likely writes a generic note, not an evaluation). The purpose is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides extensive usage guidance: it explains when to use this tool (to file an evaluation), when not to (never for conversations the token owner didn't have), and explicitly directs to call rt_get_rating_scale if unsure about ratings. It also names sibling tools (rt_get_rating_scale) and clarifies the two-call gate pattern, leaving no ambiguity on when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv1.0.0
    • First observedrt_add_note
    • First observedrt_attach_file
    • First observedrt_create_candidate
    • First observedrt_get_candidate
    • First observedrt_get_evaluations
    • First observedrt_get_notes
    • First observedrt_get_rating_scale
    • First observedrt_get_stages
    • First observedrt_list_offers
    • First observedrt_offer_candidates
    • First observedrt_search_candidates
    • First observedrt_set_stage
    • First observedrt_source_candidates
    • First observedrt_submit_evaluation

TDQS

A3.9/5.0

Scored across 14 tools

Disambiguation3/5

rt_search_candidates and rt_source_candidates both search the candidate database with substantial overlap; source is a superset with CV-text boolean search and rejection history, which can cause confusion about which to use. Other read and write tools are clearly separated by resource and action, making the pair the main source of ambiguity.

Naming Consistency4/5

All tools share the rt_ prefix and most follow a consistent verb_noun pattern (list_offers, get_stages, create_candidate, submit_evaluation). Two deviations exist: rt_offer_candidates is a noun-noun phrase rather than an action, and rt_source_candidates uses the domain-specific verb 'source' instead of a generic search verb, but the overall pattern remains predictable.

Tool Count5/5

14 tools is well-scoped for an ATS server: candidate lifecycle, pipeline stages, evaluations, notes, attachments, offers, search, and rating scale are each covered. No tool feels redundant, and none is missing enough to make the count feel thin or bloated.

Completeness4/5

Core recruiting workflows are covered: sourcing, creating candidates, moving them through stages, filing evaluations, adding notes, attaching files, and reading offer/candidate data. Obvious gaps are the lack of a candidate profile update tool and no explicit rejection/disqualification operation, but the design deliberately scopes set_stage away from rejection, and the rest of the lifecycle is well supported.

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables Claude to manage Zoho Recruit ATS operations including candidates, jobs, interviews, analytics, email, and AI-assist through natural language.
    20
    -
  • F
    license
    A
    quality
    D
    maintenance
    Connects Claude to the Pandapé recruitment API, enabling natural language management of vacancies, structured candidate review against custom criteria, pipeline stage updates, and CV downloads.
    14
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude to securely search, read, and update your ATS data — candidates, mandates, pipelines, tasks, and interviews — through natural language, with configurable write permissions and confirmation for actions like scheduling and emailing.
    -