Skip to main content
Glama
winterchill-xyz

jobs-winterchill-mcp

Official

jobs-winterchill-mcp

An MCP server over the winterchill UK tech-jobs catalog (jobs.winterchill.xyz). It's a thin, read-only client over the public catalog API — no secrets, nothing stored — that lets an MCP client (Claude Desktop, the Claude CLI, etc.) search jobs, inspect companies, and match/tailor a CV.

Tools

Tool

What it does

search_jobs

Search the live board (free-text + filters: city, salary, sponsorship, discipline, tech, level, source, sort).

get_job

Fetch one job by source + id, with the full description.

get_company

Company facts (rating, size, industry, Levels.fyi comp) + its current live roles.

match_cv

Rank the live board against a pasted CV (semantic retrieve → rerank → comp-weighted).

tailor_cv

ATS-tailor a CV to one job — returns applyable before → after edits + advice.

list_filters

The accepted filter values (cities, disciplines, levels, sources, technologies).

match_cv / tailor_cv are stateless and anonymous (nothing is stored); they're rate-limited per IP. tailor_cv returns up to 5 edits on the free/anonymous tier.

Related MCP server: job-search-mcp

Install / configure

Requires Python ≥ 3.10. The server speaks MCP over stdio.

Add it to your MCP client config (Claude Desktop claude_desktop_config.json, or the Claude CLI):

{
  "mcpServers": {
    "winterchill": {
      "command": "uvx",
      "args": ["jobs-winterchill-mcp"]
    }
  }
}

Or run from a local checkout:

uv run jobs-winterchill-mcp
# or
pip install -e . && jobs-winterchill-mcp

Configuration

Env var

Default

Purpose

WINTERCHILL_API_BASE

https://jobs.winterchill.xyz

Override the catalog API base URL (e.g. for local dev).

How it works

Every tool maps to a public endpoint:

  • search_jobsGET /api/v1/jobs

  • get_jobGET /api/v1/jobs/{source}/{id}

  • get_companyGET /api/v1/companies/{key}

  • match_cvPOST /api/cv/match

  • tailor_cvPOST /api/cv/job-match (mode: tailor)

No API key is needed. The catalog data is the same already-public board; this server just makes it available to LLM agents over MCP.

Releasing

Publishing to PyPI is automated via GitHub Actions + PyPI Trusted Publishing (OIDC, no token stored). In short: bump version in pyproject.toml, then publish a GitHub Release — the publish workflow builds and uploads. Full steps (incl. the one-time PyPI pending-publisher setup) are in RELEASING.md.

License

MIT © Valerii Iatsko

Available Tools

6 tools
get_companyA

Look up a company by its company_key (from a job's company_key). Returns crawled facts (rating, size band, industry, logo, Companies House), Levels.fyi comp (USD/GBP), and an aggregate of its CURRENT live roles (count, top tech/disciplines, cities, a sample).

ParametersJSON Schema
NameRequiredDescriptionDefault
company_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses returned data types but does not mention if the tool is read-only, requires auth, or has any side effects. Adequate but could be more transparent.

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?

Single sentence conveying purpose and output efficiently. Every word serves a purpose; no fluff.

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

Completeness5/5

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

Given a single parameter with full explanation in description and presence of an output schema, the description covers all necessary aspects for an agent to use the tool correctly.

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?

Schema has 0% description coverage, but description adds meaning by explaining the parameter's source (from a job's company_key) and its purpose. This compensates well for the schema gap.

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?

Clearly states the tool looks up a company by company_key and returns specific data categories. Differentiates from siblings like get_job and search_jobs by its focus on company details.

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?

Explicitly instructs to use company_key from a job, providing clear context. Does not state when not to use or mention alternatives, but the context is sufficient.

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

get_jobA

