Skip to main content
Glama
WonderCV

ClawHire MCP

by WonderCV

ClawHire MCP

Employer-facing MCP for China's first agent-native hiring marketplace.

ClawHire lets hiring managers post jobs, search candidates, and receive applications — all through natural language conversation with Claude or any MCP-compatible AI assistant. Backed by WonderCV's resume database and existing HR infrastructure.

What This Is

ClawHire is one half of a two-sided marketplace:

Candidates                              Employers
    │                                       │
resume-agent-mcp                    clawhire-mcp (this repo)
    │                                       │
    └──────── WonderCV Backend ─────────────┘
                    │
              PostgreSQL (existing WonderCV DB)
  • resume-agent-mcp — Candidate-facing. Resume analysis, profile publishing, job applications.

  • clawhire-mcp (this repo) — Employer-facing. Job posting, candidate search, application management.

Both share WonderCV's existing Django backend, company database, and profession taxonomy. This is NOT a standalone product — it's an MCP layer on top of WonderCV's existing hiring infrastructure.

Why It Exists

The thesis: China is in an AI-agent boom. Companies hiring for white-collar roles increasingly want people who can work with AI agents. But no hiring platform treats AI-agent fluency as a first-class hiring signal.

ClawHire does. Candidates who use MCP tools are automatically tagged with AI fluency badges. Employers can filter for agent-fluent talent. This signal is impossible to replicate on traditional job boards.

Three Categories of Candidates

Not all candidates are equal. The system handles three distinct pools:

Category

How They Enter

AI Fluency

Employer Can...

1. MCP Native

Install resume-agent-mcp, publish profile

Auto-badged verified_mcp_user

Search, view profile, receive applications

2. GUI Opt-In

Click button on wondercv.com or WeChat

No badge (not demonstrated)

Same as above

3. Database

They don't — existing WonderCV users

None

View anonymized/coarsened data, send outreach invite only

Category conversions:

  • 3 → 2: Candidate responds to outreach email or opts in via GUI

  • 2 → 1: Candidate links MCP session to their WonderCV account (automatic upgrade)

  • Conversions are one-way (upward only)

Company blocklist: Candidates can block specific companies (e.g. current employer) from seeing their profile. Enforced at query time.

Architecture

Existing WonderCV Models We Reuse (DO NOT DUPLICATE)

Model

Table

What It Has

Companies

api/companies/

Company names (cn/en), scale, industry, Tianyancha verification

HrAccounts

api/account/

HR manager accounts, WeChat auth, phone login, quotas

Jobs

api/jobs/

Job postings with profession taxonomy, salary, experience (in days)

JobApplications

api/data_operations/

Application tracking with state machine

JobOrders

api/job_orders/

Payment/promotion with Alipay + WeChat Pay

New Models We Add (only 2)

Model

Purpose

CandidateProfile

Opt-in marketplace profile (Cat 1 + 2). Links to WonderCV user. Contains visibility, AI fluency data, company blocklist, preferences.

McpEmployerSession

Bridges MCP session → HrAccount. Tracks daily usage quotas.

Data Unit Conventions

These MUST match existing WonderCV conventions:

Field

Unit

Notes

salary_min/max

CNY/month (integer)

NOT thousands

experience_min/max

Days (in DB)

MCP accepts years, converts with × 365

status (Jobs)

Integer 0-4

0=draft, 1=publish, 2=expired, 3=offline, 4=remove

IDs

token (CharField)

NOT UUIDs — WonderCV uses string tokens

Available Tools (7)

Tool

Purpose

Quota

register_company

Create employer account, get session_id

post_job

Publish job to marketplace

jobs_posted

list_jobs

View own posted jobs with stats

search_candidates

Search marketplace + database pools

searches

view_candidate

View candidate profile (visibility-enforced)

candidate_views

list_applications

View inbound applications

request_outreach

Send invite to Category 3 database candidate

outreach_sent

Quota Tiers (daily limits)

Tier

Views

Searches

Outreach

Jobs

