AI Job Application Agent MCP Server
by DrSchmerz
README.md
# π― AI Job Application Agent



An AI-powered assistant that manages a full job search end-to-end: track applications,
generate tailored cover letters, analyse jobβCV fit, ingest and classify recruiter
emails, and prepare for interviews β all from one local Streamlit app.
> **π§ͺ New β CV & Role Finder:** upload a CV β get recommended roles to target β
> screen a job for fit. Works offline (local matching) or bring-your-own API key.
> `streamlit run ui/cv_finder.py` β this is the first slice of a planned multi-user version.
Built as a personal project to explore multi-provider LLM orchestration, the
[Model Context Protocol (MCP)](https://modelcontextprotocol.io), and a clean
data layer around a real-world workflow.
> **Privacy note:** this repo ships **no personal data**. Your applications,
> cover letters, CV and API keys live in git-ignored files. A one-command demo
> seeds realistic **fake** data so you can try it immediately.
---
## β¨ Features
- **Multi-provider AI** β Groq, Google Gemini, OpenAI, with an offline keyword
fallback and an `auto` mode that picks the best available provider.
- **Cover-letter generation** tailored to a job description + your CV summary.
- **JobβCV fit analysis** β score, matched skills, gaps, recommendation.
- **Application tracker** β SQLite-backed, with a full change-history audit trail.
- **Email intelligence** β scan a Gmail inbox, classify messages
(rejection / interview / offer / scheduling) with an LLM, and auto-update statuses.
- **Interview prep** β practice questions, company research, feedback tracking.
- **Calendar export** β interviews to `.ics`.
- **MCP server** β exposes the agent's tools over the Model Context Protocol.
- **Streamlit UI** β Dashboard, Applications (table / cards / kanban), Email,
CV & Insights, Settings.
## ποΈ Architecture
```
ββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
β Streamlit ββββββΆβ ApplicationAgent ββββββΆβ LLM providers β
β UI (ui/) β β (agent/) β β groq Β· gemini Β· openai Β· localβ
βββββββ¬βββββββ ββββββββ¬ββββββββββββ βββββββββββββββββββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββ ββββββββββββββββββββ ββββββββββββββββ
β tools/ β β db/ (SQLAlchemy) ββββββΆβ SQLite β
β emailΒ·jobs β β modelsΒ·session β β applications β
ββββββββββββββ ββββββββββββββββββββ ββββββββββββββββ
β²
β
ββββββββββββββ
β mcp_server/β Model Context Protocol tools
ββββββββββββββ
```
## π Quick start
```bash
# 1. Create the environment (Python 3.13)
python3.13 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 2. Configure secrets
cp .env.example .env # then add your API keys (all optional; "local" needs none)
# 3a. Try it with demo data (recommended first run)
python scripts/seed_demo_data.py
APP_DB_PATH=applications_demo.db streamlit run ui/app.py
# 3b. β¦or run against your own data
cp data/cv_summary.example.txt data/cv_summary.txt # then edit with your CV
./run_ui.sh
```
App opens at http://localhost:8501.
## βοΈ Configuration
All configuration is via environment variables (see `.env.example`):
| Variable | Purpose |
|---|---|
| `OPENAI_API_KEY` / `GROQ_API_KEY` / `GOOGLE_API_KEY` | LLM providers (any subset) |
| `DEFAULT_LLM_PROVIDER` | `local` \| `groq` \| `google` \| `openai` \| `auto` |
| `GMAIL_EMAIL` / `GMAIL_APP_PASSWORD` | optional Gmail integration (use an App Password) |
| `APP_DB_PATH` | SQLite file to use (defaults to `applications.db`) |
## π Project layout
```
agent/ Multi-provider AI agent (cover letters, fit analysis)
ui/ Streamlit app β page functions + components
tools/ Email tracking/analysis, job scraping & search
db/ SQLAlchemy models, session, migrations
mcp_server/ MCP server exposing agent tools
scripts/ Utilities (e.g. seed_demo_data.py)
cli/ Command-line interface
data/ Local data (git-ignored; *.example.* files are shipped)
```
## π οΈ Tech stack
Python 3.13 Β· Streamlit Β· SQLAlchemy + SQLite Β· OpenAI / Groq / Google Gemini SDKs Β·
Model Context Protocol Β· pandas Β· scikit-learn
## πΊοΈ Roadmap
- [ ] Unify provider logic behind a single `LLMProvider` interface
- [ ] Structured logging (replace prints) + `pytest` test suite + CI
- [ ] Migrate `google-generativeai` β `google-genai`
- [ ] Dockerfile + Compose for one-command run and deployment
- [ ] Semantic (embedding-based) jobβCV fit scoring
## π License
[MIT](LICENSE) Β© 2026 Philipp Goetting
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessSyncing