Job Search MCP Server
# Job Search MCP Server
An MCP server that lets an MCP-compatible assistant search public job listings.
It currently uses [EURES](https://europa.eu/eures/portal/jv-se/home?lang=en&pageCode=find_a_job) and does not require an API key.
## Setup
Requires Python 3.11+ and [`uv`](https://docs.astral.sh/uv/).
```bash
uv sync
uv run pytest
```
## Run
Run the server directly over stdio:
```bash
uv run job-search-mcp
```
## Docker
Build and run the public Streamable HTTP server. It listens on port `8000` and
allows 60 requests per IP per 60 seconds by default.
```bash
docker build -t job-search-mcp .
docker run --rm -p 8000:8000 job-search-mcp
```
The MCP endpoint is `http://localhost:8000/mcp`. Adjust the limiter with
`RATE_LIMIT_REQUESTS` and `RATE_LIMIT_WINDOW`. This limiter is in-memory and is
intended for one container instance; use a proxy or shared store when scaling.
For Claude Desktop, add this entry to its MCP configuration:
```json
{
"mcpServers": {
"job-search": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/jobfinder", "run", "job-search-mcp"]
}
}
}
```
## Tools
- `search_jobs`: filter by keywords, location, remote-only status, and result limit.
- `job_search_sources`: see provider and credential information.
Search results include title, company, location, remote status, description, tags, and a direct listing URL. Listings come from a third-party provider and should be checked before applying.
TDQS
Scored across 2 tools
The two tools are completely distinct: one searches job listings, the other provides information about the job boards used. There is no overlap or confusion between their purposes.
Both names are clear and descriptive, but they follow slightly different patterns: search_jobs is verb-first, while job_search_sources is noun-first. This minor inconsistency does not impede understanding.
With only two tools, the server feels thin and borderline. However, for a narrow scope like job search, this minimal set can be acceptable, though it is on the low end of the ideal range.
The server covers the core functionality of searching jobs and provides context about data sources. Minor gaps exist, such as lack of pagination or detailed job retrieval, but the basic workflow is complete and usable.