Alpha (current)

50

30

10

5

Free

20

10

5

2

Paid

200

100

20

20

All alpha users get the Alpha tier for free.

Quick Start

Install & Build

git clone https://github.com/WonderCV/clawhire-mcp.git
cd clawhire-mcp
npm install
npm run build

Configure

cp .env.example .env

Edit .env:

CLAWHIRE_API_BASE_URL=https://api.wondercv.cn/cv/v1/mcp/hiring
CLAWHIRE_API_KEY=your_api_key_here    # Leave as-is for mock mode
LOG_LEVEL=info

Mock mode: If CLAWHIRE_API_KEY is missing or your_api_key_here, the server returns realistic mock data for all endpoints. Useful for development without the backend.

Add to Claude

In your MCP config (e.g. ~/.claude.json or Claude Desktop settings):

{
  "mcpServers": {
    "clawhire": {
      "command": "node",
      "args": ["/absolute/path/to/clawhire-mcp/dist/server.js"],
      "env": {
        "CLAWHIRE_API_KEY": "your_api_key_here"
      }
    }
  }
}

Try It

After connecting, tell Claude:

  • "Register my company — we're TechCorp in Shanghai, email hr@techcorp.com"

  • "Post a job for Senior Product Manager, remote OK, 30-50k/month"

  • "Search for AI-fluent product managers in Shanghai with 3+ years experience"

  • "Show me candidate details for [candidate_id]"

  • "Send an outreach invite to [candidate_ref] for the PM role"

Development

npm run dev          # Watch mode (auto-recompile on changes)
npm run build        # Single build
npm run typecheck    # Type check without emitting
npm start            # Run compiled server

Project Structure

src/
├── server.ts           # MCP server entry, tool registration, JSON schema conversion
├── types.ts            # All TypeScript types (aligned with WonderCV models)
├── session.ts          # In-memory session management + quota tracking
├── backend-api.ts      # WonderCV backend API client (with mock fallback)
└── tools/
    ├── index.ts                # Tool registry
    ├── register_company.ts     # Creates HrAccount + Company
    ├── post_job.ts             # Wraps Jobs model (years→days conversion)
    ├── list_jobs.ts            # Paginated job list with stats
    ├── search_candidates.ts    # Marketplace + database pools, AI fluency filter
    ├── view_candidate.ts       # Visibility-enforced profile view + anonymization
    ├── list_applications.ts    # Application list with match scores
    └── request_outreach.ts     # Database candidate invitation (rate-limited)

Adding a New Tool

  1. Create src/tools/your_tool.ts implementing the Tool<Input> interface

  2. Define input schema with Zod

  3. Implement execute(input) returning ToolResult

  4. Export from src/tools/index.ts and add to allTools array

  5. The server auto-registers it via the tool registry

Backend API Pattern

All tools follow the same pattern:

// 1. Validate session
const session = getSession(input.session_id);
if (!session) return errorResult('INVALID_SESSION', '...');

// 2. Check quota (for metered tools)
const remaining = getRemainingQuota(session, 'searches');
if (remaining <= 0) return errorResult('QUOTA_EXCEEDED', '...');

// 3. Call backend
const result = await backendApi.searchCandidates(input);

// 4. Consume quota AFTER success (not before)
checkAndIncrementUsage(session, 'searches');

// 5. Format and return
return { content: [{ type: 'text', text: JSON.stringify(formatted) }], isError: false };

Known Issues (v0.1.0)

See KnownIssues.md for full details.

Issue

Severity

Impact

In-memory session storage

High (for prod)

Server restart = re-register

Quota race condition

Medium

Concurrent requests can exceed limits

Brittle JSON schema conversion

Medium

Works for flat inputs, fragile for complex

No test coverage

Low

Needs tests before v0.2

Alpha verdict: Ship to alpha (<50 employers), not to GA.

Roadmap

v0.1 (current) — Alpha Foundation

  • 7 employer tools (register, post, search, view, applications, outreach, list)

  • Three-category candidate model

  • AI fluency badges

  • Anonymization for privacy

  • Daily quota system

