jobfinder-mcp
Allows opening tailored LaTeX resumes in Overleaf by submitting the resume as a data URI, enabling PDF compilation without a local LaTeX installation.
Click on "Install 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., "@jobfinder-mcpsearch for remote Python developer jobs"
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.
jobfinder-mcp
A local MCP server for searching job listings and tracking applications. Runs entirely on your machine over stdio; saved jobs live in a local SQLite file.
Install
python3 -m venv .venv
.venv/bin/pip install -e .Requires Python 3.10+. The SDK is pinned to mcp>=1.2,<2: mcp 2.x removed
mcp.server.fastmcp, which this server is built on.
Related MCP server: witness-mcp
Run
.venv/bin/jobfinder-mcp # or: .venv/bin/python -m jobfinder_mcpThe server speaks MCP over stdio, so running it by hand just blocks waiting for a client. To inspect it interactively:
.venv/bin/mcp dev src/jobfinder_mcp/server.pyWeb UI
.venv/bin/jobfinder-web # http://127.0.0.1:8765, opens a browser
.venv/bin/jobfinder-web --port 0 --no-browserTwo panes: tracked jobs on the left (search box, status filters, a badge showing
the tailored resume's file type), the selected job on the right with tabs for the
full Description and its Tailored resume — copy it, download the file, or
take it as a self-contained data:application/x-tex;base64,… link (shown under
the buttons, with copy data URI next to it). The whole document lives inside
that link, so it can be pasted anywhere and downloaded with this server stopped.
For .tex output there is also Open in Overleaf, which POSTs that data URI to
overleaf.com/docs as snip_uri and opens the compiled CV in a new tab — the way
to get a PDF without a local TeX install. It uploads the resume to Overleaf, so it
only fires when you click it. Note that Chrome refuses data: URIs typed into the
address bar; only the in-page controls work.
The status dropdown writes straight back to the tracker, so the MCP tools and the
UI stay in sync; hit refresh after Claude saves something new.
It reads the same SQLite file and tailored directory as the MCP server, and binds
to loopback only — it serves your resume and application notes, so do not expose
it on a LAN interface. The MCP tool open_web_ui(port) starts the same UI on a
background thread inside the running server.
Register with Claude Code
claude mcp add jobfinder -- /Users/juansalzar/Documents/git/jobfinder/.venv/bin/jobfinder-mcpOr add it to ~/.claude.json / .mcp.json manually:
{
"mcpServers": {
"jobfinder": {
"command": "/Users/juansalzar/Documents/git/jobfinder/.venv/bin/jobfinder-mcp"
}
}
}For Claude Desktop, the same block goes in
~/Library/Application Support/Claude/claude_desktop_config.json.
Tools
Tool | Purpose |
| Search listings across all sources, ranked by where the terms hit |
| Full listing text for an id from a search or the tracker |
| Save a listing from the last search into the tracker |
| Add a job found elsewhere by pasting its details |
| Replace a saved job's description with pasted text |
| List tracked jobs, newest first |
| Move a job through the pipeline |
| Remove a tracked job |
| Counts by status |
| Store a resume from pasted text or a |
| Stored resumes, with the default marked |
| Show a resume; |
| Pick the resume used when a call names none |
| Remove a resume and its original file |
| Build the tailoring brief for a job |
| Store the tailored CV as LaTeX |
| Read back the tailored CV |
| The tailored CV as a base64 |
| Every tailored CV written so far |
| Start the local browser UI and return its URL |
Resource jobfinder://saved returns every tracked job as JSON.
Prompt tailor_application(job_id, resume_summary) drafts a cover letter; with no
resume_summary it uses the default stored resume.
Statuses: saved, applied, interviewing, offer, rejected, archived.
Tailoring a resume
The server does not call an LLM. tailor_resume returns a brief — the listing's
must-have terms, its most frequent terms, and which of them the resume already
evidences — and the model driving the client writes the CV from it. Nothing is
sent anywhere, and there is no API key or per-call cost.
add_resume(name="main", path="~/Documents/cv.pdf")
search_jobs(query="python backend", location="remote")
save_job(job_id="remoteok:123456")
tailor_resume(job_id="remoteok:123456") # -> brief; the model writes the CV
save_tailored_resume(job_id="remoteok:123456", content="\\documentclass...")PDF, DOCX and LaTeX files are converted to text for matching, and the original is
kept next to it. A scanned, image-only PDF extracts to nothing; paste the text
with add_resume(name, text=...) instead.
LaTeX output
Tailored resumes are always written as .tex. tailor_resume ends its brief
with the LaTeX to write into:
the stored resume is a
.texfile → its source is included, to be rewritten in place with the preamble, macros and layout left alone;otherwise → a plain
article-class template is included for the model to fill.
save_tailored_resume rejects content with no \documentclass or
\begin{document}; pass an explicit extension to store another format anyway.
There is no LaTeX toolchain in this project — compile the result with
pdflatex/tectonic, or upload it to Overleaf.
To use your own layout instead of the built-in template, drop a .tex file at
~/.jobfinder/resume_template.tex or point JOBFINDER_LATEX_TEMPLATE at one.
Term matching is deterministic string work: known multi-word phrases plus
non-stopword tokens, normalized through an alias table so k8s in a listing
matches Kubernetes in a resume. It surfaces gaps; it does not judge fit.
Sources
remoteok — RemoteOK's public JSON feed. No API key. Cached 15 minutes.
local — set
JOBFINDER_FEED=/path/to/jobs.jsonto read your own listings. The file is a JSON list of objects with at leastid,titleandcompany;location,url,salary,tags,descriptionare optional.
Add another source by writing a fetch_* function in sources.py that returns
normalized job dicts, then registering it in the SOURCES map.
Configuration
Env var | Default | Meaning |
|
| SQLite file for saved jobs |
| unset | JSON file for the |
|
| Base directory for resumes and tailored output |
|
| Where stored resumes live |
|
| Where tailored resumes are written |
| built-in template |
|
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityCmaintenanceA local job-hunting MCP server for discovering jobs across pluggable web sources, tracking applications through a status lifecycle, and managing profiles/resumes, with geo/map-region search.Last updated12
- Alicense-qualityCmaintenanceEnables to interact with job application workflows through MCP, allowing users to find jobs, generate non-trivial applications with proof-maps, and build offline dashboards, all without auto-submitting.Last updatedApache 2.0
- AlicenseAqualityAmaintenanceAn AI job-hunt copilot that enables searching live job boards, shortlisting openings, tracking application pipelines, and generating tailored resumes and cover letters from any MCP client.Last updated14Apache 2.0
- Flicense-qualityAmaintenanceA local-first, open-source MCP server that analyzes jobs, matches your CV, tailors documents, and tracks applications — all on your machine with no data uploaded.Last updated
Related MCP Connectors
GetJobzi MCP server for job search, application tracking, and career forecasting.
Job search and interview prep MCP. 11 tools, OAuth 2.1, cross-LLM. four-leaf.ai.
MCP server for AI job search — find jobs, track applications, get alerts. Claude, ChatGPT, Cursor.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/juanzjck/autojobfinder-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server