Skip to main content
Glama
maraMoreir

career-agent

by maraMoreir

Career Agent

通过 MCP 集成到 Claude Desktop 的职业助手。查找职位、计算与您个人资料的匹配度、以合规方式个性化您的简历、生成消息和回复,并维护求职申请记录。

最终的外部操作始终由您决定。 助手负责准备;您负责点击。


v1.1 新功能

功能

使用方法

持久化职位目录

run_job_search 收集并保存;list_matching_jobs 查询

5 个 ATS 提供商

Greenhouse、Lever、Ashby、Workable、SmartRecruiters

Adzuna(巴西全国索引)

.env 中填写 ADZUNA_APP_ID/ADZUNA_APP_KEY

可配置权重

编辑 data/config/scoring.json

11 个评分维度

包括 .NET、SAP、税务、架构和后端重点

定时搜索

.\scripts\schedule.ps1 -IntervalHours 2

本地仪表盘

.\scripts\start-dashboard.ps1

带退避的重试

所有 HTTP 源自动启用

每个来源的详细信息及实测结果:docs/FONTES.md


Related MCP server: job-search-mcp

目录

  1. 架构

  2. 前置要求

  3. 安装

  4. 配置

  5. Claude Desktop 配置

  6. 如何启动

  7. 如何测试

  8. 如何添加新的职位来源

  9. 如何添加新简历

  10. 如何登记求职申请

  11. Claude Desktop 中的命令示例

  12. 当前限制

  13. 后续步骤


1. 架构

概述

                        Claude Desktop
                              |
              +---------------+---------------+
              |               |               |
        career-agent     job-search     career-files
         (MCP stdio)     (MCP stdio)     (MCP stdio)
              |               |               |
              +---------------+---------------+
                              |
                        career_core
              (dominio puro - nao conhece MCP)
                              |
         +--------+-----------+-----------+--------+
         |        |           |           |        |
      profile  scoring   applications  resume  job_sources
       (.md)   (7 dim.)  (SQLite+JSON) (tailor) (IJobSource)

架构决策

领域与适配器分离。 所有业务规则都位于 src/career_core/ 中,该目录不导入任何 MCP 相关内容。三个 server.py 是轻量适配器:翻译参数、调用领域层、格式化响应。这样可以在不启动任何服务器的情况下测试 100% 的逻辑。

SQLite 作为事实来源,JSON 作为镜像。 SQLite 提供事务性写入(如果进程中途崩溃,历史记录不会损坏)和廉价的重复查询,且零配置——不像 PostgreSQL 那样需要服务器和凭据,而在单人的规模下没有任何收益。applications.json 继续存在,每次变更时以原子方式重写,用于肉眼检查和 Git 版本控制。它只写:永远不会被读回,因此不存在两个来源产生分歧的风险。

评分作为可插拔维度。 7 个维度中的每一个都是一个实现 IScoreDimension 的类,能够对单个方面进行评分并解释JobScorer 只负责求和和排序。添加新维度不会改变求和器(开闭原则)。

职位来源位于接口之后。 IJobSource 有四个实现:MockJobSource(离线)、RemotiveJobSourceArbeitnowJobSource(真实的公共 API,无需认证)以及 UnavailableJobSource(LinkedIn/Indeed/Gupy——已声明,但为手动模式)。添加来源就是编写一个类并注册它;其他什么都不用改。

单一组合根。 CareerServices 组装对象图。服务器不手动实例化依赖,测试注入替身。

目录结构

