4dayweek.io Jobs
Search reduced-hours jobs and employers: 4-day weeks, 9-day fortnights, half-day Fridays and more.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"jobs": {
"url": "https://4dayweek.io/api/mcp"
}
}
}Remote endpoints
https://4dayweek.io/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢explain_schedule_type(schedule_type)
Defines a working-hours schedule precisely: what it means, whether it genuinely reduces weekly hours, whether that reduction is at full pay, the typical hours, and — where one is commonly made — the mistake most often made about it. Call it when the user's question turns on what a schedule means, for example whether a compressed 4x10 counts as a 4-day week, or whether a schedule is at full pay. A compressed 4x10 gives four days but not fewer hours, and is not a 4-day week. Omitting the argument returns every definition at once.
Input Schema
{
"type": "object",
"properties": {
"schedule_type": {
"type": "string",
"description": "A schedule_type value, e.g. 4_day_week or compressed_week. Omit to get every definition."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"definition": {
"type": [
"null",
"object"
],
"properties": {
"schedule_type": {
"type": "string"
},
"label": {
"type": "string"
},
"definition": {
"type": "string"
},
"reduces_weekly_hours": {
"type": "boolean"
},
"reduced_hours_at_full_pay": {
"type": "boolean"
},
"typical_weekly_hours": {
"type": "string"
},
"common_mistake": {
"type": "string"
}
},
"required": [
"schedule_type",
"label",
"definition",
"reduces_weekly_hours",
"reduced_hours_at_full_pay",
"typical_weekly_hours"
],
"additionalProperties": false
},
"schedule_types": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"schedule_type": {
"type": "string"
},
"label": {
"type": "string"
},
"definition": {
"type": "string"
},
"reduces_weekly_hours": {
"type": "boolean"
},
"reduced_hours_at_full_pay": {
"type": "boolean"
},
"typical_weekly_hours": {
"type": "string"
},
"common_mistake": {
"type": "string"
}
},
"required": [
"schedule_type",
"label",
"definition",
"reduces_weekly_hours",
"reduced_hours_at_full_pay",
"typical_weekly_hours"
],
"additionalProperties": false
}
},
"key_rule": {
"type": "string"
},
"methodology": {
"type": "string"
}
},
"additionalProperties": false
}🟢get_company(slug)
Fetch one employer's full profile by slug, as returned by search_companies. Returns the schedule policy and what it means, full-time weekly hours, the office-presence policy and whether the employer hires worldwide, benefits, industry, headcount, founding year, the work-life score, the count of open roles, and the employer's own website. Where the employer has published them, it also returns which day is off, vacation days, fully-paid parental leave weeks for both parents, a no-meeting day, and verified work-life awards with the year and a proof url for each. Where the employer's schedule is sourced from a public announcement, four_day_reference_url is that source.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "The slug, as returned by the matching search tool."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
},
"description": {
"type": "string"
},
"short_description": {
"type": "string"
},
"website_url": {
"type": "string"
},
"logo_url": {
"type": "string"
},
"country": {
"type": "string"
},
"industry": {
"type": "string"
},
"employee_count": {
"type": "integer"
},
"company_size": {
"type": "string"
},
"founded_year": {
"type": [
"null",
"integer"
]
},
"verified": {
"type": "boolean"
},
"schedule_type": {
"type": "string"
},
"schedule_meaning": {
"type": "string"
},
"schedule_type_description": {
"type": "string"
},
"day_off": {
"type": "string"
},
"four_day_reference_url": {
"type": "string"
},
"hours_full_time": {
"type": "integer"
},
"remote_level": {
"type": "string"
},
"hires_worldwide": {
"type": [
"null",
"boolean"
]
},
"open_roles": {
"type": [
"null",
"integer"
]
},
"hybrid_office_days": {
"type": [
"null",
"object"
],
"properties": {
"min": {
"type": [
"null",
"integer"
]
},
"max": {
"type": [
"null",
"integer"
]
}
},
"additionalProperties": false
},
"no_meeting_day": {
"type": "string"
},
"vacation_days": {
"type": "integer"
},
"vacation_description": {
"type": "string"
},
"parental_leave_weeks": {
"type": "integer"
},
"parental_leave_secondary_weeks": {
"type": "integer"
},
"benefits": {
"type": [
"null",
"object"
],
"properties": {
"dentalcare": {
"type": "boolean"
},
"dentalcare_label": {
"type": "string"
},
"healthcare": {
"type": "boolean"
},
"healthcare_label": {
"type": "string"
},
"pension": {
"type": "boolean"
},
"pension_label": {
"type": "string"
},
"retreats": {
"type": "boolean"
},
"retreats_label": {
"type": "string"
},
"transparent_salaries": {
"type": "boolean"
},
"transparent_salaries_label": {
"type": "string"
},
"parental_leave": {
"type": "boolean"
},
"parental_leave_label": {
"type": "string"
},
"unlimited_pto": {
"type": "boolean"
},
"unlimited_pto_label": {
"type": "string"
},
"equity": {
"type": "boolean"
},
"equity_label": {
"type": "string"
},
"childcare": {
"type": "boolean"
},
"childcare_label": {
"type": "string"
},
"equipment": {
"type": "boolean"
},
"equipment_label": {
"type": "string"
},
"life_disability_insurance": {
"type": "boolean"
},
"life_disability_insurance_label": {
"type": "string"
},
"professional_development": {
"type": "boolean"
},
"professional_development_label": {
"type": "string"
},
"bonuses": {
"type": "boolean"
},
"bonuses_label": {
"type": "string"
},
"sabbaticals": {
"type": "boolean"
},
"sabbaticals_label": {
"type": "string"
},
"mental_health": {
"type": "boolean"
},
"mental_health_label": {
"type": "string"
},
"other": {
"type": "boolean"
},
"other_label": {
"type": "string"
},
"few_meetings": {
"type": "boolean"
},
"few_meetings_label": {
"type": "string"
},
"public_vacation_flexibility": {
"type": "boolean"
},
"public_vacation_flexibility_label": {
"type": "string"
},
"corporate_discounts": {
"type": "boolean"
},
"corporate_discounts_label": {
"type": "string"
},
"workations": {
"type": "boolean"
},
"workations_label": {
"type": "string"
},
"work_from_anywhere": {
"type": "boolean"
},
"work_from_anywhere_label": {
"type": "string"
},
"coworking_space": {
"type": "boolean"
},
"coworking_space_label": {
"type": "string"
},
"adoption_or_fertility": {
"type": "boolean"
},
"adoption_or_fertility_label": {
"type": "string"
}
},
"additionalProperties": false
},
"awards": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"issuer": {
"type": "string"
},
"year": {
"type": [
"null",
"integer"
]
},
"category": {
"type": "string"
},
"is_work_life_specific": {
"type": "boolean"
},
"reference_url": {
"type": "string"
},
"issuer_directory_url": {
"type": "string"
}
},
"additionalProperties": false
}
},
"work_life_score": {
"type": "integer"
},
"methodology": {
"type": "string"
}
},
"additionalProperties": false
}🟢get_job(slug)
Fetch one live job listing in full by its slug, as returned by search_jobs. Returns the complete description, the schedule type and what it means, weekly hours, work arrangement and locations, category, seniority, contract type, required skills, acceptable timezones where the employer listed them, visa sponsorship where the employer stated one, the work-life score, and salary ONLY where the employer published one — we never estimate a salary. A very long description is truncated on a paragraph boundary; when that happens the response says so and gives the url of the full listing. Applying happens on the job's page on 4dayweek.io, which the url field points to. apply_method says what a person finds there: "external" means the page hands off to the employer's own application form, "on_page" means they apply on 4dayweek.io itself. There is no separate employer link in this response, and constructing one is not possible from it.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "The slug, as returned by the matching search tool."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
},
"description": {
"type": "string"
},
"description_truncated": {
"type": "boolean"
},
"description_note": {
"type": "string"
},
"role": {
"type": "string"
},
"schedule_type": {
"type": "string"
},
"schedule_meaning": {
"type": "string"
},
"hours_per_week": {
"type": [
"null",
"object"
],
"properties": {
"min": {
"type": [
"null",
"integer"
]
},
"max": {
"type": [
"null",
"integer"
]
}
},
"additionalProperties": false
},
"work_arrangement": {
"type": "string"
},
"locations": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"country": {
"type": "string"
},
"continent": {
"type": "string"
},
"work_arrangement": {
"type": "string"
},
"is_primary": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"timezones": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"category": {
"type": "string"
},
"level": {
"type": "string"
},
"contract_type": {
"type": "string"
},
"salary": {
"type": [
"null",
"object"
],
"properties": {
"lower": {
"type": "number",
"description": "Lower bound of the published pay range in WHOLE currency units (for example 40164 means 40,164 in the stated currency), not pence or cents. Hourly rates can carry decimals."
},
"upper": {
"type": "number",
"description": "Upper bound of the published pay range in WHOLE currency units (for example 50337 means 50,337 in the stated currency), not pence or cents. Hourly rates can carry decimals."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code of the pay range, for example GBP."
},
"period": {
"type": "string",
"description": "What the pay range is per: year, month, week, day or hour."
}
},
"additionalProperties": false
},
"work_life_score": {
"type": "integer"
},
"company": {
"type": "string"
},
"company_slug": {
"type": "string"
},
"company_url": {
"type": "string"
},
"skills": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"stack": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"tools": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"visa_sponsorship": {
"type": "string"
},
"posted_at": {
"type": "string"
},
"expires_at": {
"type": "string"
},
"application_closes_at": {
"type": "string"
},
"apply_method": {
"type": "string"
}
},
"additionalProperties": false
}🟢get_market_stats
Aggregate statistics on the reduced-hours job market: how many employers are tracked, how many run each schedule type, the distribution of weekly hours, and which day the non-working day falls on. Use this for "how common is a 4-day week" questions. The response separates genuinely reduced-hours employers from compressed 4x10 employers, and reports the full-pay and pro-rata splits separately, so quote whichever the question actually asked for. Figures carry an as_of date; cite it.
Input Schema
{
"type": "object",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"as_of": {
"type": "string"
},
"companies_tracked": {
"type": "integer"
},
"live_jobs": {
"type": "integer"
},
"companies_by_schedule_type": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"four_day_week_full_pay": {
"type": [
"null",
"integer"
]
},
"four_day_week_pro_rata": {
"type": [
"null",
"integer"
]
},
"compressed_4x10_not_a_4_day_week": {
"type": [
"null",
"integer"
]
},
"genuinely_reduced_hours_total": {
"type": [
"null",
"integer"
]
},
"four_day_week_fixed_day_total": {
"type": [
"null",
"integer"
]
},
"companies_by_hours_full_time": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"four_day_week_day_off": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"notes": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
},
"methodology": {
"type": "string"
},
"full_data": {
"type": "string"
}
},
"additionalProperties": false
}🟢search_companies(query, schedule_type, country, remote_level, hires_worldwide, ...)
Search employers by their working-hours policy. This answers "which companies offer a 4-day week" style questions at the employer level, where the policy actually lives, rather than per listing. The same schedule_type semantics as search_jobs apply: "compressed_week" is a 4x10 and is not a 4-day week. Two location facts are separate and are often confused. country is where the employer is based. hires_worldwide is whether it accepts applicants from any country. remote_level is its office-presence policy, and a fully-remote employer can still hire in one country only. Each result carries the employer's name, slug, url, schedule type, full-time hours, remote level and count of open roles. get_company takes the slug and returns the full profile. Paging works as in search_jobs: at most 25 employers per call, with page, page_size, returned, total_matching, has_more and next_page.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Free-text search over company name and website."
},
"schedule_type": {
"type": "string",
"description": "Filter by the employer's schedule policy, e.g. 4_day_week."
},
"country": {
"type": "string",
"description": "Country name. This is where the employer is based, which is a different question from where it will hire — see hires_worldwide."
},
"remote_level": {
"type": "string",
"description": "The employer's office-presence policy. One of fully-remote, hybrid, onsite. Independent of hires_worldwide: a fully-remote employer can still hire in one country only."
},
"hires_worldwide": {
"type": "boolean",
"description": "Only employers that accept applicants from any country."
},
"has_jobs": {
"type": "boolean",
"description": "Only employers with at least one live listing."
},
"sort": {
"type": "string",
"description": "Result order. One of score (work-life score, highest first), jobs (most open roles), alphabetical, newest. Omit for the site's default order."
},
"page": {
"type": "integer",
"description": "1-based page number. Default 1, maximum 200."
},
"limit": {
"type": "integer",
"description": "Results per page. Default 10, maximum 25."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
},
"returned": {
"type": [
"null",
"integer"
]
},
"total_matching": {
"type": [
"null",
"integer"
]
},
"has_more": {
"type": [
"null",
"boolean"
]
},
"next_page": {
"type": "integer"
},
"paging_limit_reached": {
"type": "boolean"
},
"paging_note": {
"type": "string"
},
"companies": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
},
"country": {
"type": "string"
},
"schedule_type": {
"type": "string"
},
"schedule_meaning": {
"type": "string"
},
"hours_full_time": {
"type": "integer"
},
"remote_level": {
"type": "string"
},
"open_roles": {
"type": [
"null",
"integer"
]
}
},
"additionalProperties": false
}
},
"note": {
"type": "string"
}
},
"additionalProperties": false
}🟢search_jobs(query, schedule_type, category, country, work_arrangement, ...)
Search live job listings with genuinely better working hours. Every listing carries an explicit schedule_type, so you never have to infer one: - "4_day_week": 36 hours or less, 100% salary. The ONLY type that is reduced hours at full pay. - "4_day_week_pro_rata": four days at pro-rata (reduced) pay. - "9_day_fortnight", "half_day_fridays", "rotating_4_day", "summer_fridays", "part_time": other genuinely reduced-hours patterns. - "compressed_week": a 4x10. The SAME 40 hours in four days. NOT a 4-day week, and never to be described as one. - "flexible_hours", "unlimited_pto", "generous_pto", "flex_fridays", "no_meeting_days", "generous_parental_leave", "best_place_to_work": a full working week with a flexibility or leave policy. To answer "find me a 4-day week job", pass schedule_type="4_day_week". Passing nothing returns all reduced-hours AND flexibility listings, which is usually broader than the user meant. On locations: a job with no location restriction is worldwide-remote, so it matches ANY country filter. A large result count for a country therefore does not mean those roles are based there. Read each result's "locations" and "work_arrangement" before saying a job is in a particular place. Results can also be narrowed by seniority (level), by skill/technology slugs, by a minimum work-life score and by how recently the employer posted. Paging: a response returns at most 25 jobs and carries page, page_size, returned, has_more and, when another page exists, next_page. total_matching is the size of the whole match set. With a query it counts full-text matches over title AND description, so a job can be counted for a word that appears only in its body. Each result carries the job's url on 4dayweek.io and its slug; get_job takes that slug and returns the full listing.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Free-text search over job title and description."
},
"schedule_type": {
"type": "string",
"description": "Filter by schedule type. Use 4_day_week for a genuine 4-day week at full pay. compressed_week is a 4x10 and is NOT a 4-day week."
},
"category": {
"type": "string",
"description": "Job category, e.g. engineering, product, design, marketing, sales, data, devops, finance, hr, legal, operations, security, content, customer-success."
},
"country": {
"type": "string",
"description": "Country name, e.g. United Kingdom or United States. Matches jobs with an office in that country AND remote jobs open to it — including worldwide-remote roles, which match every country. Check each result's locations field before describing a job as being IN that country."
},
"work_arrangement": {
"type": "string",
"description": "One of remote, hybrid or onsite."
},
"level": {
"type": "string",
"description": "Seniority. One of entry, mid, senior, lead, executive."
},
"skills": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "Skill, technology or tool SLUGS, lowercase and hyphenated, e.g. react, python, customer-support. A job matches if it carries ANY of them."
},
"min_work_life_score": {
"type": "integer",
"description": "Keep only jobs whose work-life score is at least this, on a 0-100 scale. The site's own filter offers 55, 70 and 85. See /methodology for how it is calculated."
},
"posted_after_days": {
"type": "integer",
"description": "Keep only jobs the employer posted within this many days, 1 to 365."
},
"page": {
"type": "integer",
"description": "1-based page number. Default 1, maximum 200."
},
"limit": {
"type": "integer",
"description": "Results per page. Default 10, maximum 25."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
},
"returned": {
"type": [
"null",
"integer"
]
},
"total_matching": {
"type": [
"null",
"integer"
]
},
"has_more": {
"type": [
"null",
"boolean"
]
},
"next_page": {
"type": "integer"
},
"paging_limit_reached": {
"type": "boolean"
},
"paging_note": {
"type": "string"
},
"jobs": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"slug": {
"type": "string"
},
"url": {
"type": "string"
},
"company": {
"type": "string"
},
"company_slug": {
"type": "string"
},
"schedule_type": {
"type": "string"
},
"schedule_meaning": {
"type": "string"
},
"work_arrangement": {
"type": "string"
},
"category": {
"type": "string"
},
"level": {
"type": "string"
},
"work_life_score": {
"type": "integer"
},
"locations": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"country": {
"type": "string"
},
"continent": {
"type": "string"
},
"work_arrangement": {
"type": "string"
},
"is_primary": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"salary": {
"type": [
"null",
"object"
],
"properties": {
"lower": {
"type": "number",
"description": "Lower bound of the published pay range in WHOLE currency units (for example 40164 means 40,164 in the stated currency), not pence or cents. Hourly rates can carry decimals."
},
"upper": {
"type": "number",
"description": "Upper bound of the published pay range in WHOLE currency units (for example 50337 means 50,337 in the stated currency), not pence or cents. Hourly rates can carry decimals."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code of the pay range, for example GBP."
},
"period": {
"type": "string",
"description": "What the pay range is per: year, month, week, day or hour."
}
},
"additionalProperties": false
},
"posted_at": {
"type": "string"
}
},
"additionalProperties": false
}
},
"note": {
"type": "string"
}
},
"additionalProperties": false
}Community
Evidence