Job Search MCP
职位搜索 MCP
一个配置驱动的模型上下文协议(MCP)服务器,用于直接在公司招聘网站上搜索职位。
允许AI助手(Claude、ChatGPT)搜索和提取5家制药公司的职位列表,并采用可扩展架构,支持无限扩展公司。
当前覆盖: Amgen、Bayer、GSK、Novartis、Pfizer
可扩展至: 250多家公司(医疗保健、科技、金融行业)
功能特性
✅ 面向AI助手的MCP兼容职位搜索工具
✅ 配置驱动的公司支持(基于JSON,无需修改代码)
✅ 提取详细职位信息:职位名称、描述、要求、截止日期、申请链接
✅ 智能错误跟踪:分类404错误、超时、网络错误、解析错误
✅ 生成CSV报告以支持批量处理
✅ 零外部解析依赖(纯正则表达式提取)
✅ TypeScript严格模式,完全类型安全
✅ 公司特定HTML解析器(Workday、Eightfold AI、Drupal平台)
✅ 可选的Web演示,位于
/demo,用于手动搜索职位✅ 全面的测试套件(4个专业测试)
Related MCP server: trackly-cli
技术栈
协议: 模型上下文协议(MCP)SDK(TypeScript)
运行时: Node.js v18+(推荐LTS:v18、v20、v22)
语言: TypeScript 5.3+(严格模式)
解析: 基于正则表达式的HTML提取(无需Puppeteer、jsdom或Cheerio)
构建: TypeScript编译器(tsc)
可选Web界面: React + Next.js + Tailwind CSS(用于手动搜索)
测试: 原生Node.js(无需jest或mocha)
快速开始
作为MCP服务器(用于AI集成)
安装并构建:
npm install
npm run build启动MCP服务器:
npm start
# Server runs on stdio (ready for Claude Desktop, Cursor, or other MCP clients)在Claude Desktop中配置(
~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"job-search": {
"command": "node",
"args": ["path/to/dist/server.js"]
}
}
}在Claude中使用:
User: "Find me senior manager jobs at Amgen and Pfizer"
Claude: (uses MCP search tool)
Claude: "I found 12 senior manager positions with details..."作为本地CLI工具
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run job search tests
npm run test
node dist/test/test-manager-jobs.js可选:用于手动浏览的Web演示
将附带的React演示部署到Vercel(可选):
# Deploy demo at https://[your-app].vercel.app/
vercel deploy项目架构
作为MCP服务器(主要)
Claude / AI Assistant
↓
MCP Client Protocol (stdio)
↓
MCP Server (src/server.ts)
↓
Search Tool Handler
↓
┌──────────────────────────────────────┐
│ SearchExecutor (src/search-executor.ts)
│ - Orchestrates job searches
│ - Fetches from career site URLs
│ - Parses HTML for job listings
└──────────────────────────────────────┘
↓
┌──────────┬──────────┬──────────┬──────────┬──────────┐
│ │ │ │ │ │
Amgen Bayer GSK Novartis Pfizer
│ │ │ │ │
└──────────┴──────────┴──────────┴──────────┴──────────┘
↓
ExtractorRegistry (src/extractors/)
- 5 Company-specific parsers
- Extract: jobTitle, description, requirements, applyLink
- Track errors with classification
↓
Return JSON to AI Assistant可选:Web演示
User → Web Browser
↓
React Component (app/demo/page.tsx)
↓
Next.js API Route (app/api/search-jobs/route.ts)
↓
SearchExecutor (same as MCP uses)
↓
Results + CSV reports配置
src/config.json是项目支持公司的配置源。
当前: 5家公司(Amgen、Bayer、GSK、Novartis、Pfizer)
可扩展: 通过JSON配置添加无限公司(无需修改代码)
示例:
{
"projectname": "Job Search MCP",
"sites": [
{
"name": "Amgen",
"search_url": "https://amgen.wd1.myworkdayjobs.com/Careers?q={SEARCH_TERM}"
},
{
"name": "Bayer",
"search_url": "https://bayer.eightfold.ai/careers?query={SEARCH_TERM}"
}
]
}添加新公司
要添加新公司:
创建配置条目: 将公司名称和搜索URL添加到
src/config.json创建站点定义: 添加带搜索参数的
sites/company-name.json创建提取器: 添加带HTML解析规则的
src/extractors/company-name.ts(仅在使用新平台时需要)注册提取器: 添加到
src/extractors/index.ts
无需重新构建 - 配置在运行时加载。
公司平台支持
平台 | 公司 | 文件 |
Workday | Amgen、Pfizer、GSK |
|
Eightfold AI | Bayer |
|
Drupal | Novartis |
|
可扩展性: 再添加50多家公司只需JSON配置和可复用的平台提取器 "name": "Pfizer", "search_url": "..." } ] }
Only the company name and a usable search URL need to be supplied when adding a new company.
## Site Definitions
Each company is represented by a separate file under `sites/`.
For example:
```text
sites/amgen.json结构必须遵循test/sample.json。
站点定义包含:
公司名称
招聘网站URL
搜索URL
支持的搜索参数
参数标签
参数类型
可用的参数值
参数结构特意设计为数组而不是固定的JSON键,因为不同的招聘网站暴露不同的搜索参数。
例如,一个网站可能暴露:
location
country
jobType而另一个可能暴露:
location
timeType
LocationCountry
jobFamilyGroup
workerSubTypeMCP不能假设每家公司都支持相同的参数。
职位提取器
项目包含特定站点的职位提取器,用于解析单个职位发布URL并提取详细信息。
提取的数据
每个提取器获取:
职位名称 - 职位名称
职位描述 - 完整的职位描述/职责(不包括页眉/页脚)
资格要求 - 要求、资格和技能
截止日期 - 申请截止日期(YYYY-MM-DD格式,如无则为空)
申请链接 - 直接申请URL(可能不同于职位发布URL)
可用的提取器
src/extractors/
├── types.ts # JobExtractor interface & types
├── amgen.ts # Amgen (Workday-based)
├── pfizer.ts # Pfizer (Workday-based)
├── bayer.ts # Bayer (Eightfold AI)
├── gsk.ts # GSK (Workday-based)
├── novartis.ts # Novartis (Drupal)
└── index.ts # ExtractorRegistry使用示例
import { ExtractorRegistry } from './src/extractors/index.js';
const registry = new ExtractorRegistry();
const amgenExtractor = registry.getExtractor('amgen');
const result = await amgenExtractor?.extract(
'https://amgen.wd1.myworkdayjobs.com/job/India---Hyderabad/Assoc-Director---Data-Product-Mgmt_R-219150'
);
if (result?.success && result.data) {
console.log(result.data.jobTitle);
console.log(result.data.jobDescription);
console.log(result.data.eligibility);
}测试
项目包含全面的测试套件,用于验证搜索和提取功能。
测试套件概述
所有测试都是独立的TypeScript文件,可以独立运行:
npm run build
node dist/test/[test-name].js可用测试
1. test-config.ts - 配置加载测试
测试公司配置是否正确地从src/config.json加载。
node dist/test/test-config.js目的: 验证配置结构和公司发现 输出: 列出可用公司及其搜索URL
2. test-search.ts - 职位搜索测试
测试所有公司的搜索功能。
node dist/test/test-search.js目的: 验证搜索是否返回有效的职位URL 输出: 每家公司"Manager"职位的搜索结果 注意: 需要互联网连接以访问实际招聘网站
3. test-extractors.ts - 职位提取测试
测试每家公司职位URL的职位详情提取。
node dist/test/test-extractors.js目的: 验证职位名称、描述和资格要求的提取 输出: 提取成功率和字段详情 注意: 需要来自test-search.ts输出的真实职位URL
4. test-manager-jobs.ts - 端到端集成测试
完整流水线测试:搜索职位 → 提取详情 → 生成报告
node dist/test/test-manager-jobs.js目的: 完整的集成测试,包括错误跟踪和CSV报告生成 输出:
test/manager-jobs-success.csv- 成功提取的职位数据test/manager-jobs-errors.csv- 提取错误(404、超时等)显示成功率和错误分类的控制台摘要
运行所有测试
npm run build
node dist/test/test-config.js
node dist/test/test-search.js
node dist/test/test-extractors.js
node dist/test/test-manager-jobs.js测试输出文件
生成的CSV报告存储在test/文件夹中:
manager-jobs-success.csv- 成功的职位提取manager-jobs-errors.csv- 带错误代码的失败提取尝试用于调试的示例HTML文件
这些文件在测试运行期间生成,可以安全删除。它们位于.gitignore中。
test/sample.json
test/sample.json定义了各个公司文件的预期结构。
它是一个按示例定义的模式/模板,而不是公司注册表。
当前示例使用location、timeType、LocationCountry、jobFamilyGroup和workerSubType等参数。
BUILD.md
BUILD.md包含用于从公司配置构建MCP的AI/开发流程的说明。
构建过程应:
读取
src/config.json。处理
sites中列出的每家公司。访问/分析提供的搜索URL。
确定公司实际的招聘/搜索结构。
发现可用的搜索参数及其值。
生成或更新相应的
sites/<company>.json。确保生成的文件遵循
test/sample.json定义的结构。构建/更新通用MCP实现。
验证所有配置的站点都可以被搜索。
UPDATE.md
有关创建新版本时重建项目的说明,请参阅ai/UPDATE.md。
当src/config.json更改时,AI必须重建所有公司定义,而不仅仅是新添加的公司。
这是有意为之的。
现有招聘网站可能会更改其:
搜索URL
查询参数
筛选器名称
筛选器值
招聘网站结构
ATS实现
因此,每个版本都应针对当前在线的招聘网站重新检查现有的sites/*.json文件。
src/config.json updated
│
▼
Rebuild ALL sites
│
├── New company → create site JSON
│
└── Existing company → re-analyze and update
│
▼
Rebuild common MCP
│
▼
Validate
项目结构
JobSearchMCP/
├── src/ # Source code & configs
│ ├── server.ts # MCP server entry point
│ ├── search-executor.ts # Search execution & parsing
│ ├── config-loader.ts # Configuration loader
│ ├── types.ts # TypeScript types
│ ├── config.json # Company registry
│ ├── site_configurations.json
│ └── site_analysis.json
├── sites/ # Company-specific configs
│ ├── amgen.json
│ ├── pfizer.json
│ ├── novartis.json
│ ├── bayer.json
│ └── gsk.json
├── test/ # Tests & test data
│ ├── test-*.js # Test scripts
│ ├── sample.json # Configuration template
│ └── *.html # Sample HTML files
├── ai/ # AI development notes (Gitignored)
│ ├── AI.md
│ └── UPDATE.md
├── reports/ # Documentation
│ ├── IMPLEMENTATION.md
│ ├── ANALYSIS_GUIDE.md
│ ├── MCP_USAGE.md
│ └── MIGRATION.md
├── dist/ # Compiled JavaScript
├── package.json # Dependencies & scripts
├── tsconfig.json # TypeScript config
└── README.md # This file技术
运行时:Node.js 语言:TypeScript MCP SDK:官方模型上下文协议TypeScript SDK 配置:JSON
设计原则
项目将站点特定知识与通用MCP逻辑分离。
sites/*.json
= How a particular company career site works
MCP implementation
= How to search any configured company
AI
= Understand the user's request and select/use the appropriate
company search configurationMCP不应包含对location、remote、full_time或job_type等参数的硬编码假设。
只有当公司的招聘网站实际支持该参数或暴露配置所需的信息时,该参数才存在。
目标
目标是创建一个可复用的职位搜索MCP,其中添加公司主要是将搜索URL添加到config.json,让AI构建过程自动发现和维护站点特定配置。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.7MIT

trackly-cliofficial
AlicenseNot gradedqualityAmaintenanceMCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.1,0932MIT- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI-assisted job search workflows including job discovery, application tracking, resume evaluation, and cover letter generation, with support for multiple job sources and scheduled scraping.331AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceA custom MCP server that exposes a jobs database to any MCP-compatible LLM client, allowing users to ask in plain English to search, filter, and match job openings.MIT
Related MCP Connectors
GetJobzi MCP server for job search, application tracking, and career forecasting.
AI job search MCP — fact-checked jobs, application tracker, alerts. ChatGPT, Claude, Cursor.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/saurabhgayali/JobSearchMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server