career-agent/
├── pyproject.toml            # deps + config do pytest (fonte unica)
├── .env.example              # modelo de configuracao (versionado)
├── .env                      # sua configuracao real (NAO versionado)
│
├── src/career_core/          # DOMINIO - nao conhece MCP
│   ├── config.py             # Settings por ambiente
│   ├── models.py             # Job, CandidateProfile, Application, JobScore
│   ├── text.py               # normalizacao (aliases de stack, URL, empresa)
│   ├── security.py           # politica + maquina de estados (ApprovalGate)
│   ├── paths.py              # SandboxedFileSystem (jail em data/)
│   ├── errors.py             # hierarquia de erros de dominio
│   ├── logging_setup.py      # logging para stderr + arquivo
│   ├── services.py           # composition root
│   ├── job_input.py          # vaga colada -> Job normalizado
│   ├── profile/repository.py # perfil .md -> CandidateProfile
│   ├── scoring/              # dimensions.py (7 dimensoes) + scorer.py
│   ├── applications/         # repository.py, dedupe.py, builder.py
│   ├── resume/tailor.py      # personalizacao + FactGuard
│   └── job_sources/          # base.py, mock.py, http_sources.py,
│                             # unavailable.py, registry.py
│
├── mcp-career/               # MCP 1 - logica de carreira
├── mcp-job-search/           # MCP 2 - obtencao de vagas
├── mcp-career-files/         # MCP 3 - leitura de arquivos (sandbox)
│
├── data/                     # UNICO diretorio visivel ao career-files
│   ├── profile/              # profile.md, skills.md, preferences.md
│   ├── resumes/              # curriculo-principal.md (+ variantes)
│   └── applications/         # applications.db (verdade) + .json (espelho)
│
├── agent/career-agent.md     # instrucoes de comportamento do agente
├── scripts/                  # install.ps1, start.ps1, test.ps1, configure-*
├── tests/                    # pytest
└── docs/                     # SECURITY.md, SCORING.md, ARCHITECTURE.md

2. 前置要求

要求

版本

说明

Windows

10/11

已在 Windows 11 上测试

Python

>= 3.11

python --version

uv

任意

如果缺失,install.ps1 会安装

Claude Desktop

最新

使用 MCP 所必需

Git

可选

用于项目版本控制


3. 安装

cd C:\career-agent
powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1

该脚本检查 Python,如果缺少则安装 uv,创建 .venv,安装依赖,创建 data/ 目录树,从 .env.example 生成 .env,并验证三个 MCP 能否启动。

要在同一步骤中同时写入 Claude Desktop 配置:

powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1 -ConfigureClaude

4. 配置

4.1 填写您的个人资料

这些文件是事实来源。助手绝不会声称文件中不存在的内容。

文件

填写内容

data/profile/profile.md

姓名、联系方式、摘要、教育背景、屏蔽的公司

data/profile/skills.md

技术、架构、领域

data/profile/preferences.md

目标职位、资历级别、工作模式、城市、薪资

data/resumes/curriculo-principal.md

您的完整简历

查找 [PREENCHER]——这些是助手无法自行编造的字段。

其中两个会立即影响评分:

  • profile.md 中的 Anos de experiencia(工作经验年限):只要为 nao informado(未填写),经验维度的"年限"部分就保持中性。助手不会推断这个数字。

  • preferences.md 中的 Minimo / Alvo(最低/目标薪资):只要为 [PREENCHER],对于公布了薪资范围的职位,薪资维度就保持中性。

4.2 调整 .env

CAREER_DATA_ROOT=C:\career-agent\data
CAREER_MIN_SCORE=70

JOB_SEARCH_ENABLE_NETWORK=true
JOB_SEARCH_SOURCES=ats
JOB_SEARCH_ATS_COMPANIES=greenhouse:stone,ashby:nubank,greenhouse:vtex,...
JOB_SEARCH_USER_AGENT=career-agent/1.0 (personal job search; contact: SEU-EMAIL)

在 User-Agent 中填写您的电子邮件——表明身份是礼貌地使用公共 API 的方式。

将公司添加到搜索中

ats 来源只能找到您列出的公司的职位。要添加公司,请打开其招聘页面并查看 URL:

招聘页面 URL

添加

job-boards.greenhouse.io/SLUG

greenhouse:SLUG

jobs.lever.co/SLUG

lever:SLUG

jobs.ashbyhq.com/SLUG

ashby:SLUG

招聘页面位于 Gupy 上的公司无法添加——Gupy 不提供公开搜索。对于这些公司,请使用手动模式。

此项目中没有 LinkedIn 凭据变量。这是有意为之。


5. Claude Desktop 配置

自动(推荐)

powershell -ExecutionPolicy Bypass -File .\scripts\configure-claude-desktop.ps1

该脚本会备份现有文件(.backup-AAAAMMDD-HHMMSS),保留您所有的现有配置和 MCP,并且添加/更新 Career Agent 的三个条目。

手动

