Skip to main content
Glama
saurabhgayali

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集成)

  1. 安装并构建:

npm install
npm run build
  1. 启动MCP服务器:

npm start
# Server runs on stdio (ready for Claude Desktop, Cursor, or other MCP clients)
  1. 在Claude Desktop中配置~/.claude/claude_desktop_config.json):

{
  "mcpServers": {
    "job-search": {
      "command": "node",
      "args": ["path/to/dist/server.js"]
    }
  }
}
  1. 在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}"
    }
  ]
}

添加新公司

要添加新公司:

  1. 创建配置条目: 将公司名称和搜索URL添加到src/config.json

  2. 创建站点定义: 添加带搜索参数的sites/company-name.json

  3. 创建提取器: 添加带HTML解析规则的src/extractors/company-name.ts(仅在使用新平台时需要)

  4. 注册提取器: 添加到src/extractors/index.ts

无需重新构建 - 配置在运行时加载。

公司平台支持

平台

公司

文件

Workday

Amgen、Pfizer、GSK

src/extractors/amgen.ts

Eightfold AI

Bayer

src/extractors/bayer.ts

Drupal

Novartis

src/extractors/novartis.ts

可扩展性: 再添加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
workerSubType

MCP不能假设每家公司都支持相同的参数。

职位提取器

项目包含特定站点的职位提取器,用于解析单个职位发布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定义了各个公司文件的预期结构。

它是一个按示例定义的模式/模板,而不是公司注册表。

当前示例使用locationtimeTypeLocationCountryjobFamilyGroupworkerSubType等参数。

BUILD.md

BUILD.md包含用于从公司配置构建MCP的AI/开发流程的说明。

构建过程应:

  1. 读取src/config.json

  2. 处理sites中列出的每家公司。

  3. 访问/分析提供的搜索URL。

  4. 确定公司实际的招聘/搜索结构。

  5. 发现可用的搜索参数及其值。

  6. 生成或更新相应的sites/<company>.json

  7. 确保生成的文件遵循test/sample.json定义的结构。

  8. 构建/更新通用MCP实现。

  9. 验证所有配置的站点都可以被搜索。

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 configuration

MCP不应包含对locationremotefull_timejob_type等参数的硬编码假设。

只有当公司的招聘网站实际支持该参数或暴露配置所需的信息时,该参数才存在。

目标

目标是创建一个可复用的职位搜索MCP,其中添加公司主要是将搜索URL添加到config.json,让AI构建过程自动发现和维护站点特定配置。

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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,093
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    33
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    A 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

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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