v0.2 — Marketplace Core

  • Persistent session storage (Redis or backend rehydration)

  • Backend authoritative quota metering

  • Replace zodToJsonSchema with zod-to-json-schema library

  • Candidate-side tools in resume-agent-mcp (publish, apply, browse jobs)

  • LLM-based match scoring

  • Test suite

v0.3 — Growth

  • Company verification automation (Tianyancha API)

  • Application status management (shortlist, reject)

  • Paid tier billing (via existing JobOrders + Alipay/WeChat Pay)

  • Global aggregate stats

License

MIT

Available Tools

7 tools
list_applicationsB

查看收到的职位申请。

返回信息:

  • 候选人基本信息和匹配度评分

  • AI-Agent 熟练度徽章(MCP用户自动标识)

  • 申请状态和申请时间

  • 候选人的求职信/备注

匹配度评分说明:

  • 90-100: 非常匹配

  • 70-89: 较好匹配

  • 50-69: 一般匹配

  • <50: 可能不匹配

注意:此工具仅查看申请列表,如需处理申请(通过/拒绝)将在 v2 实现。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes会话 ID,从 register_company 获取
job_tokenNo按职位过滤(可选),不提供则显示所有职位的申请
statusNo按状态过滤:submitted=新申请, viewed=已查看, shortlisted=已筛选, rejected=已拒绝
pageNo页码
page_sizeNo每页数量

TDQS

B3.4/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. It discloses key behavioral traits: it's a read-only operation (implied by '查看' - view), returns specific data fields (candidate info, match scores, badges, status, cover letters), includes match score interpretation guidelines, and notes pagination support (via page/page_size parameters). However, it lacks details on authentication needs, rate limits, error handling, or data freshness.

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 well-structured and appropriately sized. It front-loads the core purpose, then lists return information, explains match scores, and adds a note about limitations. Most sentences earn their place by providing useful context, though the match score breakdown could be slightly condensed.

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?

Given no annotations and no output schema, the description does a fair job covering the tool's behavior, return data, and limitations. It explains what data is returned and how to interpret match scores, which compensates for the lack of output schema. However, for a tool with 5 parameters and no annotations, it could benefit from more details on error cases, authentication, or performance characteristics.

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 100%, so the schema already documents all parameters thoroughly. The description doesn't add any parameter-specific semantics beyond what's in the schema (e.g., it doesn't explain 'job_token' or 'status' enums further). However, it implicitly references pagination via 'page' and 'page_size' by listing them as returned data, which slightly reinforces their purpose. Baseline 3 is appropriate given high schema coverage.

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 clearly states the tool's purpose: '查看收到的职位申请' (view received job applications). It specifies the verb (view) and resource (job applications), making the intent unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'view_candidate' or 'search_candidates', which might also involve viewing candidate-related data.

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 context by stating it's for viewing applications and noting that processing applications (approve/reject) will be in v2, suggesting this is for read-only inspection. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like 'search_candidates' or 'view_candidate', nor does it mention prerequisites (e.g., needing a session_id from 'register_company').

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

list_jobsA

查看已发布的职位列表及申请统计。

返回信息:

  • 职位基本信息(标题、城市、薪资)

  • 申请数量(各职位的投递数)

  • 职位状态(已发布/已过期等)

可用于:

  • 了解各职位的招聘进展

  • 决定是否需要刷新或关闭某职位

  • 快速跳转到特定职位的候选人搜索

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes会话 ID,从 register_company 获取
statusNo职位状态过滤:0=草稿, 1=已发布, 2=已过期, 3=已下线
pageNo页码,默认1
page_sizeNo每页数量,默认20,最大50

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool returns job information, application counts, and statuses, which is helpful. However, it lacks details on permissions needed, rate limits, pagination behavior beyond schema hints, or whether this is a read-only operation (implied but not stated). The description adds some behavioral context but leaves gaps for a tool with 4 parameters.

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 well-structured with clear sections: purpose, return information, and usage scenarios. It's appropriately sized (3 bullet points each for returns and usage) and front-loaded with the core purpose. Minor room for improvement in tightening phrasing, but overall efficient.

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?

Given no annotations and no output schema, the description provides good context on what the tool does and when to use it. However, for a tool with 4 parameters and pagination behavior, it lacks details on error handling, response format beyond high-level fields, or authentication requirements (session_id is documented in schema but not explained in description). It's adequate but has clear gaps.

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 100%, so the schema fully documents all 4 parameters. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain 'status' values or 'page' defaults in more detail). Baseline 3 is appropriate when the schema does the heavy lifting, but no extra value is added.

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 clearly states the tool's purpose: '查看已发布的职位列表及申请统计' (view published job listings and application statistics). It specifies the verb (view/list) and resource (jobs/positions) with scope (published). However, it doesn't explicitly differentiate from sibling tools like 'list_applications' or 'search_candidates', which prevents a perfect score.

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 provides clear usage contexts in the '可用于' (can be used for) section: understanding recruitment progress, deciding to refresh/close positions, and jumping to candidate search. It gives practical scenarios but doesn't explicitly state when NOT to use this tool or name alternatives like 'search_candidates' for filtering candidates directly.

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