文件:%APPDATA%\Claude\claude_desktop_config.json (在您的情况下:C:\Users\Roger\AppData\Roaming\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "career-agent": {
      "command": "C:\\career-agent\\.venv\\Scripts\\python.exe",
      "args": ["C:\\career-agent\\mcp-career\\server.py"]
    },
    "job-search": {
      "command": "C:\\career-agent\\.venv\\Scripts\\python.exe",
      "args": ["C:\\career-agent\\mcp-job-search\\server.py"]
    },
    "career-files": {
      "command": "C:\\career-agent\\.venv\\Scripts\\python.exe",
      "args": ["C:\\career-agent\\mcp-career-files\\server.py"]
    }
  }
}

绝对路径。 如果您将项目安装在其他位置,请将所有出现的 C:\\career-agent 替换为您的实际路径。反斜杠需要双写——这是 JSON 的要求。

为什么用 .venv 中的 python 而不是 uv Claude Desktop 启动服务器时不加载您的用户 PATH。直接指向虚拟环境的解释器消除了对 PATH 的依赖,使启动更快、更可预测。uv 仍然是安装和运行测试的工具。

保存后:完全关闭 Claude Desktop(包括系统托盘时钟旁边的图标——关闭窗口不会结束进程),然后重新打开。

要确认,请在聊天中询问:"你有哪些 career 工具?"


6. 如何启动

服务器由 Claude Desktop 本身启动——您无需保持任何东西在运行。

要手动验证三个服务器能否启动:

powershell -ExecutionPolicy Bypass -File .\scripts\start.ps1

日志:C:\career-agent\logs\mcp-career.logmcp-job-search.logmcp-career-files.log)。


7. 如何测试

powershell -ExecutionPolicy Bypass -File .\scripts\test.ps1

该脚本运行 pytest 套件,然后进行端到端验证:模块导入、三个 MCP 的初始化、个人资料读取、评分计算、求职申请登记、历史记录查询和重复检测。

仅运行单元测试:

C:\career-agent\.venv\Scripts\python.exe -m pytest tests -v

8. 如何添加新的职位来源

首先: 确认该来源是否有公开文档化的 API。如果需要登录、cookie 或爬取,则不能加入——请使用 UnavailableJobSource 和手动模式。

  1. src/career_core/job_sources/ 中创建类:

from .base import IJobSource, JobQuery, SourceResult, detect_seniority

class MinhaFonteJobSource(IJobSource):
    name = "minhafonte"
    provenance = "API JSON publica de X, sem autenticacao."
    usable = True

    def search(self, query: JobQuery) -> SourceResult:
        # ... chamar a API e converter cada item em `Job`
        return SourceResult(source=self.name, jobs=jobs, ok=True, message="...")
  1. src/career_core/job_sources/registry.py 中注册:

_FACTORIES = {
    ...,
    "minhafonte": (lambda s: MinhaFonteJobSource(...), True),  # True = precisa de rede
}
  1. .env 中启用:JOB_SEARCH_SOURCES=mock,minhafonte

  2. tests/test_job_sources.py 中添加测试。

系统中没有其他文件需要更改。评分、去重和求职申请会自动工作,因为来源返回的是标准化的 Job


9. 如何添加新简历

.md 文件放入 C:\career-agent\data\resumes\。文件名很重要:助手会自动选择名称与职位匹配词最多的简历。

data/resumes/
├── curriculo-principal.md      # padrao / fallback
├── curriculo-backend-dotnet.md # vence em vagas .NET/backend
├── curriculo-fullstack.md      # vence em vagas fullstack/React
└── curriculo-sap.md            # vence em vagas SAP

要强制指定某个简历:"使用 curriculo-sap.md 准备求职申请"


10. 如何登记求职申请

生命周期:

   generate_application          register_application
   (mostra o pacote)      -->    (grava o historico)
                                        |
                                        v
                                pending_approval
                                        |
                          voce aprova   |
                                        v
                                    approved
                                        |
                    VOCE se candidata no site
                                        v
                                     applied
                                        |
              +-------------+-----------+-----------+
              v             v           v           v
          interview  technical_test   offer     rejected

rejectedwithdrawn 是最终状态。

不存在从 pending_approval 直接到 applied 的路径。 该尝试会被状态机拒绝。这就是代码层面的保证:未经您查看,任何内容都不会推进。


11. Claude Desktop 中的命令示例

搜索

Procure vagas Backend .NET compativeis com meu perfil.
Priorize remoto e hibrido em Goiania.
Mostre somente vagas com score >= 80.

分析粘贴的职位

Analise esta vaga:
[cole aqui a URL e a descricao completa]

准备求职申请

Prepare minha candidatura para a vaga da Nexatech.

跟进

