# 4dayweek.io Jobs

> Search reduced-hours jobs and employers: 4-day weeks, 9-day fortnights, half-day Fridays and more.

- name: io.4dayweek/jobs
- version: 1.4.0
- connection class: R0 (autonomous)
- trust: 100/100
- quality: 90/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.4dayweek%2Fjobs
- tools: https://api.protogrid.dev/v1/servers/io.4dayweek%2Fjobs/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "jobs": {
      "type": "http",
      "url": "https://4dayweek.io/api/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 100
- drivers: +repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-100% +updated-7d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 90/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,413 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 6 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 6, about 2,413 tokens to load them all
- tool set hash: 8f57b0d667dd39b63c33cb66bf0a5010
- badge: [![protogrid quality](https://protogrid.dev/badge/io.4dayweek/jobs.svg)](https://protogrid.dev/servers/io.4dayweek/jobs)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://4dayweek.io/api/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (6)

- `explain_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.
- `get_company`: 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.
- `get_job`: 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.
- `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.
- `search_companies`: 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.
- `search_jobs`: 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.
