job-mcp
job-mcp
一个使用 FastMCP 的服务器(stdio 传输),包含:
资源
cv://profile—— 你的简历/履历,以 JSON 格式提供,供 LLM 客户端读取。工具
send_email—— 通过 SMTP 发送电子邮件,使用 Red Mail。
工作流程:你在聊天中向 MCP 客户端提供职位信息 + 招聘人员的邮箱 → 客户端
读取 cv://profile → 起草一封定制的求职邮件 → 调用 send_email 发送它。
1. 安装
cd job-mcp
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .Related MCP server: MCP Email Server
2. 配置 SMTP 凭据
cp .env.example .env编辑 .env,填入你的 SMTP 主机/凭据。对于 Gmail,请使用
应用专用密码(不要使用你的普通登录密码),
并且需要先开启两步验证。
3. 填写你的简历
编辑 src/job_mcp/data/cv.json,填入你的真实信息(联系方式、技能、工作经历、
教育背景、项目、证书)。该资源只是按原样读取这个文件。
4. 独立运行服务器(快速检查)
python -m job_mcp.server它会一直等待通过 stdin/stdout 传入的 MCP JSON-RPC 消息(这是正常的——它 本来就是由 MCP 客户端启动的,而不是用于交互式使用)。
你还可以使用 MCP 开发检查器来检查它:
mcp dev src/job_mcp/server.py5. 将其连接到 MCP 客户端
客户端通过 stdio 启动服务器的示例配置(例如 Claude Desktop 的
claude_desktop_config.json):
{
"mcpServers": {
"job-mcp": {
"command": "/absolute/path/to/job-mcp/.venv/bin/python",
"args": ["-m", "job_mcp.server"],
"env": {
"SMTP_HOST": "smtp.gmail.com",
"SMTP_PORT": "587",
"SMTP_USERNAME": "you@gmail.com",
"SMTP_PASSWORD": "your-app-password",
"SMTP_SENDER_EMAIL": "you@gmail.com",
"SMTP_SENDER_NAME": "Your Name"
}
}
}
}(你可以把凭据放在这里的 env 中,而不是放在 .env 里——两者都行,因为
config.py 无论如何都是从 os.environ 读取的。)
6. 使用它
在客户端中,粘贴类似这样的内容:
这是一份职位信息和招聘人员的邮箱。请读取我的简历资源,然后起草并 发送一封定制的求职邮件。
职位信息:<粘贴文本> 招聘人员邮箱:hr@company.com
客户端应该调用 cv://profile,使用这两部分上下文起草邮件,
然后调用 send_email(to=..., subject=..., body_html=..., body_text=...)。
备注 / 后续可以加固的地方
send_email目前服务器本身没有内置确认步骤——如果你想在服务器端(而不仅仅是客户端) 强制实施"发送前预览"的保护机制,可以添加一个两步流程(例如,一个返回预览 + id 的draft_email工具,以及一个真正发送邮件的confirm_send工具)。考虑对已发送的邮件进行限流或记录日志,以避免意外的重复发送。
cv.json在每次资源调用时都会重新读取,因此你可以在不重启服务器的情况下编辑它。
Available Tools
1 toolsend_emailA
Send an email via SMTP using Red Mail. Use this to send the final, tailored job-application email to the recruiter/HR address. Provide a polished HTML body (and optionally a plain-text fallback).
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| subject | Yes | ||
| reply_to | No | ||
| body_html | Yes | ||
| body_text | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the behavioral disclosure burden. It transparently states that the tool sends an email via SMTP, which is an external side effect, and adds a practical requirement to provide polished HTML. It omits details like SMTP prerequisites or failure modes, but the core behavior is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core action, and every clause adds value: the action, the use case, and the body-format expectation. No redundant or generic phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters, no annotations, and no output schema, so the description must be reasonably self-contained. It covers the main action, the intended purpose, and the key body requirement. However, it leaves several parameter semantics and any error/response behavior unaddressed. The operation is simple and the names are fairly self-evident, so the gaps are moderate rather than severe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only explains body_html and optionally body_text; to, subject, cc, bcc, and reply_to are left undocumented. While the parameter names are conventional, the description does not add sufficient meaning for a zero-coverage schema, especially for required fields like 'to' and 'subject'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send an email via SMTP using Red Mail') and the specific use case ('final, tailored job-application email to the recruiter/HR address'). It is a precise verb+resource combination, with no ambiguity or tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to send the final, tailored job-application email to the recruiter/HR address', giving a clear when-to-use context. There are no sibling tools listed, so there is no opportunity to name alternatives or when-not scenarios, but the intended scenario is well defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
send_email
TDQS
Scored across 1 tool
With only one tool, there is no possibility of ambiguity or misselection. The tool's purpose is clearly distinct simply because it is the only tool.
A single tool name cannot be inconsistent with itself. 'send_email' follows a clear verb_noun convention, and there are no other names to compare against.
One tool feels too thin for a server named 'job-mcp', which implies a broader job-application workflow. While sending an email is a concrete task, the server likely needs supporting tools for content generation or attachment handling to be useful.
The surface is severely limited: it only sends an email. Missing operations include email preview, attachment support, and any integration with job-application data, leaving obvious gaps for real-world workflows.
Maintenance
Related MCP Connectors
Auto-apply to jobs: matches your CV, tailors a fresh CV per posting, and applies for you.
Litjob AI job application assistant: job matches, tailored CVs and cover letters. You submit.
Tailor resumes, score ATS fit, find hiring leads, and send cold outreach, from your agent.
Tailored, graded job applications: a CV, cover letter and form answers built per vacancy.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAutomates cold email outreach for job applications by parsing job postings, generating personalized emails using AI, and sending them or saving as drafts in Gmail with resume attachments.1-
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to read, send, and manage emails via POP3 and SMTP with TLS support.6-
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to access candidate information including resume, LinkedIn, GitHub, and contact via email.14 npm81MIT
- AlicenseAqualityAmaintenanceFree MCP and skills for remote and overseas job search across Himalayas, Jobicy, Arbeitnow and company ATS boards, with source links and eligibility checks. Optional local drafts, authorized email sending and reply tracking. Hosted MCP: https://mcp.worldrole.work/mcp — free anonymous access to 20 distinct jobs per network per UTC day, or 50 per free account; other request limits apply.914MIT