Mostre minhas candidaturas pendentes.
Quais candidaturas estao aguardando minha aprovacao?
Atualize a candidatura app-xxxx para entrevista.

批准

Aprovo a candidatura app-xxxx.

诊断

Esta tudo configurado no Career Agent?
De onde vem as vagas que voce busca?
Voce consegue se candidatar por mim no LinkedIn?

12. 当前限制

  • LinkedIn、Indeed 和 Gupy 以手动模式运行。 它们都不为求职者提供公开的搜索 API。您复制职位;助手完成其余工作。这是安全选择,不是待办事项。

  • 自动覆盖范围取决于您配置了哪些公司。 ats 来源扫描 JOB_SEARCH_ATS_COMPANIES 中列出的公司的公开招聘板。默认列表有 10 家已验证的公司(约 1,160 个职位),但巴西市场远不止这些——请添加您感兴趣的公司。

  • 并非所有 ATS 都被覆盖。 Greenhouse、Lever 和 Ashby 有公开端点。Gupy、Solides 和 Kenoby 不向求职者提供公开搜索。

  • Remotive 和 Arbeitnow 用处不大(2026 年 8 月实测):Remotive 返回一个14 个职位的样本 feed,且忽略 search 参数;Arbeitnow 有 175 个职位,几乎全部是欧洲且需要到岗,个与 .NET/C# 相关。它们仍然可用,但不在标准范围内。

  • LinkedIn、Indeed 和 Gupy 仍为手动模式——它们没有面向求职者的公开搜索 API,本项目不自动化登录或爬取。

  • 需求提取是启发式的。 对项目符号格式的描述效果良好;对连续文本,需求提取的结构化程度较低。

  • 资历级别检测基于标题和描述中的关键词。 模糊的标题可能被识别为 nao_informado——导入时请手动指定。

  • 薪资仅在职位公布范围时才进行比较。 大多数巴西职位不公布薪资;在这种情况下该维度保持中性。

  • 个性化简历以 Markdown 输出。 V1 不支持导出为 PDF 或 DOCX。

  • 单用户、本地安装。 无多配置文件,无同步。


13. 后续步骤

按价值/工作量比排序:

  1. 将简历导出为 PDF/DOCX — 目前材料以 Markdown 格式输出,需要手动转换。

  2. 从公开 URL 读取职位描述(开放的招聘页面,无需登录),减少复制粘贴。

  3. 巴西来源 — 映射按公司公开职位端点的 ATS,并实现为 IJobSource

  4. 跟进提醒 — 标记停留在 applied 状态超过 N 天的申请。

  5. 漏斗指标 — 按分数、技术栈和模式统计回复率,用真实数据校准权重。

  6. 权重校准 — 目前是规范中定义的权重;有足够历史数据后,根据实际转化情况调整。

  7. 语义重复检测 — 目前基于文本相似度;嵌入可以识别出"Dev Backend .NET"与"Engenheiro de Software C#"是同一类职位。


安全

本项目做什么的摘要(按设计):

不做什么

原因

自动登录 LinkedIn

违反服务条款;有账号被封禁的风险

保存密码/ Cookie /令牌

不必要的攻击面

自动化点击

违反服务条款

自动提交申请

最终决定权在你

自动发送消息

最终决定权在你

绕过反机器人 / CAPTCHA

不合法

激进抓取

不合法且不尊重他人

编造经验

简历造假对你不利

详情见 docs/SECURITY.md

Claude 对文件的访问仅限于 C:\career-agent\data。它看不到 C:\、你的用户文件夹,也看不到项目自身的代码。

F
license - not found
Not graded
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 Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables users to search for jobs, prefill applications using AI, and automate submissions across major platforms like Lever and Ashby directly from Claude or Cursor. It provides a full suite of tools for managing job queues, profile data, and resumes within a chat interface.
    34
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A personal job-search assistant for Claude Desktop that searches real job boards, scores each job 0–100 for fit, and displays a ranked board for fast triage.
    10
    79
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables running a job search with Claude Code: parses CV, discovers roles, fetches exact application fields, drafts non-trivial applications (positioning, not autofill), and renders an offline dashboard for review.
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching and evaluating job postings from LinkedIn and freehire.me directly through Claude Desktop. Provides tools to search jobs, fetch full posting details, and assess candidate fit using eligibility scans and a scoring rubric.
    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/maraMoreir/career-agent'

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