Skip to main content
Glama
1Bruce-eng

liepin-workbuddy-mcp

by 1Bruce-eng

liepin-workbuddy-mcp

一个供 WorkBuddy 使用的本地 stdio MCP Server 适配层,把猎聘官方命令行工具 liepin-cli 的能力(职位搜索、简历读取、求职期望更新、职位投递)暴露为 MCP 工具。

本项目不自行实现猎聘 API 客户端——不调用未公开接口、不抓取页面、不模拟登录,只通过官方授权页链接的 liepin-cli 完成操作。

⚠️ 第三方说明:官方 liepin-cli 仓库目前未声明开源许可证,因此本仓库不 vendoring、不复制、不再分发其源码,只依赖用户本机已安装的 CLI 命令。猎聘 CLI 的安装与授权请以官方授权页为准。

能力一览

MCP 工具

作用

是否写操作

liepin_search_jobs

按岗位、城市、薪资、公司等条件搜索职位

只读

liepin_get_resume

读取当前账号简历

只读

liepin_update_job_expectation

更新求职期望

写(需明确确认)

liepin_apply_job

投递指定职位

写(需明确确认,逐职位核对)

投递与更新都是不可轻易撤回的动作:适配器为两者设置了精确的确认文本门槛,缺失确认会直接阻止调用,杜绝批量或猜测式投递。

Related MCP server: MCP Server for LinkedIn

项目结构

yx/
├── connector-meta.json           # WorkBuddy 连接器元信息
├── mcp.json                      # MCP 配置样例(按本机修改 command 路径后使用)
├── pyproject.toml
├── src/liepin_workbuddy_mcp/
│   ├── __init__.py
│   ├── cli.py                    # 对 liepin-cli 的安全子进程封装
│   └── server.py                 # FastMCP stdio server
├── skills/liepin-job-search/SKILL.md
└── tests/

安装与配置

1. 安装官方猎聘 CLI

猎聘 CLI 安装与授权遵循官方授权页:https://www.liepin.com/mcp/auth(授权页所链接仓库为 https://github.com/liepin-tech-2026/liepin-cil)。任选官方 README 中的一种方式安装,确保 liepin-cli 在 PATH 中可调用。

首次授权在可交互终端中执行:

liepin-cli setup

按提示打开授权页、登录,把页面生成的 Token 粘贴到终端。Token 只保存在本机 CLI 配置中,不要发到聊天、截图或项目文件;凭证有效期 90 天。

检查授权状态:

liepin-cli auth status

2. 安装本项目

python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

3. 在 WorkBuddy 中配置 MCP

项目根目录的 mcp.json 是配置样例。将其中的 mcpServers.liepin-workbuddy 节点合并到 WorkBuddy 的用户级 MCP 配置(~/.workbuddy/mcp.json),并按本机实际安装位置修改 command 路径;不要覆盖已有的其它 MCP server 项。合并后在 WorkBuddy 连接器管理页面找到 liepin-workbuddy,点击「信任」并启用。

提示:MCP server 通过 stdio 通信,进程本身不打印启动横幅或调试日志。

4. 开始使用

  • 「用猎聘搜索深圳的产品经理岗位,期望薪资 25k–35k。」

  • 「读取我的猎聘简历,帮我总结优势和需要补强的地方。」

  • 「搜索符合条件的岗位,逐个比较;投递前先把岗位信息给我确认。」

薪资单位、薪资类型等筛选值以 liepin-cli job search --help 展示的格式为准;不确定时先查帮助,不要猜测编码。职位返回为 CLI 的原始 JSON,本项目透传、不承诺字段形状。

本地运行与测试

.venv/bin/python -m pytest -q

也可在终端直接启动 MCP server:

.venv/bin/liepin-workbuddy-mcp

安全边界与限制

  • 写操作(更新求职期望、投递)必须在用户查看字段并明确确认后才执行。

  • 职位搜索结果中的 job_id、job_kind 均须原样取自本次结果,禁止推断或捏造。

  • 简历数据涉及个人信息,仅在当前授权账号与用户确认的范围内调用,不另行保存副本。

  • 官方 CLI 未声明许可证,本项目不随附其源码;因此无真实授权账号时,集成测试无法验证线上数据,单元测试使用假 CLI 验证命令组装、JSON 解析、错误脱敏与确认门槛。

