ClawHire MCP

ClawHire MCP

An employer-facing MCP server that enables hiring managers to post jobs, search for candidates, and manage applications through natural language conversation. It integrates with WonderCV's hiring infrastructure and features a unique system for identifying and filtering talent with AI-agent fluency.

Category
访问服务器

README

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

  • [x] 7 employer tools (register, post, search, view, applications, outreach, list)
  • [x] Three-category candidate model
  • [x] AI fluency badges
  • [x] Anonymization for privacy
  • [x] 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

Related

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选