Vendor-neutral MCP server for the Internship Apply Agent — deterministic tools, all AI reasoning done by the calling agent, all PII kept local.
Project description
internship-mcp
A vendor-neutral MCP server that turns any MCP-capable agent (Claude Code, Cursor, Codex, Windsurf, Cline) into an internship apply agent: pull fresh internship postings, deterministically prefilter them against your skills, tailor your resume per job (your agent writes the bullets, pdflatex compiles the PDF locally), assemble a fully-filled application packet, and prefill ATS forms via the Playwright MCP — while you review and hit submit.
Design principles
- Your agent is the brain. This server never calls a model. Skill extraction, ranking, bullet rewriting, and answers are your agent's own reasoning over deterministic data.
- Your PII stays on your machine. Citizenship, visa, EEO, and demographic answers live in a Fernet-encrypted local file and flow only into the application forms you approve — never to our backend.
- Compile is local by default. The Docker image bakes pdflatex; the backend compile endpoint is a rate-limited fallback for the no-Docker quick start.
Quick start
- Sign in at the Internship Matcher web app and generate an API key on the
/developerpage. - Pick a tier:
Just exploring? Hosted endpoint (zero install — job search & fit scoring only)
Add a custom connector / remote MCP server pointing at:
https://internshipmatcher.com/mcp?key=im_live_...
(Clients that support headers can send X-API-Key instead of the ?key= param.)
The hosted tier covers discovery; applying needs the full agent below.
Full apply agent — uvx (recommended; no Docker, no clone)
{
"mcpServers": {
"internship": {
"command": "uvx",
"args": ["internship-mcp"],
"env": { "INTERNSHIP_API_KEY": "im_live_..." }
},
"playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] }
}
}
Resume compiling: during onboarding the agent asks you to choose — install pdflatex locally for unlimited compiles (recommended):
# macOS
brew install --cask basictex && sudo tlmgr update --self && sudo tlmgr install enumitem titlesec parskip microtype
# Debian/Ubuntu
sudo apt install texlive-latex-extra
# Windows: install MiKTeX from https://miktex.org
…or skip the install and compile on our servers (15 resumes/week). COMPILE=auto
(the default) picks local automatically whenever pdflatex is present.
Docker (advanced — pinned TeX Live + OCR baked in, fully reproducible)
{
"mcpServers": {
"internship": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-v", "internship-home:/root/.internship-agent",
"-e", "INTERNSHIP_API_KEY",
"ghcr.io/internship-app1/internship-mcp-server:latest"],
"env": { "INTERNSHIP_API_KEY": "im_live_..." }
},
"playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] }
}
}
Config file locations: Claude Code .mcp.json · Cursor ~/.cursor/mcp.json ·
Codex ~/.codex/config.toml · Windsurf ~/.codeium/windsurf/mcp_config.json ·
Cline cline_mcp_settings.json.
- Ask your agent something like: "Set up my internship profile, then find new postings from the last 3 days that fit my resume at ~/resume.pdf, tailor my resume for the top 5, and prefill the applications for my review."
Environment
| Var | Default | Meaning |
|---|---|---|
INTERNSHIP_API_KEY |
(required) | per-user key from /developer |
INTERNSHIP_API_URL |
production URL | backend base URL |
INTERNSHIP_HOME |
~/.internship-agent |
encrypted profile, tracker DB, PDFs |
COMPILE |
auto |
local / remote / auto (local if pdflatex present) |
INTERNSHIP_PROFILE_KEY |
— | fallback Fernet key when no OS keyring exists |
MAX_AUTO_SUBMITS |
10 |
v2 per-session auto-submit cap |
Development
pip install -e ".[dev]"
pytest # unit tests
pytest -m parity # compile parity vs the backend core (needs pdflatex)
npx @modelcontextprotocol/inspector uvx --from . internship-mcp
docker build -t internship-mcp .
Safety & terms
v1 is assisted: the agent prefills, you review and submit. Auto-submit (v2) is opt-in, dry-run by default, capped per session, and blocked by any low-confidence field. Subjective questions ("why us?", "proudest achievement") are always asked to you and saved in your local answer bank — never fabricated. EEO questions default to "Decline to self-identify" unless you set them. You are responsible for the accuracy of every application and for complying with each job board's terms of service. Every submission is logged locally with the exact answers used.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file internship_mcp-0.2.1.tar.gz.
File metadata
- Download URL: internship_mcp-0.2.1.tar.gz
- Upload date:
- Size: 34.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57346a0d251eaa22e34875ea50d69455537a7df7d4004e7b1dd17d487b112dfd
|
|
| MD5 |
0347aedc941bbe7902aa04b6c31672a3
|
|
| BLAKE2b-256 |
600f2b9f3748dbe3fdd07e14ccb369f87e0a824bbbe2c868fe460ae9e2560220
|
File details
Details for the file internship_mcp-0.2.1-py3-none-any.whl.
File metadata
- Download URL: internship_mcp-0.2.1-py3-none-any.whl
- Upload date:
- Size: 29.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73ff8395945856aac2ec9783ae11fba62fa1e870c6442cd445f1d1f07b837fa4
|
|
| MD5 |
70a2a96c787c55223745f66309eaf717
|
|
| BLAKE2b-256 |
5f14afe9af636cc12b0b2460188d52ec73944bd7ba5fb1ad59338306d7ebcb97
|