jobs-winterchill-mcp
OfficialA read-only MCP server for searching and interacting with the Winterchill UK tech jobs catalog, with CV matching and tailoring capabilities.
search_jobs: Search live UK tech jobs using free-text queries and filters (city, minimum salary, visa sponsorship, remote work, discipline, tech stack, seniority level, source, sort order) with pagination.get_job: Fetch the full description for a specific job by its source and ID.get_company: Look up a company by key to retrieve facts like rating, size, industry, Companies House data, Levels.fyi compensation data, and its current live roles.match_cv: Paste a CV in plain text/markdown to semantically rank live jobs against it, returning a parsed candidate profile and ranked best-fitting roles with relevance scores — stateless and anonymous.tailor_cv: Generate ATS-tailored keyword advice and concrete before→after edits to optimize a CV for a specific job (by text or source/ID) — anonymous, up to 5 edits on the free tier.list_filters: Retrieve all accepted filter values (cities, disciplines, seniority levels, sources, technologies) for use withsearch_jobs.
Provides company compensation data from levels.fyi as part of company information.
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., "@jobs-winterchill-mcpsearch for software engineer jobs in London offering sponsorship"
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.
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 the live board (free-text + filters: city, salary, sponsorship, discipline, tech, level, source, sort). |
| Fetch one job by |
| Company facts (rating, size, industry, Levels.fyi comp) + its current live roles. |
| Rank the live board against a pasted CV (semantic retrieve → rerank → comp-weighted). |
| ATS-tailor a CV to one job — returns applyable |
| 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-mcpConfiguration
Env var | Default | Purpose |
|
| Override the catalog API base URL (e.g. for local dev). |
How it works
Every tool maps to a public endpoint:
search_jobs→GET /api/v1/jobsget_job→GET /api/v1/jobs/{source}/{id}get_company→GET /api/v1/companies/{key}match_cv→POST /api/cv/matchtailor_cv→POST /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 toolsget_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).
| Name | Required | Description | Default |
|---|---|---|---|
| company_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cv_text | Yes | ||
| city | No | ||
| min_salary | No | ||
| sponsor | No | ||
| sort | No | balanced | |
| top | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| city | No | ||
| min_salary | No | ||
| sponsor | No | ||
| licensed | No | ||
| remote | No | ||
| discipline | No | ||
| role | No | ||
| tech | No | ||
| level | No | ||
| source | No | ||
| sort | No | recent | |
| page | No | ||
| page_size | No | ||
| include_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| cv_text | Yes | ||
| job_text | No | ||
| source | No | ||
| job_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Public MCP server for discovering open jobs. Search, filter, and get application links.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
GetJobzi MCP server for job search, application tracking, and career forecasting.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that provides AI agents with real-time access to curated Web3 jobs.18MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that exposes job search data from multiple boards, enabling clients to query and manage job listings via natural language.7MIT

trackly-cliofficial
AlicenseNot gradedqualityAmaintenanceMCP 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.5663MIT- AlicenseNot gradedqualityDmaintenanceUnified 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
- 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/winterchill-xyz/jobs-winterchill-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server