post_jobB

发布职位到 ClawHire 招聘市场。

职位将同时出现在:

  1. ClawHire 雇主端搜索结果

  2. 候选人的匹配推荐(如果符合其期望)

  3. WonderCV 相关渠道

提示:

  • 设置 require_ai_fluency=true 可优先展示给 AI-Agent 熟练的候选人

  • 工作年限会自动转换为天数存储(WonderCV 内部格式)

  • 职位默认有效期30天

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes会话 ID,从 register_company 获取
job_postYes职位名称,如:高级产品经理、AI算法工程师
jdYes职位描述(JD),包括岗位职责、任职要求等
city_namesYes工作城市列表,如:["上海"] 或 ["北京", "上海"]
salary_minNo最低月薪(人民币),如:30000
salary_maxNo最高月薪(人民币),如:50000
experience_minNo最低工作年限(年),如:3
experience_maxNo最高工作年限(年),如:5
degree_nameNo学历要求
job_natureNo工作性质,如:全职、兼职、实习
job_tagsNo职位标签,如:["AI", "远程", "股权激励"]
profession_idNo职位分类ID(WonderCV 内部编码)
require_ai_fluencyNo是否优先考虑AI Agent熟练的候选人

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It reveals several important behavioral traits: the job appears in multiple channels, has a 30-day default validity period, and that work experience is converted to days internally. However, it doesn't disclose critical mutation implications like whether this is idempotent, what permissions are needed, or what happens on failure. The description doesn't contradict any annotations since none exist.

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 appropriately sized and well-structured with clear sections: a purpose statement, three bullet points showing where jobs appear, and a '提示' section with three operational tips. Each sentence serves a purpose, though the third bullet about WonderCV channels could be more specific. The information is front-loaded with the core purpose stated first.

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?

For a mutation tool with 13 parameters, no annotations, and no output schema, the description provides adequate but incomplete context. It covers the basic purpose and some behavioral aspects (where jobs appear, default validity, internal format conversions), but doesn't address error conditions, response format, authentication requirements, or detailed parameter interactions. Given the complexity, it should provide more complete operational 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?

With 100% schema description coverage, the baseline is 3. The description adds minimal parameter semantics beyond the schema - it only mentions the 'require_ai_fluency' parameter in the tips section to explain its effect ('优先展示给 AI-Agent 熟练的候选人'). It doesn't provide additional context for other parameters like salary ranges, experience conversions, or the session_id requirement from 'register_company'.

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 clearly states the action ('发布职位' - post job) and target ('ClawHire 招聘市场'), providing a specific verb+resource combination. It distinguishes this from sibling tools like 'list_jobs' or 'search_candidates' by being a creation/write operation rather than a read operation. However, it doesn't explicitly contrast with 'register_company' which is another write operation.

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 provides some implied usage context by listing where the job will appear (ClawHire search, candidate recommendations, WonderCV channels), suggesting this is for broad job posting. However, it doesn't explicitly state when to use this tool versus alternatives like 'request_outreach' or provide clear exclusions. The '提示' section offers operational tips but not comparative guidance.

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

