Skip to main content
Glama
ClawHire MCP

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 实现。

Inputs: session_id (required), job_token, status, page, +1 more.

list_jobsA

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

返回信息:

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

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

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

可用于:

  • 了解各职位的招聘进展

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

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

Inputs: session_id (required), status, page, page_size.

post_jobB

发布职位到 ClawHire 招聘市场。

职位将同时出现在:

  1. ClawHire 雇主端搜索结果

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

  3. WonderCV 相关渠道

提示:

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

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

  • 职位默认有效期30天

Inputs: session_id (required), job_post (required), jd (required), city_names (required), +9 more.

register_companyA

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

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

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

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

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

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

Inputs: company_name (required), email (required), city (required), industry_id, +3 more.

request_outreachA

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

工作原理:

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

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

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

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

限制:

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

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

  • 候选人可随时退订

提示:

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

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

Inputs: session_id (required), candidate_ref (required), job_token (required), message.

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 参数可根据职位要求智能排序候选人。

Inputs: session_id (required), query, city, profession_id, +10 more.

view_candidateA

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

可见性规则:

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

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

注意:

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

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

  • 每次查看消耗 quota

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

Inputs: session_id (required), candidate_id (required).

Tool Schema Changelog

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

Loading tool schema changelog…

    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