Skip to main content
Glama

jobscout-mcp

An MCP server for tech job hunting. Ask your AI assistant for jobs in plain language and it searches several job boards at once, tells you what the market is asking for, and ranks the offers against your own skills.

You:     Find AI engineer roles I could apply to from Barcelona.
         My skills: Python, FastAPI, LLMs, RAG, Docker, AWS, React, MCP, Claude, TypeScript.
Claude:  ⏵ rank_jobs_for_me
         Ranked 15 of 19 postings for "ai engineer" in Barcelona.
         Missing most often in the best matches: AI agents (10), Next.js (5), Machine learning (5)…

         - Senior Product Engineer  [hn:49962075]
           Revieve Oy | REMOTE [Europe / (GMT+2)] | remote | 14 days ago
           skills: TypeScript, AI agents, MCP, Claude, Evals, React
           fit 67/100 | you have: TypeScript, MCP, Claude, React | missing: AI agents, Evals
           https://news.ycombinator.com/item?id=49962075
         ...

Real output from October 2026. Remote roles open to Europe count as available from Barcelona.

What it can do

Tool

What it does

search_jobs

Searches every configured board in parallel and returns the newest matches with company, location, remote status, salary when published, and the skills each posting asks for.

get_job

Full description of one posting, with its skills and salary text.

market_snapshot

What a search looks like as a market: most requested skills and how often, remote share, salary ranges (median and middle half), companies with several openings.

rank_jobs_for_me

Scores each posting by how much of what it asks for you already have. Shows matched and missing skills per job, and the skills you're missing most often across the best fits.

list_sources

Which boards are ready and which need a key.

There is also a job_hunt prompt that chains them: market overview, best five fits, and what to highlight in the top two applications.

Related MCP server: JobSpy MCP Server

Sources

Source

Coverage

Key

Remotive

Remote jobs worldwide

None

Arbeitnow

Europe, many remote roles

None

Hacker News "Who is hiring?"

This month's thread, startups worldwide

None

Adzuna

Spain (or 15+ other countries) with salaries

Free ADZUNA_APP_ID + ADZUNA_APP_KEY

Three sources work with no setup. Add the free Adzuna key for on-site and hybrid roles in Spain.

Install

Requires Node.js 18.17 or newer.

git clone https://github.com/ianfloresfdez/jobscout-mcp
cd jobscout-mcp
npm install
npm run build

Claude Desktop

Add this to claude_desktop_config.json (Settings → Developer → Edit config) and restart Claude:

{
  "mcpServers": {
    "jobscout": {
      "command": "node",
      "args": ["/absolute/path/to/jobscout-mcp/dist/index.js"],
      "env": {
        "ADZUNA_APP_ID": "your-id",
        "ADZUNA_APP_KEY": "your-key",
        "ADZUNA_COUNTRY": "es"
      }
    }
  }
}

The env block is optional; leave it out to use only the key-free boards.

Claude Code

claude mcp add jobscout -- node /absolute/path/to/jobscout-mcp/dist/index.js

Cursor, Windsurf and other clients

Any MCP client that runs stdio servers works with the same command: node /absolute/path/to/jobscout-mcp/dist/index.js.

Try it

  • "What do AI engineer roles in Europe ask for right now, and what do they pay?"

  • "Search remote LLM jobs posted in the last week."

  • "Rank Python backend jobs in Spain against my CV" (paste your skills)

  • "Open the second one and tell me what to put first in my cover letter."

How it works

  • One search, many boards. Sources run in parallel. If one is down or rate-limited, you still get the others, and the result says which one failed and why.

  • Same shape for every posting. Each board is mapped to one Job type: title, company, location, remote flag, URL, date, salary, tags, and plain-text description.

  • Skills are detected, not guessed. A dictionary of about 80 technologies with their aliases (react.js, k8s, pgvector, retrieval-augmented…) is matched against each posting. Your own skill list goes through the same aliases, so "LLM" and "large language models" count as the same thing.

  • Fit score. The weighted share of a posting's skills you already have. Skills named in the job title count double. Postings that mention fewer than two known skills are left out of the ranking rather than scored on noise.

  • Salaries. Read from the structured fields where a board has them (Adzuna), otherwise parsed from the text ($120k-150k, 55.000-65.000 €, €500/day). Ranges are annualised for comparison and reported per currency. Adzuna's predicted salaries are ignored.

  • Location. "Barcelona" also matches remote roles open to Spain, Europe or anywhere. "remote" keeps only postings that say remote.

  • Caching. Results are cached for 10 minutes, so follow-up questions in a conversation don't refetch.

Development

npm test          # unit tests with recorded fixtures, no network
npm run build
npm run inspect   # opens the MCP Inspector against the built server

To add a board, implement the Source interface in src/sources/ and register it in src/search.ts.

Notes

