Fantastic.jobs MCP Server
Click on "Deploy 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., "@Fantastic.jobs MCP Server find remote product manager jobs posted in the last 24 hours"
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.
Fantastic.jobs MCP Server
A small local MCP server that lets Claude search fresh job postings through the Fantastic.jobs API. Ask Claude something like "find data engineer jobs in Chicago from the last week" and it calls the API for you.
How it works
Claude Desktop ──stdio──▶ job_server.py ──▶ client_call.py ──HTTPS──▶ data.fantastic.jobsFile | Role |
| Talks to the API. |
| The MCP server. Wraps |
| Manual test script for poking at the API from the terminal. Not used by Claude. |
| Holds your API key. Git-ignored. |
Claude Desktop launches job_server.py as a background process and talks to it over stdin/stdout. You never start it yourself.
Related MCP server: job-search
Requirements
Python 3.14+
A Fantastic.jobs API key (from your subscriptions page)
Claude Desktop (or Claude Code)
Setup
git clone <this-repo>
cd linkedin
uv sync
echo 'linkedin_api=YOUR_KEY_HERE' > .envTest it in the terminal
Call the tool function directly, no MCP involved:
uv run python -c "from job_server import search_jobs; print(search_jobs('Data Engineer', time_frame='7d'))"A list of jobs means the API call, key, and field trimming all work. An empty list [] just means no matches for that search.
To test through the real MCP protocol, use the Inspector (needs Node.js):
uv run mcp dev job_server.pyConnect to Claude Desktop
Open Settings → Developer → Edit Config and add an entry under mcpServers. Use full paths: Claude Desktop is launched from the Dock and can't see your shell's PATH.
{
"mcpServers": {
"fantastic-jobs": {
"command": "/Users/YOU/.local/bin/uv",
"args": ["--directory", "/absolute/path/to/linkedin", "run", "job_server.py"]
}
}
}Find your uv path with which uv. Then fully quit Claude Desktop (Cmd+Q) and reopen it. search_jobs should appear in the tools list.
For Claude Code instead:
claude mcp add fantastic-jobs -- uv --directory /absolute/path/to/linkedin run job_server.pyThe tool
search_jobs(title, location="", time_frame="24h", limit=10)Parameter | Notes |
| Required. Keyword match. Use quotes for an exact phrase, and |
| Full names only, no abbreviations: |
|
|
| Max results per call. Each result costs API credits. |
Each job comes back trimmed to: title, organization, url, date_posted, locations_derived, ai_core_responsibilities. Edit FIELDS in job_server.py to change this. The full API response has 50+ fields including AI-extracted skills, salary, and company data.
Gotchas
Never
print()insidejob_server.py. stdout is the channel Claude talks over; a stray print corrupts it. Useprint(..., file=sys.stderr)for debugging.Restart Claude Desktop after any code or config change. The server process is spawned at launch and reads the key once at import.
.zshrcdoesn't reach Claude Desktop. That's why the key lives in.env, whichload_dotenv()picks up regardless of how the server was started.401 Unauthorized means the key didn't arrive. Check
.envexists, has the right name (linkedin_api), and that no staleenvblock in the Claude config is overriding it.Server shows as failed in Claude Desktop: Settings → Developer has per-server logs. It's almost always the uv path, the project path, or a missing key.
Security
.env is in .gitignore. Confirm before your first commit with git check-ignore -v .env. If a key ever leaks, rotate it from your Fantastic.jobs subscriptions page.
Available Tools
1 toolsearch_jobsB
Search recent job postings from company career pages. title and location accept OR syntax, e.g. '"Software Engineer" OR "Data Scientist"'. location needs full names like 'New York, United States' (no abbreviations).
Inputs: title (required), limit, location, time_frame, +1 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion or misselection. The tool's purpose is clearly described and unambiguous.
The single tool name 'search_jobs' follows the consistent verb_noun snake_case convention. There are no other names to conflict with this pattern.
The server has only one tool, which feels extremely thin for a job search domain. Even a minimal implementation would typically include at least a way to retrieve job details or paginate results.
The server only offers a search operation, leaving no way to fetch a specific job, browse companies, or access additional details beyond search results. The surface is too narrow to support a complete job search workflow.
Maintenance
Related MCP Connectors
A jobs data API and MCP server. Every listing comes from the employer's own career site, an ATS feed or a government employment service, never resold from another board. Each row names its source and when we last confirmed the vacancy existed, and a role that disappears keeps a closure date and a reason. Six tools: search_jobs, get_job, company_hiring, market_signals, coverage, changes_since.
Search job postings across Indeed, LinkedIn, and more from one request - titles, companies
Open jobs from any company's careers site by name or domain, plus a search across 2.5M+ roles
JobsPipe — data pipeline of every job posting on the web. Search live, normalized job postings from 30+ ATS feeds and job boards for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables job search and scraping across multiple job boards (LinkedIn, Indeed, Glassdoor, etc.) with advanced filtering, directly from Claude Desktop or other MCP clients.6MIT
- FlicenseNot gradedqualityBmaintenanceEnables automated job searching from multiple boards, filtering matches against saved criteria, deduplicating seen postings, and tracking application statuses. Runs locally and integrates with Claude Desktop for natural-language queries and updates.-
- AlicenseNot gradedqualityCmaintenanceEnables agents to search job postings and fetch individual job details from skipthedrive.com through standard MCP tools, with keyword, location, remote-only, and date filters. It exposes read-only job discovery over stdio to any MCP host, returning normalized fields such as title, company, location, apply URL, and publication date.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search a public job board by keyword, location, remote preference, and posting date, then fetch full details and apply links for individual listings. It wraps the board's public API/RSS as read-only stdio tools usable from any MCP host.MIT