Fetch one job by its source + id (e.g. from a search result's source and id), with the full job description. Returns {error} if it's not currently listed.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so the description must cover behavioral traits. It discloses that the tool returns the full job description and an error if the job is no longer listed. However, it does not mention read-only nature, rate limits, or authorization requirements, leaving some gaps for a simple fetch operation.

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?

The description is two sentences with essential information front-loaded: verb, resource, key arguments, and error case. No redundant or verbose elements.

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?

Given the tool's simplicity (2 params, output schema exists), the description covers purpose, identification method, and error behavior. It could mention prerequisites or that the output is from the output schema, but overall it is complete enough for effective use.

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?

With 0% schema description coverage, the description adds meaning by explaining that source and job_id come from a search result, clarifying their relationship. It does not provide individual constraints but gives practical usage context.

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 description uses the verb 'Fetch' and specifies the resource 'one job' by composite key (source+id). It clearly distinguishes from sibling tools like search_jobs (which returns a list) and get_company (different resource).

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?

The description implies usage context: 'from a search result's source and id', tying it to search_jobs. It does not explicitly state when not to use or name alternatives, but the implied workflow is clear.

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

list_filtersA

List the accepted filter values for search_jobs (cities, disciplines, levels, sources, common technologies, roles). Mirrors the board's canonical options.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Description discloses it's a read-only operation listing filter values, mirroring canonical options. No annotations exist, but for a simple list tool, behavior is adequately transparent.

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 sentences, no wasted words. Purpose and scope are front-loaded.

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

Completeness5/5

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

Given the existence of an output schema and the simple nature of the tool, the description adequately covers what an agent needs to know.

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?

No parameters, but description adds meaning by listing the filter categories (cities, disciplines, etc.), which provides context beyond the empty 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?

Description clearly states the tool 'list' the 'accepted filter values for search_jobs', which is specific and distinguishes it from sibling tools like search_jobs itself.

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?

Implied usage: to obtain filter options before using search_jobs. No explicit when-not or alternatives, but context is clear given sibling tool names.

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

match_cvA

Match a CV against the live board and return the best-fitting roles (semantic retrieve → rerank → comp-weighted ranking). Stateless and anonymous — nothing is stored.

Args: cv_text: the CV as plain text / markdown (≥120 chars). city / min_salary / sponsor: optional filters on the candidate side. sort: "balanced" (default), "relevance", or "pay". top: max matches to return.

Returns {profile, matches}: a parsed board-aligned profile (disciplines, technologies, seniority) and ranked matches each with a relevance score and shared disciplines/tech. Rate-limited (~12/hr per IP).

ParametersJSON Schema
NameRequiredDescriptionDefault
cv_textYes
cityNo
min_salaryNo
sponsorNo
sortNobalanced
topNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: stateless ('nothing is stored'), anonymous, rate-limited (~12/hr per IP), and output structure ({profile, matches}). No contradictions.

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?

The description is well-structured with a clear main sentence and a bulleted list for arguments. Concise without being overly terse; all sentences are informative.

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?

Given the presence of an output schema (not shown), the description sufficiently covers input parameters, core behavior, and return shape. Could add more detail on ranking algorithm but is adequate for selection and invocation.

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

Parameters5/5

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

Input schema has 0% description coverage, but the description compensates by explaining each parameter (cv_text, city, min_salary, sponsor, sort, top) and their meanings. Adds value beyond the schema's type information.

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 description clearly states the tool's purpose: 'Match a CV against the live board and return the best-fitting roles' with a detailed pipeline (semantic retrieve→rerank→comp-weighted ranking). It distinguishes itself from siblings by emphasizing stateless and anonymous matching.

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?

Provides explicit usage guidelines including required argument (cv_text ≥120 chars), optional filters (city, min_salary, sponsor), sort options, and return count. Mentions rate limit. However, it does not explicitly contrast with sibling tools like search_jobs or tailor_cv.

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

search_jobsA

Search the live UK software/tech jobs board.

Args: query: free-text over title / company / location / employer. city: one of the 14 supported cities (e.g. "London") or "other" for remote/UK-wide. min_salary: minimum annualised GBP (matches stated salary only). sponsor: only jobs that explicitly offer visa sponsorship. licensed: only employers holding a UK Skilled Worker sponsor licence. remote: only fully-remote roles. discipline: a job-taxonomy discipline (see list_filters), e.g. "Backend". role: "engineer" or "manager". tech: comma-separated technologies (overlap match), e.g. "Python,AWS". level: comma-separated seniorities: intern,junior,mid,senior,staff,staff_plus. source: comma-separated source keys (see list_filters), e.g. "ats,linkedin". sort: "recent" (default), "pay", or "relevance". page: 1-based page. page_size: results per page (max 100; default 10 to keep output small). include_description: include the full job description for each result (large).

Returns a page of jobs with salary, sponsorship, tech, city, apply_url and detail_url. Use get_job(source, id) for a single full record.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
cityNo
min_salaryNo
sponsorNo
licensedNo
remoteNo
disciplineNo
roleNo
techNo
levelNo
sourceNo
sortNorecent
pageNo
page_sizeNo
include_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description bears full responsibility. It explains the search behavior, filtering options, pagination, and the effect of include_description (large output). It does not mention rate limits or auth, but the read-only nature is implicit.

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?

The description is structured with a clear summary, parameter list, and notes on return values and alternatives. It is slightly lengthy but each sentence adds value; could be more concise but remains effective.

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?

Given the tool's 15 parameters and the presence of an output schema, the description covers search behavior, filtering, pagination, and return fields. It lacks details on error cases or output structure but is sufficient for correct invocation.

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

Parameters5/5

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

Schema coverage is 0%, but the description provides detailed explanations for all 15 parameters, including defaults and valid values. This far exceeds the minimum needed to compensate for the lack of schema descriptions.

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 description clearly states it searches a 'live UK software/tech jobs board,' using the verb 'search' and specifying the resource. It distinguishes from siblings like get_job and list_filters by detailing the comprehensive filtering and pagination capabilities.

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?

The description provides explicit guidance on when to use this tool (for broad searches) and directs to use get_job for a single full record. However, it does not explicitly state when not to use it or exclude other contexts.

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

tailor_cvA

ATS-tailor a CV to ONE specific job and return applyable edits (before → after diffs).

Give the job either as free text (job_text) OR as a board listing (source + job_id from a search result). Provide cv_text as plain text / markdown.

Returns: advice: labelled guidance (keyword MATCH, ADD THESE KEYWORDS, TITLE, FORMAT CHECK). edits: a list of {title, rationale, before, after} — each before is a verbatim CV snippet and after its ATS-tailored replacement; apply them as diffs. examples: anonymised real-world phrasing references (style only — never copy facts).

Never invents experience. Anonymous = up to 5 edits (free tier). Rate-limited (~30/hr per IP).

ParametersJSON Schema
NameRequiredDescriptionDefault
cv_textYes
job_textNo
sourceNo
job_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses behavioral traits: returns specific fields (advice, edits, examples), edits are diffs, does not invent experience, free tier limit of 5 edits, and rate limiting (~30/hr per IP). However, it does not explain behavior when both job_text and source+job_id are provided or omitted.

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?

The description is relatively concise, with the main purpose front-loaded in the first sentence. It uses line breaks for readability. Including output structure (advice, edits, examples) is helpful but adds length. Some phrases like 'Never invents experience' could be integrated into constraints. Overall, it's efficient with minimal redundancy.

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?

Given the complexity (4 parameters, no annotations, output schema exists), the description covers the essential aspects: purpose, input methods, output fields, and constraints. It lacks details on mutual exclusivity of job_text vs source+job_id and error handling, but is fairly complete for a tool with an output schema.

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?

Schema description coverage is 0%, so the description must compensate. It explains that cv_text is 'plain text / markdown', job_text is 'free text', and source+job_id come from a search result. It doesn't specify formats for source (e.g., URL) or clarify mutual exclusivity, but provides sufficient context for understanding parameter usage.

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 description clearly states the tool's purpose: 'ATS-tailor a CV to ONE specific job and return applyable edits (before → after diffs).' It specifies the verb (tailor), resource (CV), and output format (diffs). This distinguishes it from sibling tools like match_cv (likely matching without edits) and search_jobs.

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?

The description provides explicit guidance on how to use the tool: 'Give the job either as free text (job_text) OR as a board listing (source + job_id from a search result).' It also notes constraints like 'Never invents experience' and rate limits. However, it does not explicitly mention when not to use or alternatives.

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

TDQS

A4.5/5.0
Disambiguation5/5

Each tool targets a distinct action: get_company retrieves company details, get_job fetches a single job, list_filters provides filter options, match_cv matches CV to jobs, search_jobs searches the board, and tailor_cv tailors a CV. No overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_company, list_filters, search_jobs), making the set predictable and easy to navigate.

Tool Count5/5

Six tools cover the essential functionality of a job board MCP—searching, retrieving details, matching CVs, and tailoring—without being too many or too few.

Completeness5/5

The tool surface covers the full lifecycle for a consumer-facing job board: finding jobs (search_jobs), viewing details (get_job, get_company), filtering (list_filters), and optimizing applications (match_cv, tailor_cv). No obvious gaps.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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.
    566
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Unified 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

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/winterchill-xyz/jobs-winterchill-mcp'

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