Skip to main content
Glama
folathecoder

Adzuna Jobs MCP Server

by folathecoder

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ADZUNA_APP_IDYesYour Adzuna API App ID from the Adzuna Developer Portal
ADZUNA_APP_KEYYesYour Adzuna API App Key from the Adzuna Developer Portal

Tools

Functions exposed to the LLM to take actions

NameDescription
search_jobs

Search for jobs on Adzuna across 12 supported countries.

IMPORTANT: All salary figures are ANNUAL amounts in LOCAL CURRENCY.

Args: country: ISO 3166-1 alpha-2 country code. Determines job market AND currency. Supported: "gb" (UK/GBP), "us" (USA/USD), "de" (Germany/EUR), "fr" (France/EUR), "au" (Australia/AUD), "nz" (New Zealand/NZD), "ca" (Canada/CAD), "in" (India/INR), "pl" (Poland/PLN), "br" (Brazil/BRL), "at" (Austria/EUR), "za" (South Africa/ZAR)

keywords: Space-separated search terms matched against job title and description. - Terms are OR'd together (more matches = higher ranking) - Case insensitive - No boolean operators (AND/OR/NOT not supported) Examples: "python developer", "machine learning engineer", "senior react" location: Geographic filter with fuzzy matching. Accepts: city names, regions, postal code prefixes. Examples: "London", "Manchester", "SW1" (UK), "New York", "10001" (US) Leave empty for country-wide search. For remote jobs, include "remote" in keywords. page: Page number for pagination (starts at 1, not 0). results_per_page: Results per page (default 10, max 50). salary_min: Minimum ANNUAL salary filter in LOCAL CURRENCY (e.g., 50000 not 50). Note: Jobs without listed salaries are excluded when using this filter. salary_max: Maximum ANNUAL salary filter in LOCAL CURRENCY. full_time: Set True to show ONLY full-time jobs. part_time: Set True to show ONLY part-time jobs. contract: Set True to show ONLY contract/freelance jobs. permanent: Set True to show ONLY permanent positions. category: Job category tag from get_categories tool. Common tags: "it-jobs", "engineering-jobs", "finance-jobs", "sales-jobs" IMPORTANT: Call get_categories(country) first to get valid tags. sort_by: Sort order - "date" (newest first), "salary" (highest first), "relevance" (best match, default). max_days_old: Maximum age of listings in days (e.g., 7 for last week).

Returns: dict: Search results containing: - count (int): Total matching jobs (for pagination) - results (list): Job listings, each with: - id: Unique job identifier - title: Job title - company.display_name: Employer name - location.display_name: Job location - description: Truncated job description (~150 chars) - redirect_url: URL to apply (via Adzuna redirect) - created: ISO 8601 posting date - salary_min, salary_max: Annual salary range (may be null) - salary_is_predicted: "1" if Adzuna estimated the salary from job description, "0" if the employer explicitly listed the salary. Predicted salaries are less reliable for negotiation. - contract_type: "permanent", "contract", etc. - contract_time: "full_time", "part_time" - category.tag: Category identifier

Example response: { "count": 523, "results": [{ "id": "4123456789", "title": "Senior Software Engineer", "company": {"display_name": "Tech Corp"}, "location": {"display_name": "London"}, "salary_min": 70000, "salary_max": 90000, "redirect_url": "https://www.adzuna.co.uk/..." }] }

Errors: - Invalid country code: "API Error 400: Invalid country" - Invalid category: "API Error 400: Invalid category tag" - Rate limit exceeded: "API Error 429: Too many requests" - Authentication failure: "API Error 401: Invalid credentials"

get_categories

Get valid job category tags for a specific country.

PURPOSE: Use this BEFORE search_jobs to get valid 'category' parameter values. Category tags are COUNTRY-SPECIFIC - always use the same country code here as you will in search_jobs.

Args: country: ISO 3166-1 alpha-2 country code. Supported: "gb", "us", "de", "fr", "au", "nz", "ca", "in", "pl", "br", "at", "za"

Returns: dict: Contains "results" array of category objects: - tag: Use THIS value in search_jobs category parameter (e.g., "it-jobs") - label: Human-readable name for display (e.g., "IT Jobs")

Common category tags (vary by country): - "it-jobs": Technology, software, IT support - "engineering-jobs": Mechanical, electrical, civil - "finance-jobs": Accounting, banking, financial services - "sales-jobs": Sales, business development - "healthcare-nursing-jobs": Medical, nursing - "admin-jobs": Administration, office support - "marketing-jobs": Marketing, PR, communications

Example response: { "results": [ {"tag": "it-jobs", "label": "IT Jobs"}, {"tag": "engineering-jobs", "label": "Engineering Jobs"}, {"tag": "finance-jobs", "label": "Accounting & Finance Jobs"} ] }

Usage: categories = get_categories("gb") search_jobs(country="gb", category="it-jobs") # Use tag, not label

Errors: - Invalid country code: "API Error 400: Invalid country" - Rate limit exceeded: "API Error 429: Too many requests" - Authentication failure: "API Error 401: Invalid credentials"

get_salary_histogram

Get salary distribution histogram for jobs matching search criteria.

PURPOSE: Understand salary ranges in a job market. Useful for: - "What's the typical salary for X role?" - Salary negotiation research - Market positioning analysis

IMPORTANT: Only includes jobs WITH listed salaries. Many jobs don't list salary.

Args: country: ISO 3166-1 alpha-2 country code. Determines currency. Supported: "gb", "us", "de", "fr", "au", "nz", "ca", "in", "pl", "br", "at", "za"