Available Tools

4 tools
liepin_apply_jobA

向猎聘投递指定职位。投递不可轻易撤回,必须先展示职位详情并取得用户明确确认。

job_id 和 job_kind 必须来自本次猎聘职位搜索结果;job_kind 不得猜测。confirmation 必须精确为“确认投递该猎聘职位”。

NameRequiredDescriptionDefault
job_idYes
job_kindYes
confirmationYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does disclose the critical trait: the application cannot be easily withdrawn. It also pins the confirmation string exactly. It does not cover auth prerequisites, duplicate-application behavior, or what happens on failure, which is a real gap for an irreversible mutation.

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 purpose is front-loaded in the first sentence, followed by the irreversibility warning and parameter constraints. Both paragraphs earn their place, with no filler.

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

Completeness4/5

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

For a three-param irreversible write tool with an output schema, the description covers the essentials an agent needs to call it safely. Missing are auth/login requirements and error or duplicate-handling behavior, which matter given the stated irreversibility.

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

Parameters4/5

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

Schema coverage is 0%, but the description compensates well: job_id and job_kind are constrained to fresh search results, job_kind must not be guessed, and confirmation must match a literal string. It stops short of enumerating valid job_kind values, which would fully close the gap.

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?

States a specific verb and resource ('向猎聘投递指定职位') with the scope made explicit. It is clearly distinguishable from siblings like liepin_search_jobs and liepin_get_resume by the write action alone, though the description does not name an alternative tool.

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?

Explicit preconditions are given: first display the job details and get the user's explicit confirmation, and use job_id/job_kind only from this session's Liepin search results. It also states an explicit negative constraint — job_kind must not be guessed — so there is little left to infer.

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

liepin_get_resumeA

读取当前猎聘账号简历。仅返回猎聘官方 CLI 的原始 JSON 数据,不会保存副本。

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/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 usefully discloses that only raw JSON from the official Liepin CLI is returned and no copy is saved, but it does not state read-only side effects, auth requirements, rate limits, or 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.

Conciseness5/5

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

Two short sentences with zero waste: the purpose is front-loaded, followed by the key behavioral constraint about raw JSON and no saved copy. Every sentence earns its place.

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

Completeness4/5

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

For a zero-parameter read tool with an output schema, the description is nearly complete: it identifies the target resource, implies the authenticated account, and notes the raw JSON return with no persistence. The only minor gap is the absence of explicit read-only/safety language, which matters because no annotations are present.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description does not need to add parameter meaning, and the empty schema is consistent with the no-parameter call.

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 names a specific verb ('读取') and resource ('简历') scoped to '当前猎聘账号', so an agent can tell this retrieves the authenticated user's resume. It does not explicitly differentiate from siblings, though the siblings (job search, expectation update, job apply) are unrelated operations.

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?

Usage is implied by '当前猎聘账号简历' – the tool is for reading the current account's resume. There is no explicit when-to-use guidance, no statement of prerequisites, and no mention of alternatives or exclusions.

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

liepin_search_jobsB

使用猎聘官方 CLI 搜索职位。薪资和筛选值按猎聘 CLI 支持格式原样传入;page 从 0 开始。

返回官方 CLI 原始 JSON,不假设字段结构。调用前应确认目标城市、岗位和薪资条件已明确。

NameRequiredDescriptionDefault
pageNo
addressNo
job_nameNo
edu_levelNo
salary_capNo
comp_natureNo
salary_kindNo
company_nameNo
salary_floorNo
work_experienceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does disclose two meaningful behaviors: page is 0-indexed and the return is raw CLI JSON with no assumed field structure. It does not mention auth requirements, rate limits, total result count, or how many items a page returns, which matters for a scraping-style search.

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?

Short and front-loaded: what the tool does first, then format caveats, then return behavior, then a precondition. No filler sentences. It could be slightly better organized by grouping the parameter-format notes together.

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?