jobscout only reads public listings through each board's official API or public feed, and links to the original posting to apply. Respect each board's terms of use.

License

MIT

Available Tools

5 tools
get_jobGet job detailsA
Read-only

Full description of a posting returned by search_jobs, rank_jobs_for_me or market_snapshot, with the skills it asks for and its salary text.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPosting id from a previous result, e.g. "remotive:1923456".

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the response includes required skills and salary text, but says nothing about the remaining return shape, error behavior for a stale/unknown id, or rate limits. Adequate given the annotation coverage, but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads what the tool returns, then the provenance of the id, then the notable payload fields. No filler or restated title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description covers purpose, source of the id, and the two most decision-relevant return fields. Only the full response shape and id-miss behavior are unstated, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter at 100% schema description coverage, with the schema itself giving the format and an example ('remotive:1923456'). The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (a posting's full description) and the exact payload it returns — skills and salary text. It also names the sibling tools that produce the ids it consumes (search_jobs, rank_jobs_for_me, market_snapshot), which cleanly separates it from those list-level siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

By tying the tool to ids 'returned by search_jobs, rank_jobs_for_me or market_snapshot', it makes the usage context clear: call this after a search to expand a specific posting. It stops short of explicit when-not-to-use guidance or naming an alternative for bulk retrieval, so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sourcesList job sourcesA
Read-only

Which job boards are available and which need configuration (API keys).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish that this is a read-only, non-open-world operation. The description adds useful behavioral context by stating that the result covers both available job boards and which ones need configuration via API keys, though it does not describe output format in detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single compact fragment with no wasted words. The key information — available sources and configuration status — is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter, read-only listing tool, the description covers the essential output content and is supported by annotations that clarify safety. It could be slightly stronger by indicating the shape of the returned list, but no output schema exists and the description is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool takes zero parameters, so there is no parameter semantics for the description to explain. The baseline for a parameterless tool is 4, and nothing in the description misleads about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the specific resource (job boards/sources) and what information is reported (availability and configuration needs). It is clear but omits an explicit verb and does not directly name or distinguish itself from the sibling job/market tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no exclusions, and no mention of alternative tools. The content implies you call it when you need source availability or API-key configuration status, but the usage condition is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_snapshotJob market snapshotA
Read-only

Summarise what the market asks for in a search: most requested skills and their share of postings, remote share, salary ranges where postings publish them, and companies with several openings. Good for 'what should I learn' and 'what does this role pay'.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWhat to look for, e.g. "AI engineer", "python backend", "LLM". All words must appear in the posting.
sourcesNoLimit to some boards. Defaults to every board that is configured.
locationNoCity, country or "remote", e.g. "Barcelona", "Spain", "Europe". Remote roles open to that place are included.
remote_onlyNoOnly postings that say they are remote.
max_age_daysNoIgnore postings older than this. Defaults to 30.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so safety and external-fetch behaviour are covered. The description adds one genuine data-quality caveat – salary ranges only appear 'where postings publish them' – but says nothing about cost, latency, result limits, or what happens when the query matches nothing. Useful but thin beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the summary contains, followed by a compact use-case cue. Every clause carries information (the enumerated outputs are the reason to pick this tool), though the output list is dense enough that it verges on a spec dump.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly compensates by enumerating the returned aggregates, and it covers the primary call intents. Remaining gaps are minor: no mention of empty-result behaviour or how sources/location interact with the summary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all five parameters, so the input schema already documents query semantics, source selection, location handling, remote filtering, and the default 30-day window. The description adds no format or interaction detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (summarise) and resource (a job-market search), and enumerates the aggregates produced: top skills with share, remote share, salary ranges, repeat hirers. It is clearly distinguishable from the list-oriented siblings (search_jobs, get_job) by implication, but never names them, so sibling differentiation is not explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete when-to-use intents – 'what should I learn' and 'what does this role pay' – which tell an agent this is the aggregation tool rather than a posting browser. It offers no exclusions or named alternatives (e.g. 'use search_jobs when you need individual postings'), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_jobs_for_meRank jobs against my skillsA
Read-only

Score postings by how much of what they ask for the candidate already has, best fit first. Each result lists the matched skills and the missing ones, and the summary lists the skills missing most often across the best matches. Pass the skills from the user's CV or profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many postings to return. Defaults to 10.
queryYesWhat to look for, e.g. "AI engineer", "python backend", "LLM". All words must appear in the posting.
skillsYesThe candidate's skills, e.g. ["Python", "FastAPI", "LLMs", "RAG", "Docker", "AWS"].
sourcesNoLimit to some boards. Defaults to every board that is configured.
locationNoCity, country or "remote", e.g. "Barcelona", "Spain", "Europe". Remote roles open to that place are included.
remote_onlyNoOnly postings that say they are remote.
max_age_daysNoIgnore postings older than this. Defaults to 30.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, openWorldHint), so the bar is lower, and the description adds real behavioral context: results are ranked best-fit-first, each result carries matched and missing skills, and a summary aggregates the most commonly missing skills. With no output schema, this return-shape disclosure is genuinely valuable. It stops short of explaining scoring mechanics, board fan-out, or latency from external sources.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste: purpose and ranking rule first, output shape second, input sourcing last. Nothing is repeated from the schema or annotations, and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter, open-world tool with no output schema, the description covers the essentials: what is scored, how results are ordered, and what each result and the summary contain. It leaves out scoring scale/interpretation (e.g. percentage vs ratio), behavior when no posting matches, and cross-board deduplication, which keeps it short of fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters, making 3 the baseline. The description adds only one piece of extra meaning, telling the agent to source the skills array from the user's CV/profile; the query, limit, sources, location, remote_only, and max_age_days semantics come entirely from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb (score/rank) and resource (job postings) with the ranking criterion (share of requested skills the candidate already has) and ordering (best fit first). That ranking-by-skill-match semantic is inherently distinct from search_jobs or get_job, so an agent can tell what this tool uniquely does without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing line ('Pass the skills from the user's CV or profile') gives practical guidance on supplying the key input, which implies the usage context: you use this when you have a candidate skill set to match against. However, no alternative sibling (search_jobs, list_sources) is named and no when-not condition is stated, so usage is only implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jobsSearch tech jobsA
Read-only