keywords: Search terms to filter jobs (e.g., "software engineer", "data scientist"). location: Location filter (e.g., "London", "New York"). category: Category tag from get_categories (e.g., "it-jobs").

Returns: dict: Contains "histogram" object with salary buckets: - Keys: Salary values as strings (e.g., "30000", "35000") - Values: Number of jobs at that salary point

Example response: { "histogram": { "25000": 89, "30000": 234, "35000": 456, "40000": 567, "45000": 489, "50000": 378, "55000": 245, "60000": 167 } }

How to interpret: - Keys are ANNUAL salaries in LOCAL CURRENCY - Buckets are typically £5,000 / $5,000 increments - Peak of distribution = most common salary - To find median: find salary where cumulative count reaches 50%

Errors: - Invalid country code: "API Error 400: Invalid country" - Invalid category: "API Error 400: Invalid category tag" - Rate limit exceeded: "API Error 429: Too many requests" - Authentication failure: "API Error 401: Invalid credentials"

get_top_companies

Get top employers currently hiring, ranked by number of open positions.

PURPOSE: Identify major employers in a field. Useful for: - "Which companies are hiring the most engineers?" - Researching potential employers - Understanding market leaders by hiring volume

NOTE: Shows hiring VOLUME, not company quality. Smaller great companies may not appear.

Args: country: ISO 3166-1 alpha-2 country code. Supported: "gb", "us", "de", "fr", "au", "nz", "ca", "in", "pl", "br", "at", "za"

keywords: Filter to specific roles (e.g., "software engineer", "data scientist"). location: Location filter (e.g., "London" for London-based employers). category: Category tag from get_categories (e.g., "it-jobs").

Returns: dict: Contains "leaderboard" array of company objects: - canonical_name: Company name (normalized) - count: Number of open positions - average_salary: Average salary across listings (may be null)

Example response: { "leaderboard": [ {"canonical_name": "NHS", "count": 1245, "average_salary": 42000}, {"canonical_name": "Amazon", "count": 567, "average_salary": 65000}, {"canonical_name": "Google", "count": 234, "average_salary": 95000} ] }

Notes: - Ranked by job count (most positions first) - Typically returns 10-20 companies - average_salary is ANNUAL in LOCAL CURRENCY (may be null)

Errors: - Invalid country code: "API Error 400: Invalid country" - Invalid category: "API Error 400: Invalid category tag" - Rate limit exceeded: "API Error 429: Too many requests" - Authentication failure: "API Error 401: Invalid credentials"

get_geodata

Get salary and job count data broken down by geographic region.

PURPOSE: Compare salaries and job availability across areas. Useful for: - "Where are the highest paying X jobs?" - "Which cities have the most opportunities?" - Relocation decisions

Args: country: ISO 3166-1 alpha-2 country code. Supported: "gb", "us", "de", "fr", "au", "nz", "ca", "in", "pl", "br", "at", "za"

keywords: Filter to specific roles (e.g., "software engineer"). location: Focus on a region for sub-area breakdown. - Empty: National breakdown (London, Manchester, etc.) - "London": Breakdown within London (City, Canary Wharf, etc.) category: Category tag from get_categories (e.g., "it-jobs").

Returns: dict: Contains "locations" array of region objects: - location.display_name: Region name - location.area: Geographic hierarchy array - count: Number of jobs in region - average_salary: Average salary (may be null)

Example response: { "locations": [ { "location": {"display_name": "London", "area": ["UK", "London"]}, "count": 15678, "average_salary": 62000 }, { "location": {"display_name": "Manchester", "area": ["UK", "Manchester"]}, "count": 3456, "average_salary": 48000 } ] }

Notes: - Results ordered by job count (most jobs first) - average_salary is ANNUAL in LOCAL CURRENCY - Typically returns 10-20 top regions

Errors: - Invalid country code: "API Error 400: Invalid country" - Invalid category: "API Error 400: Invalid category tag" - Rate limit exceeded: "API Error 429: Too many requests" - Authentication failure: "API Error 401: Invalid credentials"

get_salary_history

Get historical salary trends over time for matching jobs.

PURPOSE: Analyze how salaries have changed. Useful for: - "Are X salaries going up or down?" - Trend analysis for negotiations - Market timing for job searches

Args: country: ISO 3166-1 alpha-2 country code. Supported: "gb", "us", "de", "fr", "au", "nz", "ca", "in", "pl", "br", "at", "za"

keywords: Filter to specific roles (e.g., "software engineer"). location: Location filter (e.g., "London"). category: Category tag from get_categories (e.g., "it-jobs"). months: Number of months of history (default 12, max ~24). - 6: Recent trend - 12: Year-over-year comparison - 24: Longer-term view

Returns: dict: Contains "month" array of data points: - month: Year-month string (YYYY-MM format) - salary: Average salary that month (annual, local currency)

Example response: { "month": [ {"month": "2024-01", "salary": 52000}, {"month": "2024-02", "salary": 52500}, {"month": "2024-03", "salary": 53000} ] }

How to analyze: - Compare first vs last month for overall change - Calculate % change: ((last - first) / first) * 100 - Look for consistent direction vs volatility

Errors: - Invalid country code: "API Error 400: Invalid country" - Invalid category: "API Error 400: Invalid category tag" - Rate limit exceeded: "API Error 429: Too many requests" - Authentication failure: "API Error 401: Invalid credentials"

get_api_version

Get the current Adzuna API version.

Returns: API version information

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/folathecoder/adzuna-job-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server