mcp-adzuna
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., "@mcp-adzunasearch for python developer jobs in Berlin and show salary trends"
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.
mcp-adzuna
An MCP (Model Context Protocol) server that exposes Adzuna's job search and salary analytics APIs as tools.
This repo is server-only, by design: it's meant to be pulled into other AI systems/repos as a reusable dependency, not run standalone. The client half of MCP — connecting to a server, listing its tools, and dispatching tool calls from an LLM — is generic and already provided by whatever is hosting your agent (Claude Code, Claude Desktop, or the MCP client library inside your own agent stack). Point that host at this server (see below) rather than writing a bespoke client per project.
Architecture
MCP defines three roles: a host app that embeds an LLM (Claude Code, Claude Desktop, or your own agent stack),
an MCP client living inside that host which speaks the MCP wire protocol (tool discovery, tools/call, JSON-RPC
framing), and an MCP server that exposes tools and responds to protocol messages without knowing who's calling
it. This repo is only the last one — the host and its MCP client are supplied by whoever consumes this server (see
Using from another repo).
Internally, the server is split into two layers with no knowledge of each other's domain:
LLM decides to call a tool
│
▼
Host app (Claude Code / Claude Desktop / your agent stack)
│ spawns `mcp-adzuna` as a subprocess, speaks MCP over stdio
▼
MCP Client (built into the host — not part of this repo)
│ tools/call { name: "search_jobs", arguments: {...} }
▼
┌─────────────────────────── this repo ───────────────────────────┐
│ MCP Server (server.py: the `mcp` object) │
│ - owns the stdio loop, tool registry, JSON schemas │
│ - dispatches to the matching @mcp.tool() function │
│ │ │
│ ▼ │
│ search_jobs(country=..., what=...) │
│ │ plain Python function call, no protocol involved │
│ ▼ │
│ AdzunaAPI.search(...) (client.py) │
│ - builds query params, calls httpx, strips __CLASS__ noise │
└────────────────────────────┼─────────────────────────────────────┘
▼
Adzuna's REST API (api.adzuna.com)server.pyis the only file that speaks MCP: tool names, docstrings-as-descriptions, type hints-as-JSON-schema.client.py'sAdzunaAPIis a plain REST wrapper around Adzuna's HTTP API — it has no knowledge that MCP exists. It's deliberately not namedAdzunaClient, to avoid confusion with the "MCP client" role above; it's a client of Adzuna's API in the ordinary SDK sense (likehttpx.Clientorboto3.client(...)), not an MCP client.
This split means AdzunaAPI is independently testable (tests/test_client.py runs against a mocked HTTP transport
with zero MCP runtime involved) and independently reusable (importable in a plain script with no MCP dependency
dragged in).
Related MCP server: trackly-cli
Tools
Tool | Adzuna endpoint | What it does |
|
| Search job listings by keyword, location, salary, category, etc. |
|
| List job category tags (e.g. |
|
| Distribution of salaries for a search as a histogram. |
|
| Top 5 employers by vacancy count for a search. |
|
| Vacancy counts per sub-region of a location. |
|
| Average salary by month, over time. |
|
| Current Adzuna API version (useful for checking connectivity/auth). |
Setup
Get a free
app_id/app_keyat developer.adzuna.com/signup.Install the package:
pip install -e .Set your credentials:
cp .env.example .env # edit .env and fill in ADZUNA_APP_ID / ADZUNA_APP_KEY
Running standalone
export ADZUNA_APP_ID=... ADZUNA_APP_KEY=...
mcp-adzunaThis starts the server on stdio, the standard transport for local MCP clients.
Using from another repo
Since this package isn't published to PyPI, other repos can run it straight from GitHub with
uv's uvx — no local clone or install step needed in the consuming repo:
{
"mcpServers": {
"adzuna": {
"command": "uvx",
"args": ["--from", "git+https://github.com/fabioba/mcp-adzuna.git", "mcp-adzuna"],
"env": {
"ADZUNA_APP_ID": "your-app-id",
"ADZUNA_APP_KEY": "your-app-key"
}
}
}
}Or, with Claude Code's CLI:
claude mcp add adzuna --env ADZUNA_APP_ID=your-app-id --env ADZUNA_APP_KEY=your-app-key \
-- uvx --from git+https://github.com/fabioba/mcp-adzuna.git mcp-adzunauv/uvx will fetch and cache the package from the git repo on first run, and re-fetch when the pinned ref
changes — pin to a tag or commit (git+https://...@v0.1.0) once you cut a release, so consuming repos don't pick up
breaking changes silently.
If a consuming repo already manages its own Python environment, adding mcp-adzuna @ git+https://github.com/fabioba/mcp-adzuna.git
to its pyproject.toml/requirements.txt dependencies works the same way, and mcp-adzuna becomes an installed
console-script entry point in that environment's mcpServers config instead.
Using locally with Claude Code / Claude Desktop
For local development on this repo itself, add it to your MCP config using the local install (see Setup) instead:
{
"mcpServers": {
"adzuna": {
"command": "mcp-adzuna",
"env": {
"ADZUNA_APP_ID": "your-app-id",
"ADZUNA_APP_KEY": "your-app-key"
}
}
}
}Development
pip install -e ".[dev]"
pytestTests run against a mocked HTTP transport (httpx.MockTransport) and don't require real Adzuna credentials.
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
- Alicense-qualityAmaintenanceMCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.7MIT

trackly-cliofficial
Alicense-qualityAmaintenanceMCP server for job search and application tracking, enabling AI agents to search jobs, get details, manage applications, and find contacts across 128K+ jobs and 1,900+ companies.1,2961MIT- Alicense-qualityCmaintenanceUnified job search MCP server that aggregates live listings from multiple job boards with deduplication, enabling AI agents to find and filter jobs by keyword and location.MIT

bach-jsearchofficial
AlicenseAqualityDmaintenanceMCP server for accessing Jsearch API to search jobs, get job details, and retrieve salary estimates.4MIT
Related MCP Connectors
GetJobzi MCP server for job search, application tracking, and career forecasting.
MCP server for AI job search — find jobs, track applications, get alerts. Claude, ChatGPT, Cursor.
MCP server exposing the Backtest360 engine API as tools for AI agents.
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/fabioba/mcp-adzuna'
If you have feedback or need assistance with the MCP directory API, please join our Discord server