Skip to main content
Glama
Aryanpawar67

career-ops-mcp

by Aryanpawar67
README.md
# career-ops-mcp

A local [MCP](https://modelcontextprotocol.io) server that tracks a job-search
and freelance-lead pipeline, and drafts follow-up messages from the notes
logged against each item. Built as a portfolio piece to demonstrate a
repeatable, AI-augmented way of working: **Define → Discover → Draft →
Validate → Deliver**, applied to a real personal-ops problem rather than a
toy example.

Why this exists: most "AI portfolio projects" are a chatbot wrapper. This is
a small, working tool with real state (a JSON-backed pipeline), a real
generative step (drafting a follow-up from stored context, not from
scratch), and a real interface (MCP, so it plugs into Claude Desktop or
Claude Code like any other tool) — it's operational, not a demo.

## What it does

Exposes five tools over MCP:

| Tool | Purpose |
|---|---|
| `add_pipeline_item` | Add a job application or client/freelance lead |
| `update_pipeline_item` | Move an item's stage forward and log a note |
| `list_pipeline` | List items (`all` / `open` / `closed`) |
| `pipeline_summary` | Counts by stage + items with no update in 14+ days |
| `draft_followup` | AI-drafted follow-up message, grounded in that item's actual notes |

Data is stored locally in `data/pipeline.json` — nothing leaves your machine
except the one `draft_followup` call, which hits the Anthropic API.

## Setup

```bash
git clone <this-repo>
cd career-ops-mcp
pip install -r requirements.txt
cp .env.example .env   # then add your ANTHROPIC_API_KEY
```

## Run it

```bash
python server.py
```

This starts the server over stdio, which is how MCP clients expect to talk
to it — it isn't meant to be run standalone and left open in a terminal for
browsing.

## Connect it to Claude Desktop

Add this to your `claude_desktop_config.json` (Settings → Developer → Edit
Config):

```json
{
  "mcpServers": {
    "career-ops": {
      "command": "python",
      "args": ["/absolute/path/to/career-ops-mcp/server.py"]
    }
  }
}
```

Restart Claude Desktop, and you'll be able to say things like *"add
Acme Corp as a job application, stage applied"* or *"draft a follow-up for
Northwind Consulting"* directly in chat.

## Connect it to Claude Code

```bash
claude mcp add career-ops -- python /absolute/path/to/career-ops-mcp/server.py
```

## Project layout

```
career-ops-mcp/
├── server.py      # MCP tool definitions (the interface)
├── storage.py      # JSON-backed CRUD for pipeline items (the state)
├── ai.py            # Anthropic API call for draft_followup (the AI step)
├── data/            # pipeline.json lives here at runtime (gitignored)
├── requirements.txt
└── .env.example
```

## Notes

- Single-user, single-process, local file storage — deliberately not built
  for concurrency. This is a personal tool, not a service.
- `draft_followup` never invents facts: the prompt explicitly constrains it
  to the notes already logged against that item, so the "AI step" is
  drafting from real context rather than generating generic filler.