内容
# job104-mcp
一个用于搜索 [104 人力銀行](https://www.104.com.tw) 工作列表的MCP服务器,支持自然语言过滤。可与任何MCP客户端配合使用 — Claude, Cursor, Windsurf, Cline, Zed, VS Code等。
> **免责声明:** 本工具为非官方、教育/个人用途工具。**不隶属于、未得到、也未获得 104 集团的认可、赞助或支持**。它调用了104的公开网页端点;请尊重104的服务条款,以合理、低频率使用。 本项目不分发任何抓取的工作数据。
## 工作原理
104 网站位于 Cloudflare 机器人防护之后 — 直接向其 JSON API 发送普通 HTTP 请求会返回 403。本服务器使用 [`curl_cffi`](https://github.com/lexiforest/cffi) 并设置 `impersonate="chrome"` 以匹配真实浏览器的 TLS 指纹,因此相同的公开端点会返回正常的 JSON。 AI 看到的结果是干净的结构化数据; 104 类别/地区代码会从中文名称自动解析。
## 前置条件:安装 uv
每种安装路径都通过 [uv](https://docs.astral.sh/uv/) 运行服务器,因此必须先安装它(`uvx` 随 uv 捆绑提供):
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
## 在任何 MCP 客户端中安装(Cursor, Windsurf, Cline, Zed, VS Code, …)
MCP 是一种开放协议,因此任何支持 MCP 的客户端都可以使用 — 不仅仅是 Claude。 将以下内容添加到客户端的 MCP 配置中(例如 Cursor 的 `~/.cursor/mcp.json`);大多数客户端接受 `command`/`args` 形式:
{
"mcpServers": {
"job104": { "command": "uvx", "args": ["job104-mcp@latest"] }
}
}
## 在 Claude Code 中安装
claude mcp add job104 -- uvx job104-mcp@latest
或从本地克隆(无需 PyPI):
claude mcp add job104 -- uv run --project /absolute/path/to/job104-mcp -m job104_mcp
## 在 Claude Desktop 中安装(.mcpb 捆绑包)
`.mcpb` 捆绑包是仅限 Claude Desktop 的便捷功能(其他客户端使用上述 JSON 配置)。 从 [Releases](https://github.com/mozzan/job104-mcp/releases) 页面下载 `job104-mcp-vX.Y.Z.mcpb` 并双击它(或将其拖入 Claude Desktop → 设置 → 扩展程序)。
要自行构建捆绑包:
npx @anthropic-ai/mcpb pack . # 生成 job104-mcp.mcpb
## 手动运行(标准输入/输出)
uv run job104-mcp
# 或
uv run python -m job104_mcp
## 工具
- `search_jobs` — 使用关键词、地区、职位类别、最低薪水、远程、最近、经验、教育、排序、分页进行搜索。 为 `area`/`jobcat` 使用中文名称(例如 `["台北市大安區"]`、`["軟體工程師"]`);它们会自动解析为 104 代码。 每个结果都带有 `detail_id`。
- `get_job_detail` — 获取 `search_jobs` 中的 `detail_id` 的完整职位发布。
- `lookup_code` — 将职位类别或地区名称解析为其 104 代码。
## 刷新代码表
捆绑的 `jobcat.json` / `area.json` 来自 104 的公共类别工具。 重新生成:
uv run python scripts/fetch_codes.py
## 测试
uv run pytest # 快速单元测试
uv run pytest -m live # 访问真实的 104 网站
## 发布(维护者)
发布由 `.github/workflows/release.yml` 自动执行,当 `main` 分支上的 `pyproject.toml` 版本更改时触发。 它发布到 PyPI,构建 `.mcpb` 捆绑包,并将其附加到 GitHub Release 中。
一次性 PyPI 设置(使用 [Trusted Publishing](https://docs.pypi.org/trusted-publishers/),无需存储 API 令牌):在 <https://pypi.org/manage/account/publishing/> 上添加一个待定的发布者,项目为 `job104-mcp`,所有者为 `mozzan`,仓库为 `job104-mcp`,工作流为 `release.yml`。
要发布新版本:增加 `pyproject.toml` 中的 `version`,提交到 `main` 分支。
## 许可证
MIT — 请参阅 [LICENSE](LICENSE)。 按照原样提供,不提供任何保证。