register_companyA

注册成为 ClawHire 雇主,创建企业账号。

这是使用 ClawHire MCP 的第一步。注册成功后,您将获得:

  • session_id:用于所有后续操作的会话标识

  • 公司账号:可发布职位、搜索候选人

  • Alpha 权限:前20家公司享受 generous 额度

如果该邮箱/手机号已关联 WonderCV 的 HrAccount,将自动关联现有账号。

ParametersJSON Schema
NameRequiredDescriptionDefault
company_nameYes公司名称(中文),将映射到 Companies.cn
emailYesHR/招聘负责人邮箱,用于接收候选人申请通知
cityYes公司所在城市,如:上海、北京、深圳
industry_idNo行业ID(可选),参考 WonderCV 行业分类
scaleNo公司规模(可选),如:0-50人、50-150人、150-500人等
phoneNo联系电话(可选),用于微信账号绑定
company_positionNo您的职位(可选),如:HR经理、技术总监

TDQS

A4.2/5.0
Behavior3/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 well by explaining what happens upon success (you get session_id, company account, Alpha permissions) and the automatic account linking behavior. However, it doesn't mention potential errors (e.g., invalid inputs), rate limits, authentication requirements, or what the response format looks like (since there's no output schema).

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 efficiently structured with three clear paragraphs: (1) the core purpose, (2) the benefits upon success, and (3) the edge-case behavior. Every sentence adds value without repetition or fluff. It's appropriately sized for a registration tool with multiple parameters and behavioral nuances.

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 complexity (registration with 7 parameters, no annotations, no output schema), the description does well by covering the purpose, benefits, and edge-case behavior. However, it doesn't explain the response format or potential error conditions, which would be helpful since there's no output schema. For a foundational tool like this, it's mostly complete but could benefit from more behavioral details.

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 100%, so the schema already documents all 7 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain format constraints or provide examples for the optional parameters). The baseline of 3 is appropriate when the schema does the heavy lifting.

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 specific action ('注册成为 ClawHire 雇主,创建企业账号') and distinguishes this tool from its siblings by explaining it's '使用 ClawHire MCP 的第一步' (the first step to use ClawHire MCP). It explicitly mentions what this tool creates (company account) versus what sibling tools do (list jobs, post jobs, search candidates, etc.).

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 this tool ('使用 ClawHire MCP 的第一步') and what happens in alternative scenarios ('如果该邮箱/手机号已关联 WonderCV 的 HrAccount,将自动关联现有账号'). It clearly positions this as the initial setup/registration tool versus the operational tools (like list_jobs, post_job) that would come after registration.

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

request_outreachA

向数据库候选人(未入驻 ClawHire 的 WonderCV 用户)发送职位邀请。

工作原理

  1. ClawHire 代表您发送一封品牌化的邮件/微信消息

  2. 候选人收到:"【公司名】对您的简历感兴趣,邀请您了解 [职位名称]"

  3. 候选人可选择:感兴趣(加入 ClawHire 并开放档案)或不感兴趣

  4. 如候选人感兴趣,将自动出现在您的候选人列表中

限制

  • 每日限额(Alpha: 10次/天, Free: 5次/天)

  • 同一候选人90天内只能联系一次

  • 候选人可随时退订

