寻找工作 MCP 服务器
一个使用模型上下文协议(MCP)的对AI友好的求职信息集成服务器。 这台服务器提供了通过联邦就业局搜索德国职位空缺的工具 机构(联邦劳动局)API。
特点/特性
- 人工智能友好型界面简洁、语义化的求职参数
- 官方API集成使用
jobsuche用于可靠API访问的容器 - 丰富的过滤功能按地点、职位名称、雇佣类型、合同类型等条件搜索
- 全面细节获取完整的职位信息,包括职位描述和要求
- 分页支持高效处理大型结果集
- 零配置开箱即用,拥有合理的默认设置
安装
来自 npm(推荐)
npm install -g @wunderfrucht/jobsuche-mcp-server来自源(或“来源”)
git clone https://github.com/wunderfrucht/jobsuche-mcp-server.git
cd jobsuche-mcp-server
cargo build --release配置
服务器使用环境变量进行配置(所有均为可选):
JOBSUCHE_API_URLAPI基础URL(默认:官方联邦劳动局API)JOBSUCHE_API_KEY自定义API密钥(默认:公共API密钥)JOBSUCHE_DEFAULT_PAGE_SIZE每页默认结果数(默认:25)JOBSUCHE_MAX_PAGE_SIZE每页最大结果数(默认:100)
与MCP客户端的使用
Claude Desktop(克劳德桌面版)
添加到您的Claude桌面配置中(~/Library/Application Support/Claude/claude_desktop_config.json (在 macOS 上):
{
"mcpServers": {
"jobsuche": {
"command": "npx",
"args": ["@wunderfrucht/jobsuche-mcp-server"]
}
}
}或者使用本地二进制文件:
{
"mcpServers": {
"jobsuche": {
"command": "/path/to/jobsuche-mcp-server"
}
}
}Continue.dev(可译为“继续开发平台”或根据具体语境调整,此处直译为“继续.dev”以保留原名风格,但实际应用中可能需根据上下文选择更贴切的译名)
在您的Continue配置中添加:
{
"mcpServers": {
"jobsuche": {
"command": "npx",
"args": ["@wunderfrucht/jobsuche-mcp-server"]
}
}
}可用工具
1. search_jobs
使用各种筛选条件在德国搜索工作。
注: 对于大多数使用场景,请考虑使用 search_jobs_with_details 或者 batch_search_jobs 相反,因为它们在人工智能工作流程中效率更高。
参数:
job_title(可选):职位名称或关键词(例如,“软件工程师”,“数据科学家”)location(可选):地点名称(例如,“柏林”,“慕尼黑”,“德国”)radius_km(可选):以当前位置为圆心,搜索半径(公里)employment_type(可选):就业类型筛选器
- 选项: "fulltime", "parttime", "mini_job", "home_office", "shift"
contract_type(可选):合同类型筛选器
- 选项: "permanent", "temporary"
published_since_days(可选):自发布以来的天数(0-100,默认值:30)page_size(可选):每页结果数量(1-100)page(可选):用于分页的页码(从1开始)employer(可选):要搜索的雇主名称(例如,“BARMER”,“Siemens”)branch(可选):要搜索的行业/分支(例如,“IT”,“医疗保健”)
示例:
{
"job_title": "Software Engineer",
"location": "Berlin",
"employment_type": ["fulltime"]
}{
"location": "München",
"published_since_days": 7,
"radius_km": 50
}{
"job_title": "Data Scientist",
"location": "Deutschland",
"employment_type": ["fulltime", "parttime"],
"page_size": 50
}{
"employer": "BARMER",
"location": "Wuppertal",
"employment_type": ["parttime"]
}2. get_job_details
获取特定职位发布的详细信息。
参数:
reference_number(必填):搜索结果中的职位参考编号
示例:
{
"reference_number": "10001-1234567890-S"
}3. search_jobs_with_details ⭐ 推荐
搜索工作,并在一次操作中自动获取最热门结果的完整详情。
为什么要使用这个? 联合 search_jobs + 多个 get_job_details 整合为一个高效运营体系。
参数:
- 所有参数来自
search_jobs(职位名称、地点、雇佣类型等) max_details(可选):要获取详细信息的工作数量(默认:3,最大:10)fields(可选):字段过滤(请参阅“字段过滤”部分)
⚠️ 速率限制: 在详细信息获取之间自动加入100毫秒延迟,以尊重API速率限制。
示例:
{
"employer": "BARMER",
"location": "Wuppertal",
"employment_type": ["parttime"],
"max_details": 3
}{
"job_title": "Sekretärin",
"location": "Wuppertal",
"radius_km": 25,
"employment_type": ["parttime"],
"max_details": 3,
"fields": {
"include_fields": ["title", "employer", "salary", "description", "location"]
}
}回复内容包括:
- 总搜索结果数量
- 前N名职位的完整详情(职位名称、描述、薪资、要求等)
- 性能指标(搜索时长毫秒,详情加载时长毫秒)
______________________________________________________________________
4. batch_search_jobs ⭐⭐ 动力工具
一次性执行多个不同的职位搜索——非常适合系统性比较。
为什么要使用这个? 同时比较不同的雇主、工作类型或地点,而不是多次分别搜索。
参数:
searches搜索配置数组(最多5个),每个配置包含:
- name此搜索的标识符 - 所有标准搜索参数(职位名称、地点、雇主等)
max_details_per_search(可选):每次搜索要获取的详细信息数量(默认:2,最大:5)fields(可选):对所有结果应用字段过滤
⚠️ 流量限制: 包含自动延迟(搜索之间200毫秒,详细信息之间100毫秒),以尊重API速率限制。保守的默认设置可防止API过载。
示例 - 比较雇主:
{
"searches": [
{
"name": "BARMER Jobs",
"employer": "BARMER",
"location": "Wuppertal",
"employment_type": ["parttime"]
},
{
"name": "Siemens Jobs",
"employer": "Siemens",
"location": "Wuppertal",
"employment_type": ["parttime"]
}
],
"max_details_per_search": 3
}示例 - 比较作业类型:
{
"searches": [
{
"name": "Sekretariat",
"job_title": "Sekretärin",
"location": "Wuppertal"
},
{
"name": "Sport/Schwimmen",
"job_title": "Schwimm",
"location": "Wuppertal"
},
{
"name": "Pädagogik",
"job_title": "Pädagog",
"location": "Wuppertal"
},
{
"name": "Verwaltung",
"job_title": "Verwaltung",
"branch": "Bildung",
"location": "Wuppertal"
}
],
"max_details_per_search": 2,
"fields": {
"include_fields": ["title", "employer", "salary", "description"]
}
}响应内容包括:
- 每次搜索的结果(附带名称以作识别)
- 每次搜索找到的总结果数
- 每次搜索时显示排名前N个职位的完整详情
- 错误处理(若某次搜索失败,则继续执行)
______________________________________________________________________
5. get_server_status
获取服务器状态和连接信息。
示例:
{}响应示例
搜索工作响应
{
"total_results": 1523,
"current_page": 1,
"page_size": 25,
"jobs_count": 25,
"jobs": [
{
"reference_number": "10001-1234567890-S",
"title": "Software Engineer (m/w/d)",
"employer": "Example GmbH",
"location": "Berlin (10115)",
"published_date": "2025-10-15",
"external_url": null
}
],
"search_duration_ms": 342
}职位详情回复
{
"reference_number": "10001-1234567890-S",
"title": "Software Engineer (m/w/d)",
"description": "We are looking for an experienced software engineer...",
"employer": "Example GmbH",
"location": "Berlin",
"employment_type": "Vollzeit",
"contract_type": "unbefristet",
"start_date": "2025-11-01",
"application_deadline": null,
"contact_info": null,
"external_url": null,
"employer_profile_url": null,
"partner_url": "https://example.com/partner",
"salary": "50.000 - 70.000 EUR",
"contract_duration": "12 Monate",
"takeover_opportunity": null,
"job_type": "arbeitsstelle",
"open_positions": null,
"company_size": null,
"employer_description": null,
"branch": null,
"published_date": null,
"first_published": "2025-10-10",
"only_for_disabled": false,
"fulltime": true,
"entry_period": "ab 2025-11-01",
"publication_period": "2025-10-01 - 2025-11-30",
"is_minor_employment": false,
"is_temp_agency": false,
"is_private_agency": false,
"career_changer_suitable": true,
"cipher_number": null,
"raw_data": { ... }
}可用字段:
- 基本信息:
- reference_number独特的工作参考(或职位参考) - title职位名称 - description完整的工作职责描述 - employer公司名称 - location工作地点
- 就业详情:
- employment_type就业类型(全职、兼职,根据全职标志推导得出) - fulltime全职就业的布尔指示器(v0.2.0新增) - contract_duration合同期限(如为临时合同) - start_date预期开始日期(根据entry_period格式化得出) - entry_period输入日期范围(v0.2.0 新增功能) - publication_period出版日期范围(v0.2.0 新增)
- 雇佣类型(v0.2.0 新增):
- is_minor_employment零工/迷你工作(或:小规模就业/临时工作) - is_temp_agency临时就业机构(Zeitarbeit,直译为“时间工作”) - is_private_agency私人就业机构 - career_changer_suitable适合转行者(跨界人士)
- 补偿:
- salary薪资信息(如可提供)
- 应用程序信息:
- external_url外部应用URL(可能在搜索结果中提供) - partner_url合作伙伴/联盟网址 - cipher_number匿名发帖的加密编号(v0.2.0 新增功能) - application_deadline申请截止日期(API中不可用) - contact_info联系信息(API中不可用)
- 附加信息:
- job_type职位类型(工作职位、培训、实习) - first_published首次出版日期 - only_for_disabled仅限重度残疾人使用 - raw_data完整的原始API响应
- 字段不再可用(API v0.3.0):
- employer_profile_url已从API中移除 - takeover_opportunity已从API中移除 - open_positions已从API中移除 - company_size已从API中移除 - employer_description已从API中移除 - branch已从API中移除 - published_date已从API中移除 - contract_type已从API中移除
*这些字段为了保持向后兼容性仍保留在响应结构中,但将始终返回(或:但会始终存在) null。*
性能与效率
AI的大规模操作
v0.3.0版本中的新批量操作极大地减少了执行常见AI工作流所需的工具调用次数:
场景1:查找并审查前3名的工作
Traditional approach:
- 1x search_jobs
- 3x get_job_details
= 4 tool calls
With search_jobs_with_details:
- 1x search_jobs_with_details (with auto-delays)
= 1 tool call (75% reduction!)场景2:比较4个不同的工作类别
Traditional approach:
- 4x search_jobs
- 8x get_job_details (2 per search)
= 12 tool calls
With batch_search_jobs:
- 1x batch_search_jobs (with auto-delays)
= 1 tool call (92% reduction!)速率限制保护:
- 在详细信息获取之间自动设置100毫秒延迟
- 搜索之间自动设置200毫秒延迟
- 保守默认设置(最大详细信息:3,每次搜索的最大详细信息:2)
- 依赖于jobsuche库内置的指数退避重试逻辑
何时使用何种(方法/工具/资源等)
search_jobs当你只需要查看可用的信息(职位名称、雇主、地点)时get_job_details当你有一个特定的工作参考编号时search_jobs_with_details⭐:当你想要搜索并查看详细信息时(最常见的AI工作流程)batch_search_jobs⭐⭐:在比较多个类别(雇主、工作类型、地点)时
字段过滤(可选)
通过指定要包含/排除的字段来减小响应大小和减少令牌使用量:
{
"fields": {
"include_fields": ["title", "employer", "salary", "description", "location"]
}
}或者排除不必要的字段:
{
"fields": {
"exclude_fields": ["raw_data", "cipher_number", "is_temp_agency"]
}
}注: 现场过滤基础设施已存在,但全面实施将在未来版本中推出。
发展
先决条件
- Rust 1.75.0 或更高版本
- Node.js 16+(用于npm分发)
建筑
cargo build运行测试
cargo test使用MCP Inspector进行测试
npm install -g @modelcontextprotocol/inspector
npx @modelcontextprotocol/inspector ./target/debug/jobsuche-mcp-server使用直接JSON-RPC进行测试
# List available tools
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | ./target/debug/jobsuche-mcp-server
# Call search_jobs
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_jobs","arguments":{"location":"Berlin","page_size":5}}}' | ./target/debug/jobsuche-mcp-serverAPI信息
这个服务器使用了官方的联邦就业局(德国联邦就业机构)Jobsuche API:
- 基本URL:
https://rest.arbeitsagentur.de/jobboerse/jobsuche-service - 文档可通过以下方式获取
jobsucheRust 项目(或库) - 速率限制根据API提供商的限制
已知API限制
- 联系方式API未提供直接的联系方式(电子邮件、电话)或申请截止日期
- 外部网址可能仅在搜索结果中可见,而非在详细职位信息中
- 雇主搜索在搜索查询中结合职位名称(没有专门的筛选器)
- 分支搜索在搜索查询中结合职位名称(无专用筛选器)
- API v0.3.0 更新“在之前的API版本中,有多个字段已不再可用(请参阅“已不再可用的字段”部分)”
- 结果按从旧到新的顺序排列(无法自定义排序)
- 每页最多显示100个结果
- 如果任务快速过期,任务详情可能会返回404错误
处理缺失数据的权宜之计
- 对于应用程序URL使用
external_url从搜索结果中选择字段,或检查partner_url在职位详情中 - 针对特定雇主的搜索使用
employer与……结合的参数job_title在搜索中 - 对于已移除的字段检查
raw_data包含完整API响应的字段——部分数据可能仍存在于未记录的字段中
故障排除
服务器无法启动
- 检查API URL是否可访问
- 验证环境变量是否设置正确
- 确保您的设备已连接互联网
未找到结果
- 尝试使用更宽泛的搜索条件
- 检查地点名称的拼写
- 增加
published_since_days参数 - 尝试移除雇佣类型筛选条件
连接错误
- 验证网络连接
- 检查Bundesagentur für Arbeit(联邦劳动局)的API是否可访问
- 尝试使用默认API URL,无需自定义配置
做出贡献
- 克隆该仓库
- 创建一个特性分支
- 做出你的更改
- 如适用,请添加测试
- 提交拉取请求
许可证
MIT 许可证 - 详见 许可证 详情见下文。
致谢
- 使用(某种技术/材料/方法)构建 PulseEngine MCP 框架
- 使用 求职 Rust 库(或包)
- 由……提供动力/支持 联邦劳动局API