Output schema exists, so return shape need not be described (and the 'raw JSON, don't assume fields' note is a helpful extra). But with 10 undescribed, enum-less, all-optional parameters, the description compensates only partially — an agent still lacks enough to fill salary and filter fields confidently.

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

Parameters2/5

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

Schema coverage is 0% and none of the 10 parameters (salary_floor, salary_cap, salary_kind, comp_nature, edu_level, work_experience, address, job_name, company_name, page) has a description or enum. The description only clarifies that filter values must be passed as raw CLI-format strings and that page is 0-based; it never explains the expected format or accepted values for salary/edu/experience filters, leaving the agent to guess.

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?

States a specific verb and resource ("搜索职位" / search jobs) and names the channel (Liepin official CLI). Siblings (get_resume, apply_job, update_job_expectation) are clearly different operations, so differentiation is implicit rather than argued. It could not be confused with anything else in the toolset.

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?

"调用前应确认目标城市、岗位和薪资条件已明确" gives a pre-call checklist, which is useful implied usage guidance. However, it never says when this tool is the right choice versus not calling it at all (e.g. no results / different query strategy), and no alternatives are named. Guidance is present but thin.

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

liepin_update_job_expectationA

更新猎聘的求职期望。写操作必须在用户查看更新字段后获得其明确确认。

confirmation 必须精确为“确认更新猎聘求职期望”;record_id 必须来自简历查询结果。 支持 jobtitle、dq、wantSalaryLow、wantSalaryHigh、wantSalaryMonths、workType、workweek 和 practiceMonths。

NameRequiredDescriptionDefault
dqNo
jobtitleNo
workTypeNo
workweekNo
record_idYes
confirmationNo
wantSalaryLowNo
practiceMonthsNo
wantSalaryHighNo
wantSalaryMonthsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description must carry the behavioral burden, and it does disclose that this is a write operation requiring explicit user confirmation after viewing fields. It also constrains the confirmation string and record_id origin, though it does not describe reversibility, permission requirements, or how omitted optional fields affect existing data.

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 short and front-loaded: purpose first, then the mandatory confirmation workflow, then exact constraints and supported fields. Every sentence contributes necessary operational or safety information.

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

Completeness3/5

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

The tool has 10 parameters, no annotations, and low schema description coverage, so the description should compensate more fully. It covers purpose, confirmation, record_id provenance, and field names, but not enough about field meanings or partial-update behavior; the output schema exists, so return values need not be explained.

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

Parameters3/5

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

Schema description coverage is 0%, so parameter meaning depends entirely on the description. The description lists all supported field names and adds important semantics for confirmation and record_id, but leaves several fields such as dq, salary units, workweek semantics, and allowed workType values unexplained.

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 states a specific verb and resource: '更新猎聘的求职期望' (update Liepin job expectation). This is unambiguous and clearly distinct from the sibling tools, which search jobs, fetch resumes, or apply to jobs.

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

Usage Guidelines4/5

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

It explicitly requires the user to view the updated fields and give clear confirmation before the write operation, and states the exact confirmation string and valid source of record_id. Usage context is strong, though there is no explicit statement of when not to use the tool or an alternative path.

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. 4 tool updatesv0.1.0
    • First observedliepin_apply_job
    • First observedliepin_get_resume
    • First observedliepin_search_jobs
    • First observedliepin_update_job_expectation

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool maps to a distinct action in the job-search workflow: search jobs, read resume, update job expectations, and apply to a job. There is no meaningful overlap between their purposes, and the write-operation confirmations further distinguish them.

Naming Consistency5/5

All tool names follow a clear and consistent liepin_verb_noun snake_case pattern. The verbs (search, get, update, apply) accurately describe each operation.

Tool Count5/5

Four tools is a well-scoped set for a focused job-search assistant, and every tool has a clear role. The count is neither bloated nor trivially thin.

Completeness3/5

The surface covers search, resume reading, expectation updates, and application submission, but notable lifecycle gaps remain. There is no dedicated job-detail retrieval, application status tracking, withdrawal, or resume update operation, which may limit agents after submission.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables any MCP host to search job postings on sinojobs.com and retrieve individual job details via read-only search and lookup tools, with keyword, location, remote-only, and posting-date filters. Works over stdio with polite rate limiting and returns normalized results including title, company, location, apply URL, and publish date.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search live job listings on waiqipin.cn and fetch individual roles with application links, filtering softly by keyword, location, recency, and remote suitability. Runs locally over stdio so compatible MCP hosts gain read-only access to those public opportunities.
    MIT