提示

  • 建议配合职位使用,说明具体职位而非泛泛邀请

  • 简短的个性化消息可提高回复率

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes会话 ID,从 register_company 获取
candidate_refYes候选人引用ID(从 search_candidates 的 database_candidates 获取)
job_tokenYes关联的职位token,用于在邀请邮件中展示职位信息
messageNo自定义邀请消息(可选),将附在标准模板后

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden and excels at disclosing behavioral traits. It explains the multi-step workflow (how invitations are sent and processed), reveals important limitations (daily quotas, 90-day cooldown, unsubscribe option), and provides practical guidance about response rates. This goes well beyond basic functionality.

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 efficiently structured with clear sections (工作原理, 限制, 提示) that make information easy to parse. Every sentence adds value - no wasted words. The information is front-loaded with the core purpose, followed by important details.

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 mutation tool with no annotations and no output schema, the description provides exceptional completeness. It covers the entire workflow, limitations, practical tips, and expected outcomes. The agent understands not just what the tool does but how it behaves in practice, which is crucial for a tool that initiates external communications.

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 100%, so parameters are well-documented in the schema. The description doesn't add significant semantic context beyond what the schema provides about session_id, candidate_ref, job_token, and message parameters. The baseline 3 is appropriate when the schema does the heavy lifting.

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 specific action ('发送职位邀请' - send job invitation) and target resource ('数据库候选人' - database candidates), distinguishing it from siblings like search_candidates or view_candidate. It explicitly identifies the candidate type as non-ClawHire WonderCV users, providing precise scope.

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 provides clear context about when to use this tool (sending invitations to database candidates) and includes practical tips ('建议配合职位使用' - recommend using with specific jobs). However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings, though the context implies it's for outreach rather than viewing/searching.

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

search_candidatesA

搜索候选人池,包含两类候选人:

市场候选人(已入驻)

  • Category 1: MCP原生用户(🤖 AI-Agent 熟练标识)

  • Category 2: GUI选择加入的用户

  • 可查看完整档案(根据可见性设置)

  • 可直接申请职位

数据库候选人(被动池)

  • Category 3: WonderCV现有用户,未主动入驻

  • 仅显示匿名化信息(城市、大致经验、技能)

  • 无法直接联系

  • 可发送 outreach 邀请(每日限额)

AI-Agent 熟练度徽章

  • verified_mcp_user: 已验证MCP用户(自动标识)

  • ai_power_user: 高级AI用户(自评4+分且有工作流描述)

  • ai_aware: 了解AI工具(自评2-3分)

建议:使用 job_token 参数可根据职位要求智能排序候选人。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes会话 ID,从 register_company 获取
queryNo自然语言搜索,如:"上海AI产品经理,3年以上"
cityNo按城市过滤
profession_idNo职位分类ID
experience_minNo最低工作年限(年)
experience_maxNo最高工作年限(年)
salary_minNo最低期望薪资(月/人民币)
salary_maxNo最高期望薪资(月/人民币)
open_to_remoteNo是否接受远程工作
ai_fluency_minNo最低AI熟练度要求:verified_mcp_user=MCP用户, ai_power_user=高级用户
poolNo搜索范围:marketplace=已入驻候选人, database=WonderCV数据库, all=全部
job_tokenNo关联的职位token,将根据职位要求优化匹配排序
pageNo页码
page_sizeNo每页数量,最大20

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 does so effectively. It discloses key behavioral traits: daily outreach limits for database candidates, visibility settings for market candidates, and sorting behavior with job_token. It also explains contact restrictions and AI proficiency badges, adding valuable context beyond basic functionality.

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 well-structured with clear sections (market candidates, database candidates, AI proficiency badges, suggestion) and uses bullet points for readability. It is appropriately sized for the tool's complexity, though some redundancy exists (e.g., repeating candidate categories could be streamlined). Every sentence adds value without unnecessary fluff.

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 complexity (14 parameters, no annotations, no output schema), the description is quite complete. It explains candidate types, behavioral constraints, and usage tips. However, it doesn't detail the output format or pagination behavior, which is a minor gap since there's no output schema to rely on, but the overall context is well-covered.

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 100%, so the schema already documents all 14 parameters thoroughly. The description adds minimal parameter-specific semantics, only mentioning job_token for intelligent sorting. It doesn't provide additional syntax, format, or usage details beyond what the schema offers, meeting 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?

