Skip to main content
Glama
zvieli
by zvieli

通用多源职位搜索 FastMCP 服务器(job-mcp

Python 3.12+ FastMCP 2.0+ Tests Passing License: MIT

一个企业级、隐私至上的 FastMCP 服务器,提供智能多源技术职位聚合、智能去重、动态简历技能提取、需求覆盖率评分以及自主职位申请工作流,覆盖 HireMeTechComeet ATSAllJobs Israel


架构概览

graph TD
    Client([MCP Client: Claude / Cursor / Gemini Spark / Antigravity]) --> Tools[FastMCP Server Layer]
    Tools --> Aggregator[JobAggregator]
    Aggregator --> Registry[SourceRegistry]

    subgraph Parallel Pluggable Sources Layer
        Registry --> S1[HireMeTechSource<br/>Direct REST API + Session Fallback]
        Registry --> S2[ComeetSource<br/>Direct ATS API + Concurrency Semaphore]
        Registry --> S3[AllJobsSource<br/>Category Feeds + Anti-Blocking Headers]
    end

    subgraph Processing & Normalization Engine
        S1 --> Dedup[Deduplication & Entity Merger]
        S2 --> Dedup
        S3 --> Dedup
        
        Dedup --> NormKey["Key = slug(title) + '@' + slug(company)"]
        NormKey --> Merge[Metadata & Links Merger]
        Merge --> Scorer[Unified CV / Skill Matcher]
    end

    subgraph Dynamic Candidate Engine
        CV["Candidate CV (.pdf / .docx / .txt)"] --> Extractor[Dynamic CV & Profile Extractor]
        Extractor --> Skills["Extracted Skills (40+ tokens)"]
        Extractor --> Seniority["Inferred Seniority & Exclusions"]
        Extractor --> Roles["Target Job Roles"]
        Skills --> Scorer
        Seniority --> Scorer
    end

    Scorer --> Cache[Unified JobCache - 1h TTL]
    Cache --> Tools

核心特性

  1. 动态简历与候选人画像提取

    • 多格式输入处理:支持 .pdf(通过 pypdf)、.docx(通过 python-docx)和 .txt 文件。

    • NLP 技能分块与动态词库:无需脆弱的硬编码即可发现并提取 40+ 项技术技能,支持复杂多词技术(例如 FastAPILangGraphPostgreSQLSmart ContractsGraphRAG)。

    • 自动资历与排除检测:能准确推断候选人资历(Junior、Mid、Senior、Lead、Principal、Director),并生成智能否定关键词,自动过滤不匹配的职位。

    • 停用词与噪声过滤:严格剔除简历结构残留、日期、和教育头衔,以及非技术性元数据。

  2. 智能需求覆盖率评分(0–100)

    • 职位需求覆盖比率:计算候选人技能对特定职位的技能栈需求的满足程度(matched_job_skills / total_job_skills),避免对简历内容广泛的候选人扣分。

    • 加权元素评分

      • 技术栈重合度与覆盖率:最高 40 分

      • 求职 CV 全文关键词相关度:最高 25 分

      • 工作方式与地点匹配度:最高 20 分

      • 薪资期望吻合度:最高 15 分

      • 排除性惩罚:当存在硬性资历/技术不合格项时,-100 分。

    • 分段匹配分类

      • 顶级匹配($\ge 85$):自动申请 / 优先申请候选人。

      • 强匹配($70 - 84$):高意向职位,标记以供审查/收藏。

      • 失格($< 50$):自动隐藏或清除。

  3. 可插拔多源架构

    • HireMeTech:直接 REST API 集成(/api/jobs/search/api/auth/me/api/resume/profile),并带自动化 DOM 兜底。

    • Comeet(直连 ATS):直连 Comeet Careers API(/careers-api/2.0/company/{id}/positions),通过 asyncio.Semaphore(5) 限流、技术目录索引和按公司 TTL 缓存。

    • AllJobs Israel:分类信息流接入,使用模拟真实浏览器请求头,并在来源层面实现错误隔离。

  4. 跨源去重与实体合并

    • 当同一职位在多平台展示时自动去重。

    • 合并来源列表(sources: ["hiremetech", "comeet"])、对技术栈取并集、保留最丰富的描述,并优先展示直连 ATS 申请链接。

  5. 自主与监督操作模式

    • 监督模式:每个工具均需标准 MCP 确认。

    • 自主模式:无人工确认的安全读取/筛选/收藏链式操作,提交申请时设有两阶段安全护栏。

  6. 可观测性与高可用性

    • 使用结构化 JSON 日志(structlog)并输出到 stderr,自动对令牌/凭据进行脱敏。

    • 所有 ToolResponse 返回体中自动附带跟踪 ID。


工具参考(9 个工具)

工具名

参数

描述

list_job_sources

列出所有已注册的职位源(hiremetechcomeetalljobs)、能力与实时健康状态。

get_job_matches

sources: list[str] = None, force_refresh: bool = False

在所有平台或指定平台上拉取职位匹配结果,并自动去重。

filter_jobs_by_preferences

tech_stack: list[str], work_mode: str, location: str, min_salary: int, keywords: list[str], exclude_keywords: list[str], cv_path: str

根据候选人简历与偏好,对聚合职位进行评分与筛选。

bookmark_job

job_id: str

在原始平台上收藏/置顶职位列表。

delete_job

job_id: str

在视图中将某职位列表移除/隐藏,并从缓存中删除。

auto_apply_job

job_id: str

第 1 步:检查申请弹窗,生成预览并报告风险提示。

confirm_auto_apply

job_id: str

第 2 步:执行提交申请。始终需要明确确认。

calibrate_selectors

基于在线页面,通过自修复启发式算法发现并校准 DOM 选择器。

set_operation_mode

mode: 'supervised' | 'autonomous'

在“监督”与“自主”模式之间切换服务器运行模式。


快速开始与安装

1. 克隆并安装依赖

git clone https://github.com/zvieli/hireme_mcp.git
cd hireme_mcp

# Using uv (recommended)
uv venv .venv
uv pip install -e ".[dev]"
playwright install chromium

2. 配置候选人简历与个人资料

将您的简历(cv.pdfcv.docxcv.txt)放在项目根目录:

cp /path/to/your/resume.pdf ./cv.pdf
cp .env.example .env

编辑 .env 文件以配置默认的简历路径和联系方式:

DEFAULT_CV_PATH=./cv.pdf
CANDIDATE_EMAIL=your.email@example.com
CANDIDATE_NAME="Your Name"

3.(可选)HireMeTech 首次登录认证设置

Comeet 与 AllJobs 无需登录即可全自动运行。 若需对您的 HireMeTech 账户进行认证以获得直连 API 和自动申请能力:

.venv/bin/python -m job_mcp.setup
  1. 会打开一个 Chromium 浏览器窗口。

  2. 使用您的账号密码登录。

  3. 返回终端并按 [Enter] 保存会话到文件夹 ./browser_profile


运行服务器

方案 A:使用 Docker(推荐)

# Build and run in background
docker compose up -d

# View live multi-source aggregation logs
docker compose logs -f hireme-mcp

方案 B:本地直接运行

# Streamable HTTP (Default for Web & Cloud Clients)
.venv/bin/python -m job_mcp --transport http --host 0.0.0.0 --port 8000

# Stdio (Default for Desktop Clients)
.venv/bin/python -m job_mcp --transport stdio

可视化 CLI 流水线运行器

要在终端中运行一次全自动“探索 — 评分 — 申请”逐遍运行,并显示丰富可视化输出:

# Run with auto-extracted skills from your CV:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf

# Run with explicit stack override and remote filter:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --stack "Python,FastAPI,LangGraph" --work-mode remote --location "Tel Aviv"

# Execute live application submissions (disabled by default in dry-run):
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --auto-apply

MCP 客户端配置

1. Claude Desktop (claude_desktop_config.json)

在 Linux 上: ~/.config/Claude/claude_desktop_config.json
在 macOS 上: ~/Library/Application Support/Claude/claude_desktop_config.json
在 Windows 上: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "job-search-mcp": {
      "command": "/absolute/path/to/hireme_mcp/.venv/bin/python",
      "args": ["-m", "job_mcp", "--transport", "stdio"],
      "env": {
        "BROWSER_HEADLESS": "true",
        "DEFAULT_CV_PATH": "/absolute/path/to/hireme_mcp/cv.pdf",
        "CANDIDATE_EMAIL": "candidate@example.com",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

2. Gemini Spark / Web MCP 客户端

  • 端点 URLhttps://<your-host-or-devtunnel-id>/mcp

  • 传输方式:Streamable HTTP

  • 认证方式:无 / 无需认证


环境变量

变量

默认值

说明

DEFAULT_CV_PATH

./cv.pdf

用于动态提取候选人技能的默认简历路径。

CANDIDATE_EMAIL

candidate@example.com

自动化申请弹窗中使用的候选人邮箱。

CANDIDATE_NAME

""

申请表填写所需的候选人全名。

MCP_TRANSPORT

http

传输协议(httpssestdio)。

MCP_HOST

0.0.0.0

HTTP / SSE 传输的主机绑定地址。

MCP_PORT

8000

HTTP / SSE 传输的监听端口。

BROWSER_HEADLESS

true

是否以“浏览器无头”模式运行(true/false)。

BROWSER_PROFILE_DIR

./browser_profile

用于持久化 Chromium 会话存储的目录。

CACHE_TTL_MINUTES

60

已去重职位缓存的有效期(分钟)。

LOG_LEVEL

INFO

结构化日志级别(DEBUGINFOWARNINGERROR)。


运行测试

运行完整自动化测试集(共 542 个测试):

.venv/bin/pytest tests/ -v

开源许可证

本项目采用 MIT License 许可。

-
license - not tested
-
quality - not tested
B
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 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/zvieli/TechJobMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server