Key points
- Adzuna (
/proxy/adzuna) — 5 read-only tools:search_jobs,salary_histogram(salary distribution for a role/location),salary_history(mean salary over time — comp trend),top_companies(employer research),list_categories(e.g.it-jobs). - Credential: an
app_id+app_keypair (Adzuna free tier), supplied via the broker env (ADZUNA_APP_ID,ADZUNA_APP_KEY); secrets in Secret Manageradzuna-app-id/adzuna-app-key, restored on rebuild by Ansible. Default country pinned byADZUNA_COUNTRY(defaultgb); an optional per-callcountryis validated against a fixed allow-list before it enters the URL path. - No write surface — the Adzuna API is search/aggregation only; the connector exposes read verbs exclusively.
- Hardening: the country path segment is allow-list-validated; numeric params
(
page,results_per_page,salary_min,months) are clamped; upstream errors are sanitized and — critically — never echo the request URL, because the app_key rides in the query string. - Security model: matches the other native connectors — credential is read-only at the API level and the connector implements only read verbs. Worst realistic abuse is disclosure of public jobs/salary data the free-tier key can already read.
Add it as a client connector
Add Adzuna in a Claude client at https://bobsmcp.uk/proxy/adzuna/mcp (trailing /mcp —
see gcp-mcp-standalone/adr/0007-per-connector-mcp-endpoint-urls). Account-level, so
it mirrors to the mobile app automatically.
Details
Code: BobMck/mcp-broker branch connectors, src/connectors/adzuna/ (11 unit tests
incl. an app_key-non-leak check; full suite 913 green, ruff clean; PR #2). Infra
(gcp-mcp-standalone): ansible/install.yml (fetch adzuna-app-id / adzuna-app-key
from Secret Manager → .env, no_log), ansible/templates/settings.yaml.j2
(registration). Go-live needs an Adzuna app (app_id + app_key) stored as the two Secret
Manager secrets, then a deploy.
Related
Sources
wiki/projects/gcp-mcp-standalone/connectors-adzuna.md · git is the source of truth