The description clearly states the tool searches candidate pools with specific categories (market candidates and database candidates), distinguishing it from sibling tools like list_applications or view_candidate. It provides a detailed breakdown of candidate types and their characteristics, making the purpose explicit and differentiated.

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 includes a suggestion to use job_token for intelligent sorting based on job requirements, which provides clear guidance on optimal usage. However, it lacks explicit when-not-to-use guidance or alternatives among sibling tools like list_applications or view_candidate, though the context of candidate pools is well-defined.

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

view_candidateA

查看特定候选人的详细档案。

可见性规则

  • 匿名模式:显示脱敏信息(公司名称为"某互联网大厂")

  • 完整模式:显示真实姓名、联系方式(需候选人授权)

注意

  • 仅适用于市场候选人(source=mcp 或 gui_optin)

  • 数据库候选人(source=database)无详细档案视图

  • 每次查看消耗 quota

候选人设置了 company blocklist 的公司无法查看其档案(返回404,不泄露被屏蔽信息)。

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes会话 ID,从 register_company 获取
candidate_idYes候选人ID(从 search_candidates 的 marketplace_candidates 获取)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well at disclosing important behavioral traits: visibility rules (anonymous vs. complete modes), quota consumption ('每次查看消耗 quota'), and error behavior (404 for company blocklist without information leakage). It doesn't mention authentication requirements, rate limits, or response format details.

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 well-structured with clear sections (visibility rules, notes) and front-loads the core purpose. Most sentences earn their place by providing important constraints and behavioral information. It could be slightly more concise in the visibility rules section.

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 no annotations and no output schema, the description does a good job covering important contextual information: visibility modes, source restrictions, quota consumption, and error behavior. It doesn't describe the response format or what fields are included in the detailed profile, which would be helpful since there's no output schema.

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 100%, so the schema already documents both parameters well. The description doesn't add any parameter-specific information beyond what's in the schema descriptions. The baseline of 3 is appropriate when the schema does the heavy lifting for parameter documentation.

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 clearly states the tool's purpose: '查看特定候选人的详细档案' (view detailed profile of a specific candidate). It specifies the resource (candidate) and action (view detailed profile), but doesn't explicitly differentiate from sibling tools like 'search_candidates' which searches for candidates rather than viewing a specific one's details.

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 provides clear context about when to use this tool: '仅适用于市场候选人(source=mcp 或 gui_optin)' (only for market candidates with source=mcp or gui_optin) and explicitly states when NOT to use it: '数据库候选人(source=database)无详细档案视图' (database candidates have no detailed profile view). It doesn't explicitly mention alternatives like 'search_candidates' for finding candidates first.

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. 7 tool updatesv0.1.0
    • First observedlist_applications
    • First observedlist_jobs
    • First observedpost_job
    • First observedregister_company
    • First observedrequest_outreach
    • First observedsearch_candidates
    • First observedview_candidate

TDQS

A4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose with clear boundaries: list_applications for viewing applications, list_jobs for job listings, post_job for posting jobs, register_company for account setup, request_outreach for candidate invitations, search_candidates for candidate searches, and view_candidate for detailed profiles. No overlap exists; an agent can easily differentiate them based on their specific actions and targets.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case: list_applications, list_jobs, post_job, register_company, request_outreach, search_candidates, view_candidate. This uniformity makes the set predictable and easy to understand, with no deviations in naming conventions.

Tool Count5/5

With 7 tools, this server is well-scoped for its recruitment domain. Each tool serves a unique function in the hiring workflow, from company registration to candidate management, without being overly sparse or bloated. The count aligns perfectly with the typical range of 3-15 tools for a focused purpose.

Completeness4/5

The tool set covers most core recruitment operations: company setup, job posting, candidate search, outreach, and application viewing. However, there are minor gaps noted in list_applications, such as missing tools for processing applications (e.g., approve/deny), which are planned for v2 but currently absent. Otherwise, the surface is largely complete for the domain.

Related MCP Connectors