job-mcp
Enables sending emails via Gmail's SMTP server using an app password, allowing tailored application emails to be sent after reading the CV resource.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@job-mcpRead my CV, then draft and send a tailored application email to the recruiter for this job."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
job-mcp
A FastMCP server (stdio transport) with:
Resource
cv://profile— your CV/resume as JSON, for the LLM client to read.Tool
send_email— sends an email over SMTP using Red Mail.
Workflow: you give the MCP client a job post + the recruiter's email in chat → the client
reads cv://profile → drafts a tailored application email → calls send_email to send it.
1. Install
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. Configure SMTP credentials
cp .env.example .envEdit .env with your SMTP host/credentials. For Gmail, use an
App Password (not your normal login password),
and enable 2-Step Verification first.
3. Fill in your CV
Edit src/job_mcp/data/cv.json with your real details (contact info, skills, experience,
education, projects, certifications). The resource just reads this file as-is.
4. Run the server standalone (sanity check)
python -m job_mcp.serverIt will sit waiting for MCP JSON-RPC messages on stdin/stdout (this is normal — it's meant to be launched by an MCP client, not used interactively).
You can also inspect it with the MCP dev inspector:
mcp dev src/job_mcp/server.py5. Connect it to an MCP client
Example config for a client that launches servers over stdio (e.g. Claude Desktop's
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"
}
}
}
}(You can put credentials in env here instead of .env — either works, since
config.py reads from os.environ either way.)
6. Use it
In the client, paste something like:
Here's a job post and the recruiter's email. Read my CV resource, then draft and send a tailored application email.
Job post: Recruiter email: hr@company.com
The client should call cv://profile, draft the email using both pieces of context,
and call send_email(to=..., subject=..., body_html=..., body_text=...).
Notes / things to harden later
send_emailcurrently has no confirmation step baked into the server itself — if you want a "review before sending" guardrail enforced server-side (not just client-side), add a two-step flow (e.g. adraft_emailtool that returns a preview + an id, and aconfirm_sendtool that actually sends it).Consider rate-limiting or logging sent emails to avoid accidental duplicate sends.
cv.jsonis read fresh on every resource call, so you can edit it without restarting the server.
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.
Generate tailored, ATS-optimized resume PDFs and cover letters from a job description, over MCP.
Send transactional emails for AI agents via SMTP. Templates included.
Send transactional pdfs for AI agents via SMTP. Templates included.
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 gradedqualityCmaintenanceEnables LLMs to read, send, and manage emails via POP3 and SMTP with TLS support.5-
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to access candidate information including resume, LinkedIn, GitHub, and contact via email.36 npm81MIT
- AlicenseAqualityBmaintenanceEnables AI agents to search job openings across free sources, prepare application materials using known experience, and handle authorized email sending and follow-ups.92MIT