Cerulean Jobs
Server Details
Open jobs at luxury houses and brands worldwide: search them, read one in full, find roles like it.
- Status
- Healthy
- Uptime
- 100.0% over 40 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
Each tool has a clearly distinct role: search discovers roles by keywords/filters, fetch retrieves one known listing in full, and find_similar_jobs recommends related listings from a source listing id. The descriptions explicitly clarify boundaries, including that fetch does not search and find_similar_jobs does not accept keywords.
All names use lowercase snake_case and imperative verb style, which is readable and predictable overall. There is a minor inconsistency because fetch and search are bare verbs while find_similar_jobs follows a verb_noun pattern.
Three tools are well-scoped for a focused job-discovery server: one for search, one for full listing retrieval, and one for similar-role recommendations. Each tool earns its place without redundancy.
The surface covers the core read-only workflow of discovering, inspecting, and finding alternatives to job listings. Minor gaps exist around exposing filter metadata or brand/department browsing helpers, but agents can work around these through search filters.
Available Tools
3 toolsfetchFetch a listingARead-onlyIdempotentInspect
Use this when someone asks about one specific Cerulean listing — its responsibilities, qualifications, skills, experience, education, pay when the employer states it, benefits or required languages — and its id or Cerulean URL is known. Returns that one listing in full as text, with its url and structured details. It does not search. An unknown or closed listing is an error.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The listing's id, as every result carries it, or its URL on a Cerulean site. | |
| locale | No | The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy; en-US: ceruleancareers.com, English, USA. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | The listing on ceruleanjobs.com, where a candidate reads it in full and applies. |
| text | Yes | The whole listing as text: its summary, responsibilities, qualifications, skills, experience, education, pay where stated, benefits and languages. |
| title | Yes | |
| metadata | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, non-open-world behavior, so the safety profile is covered. The description adds genuine value beyond them by disclosing the error case ('An unknown or closed listing is an error') and the return shape ('that one listing in full as text, with its url and structured details'). It stops short of describing pagination/size limits, but for a single-item fetch that is minor.
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?
Front-loads the when-to-use condition and the id prerequisite in the first sentence, then adds return and error behavior in order of importance. Slightly dense with the field enumeration, but every clause carries selection-relevant information and there is no filler.
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?
With only two well-documented parameters, full annotations, and an output schema covering return values, the description supplies exactly the missing pieces: trigger conditions, the no-search exclusion, and error semantics. Nothing an agent needs in order to call it correctly is absent.
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 100%, and the locale parameter is documented in unusual depth in the schema itself (BCP 47 format, site mapping, default). The description adds no parameter-level detail beyond the schema, so the baseline 3 is appropriate.
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?
States a specific verb and resource ('fetch' one Cerulean listing) and enumerates the fields returned (responsibilities, qualifications, skills, pay, benefits, languages), so an agent can tell exactly what this returns. It also explicitly carves out what it is not: 'It does not search.'
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?
Gives an explicit trigger condition ('when someone asks about one specific listing') plus the prerequisite ('its id or Cerulean URL is known') and an exclusion ('It does not search'), which implicitly routes search-style requests to the search sibling. Nothing about when to choose this is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similar_jobsFind similar jobsARead-onlyIdempotentInspect
Use this when someone wants more roles like one specific Cerulean listing: the closest open roles by what the job is and where it is. Takes that listing's id, not keywords. If the listing is unknown or has no similarity data, it returns an error rather than unrelated results.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The id of the listing to find roles like, as every result carries it, or its URL on a Cerulean site. It is not among its own results. | |
| limit | No | How many similar roles to return, up to 20. Defaults to 12. | |
| locale | No | The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy; en-US: ceruleancareers.com, English, USA. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en. | |
| offset | No | How many to skip, for the next page. Defaults to 0, maximum 10000. | |
| country | No | Keep only similar roles in this country. | |
| location | No | Keep only similar roles in this city, region or country. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | |
| offset | Yes | |
| hasMore | Yes | |
| results | Yes | |
| warnings | No | |
| similarTo | Yes | |
| indexBuiltAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description contributes genuinely new behavior: unknown listings or missing similarity data produce an error rather than unrelated fallback results, which tells the agent not to treat an empty-looking outcome as a soft failure.
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?
Three short sentences, zero filler, with the trigger condition and the id-not-keywords constraint front-loaded before the failure-mode note. Every sentence carries distinct information.
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?
For a read-only similarity lookup with a full output schema, complete annotations and 100%-documented parameters, the description covers the remaining gaps an agent needs: when to reach for it, what input form it expects, and how it fails. Nothing material is left to inference.
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 already 100%, including a detailed `locale` and paging description, so the baseline is 3. The description adds only one piece of parameter meaning beyond the schema: that the input is a listing id rather than keyword text. That is useful but marginal.
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?
States a specific verb+resource (find open roles similar to one specific Cerulean listing) and scopes it by 'what the job is and where it is'. It also distinguishes itself from keyword search with 'Takes that listing's id, not keywords', so an agent can separate it from the `search` sibling without opening either schema.
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?
'Use this when someone wants more roles like one specific Cerulean listing' gives a clear trigger condition, and 'not keywords' implicitly routes keyword-driven discovery elsewhere. It stops short of naming `search` as the explicit alternative, so the routing is inferable 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.
searchSearch jobsARead-onlyIdempotentInspect
Use this when someone wants to find, browse, count or compare open roles at luxury houses and brands, the newest openings included. The listings are read from the houses' own career sites every four hours, and closed roles drop out. query takes keywords or a plain request ("senior client advisor, Bulgari, Geneva"), and may be empty to browse; brand, place, employment type, seniority, industry and department can also be set as filters, and they combine; posted_within_days keeps only recent listings. Returns one page of listings — each with an id, a short summary and the url where candidates read it and apply — plus total, the number of matches.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | A brand, by name or slug: "Tiffany & Co.", "LV", "louis-vuitton". A name that matches no brand comes back as an unknown_value warning with close spellings. | |
| limit | No | How many results to return, up to 20. Defaults to 12; more than 20 is served as 20 with a clamped warning. | |
| query | No | Keywords, or the request as a plain sentence ("senior client advisor, Bulgari, Geneva"). A brand, place, country or employment type it names is applied as that filter, unless the filter is set, and reported in interpreted. Leave it out, or empty, to browse by filters alone. | |
| locale | No | The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy; en-US: ceruleancareers.com, English, USA. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en. | |
| offset | No | How many results to skip, for the next page. Defaults to 0, maximum 10000. | |
| country | No | A country, by name or ISO code — "Switzerland", "US", "Deutschland". Narrower than location, and combinable with it. | |
| industry | No | Industry. | |
| location | No | A city, region or country, in any common spelling: "Geneva" or "Genève", "New York" or "NYC", "Lombardy", "UAE". | |
| department | No | Department. | |
| employment_type | No | Employment type. | |
| seniority_level | No | Seniority level. | |
| posted_within_days | No | Only listings posted in the last N days, by when Cerulean first saw them: 1 for today's, 7 for this week's. Up to 365. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | |
| total | Yes | How many listings match, across every page. |
| offset | Yes | |
| hasMore | Yes | |
| results | Yes | |
| warnings | No | What was clamped, not recognised or matched nothing — what tells a typo from an empty shelf. |
| searchUrl | No | Open the first page of all matching listings on Cerulean, when its search page supports the same filters and language. |
| interpreted | No | How the query was read, when it named filters or carried words every search does. |
| indexBuiltAt | No | When the index was built, RFC 3339: how far results can trail the site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description is free to add the context an agent actually lacks: data provenance (houses' own career sites, re-read every four hours), that closed roles drop out, that results are one page at a time, and that a total match count is returned. These are non-obvious traits that change how an agent should phrase results and paginate.
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?
Front-loaded with the when-to-use clause, then provenance, then parameter behavior, then return shape — a sensible order. It is a single dense paragraph for a 12-parameter tool, so the length is largely justified, though the parameter clauses echo the schema and could be trimmed.
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?
For a zero-required-parameter, 12-parameter search tool with four enums, this covers the things an agent needs: freshness, closed-role exclusion, filter composition, and the shape of a result page (id, summary, apply url) plus total. With an output schema present it need not document return fields further, and nothing material is left ambiguous.
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 100%, so the schema already explains query interpretation, filter combination, clamping, and locale fallback in detail. The description restates the same facts (query accepts keywords or a plain sentence, filters combine, posted_within_days narrows recency) rather than adding syntax or precedence rules beyond the schema. Baseline 3 applies.
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?
States a specific verb set (find, browse, count, compare) against a specific resource (open roles at luxury houses and brands) and bounds the corpus (career-site listings, refreshed every four hours, closed roles removed). An agent can distinguish this from find_similar_jobs or fetch by the breadth of the search surface, but the description never names those siblings to make the boundary explicit.
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?
"Use this when someone wants to find, browse, count or compare open roles" gives clear triggering context, and "query may be empty to browse" plus "filters combine" tells the agent how to drive the tool. Missing is any when-not guidance or a pointer to find_similar_jobs for similarity-style requests, so the routing decision against siblings is left to inference.
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.
3 tool updates
- Changed
fetch1 field changed- changed
Input schema / properties / locale / descriptionPrevious value: -"The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en."New value: +"The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy; en-US: ceruleancareers.com, English, USA. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en."
- Changed
find_similar_jobs1 field changed- changed
Input schema / properties / locale / descriptionPrevious value: -"The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en."New value: +"The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy; en-US: ceruleancareers.com, English, USA. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en."
- Changed
search1 field changed- changed
Input schema / properties / locale / descriptionPrevious value: -"The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en."New value: +"The user's language and region, as a BCP 47 tag: fr-CH for someone writing French in Geneva, say. It sets the language of titles and descriptions, and adds localizedUrl, the listing on that locale's Cerulean site, where the site carries it. It does not filter: country and location do. Cerulean's sites are en: ceruleanjobs.com, English, worldwide; fr-FR: cerulean.fr, French, France; fr-CH: ceruleanjobs.ch, French, Switzerland; de-CH: ceruleanjobs.ch, German, Switzerland; en-CA: ceruleanjobs.ca, English, Canada; fr-CA: ceruleanjobs.ca, French, Canada; de-DE: ceruleanjobs.de, German, Germany; en-GB: ceruleanjobs.co.uk, English, UK; es-ES: cerulean.es, Spanish, Spain; it-IT: ceruleanjobs.it, Italian, Italy; en-US: ceruleancareers.com, English, USA. Any other tag takes its language's site, so fr-BE reads as fr-FR and en-US as en; another language reads as en. Defaults to en."
1 tool update
- Changed
search1 field changed- added
Output schema / properties / searchUrlAdded value: +{ + "description": "Open the first page of all matching listings on Cerulean, when its search page supports the same filters and language.", + "type": "string" +}
1 tool update
- Changed
search1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Keywords, or the request as a plain sentence (\"senior client advisor, Cartier, Geneva\"). A brand, place, country or employment type it names is applied as that filter, unless the filter is set, and reported in interpreted. Leave it out, or empty, to browse by filters alone."New value: +"Keywords, or the request as a plain sentence (\"senior client advisor, Bulgari, Geneva\"). A brand, place, country or employment type it names is applied as that filter, unless the filter is set, and reported in interpreted. Leave it out, or empty, to browse by filters alone."
3 tool updates
- First observed
fetch - First observed
find_similar_jobs - First observed
search
Related MCP Connectors
Search Hosco's live hospitality jobs across Spain, Italy, France, the UK and Switzerland.
Search live job openings in many countries and languages, and read a full job ad.
Open jobs from 20,000+ company career sites: search, list a company's roles, read full job ads
Search 1.2M+ open jobs from 22k companies, read full listings and look up employers.
Related MCP Servers
- AlicenseAqualityCmaintenanceSearch Recruiter Roles: live recruiter jobs, companies, sectors, locations, and market stats.759 npm1MIT
- AlicenseAqualityDmaintenanceSearch current remote / work-from-home jobs by category, region, perk, or company — with ready-to-apply links.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to locate companies' public job boards across Greenhouse, Lever, Ashby and Workable, browse and filter live openings by keyword, location, department and remote status, and read full job descriptions with pay ranges and apply links. Requires no accounts, API keys or authentication, and is read-only.MIT
- AlicenseAqualityCmaintenanceEnables real-time job search across thousands of companies' open roles from Greenhouse, Lever, Ashby, and SmartRecruiters, with full-text filtering and company-specific queries, no API key required.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.