freehire
freehire MCP 서버
freehire 채용 API 위에 구동되는 MCP 서버입니다. 모든 MCP 호스트(Claude Desktop, Claude Code, 또는 호환되는 에이전트)가 브라우저 없이도 개인 API 키로 인증하여 IT 직무를 검색·필터링·지원할 수 있게 해줍니다. 채용 공고는 기업 채용 게시판에서 직접 크롤링되어, 294K개 기업의 3.3M+ 오픈 포지션을 단일 스키마로 정규화하고 기술 스택, 경력, 지역, 근무 형태로 태그합니다(실시간 수치).
freehire CLI를 미러링한 서버입니다. 같은 API, 같은 자격 증명을 사용하며 셸 명령어 대신 MCP 도구로 노출합니다.
설치
전역 설치가 필요 없습니다. 호스트가 npx로 실행합니다. 호스트의 MCP 구성에 추가하세요(Claude Desktop → 설정 → 개발자 → 구성 편집, 또는 Claude Code라면 ~/.claude.json):
{
"mcpServers": {
"freehire": {
"command": "npx",
"args": ["-y", "freehire-mcp"],
"env": { "FREEHIRE_TOKEN": "fhk_xxxxxxxx" }
}
}
}웹 앱(freehire.me → 계정 메뉴 → API 키)에서 fhk_… 키를 생성하세요. 이미 freehire CLI(freehire auth login)를 사용 중이라면 env를 생략해도 됩니다. 서버는 동일한 ~/.freehire/creds.json 파일을 읽습니다.
Related MCP server: jobfinder-mcp
인증
토큰과 API 기본 URL은 다음 우선순위로 결정됩니다. 환경 변수 → ~/.freehire/creds.json → 기본값 https://freehire.me
항목 | 출처 |
토큰 |
|
API 기본 URL |
|
서버는 자격 증명 파일을 읽기만 합니다(쓰지 않습니다. 로그인은 여전히 CLI가 담당합니다). 토큰이 설정되지 않은 경우 서버가 시작 실패하는 대신, 도구는 확실한 "인증되지 않음" 오류를 반환합니다.
도구
도구 | 목적 |
| 인증된 사용자(키 확인). |
| 필터/스킬 용어 사전: 모든 패싯의 실시간 값과 개수. 먼저 호출하세요. |
| 키워드 + 패싯 채용 검색; 각 공고의 전체 설명을 마크다운으로 포함하고 총 일치 수를 반환합니다. |
| 스킬 목록을 실시간 시장 수요와 비교해 점수화(커버리지 + 격차). |
| 단일 채용 공고의 슬러그 전체 내용. |
| 지원한 공고로 표시. |
| 즐겨찾기 저장 / 저장 취소. |
| 지원 단계 설정(서버 검증). |
| 자유 텍스트 메모 첨부. |
| 호출자가 추적하는 채용 공고(전체/조회/저장/지원)와 단계 및 메모. |
| 채용 공고에 대한 맞춤화를 시작(또는 재개)합니다. 다른 |
| 호출자의 맞춤 CV 목록 및 각각 작성된 공고 정보. |
| 맞춤 CV가 지향해야 할 적합도 분석 결과(missing_have vs missing_gap). |
| 맞춤 CV의 전체 문서. |
| 맞춤 CV에 대해 경로 지정 편집을 원자적으로 일괄 적용(서버 검증; 출처 없는 주장은 거부). |
| 맞춤 CV를 PDF로 렌더링하여 base64 |
| 후보자의 경험 뱅크, 각 성공의 출처(provenance) 포함. |
| 근무지(재직 기관) 또는 증거 하나를 기록. |
| 하나 수정. 필드 단위라 이름을 지정하지 않은 부분은 유지됩니다. |
| 하나 삭제. 취소 불가; 하위 증거를 먼저 지워야 함. |
| 공고를 검토용으로 제출. |
| 호출자의 제출 목록과 상태. |
| 중재자(담당자): 공고 작성/편집(권한 없으면 403). |
| 중자: 검토 대기열. |
| 중재자: 제출 승인/거부 결정. |
필터. search, market_fit, facets는 동일한 마켓 필터 파라미터를 공유합니다: remote, region, country, city, company, category, role, seniority, employment_type, english_level, exclude_skill, salary_min, visa, 그리고 다른 어떤 패싯을 위한 일반적인 facets 맵({"source": "greenhouse"}). 유효한 값은 facets 도구로 알아내세요. 임의로 지어내지 마세요. search에서 skills는 필터이고, market_fit에서 skills는 측정 대상 집합입니다.
지리는 넓게 적용됩니다. region, country, city는 OR 그룹입니다: region: ["eu"]과 country: ["IT"]는 "유럽 또는 이탈리아"를 뜻하며, 지역만 지정했을 때의 결과를 그대로 반환합니다. 한 국가만 검색하려면 country만 넘기고 region은 생략하세요. 세 값은 동일한 개념(위치)을 나타내므로 두 개를 지정하면 "둘 중 하나"라는 의미가 되어, region: ["eu"]이 country: ["BR"]("유럽 또는 브라질")과 함께 쓰였을 때 유용합니다. 켤 수 있는 AND는 없습니다. _mode=and는 지리에는 적용되지 않습니다.
인식하지 못하는 파라미터는 거부되지 않고 무시됩니다. API가 인식하지 못하는 필터 키는 요청을 실패시키지 않고 검색 범위를 넓혀버립니다. 그런 키는 결과의 ignored 목록에 포함되어 반환됩니다. 문법상 숫자(단/복수)만 잘못된 경우에는 did_you_mean도 함께 돌아옵니다. search는 이를 total 옆에 보고합니다. facets와 market_fit은 단일 객체로 응답하므로 {data, ignored}로 래핑합니다. 그리고 그 경우만 그렇게 하므로 정상 호출의 shape은 변하지 않습니다. ignored가 포함된 결과의 어떤 수치든 원래 질문보다 더 넓은 질문에 대한 답입니다. 보고하기 전에 앞서 알려준 이름으로 다시 시도하세요.
설명. search는 API의 agent 엔드포인트를 읽으므로 각 결과가 이미 전체 공고 설명을 마크다운으로 포함합니다. 호스트는 각 결과마다 job을 호출하지 않고도 결과 집합을 사전 검토할 수 있습니다. 설명이 길므로 limit은 적당히 유지하세요.
증거 규칙. 뱅크의 모든 성과(achievement)는 이를 단언한 주체를 함께 기록합니다. cv_import, stated_in_chat, manual은 후보자가 직접 단언한 것이므로 CV에서 인용할 수 있습니다. agent_inferred는 모델이 읽어 넣은 것이므로 인용할 수 없습니다. cv_edit은 인용 가능한 증거를 가리키는 evidence_id 없이 후보자에 관한 주장을 거부합니다. 바로 그 때문에 experience_list가 cv_edit을 실제로 사용 가능하게 만드는 도구입니다.
성과를 수정해도 그 표시는 바뀌지 않습니다: agent_inferred인 것은 문구를 어떻게 바꿔도 인용 불가로 남습니다. 인용 가능하게 되는 유일한 방법은 후보자에게 물은 뒤 그들이 말한 내용을 experience_add_achievement으로 기록하는 것입니다.
삭제는 되돌릴 수 없습니다. 뱅크에는 실행 취소가 없습니다. 근무지/근무처는 먼저 비워야 삭제할 수 있습니다. 그 요소를 통째로 삭제하면 포함된 모든 성과를 함께 지워지기 때문입니다. 두 성과를 하나로 합쳐는 기능(양측의 숫자 유지)은 사이트에서 제공합니다.
각 도구는 원본 API data를 JSON 텍스트로 반환합니다. API 오류는 isError 결과가 되어 HTTP 상태를 담고 있습니다(401에는 인증 힌트 포함).
개발
npm install
npm test # vitest: config, client (mock server), facets, tool dispatch
npm run build # tsc → dist/라이선스
MTT — LICENSE 참고. freehire 백엔드와 CLI도 MIT입니다.
Available Tools
19 toolsapplyBIdempotent
Mark a job as applied for the authenticated user. Idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The job's public slug (from search or facets results). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds 'Idempotent' but this is already declared in annotations via idempotentHint=true. No additional behavioral context like authentication requirements, side effects, or error conditions. With annotations present, the description adds minimal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Every word earns its place. Exceptionally concise and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the essential purpose and idempotency. Could mention the return behavior (e.g., success/failure indicators) but not strictly necessary given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with full schema coverage (description in schema). Description adds no extra meaning beyond what the schema provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Mark' and resource 'job', and mentions idempotency. Could be more specific about the effect (e.g., creating an application) but overall clear. No differentiation from siblings like 'submit' or 'save'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Does not explain prerequisites (e.g., must be authenticated) or when not to use (e.g., if already applied). The only behavioral note is idempotency, which is already annotated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
companyARead-only
Fetch a company and its open jobs by company slug.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The company slug (from a job's company_slug). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; the description adds that the tool also returns open jobs beyond the company info. It does not mention pagination or data limits, but for a simple fetch this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that earns its place with no filler. Every word adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and no output schema, the description provides sufficient high-level information. It does not detail the output structure, but that is acceptable given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter 'slug' is described in both schema and description. The description reiterates the role of slug ('by company slug'), adding no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Fetch'), the resource ('a company and its open jobs'), and the method ('by company slug'). It distinguishes from sibling tools like 'job' and 'search' by specifying the combined fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a company slug is available and one wants company details plus open jobs, but it does not explicitly compare with siblings or state when not to use it. Absence of usage guidance is a gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facetsARead-only
List the market's filter vocabulary: every facet's live values with a vacancy count each, plus the skills list and numeric ranges. Call this FIRST to discover real values for search and market_fit — do not invent facet values.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City slugs. | |
| role | No | Role facet values, e.g. senior_backend. | |
| visa | No | Only jobs offering visa sponsorship. | |
| facets | No | Any other facet param as key→value(s), e.g. {"source": "greenhouse"}. Discover valid keys and values with the `facets` tool. | |
| region | No | Region codes (OR within): global|ru|cis|central_asia|eu|us. | |
| remote | No | Only remote jobs (sets work_mode=remote). | |
| company | No | Company slugs. | |
| country | No | ISO-3166 country codes, e.g. BR, US. | |
| category | No | Role categories: backend|frontend|fullstack|devops|ml_ai|qa|... | |
| seniority | No | Seniority: intern|junior|middle|senior|staff|principal|lead|c_level. | |
| salary_min | No | Minimum salary (enrichment.salary_min). | |
| english_level | No | English level, e.g. a2, b1, b2, c1. | |
| employment_type | No | Employment type, e.g. full_time, contract. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation, indicating a read-only operation. It adds behavioral context by specifying that the tool returns live values with counts, which is beyond the annotation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the purpose and output, followed by usage guidance. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description sufficiently explains the return (facet values, counts, skills, ranges) and how to use the tool. For a parameter-rich tool, this context is complete enough for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described adequately. The tool description does not add significant new meaning beyond the schema, but it contextualizes parameters as filter vocabulary. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing filter vocabulary with live facet values, vacancy counts, skills list, and numeric ranges. It distinguishes itself from siblings like 'search' and 'market_fit' by positioning itself as the first call to discover real values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to call this tool FIRST before 'search' and 'market_fit', and warns against inventing facet values. This provides clear usage guidance and context for alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobARead-only
Fetch a single job's full content by slug (title, company, location, posting URL, description).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The job's public slug (from search or facets results). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show readOnlyHint=true, so the agent knows this is a safe read. The description adds value by listing the fields returned (title, company, location, posting URL, description), providing behavioral specifics beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, 14 words, with the verb and key action front-loaded. Every word serves a purpose, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter and no output schema, the description adequately covers what the tool does and what it returns. It does not mention error handling or slug existence, but for a simple fetch-by-id tool, this is sufficient and not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already describes the slug parameter as 'The job's public slug (from search or facets results).' The description merely repeats 'by slug' without adding any new semantic detail, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly uses 'Fetch' as the verb, specifies the resource as 'a single job', and identifies the key identifier 'slug'. It also enumerates the returned content fields, distinguishing this from sibling tools like 'search' which return lists, and 'apply', 'save', etc. which perform other actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a slug is available (e.g., from search or facets results) and provides clear context for retrieving full job details. However, it does not explicitly state when not to use this tool or name alternatives, leaving some room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_addAIdempotent
Moderator: create a hand-curated job. URL is the dedup key — re-adding the same URL updates the posting. description is stored and rendered as HTML. Requires the moderator role (403 otherwise).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The posting URL — the dedup key. Required. | |
| title | Yes | Job title. Required. | |
| remote | No | ||
| source | No | The posting's real origin (defaults to 'manual' server-side). | |
| company | Yes | Company name. Required. | |
| location | No | ||
| posted_at | No | RFC3339 timestamp. | |
| description | No | Stored and rendered as HTML. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: URL as dedup key (idempotent update), description stored as HTML, and auth requirement. Annotations already indicate idempotentHint, but description adds how idempotency is achieved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with front-loaded purpose. No redundancy, every sentence provides unique value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks return value information despite no output schema. Otherwise covers purpose, behavior, and auth. Moderate complexity with 3 required params.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema coverage, description adds meaning for critical params: 'url' dedup key and 'description' HTML storage. Other params are sufficiently described in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'create a hand-curated job' with specific verb and resource. Distinguishes from sibling 'jobs_edit' and others via dedup key behavior and moderator role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Requires the moderator role (403 otherwise)' indicating when to use. No explicit alternatives mentioned, but the context of hand-curated and sibling list provides implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_editAIdempotent
Moderator: partially update a manual job by slug. Only the provided fields change; the URL identity is not editable. Requires the moderator role (403 otherwise).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The job's public slug (from search or facets results). | |
| title | No | ||
| remote | No | ||
| company | No | ||
| location | No | ||
| posted_at | No | RFC3339 timestamp. | |
| description | No | Stored and rendered as HTML. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false and idempotentHint=true. The description adds critical context: partial update semantics and 403 error for non-moderators. This exceeds what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each adding unique value: purpose + constraint, then role requirement. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters and no output schema, the description is minimal. It explains partial updates and role requirement but omits side effects, success response, or distinction between manual and other jobs. Could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 43%, so the description should compensate. It adds context for the slug parameter (not editable) and general partial update behavior, but does not elaborate on other parameters beyond schema descriptions. Adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Moderator: partially update a manual job by slug', specifying the action (update), resource (manual job), and identifier (slug), clearly distinguishing it from sibling tools like 'jobs_add'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies partial update behavior and role requirement ('Requires the moderator role'), but does not explicitly compare with alternatives (e.g., 'jobs_add' for creation). The implication is present but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_fitARead-only
Score a skill list against the live open-vacancy market for a filtered role: headline coverage (% of vacancies listing ≥1 skill), must-have skills held, and the missing skills that unlock the most vacancies. Here skills is the MEASURED set, not a filter — use facet params to define the role. One skill probes that skill's demand.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City slugs. | |
| role | No | Role facet values, e.g. senior_backend. | |
| visa | No | Only jobs offering visa sponsorship. | |
| facets | No | Any other facet param as key→value(s), e.g. {"source": "greenhouse"}. Discover valid keys and values with the `facets` tool. | |
| region | No | Region codes (OR within): global|ru|cis|central_asia|eu|us. | |
| remote | No | Only remote jobs (sets work_mode=remote). | |
| skills | Yes | The candidate's skills to measure (canonical slugs). One value probes a single skill. | |
| company | No | Company slugs. | |
| country | No | ISO-3166 country codes, e.g. BR, US. | |
| category | No | Role categories: backend|frontend|fullstack|devops|ml_ai|qa|... | |
| seniority | No | Seniority: intern|junior|middle|senior|staff|principal|lead|c_level. | |
| salary_min | No | Minimum salary (enrichment.salary_min). | |
| english_level | No | English level, e.g. a2, b1, b2, c1. | |
| employment_type | No | Employment type, e.g. full_time, contract. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the tool's behavior: computing headline coverage, identifying must-have and missing skills. This goes beyond the readOnlyHint annotation by explaining the analytical nature. It could mention data freshness or potential limitations, but overall it provides sufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two informative sentences. It front-loads the main purpose and then adds critical usage nuance. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (14 parameters, 1 required, no output schema), the description covers the tool's functionality well. It explains the conceptual output but could be more explicit about the exact return structure. Still adequate for a read-only analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds crucial semantics beyond the schema, such as clarifying that 'skills' is the measured set (not a filter) and that using a single skill probes demand. With 100% schema coverage, this extra context justifies a score above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Score a skill list against the live open-vacancy market for a filtered role' and lists specific output metrics (headline coverage, must-have skills, missing skills). It distinguishes itself from sibling tools by focusing on market fit analysis, not job search or CRUD operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that 'skills' is the measured set and that facet parameters define the role, providing clear guidance on how to use the tool. It also states that a single skill probes that skill's demand. However, it does not explicitly mention when not to use this tool or provide alternatives, slightly limiting completeness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
myARead-only
List the caller's tracked jobs (viewed/saved/applied) with their stage and note. Filter narrows the set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| filter | No | Which tracked jobs to list. | all |
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds limited behavioral context beyond that. It mentions that the tool returns stage and note, and that filter narrows results, but does not disclose pagination behavior (offset/limit) or authentication details. For a read-only operation, this is adequate but not extensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that conveys the main purpose. It is appropriately front-loaded but could benefit from mentioning pagination or parameter details to improve completeness without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with readOnly annotations and no output schema, the description covers the key aspects: what is listed (caller's tracked jobs), what fields are included (stage, note), and how to filter. However, it lacks guidance on pagination (offset/limit) which is part of the input schema, slightly reducing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (filter has a description), and the main description does not add meaning for limit or offset beyond what the schema provides. It mentions that filter narrows the set but does not elaborate, leaving two parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the caller's tracked jobs (viewed/saved/applied) with stage and note, using a specific verb and resource. It is easily distinguished from sibling tools like 'my_submissions' which lists submissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing tracked jobs but does not provide explicit guidance on when to use this tool versus alternatives like 'my_submissions' or 'search'. No exclusions or when-not-to-use information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_submissionsARead-only
List the caller's own vacancy submissions with their moderation status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the 'readOnlyHint' annotation by stating 'List'. However, it adds no further behavioral details (e.g., pagination, sorting) beyond what the annotation already conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no extraneous words. It delivers maximum information in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero parameters, the readOnly annotation, and no output schema, the description sufficiently covers what the tool does and what it returns (moderation status). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description has no parameter details to add. The description does not need to compensate for missing schema documentation. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('the caller's own vacancy submissions'), and the specific information returned ('moderation status'). It distinguishes from siblings like 'submissions_pending' or 'submission_approve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing the caller's own submissions, but it does not explicitly state when not to use it or mention alternative tools for different scopes (e.g., 'submissions_pending' for pending ones).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noteAIdempotent
Attach a free-text note to a tracked job (overwrites the existing note).
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | Free-text note to store on the job. | |
| slug | Yes | The job's public slug (from search or facets results). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and readOnlyHint=false, so the description does not need to reiterate safety. It adds value by explicitly stating the overwrite behavior, which is not in annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb, no filler. Every word earns its place, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 parameters, no output schema), the description covers the core action and overwrite behavior well. Could mention note length limits, but overall sufficient for a small tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing clear parameter descriptions for 'slug' and 'note'. The description reinforces these but does not add new constraints or format details beyond the schema, maintaining a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool attaches a free-text note to a tracked job, specifying the verb 'attach', the resource 'free-text note to a tracked job', and the distinguishing behavior 'overwrites the existing note'. This differentiates it from sibling tools like jobs_edit which modify broader job details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for adding or updating notes on tracked jobs, but provides no guidance on when to use this tool versus alternatives (e.g., jobs_edit) or when not to use it. It lacks explicit context on exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saveAIdempotent
Bookmark a job for later. Idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The job's public slug (from search or facets results). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions 'Idempotent', which is already declared via annotations. Other behavioral traits (e.g., side effects, auth needs) are not disclosed, but annotations cover the safety profile minimally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The key action and idempotency are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple idempotent bookmark tool with one parameter and no output schema, the description is adequately complete. It could optionally mention reversal via 'unsave', but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and describes the slug parameter well. The description adds no extra meaning about the parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Bookmark a job for later' uses a specific verb (bookmark) and resource (job), clearly distinguishing it from sibling tools like 'apply' or 'unsave'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., 'apply' or 'unsave') is provided. The description only states the action without contextual usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-only
Search open jobs by keyword with optional facet filters. Returns matching jobs (title, company, location, public_slug) and the total match count. Use the returned slug with job, apply, save, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City slugs. | |
| role | No | Role facet values, e.g. senior_backend. | |
| visa | No | Only jobs offering visa sponsorship. | |
| limit | No | Max results to return. | |
| query | Yes | Keyword query, e.g. 'golang backend'. Empty string matches all. | |
| facets | No | Any other facet param as key→value(s), e.g. {"source": "greenhouse"}. Discover valid keys and values with the `facets` tool. | |
| offset | No | Pagination offset. | |
| region | No | Region codes (OR within): global|ru|cis|central_asia|eu|us. | |
| remote | No | Only remote jobs (sets work_mode=remote). | |
| skills | No | Filter to jobs listing these skills (canonical slugs from the `facets` tool). | |
| company | No | Company slugs. | |
| country | No | ISO-3166 country codes, e.g. BR, US. | |
| category | No | Role categories: backend|frontend|fullstack|devops|ml_ai|qa|... | |
| seniority | No | Seniority: intern|junior|middle|senior|staff|principal|lead|c_level. | |
| salary_min | No | Minimum salary (enrichment.salary_min). | |
| english_level | No | English level, e.g. a2, b1, b2, c1. | |
| employment_type | No | Employment type, e.g. full_time, contract. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnlyHint annotation by specifying that it returns open jobs, the fields returned (title, company, location, public_slug), and the total match count. It does not contradict annotations and provides useful behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and contains no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (17 parameters, no output schema), the description covers the core functionality, return value, and integration with siblings. It does not explicitly mention pagination (limit/offset) but the schema covers that. Overall, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 value by explaining how to use the returned slug and directing users to the `facets` tool for the `facets` parameter. This enhances understanding of parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search', the resource 'open jobs', and what is returned (matching jobs with specific fields and total count). It also differentiates from sibling tools by explaining how the returned slug is used with other tools like `job`, `apply`, `save`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (searching open jobs) and hints at using the returned slug with other tools. It also directs users to the `facets` tool for discovering valid facet values. However, it does not explicitly state when not to use this tool or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stageAIdempotent
Set a job's application stage. The server validates the value; valid stages are applied/screening/responded/interview/offer/accepted/rejected/withdrawn.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The job's public slug (from search or facets results). | |
| stage | Yes | Application stage, e.g. interview, offer, rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (modifies) and idempotentHint=true (safe retry). The description adds the list of valid stages and mentions server validation, providing useful behavioral context beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, 17 words, with no redundant information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple tool with two parameters and annotations, but lacks information about return values or prerequisites (e.g., application must exist). Could be more complete to guide the agent fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds a list of valid stages not present in the schema (which has no enums). This adds significant value by enumerating allowed values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Set' and resource 'job's application stage', and lists all valid stages, making it clear what the tool does and distinguishing it from siblings like 'apply' or 'submit'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating an existing application's stage by listing valid values, but does not explicitly state when to use this tool versus siblings like 'apply' (new application) or 'submission_approve' (approve submission).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submission_approveA
Moderator: approve a pending submission, minting a live job. Requires the moderator role (403 otherwise).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The submission id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds role requirement and error code beyond annotations (readOnlyHint=false). Describes write action and outcome.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with essential info. No filler. Front-loaded with role and action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for simple action. Lacks output info or side effects, but role requirement and outcome are clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameter description. Description adds context by linking id to approval action, though no extra detail on format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'approve' and specific resource 'pending submission' with outcome 'minting a live job'. Distinguishes from siblings like submission_reject.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States required moderator role and 403 error otherwise. Implicitly indicates when to use based on pending status and role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submission_rejectA
Moderator: reject a pending submission with an optional reason. Requires the moderator role (403 otherwise).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The submission id. | |
| reason | No | Optional rejection reason. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a mutation action ('reject') consistent with annotations (readOnlyHint=false), but does not disclose side effects (e.g., status change, notifications) beyond the role requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys purpose and usage without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two parameters and no output schema, the description covers purpose and role requirement adequately, but lacks details on return value or explicit state change.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description merely restates the schema's parameter details (id, optional reason) without adding new semantic information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'reject' and the resource 'pending submission', distinguishing it from sibling tools like 'submission_approve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies the required moderator role and the error response (403) for unauthorized use, but does not explicitly mention when not to use or alternatives like 'submission_approve'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submissions_pendingARead-only
Moderator: list the pending submission review queue. Requires the moderator role (403 otherwise).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds critical behavioral context beyond the 'readOnlyHint' annotation by specifying the authentication requirement ('Requires the moderator role (403 otherwise)'). This informs the agent about authorization constraints and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys both the purpose and the prerequisite role requirement. No extraneous information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, readOnlyHint annotation, no output schema), the description adequately covers purpose and auth. However, it could be enhanced by hinting at the format or content of the returned list, but this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters and 100% schema description coverage, the description does not need to add parameter details. Based on the scoring rule, a baseline of 4 is appropriate since the schema already fully covers the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'list the pending submission review queue' using a specific verb ('list') and resource ('pending submission review queue'). This purpose is distinct from sibling tools like 'submission_approve' and 'submission_reject', which perform actions, and 'my_submissions', which likely lists user's own submissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the requirement for the moderator role and notes that 403 is returned otherwise, providing clear guidance on who should use this tool. However, it does not explicitly mention when not to use it or contrast it with alternatives like 'my_submissions' for non-moderators.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submitB
Submit a vacancy for moderation. The server stores it as pending and returns it. URL (the dedup key), title, and company are required.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The posting URL — the dedup key. Required. | |
| title | Yes | Job title. Required. | |
| remote | No | ||
| source | No | The posting's real origin (defaults to 'manual' server-side). | |
| company | Yes | Company name. Required. | |
| location | No | ||
| posted_at | No | RFC3339 timestamp. | |
| description | No | Stored and rendered as HTML. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by stating the server stores the submission as pending and returns it. Annotations already indicate write operation (readOnlyHint=false), so the description provides marginal additional behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, no filler. Every sentence is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters and no output schema, the description lacks details on return values, error handling, or formatting requirements, making it incomplete for a submission tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (75%), so the description adds only minor value by noting 'dedup key' for URL. It does not significantly enhance understanding of parameters beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool submits a vacancy for moderation, with a specific verb and resource. However, it does not explicitly differentiate from sibling tools like 'jobs_add' or 'jobs_edit', so it's slightly below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions required fields but provides no guidance on when to use this tool over alternatives, nor any when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsaveAIdempotent
Remove a job's bookmark. A no-op if it was not saved.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The job's public slug (from search or facets results). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true; description reinforces this by stating it's a no-op if not saved. Adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action verb, no wasted words. Efficiently conveys purpose and behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers purpose and idempotency. Lacks details on error handling (e.g., invalid slug), but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add any additional parameter information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'remove' and the resource 'job's bookmark', and distinguishes from the sibling tool 'save'. The no-op note adds clarity for edge case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Context is clear: use to unsave a job. The no-op note implicitly advises it's safe to call even if not saved. However, it lacks explicit when-not-to-use or alternatives beyond the sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiARead-only
Return the authenticated freehire user (verifies the API key). Call this to confirm auth before other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's role is to add context. It adds value by specifying it returns user info and verifies the API key, with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description is complete: it states functionality and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with 0 parameters, so baseline is 4. No parameter information needed in description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'return' and resource 'authenticated freehire user', and explicitly calls out it verifies the API key. It distinguishes itself from sibling tools by focusing on auth confirmation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this to confirm auth before other tools', providing clear usage context. While it doesn't mention when not to use it, the simplicity of the tool makes this sufficient.
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.
19 tool updates
v0.1.0- First observed
apply - First observed
company - First observed
facets - First observed
job - First observed
jobs_add - First observed
jobs_edit - First observed
market_fit - First observed
my - First observed
my_submissions - First observed
note - First observed
save - First observed
search - First observed
stage - First observed
submission_approve - First observed
submission_reject - First observed
submissions_pending - First observed
submit - First observed
unsave - First observed
whoami
TDQS
Scored across 19 tools
Each tool targets a distinct action or resource. User interactions (apply, save, unsave, note, stage, my), moderator actions (jobs_add, jobs_edit, submission_*), data retrieval (job, company, search, facets, market_fit), and auth (whoami) are clearly separated with no significant overlap.
Naming is inconsistent: single-word verbs (apply, save, note) mix with compound underscore names (jobs_add, market_fit, submission_approve) and a noun-only style (company, facets, job, my). While readable, there is no single predictable pattern.
With 19 tools, the server covers user, moderator, and search functionality thoroughly. This is slightly above the ideal 3-15 range but still well-scoped and each tool earns its place.
The tool surface covers core workflows: job browsing, searching, applying, tracking, and moderation. Minor gaps exist, such as no explicit job deletion or submission withdrawal, but these are not critical for typical usage.
Maintenance
Related MCP Connectors
Public MCP server for discovering open jobs. Search, filter, and get application links.
Job search over employers' own hiring systems. Search with no key; a free key opens every read tool.
Search live startup jobs from Claude, Cursor, or ChatGPT via MCP. Free, no account needed.
A job-search companion: tailor your CV to a role, score fit, fix ATS issues. Also via MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceSearches LinkedIn, Indeed, USAJobs, and Google Jobs from the command line, deduplicates across sources, and optionally finds hiring manager emails; also runs as an MCP server for AI agents.MIT
- FlicenseAqualityCmaintenanceEnables searching job listings, tracking applications, managing resumes, and tailoring resumes to job posts, all locally via MCP.620-
- FlicenseAqualityBmaintenanceEnables searching and retrieving job listings from multiple platforms through MCP.2-
- AlicenseNot gradedqualityCmaintenanceEnables searching and retrieving tech job listings in the US and Canada from MCP-compatible apps, with tools for job search, full job details, and category browsing.MIT