Search tech job postings across Remotive, Arbeitnow, Hacker News 'Who is hiring?' and Adzuna (Spain) at once. Returns the newest matches with company, location, remote status, salary when published, the skills each posting asks for, and an id for get_job.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many postings to return. Defaults to 15.
queryYesWhat to look for, e.g. "AI engineer", "python backend", "LLM". All words must appear in the posting.
sourcesNoLimit to some boards. Defaults to every board that is configured.
locationNoCity, country or "remote", e.g. "Barcelona", "Spain", "Europe". Remote roles open to that place are included.
remote_onlyNoOnly postings that say they are remote.
max_age_daysNoIgnore postings older than this. Defaults to 30.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real value by enumerating returned fields (company, location, remote status, salary when published, skills) and that results are time-ordered newest-first, but omits cross-board de-duplication behavior, pagination, and what happens when a source is unconfigured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler, front-loaded on scope and sources. The second sentence earns its place because there is no output schema, so the return-field enumeration is the only place an agent can learn the response shape.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by describing the return payload and ordering, and the fully documented six-parameter schema covers input. Remaining gaps are minor: no statement on de-duplication across the four boards or on behavior when no source matches.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all six parameters, so the schema already carries defaults, bounds and enum values. The description contributes nothing extra about parameter syntax or interaction (e.g. how location interacts with remote_only); baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (tech job postings) with an explicit aggregation scope across four named boards, and links the result to the get_job sibling. It stops short of contrasting itself with rank_jobs_for_me or market_snapshot, which also operate on job data, so an agent still has to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the breadth of the query and the note that results carry 'an id for get_job' hints at the search-then-fetch workflow. There is no explicit when-to-use or when-not-to-use, and no pointer to rank_jobs_for_me for ranked results or list_sources for board configuration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedget_job
    • First observedlist_sources
    • First observedmarket_snapshot
    • First observedrank_jobs_for_me
    • First observedsearch_jobs

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct role: search_jobs finds postings, get_job retrieves full details by id, market_snapshot aggregates market trends, rank_jobs_for_me scores postings against candidate skills, and list_sources reports board availability. There is no meaningful overlap that would cause misselection.

Naming Consistency4/5

Four tools follow a verb_noun snake_case pattern (get_job, search_jobs, rank_jobs_for_me, list_sources), but market_snapshot is a noun phrase rather than a verb-led name. This is a minor deviation that does not impair readability.

Tool Count5/5

Five tools is well-scoped for a job search and market analysis server. Each tool covers a distinct stage of the workflow (discover, inspect, analyze, rank, configure) without redundancy.

Completeness4/5

The surface covers search, detail retrieval, market aggregation, personal ranking, and source configuration, which is a solid lifecycle for job scouting. Minor gaps exist, such as saving/bookmarking postings or tracking applications, but core workflows are fully supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables natural-language job search and aggregation from multiple recruitment websites with zero configuration, providing filtered results and standardized output for AI assistants.
    64 npm
    ISC
  • F
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to search and filter job listings across multiple platforms like Indeed, LinkedIn, and Glassdoor, returning structured results for easy processing.
    1
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to find live job postings from employer career sites and rank them against a user's resume, with each requirement matched and tiered for fit.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search job listings and retrieve or update a user's career profile, including work experiences, job summaries, career goals, and technical skills through natural language.
    -