Skip to main content
Glama
md-sakib1122

job-mcp

by md-sakib1122
README.md
# 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](https://red-mail.readthedocs.io/).

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

```bash
cd job-mcp
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e .
```

## 2. Configure SMTP credentials

```bash
cp .env.example .env
```

Edit `.env` with your SMTP host/credentials. For Gmail, use an
[App Password](https://myaccount.google.com/apppasswords) (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)

```bash
python -m job_mcp.server
```

It 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:

```bash
mcp dev src/job_mcp/server.py
```

## 5. 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`):

```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: <paste text>
> 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_email` currently 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. a `draft_email` tool that returns a preview + an id, and a
  `confirm_send` tool that actually sends it).
- Consider rate-limiting or logging sent emails to avoid accidental duplicate sends.
- `cv.json` is read fresh on every resource call, so you can edit it without restarting
  the server.

TDQS

A3.9/5.0

Scored across 1 tool

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count2/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessNo issues