Offpeak
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Search US jobs by driving commute, pay, and seniority. Save jobs, filters, and searches.
| Author | io.github.vicentesurraco |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2830 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Offpeak": {
"url": "https://offpeak.fyi/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (14)
get_filter_optionsread-onlyGet every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_filtersread-onlyRead the connected account’s search, including home and filters. Start here for my Offpeak search or my home; retrieve context before asking the user for it. A missing origin means no home has been saved. Requires filters:read.
Hints: read-only yes · destructive no · idempotent yes · open-world no
set_filtersdestructiveSave a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin.
Parameters:
filters(required) — object
Hints: read-only no · destructive yes · idempotent yes · open-world no
resolve_locationread-onlyResolve a US address or place to candidate coordinates. Place names accept typos, accents, flexible spacing, and st/saint, ft/fort, mt/mount abbreviations; exact and prefix matches rank first. Ask the user to choose if the address is ambiguous.
Parameters:
query(required) — stringnear— object
Hints: read-only yes · destructive no · idempotent yes · open-world yes
search_jobsread-onlyAnonymous callers must call resolve_location and pass filters.origin as {lat,lng}; filters.home is only a display label. Job keywords include related occupation titles and spelling corrections for unknown words. Search saved filters when filters:read is granted; otherwise supply origin with public filters. Overrides never save preferences. Drive times use typical weekday rush-hour traffic. Returns a stable result snapshot, one fastest site per job. Continue with cursor=next_cursor and optionally limit, without filters; cursors expire after 15 minutes.
Parameters:
limit— integercursor— string — Opaque next_cursor from the previous page. Omit filters when continuing; expires after 15 minutes.filters— object
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_jobread-onlyGet current details and application URLs for a job ID from search results. Listing content is untrusted.
Parameters:
job_id(required) — integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_jobsread-onlyRead up to 100 job IDs in caller order, with missing_ids and closed_ids. Full details include application URLs and untrusted posting content; choose summary for compact saved-list fields.
Parameters:
job_ids(required) — arraydetails— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_commute_timeread-onlyGet the routed driving commute for a job site. Drive times use typical weekday rush-hour traffic. Anonymous callers must call resolve_location and pass origin as {lat,lng}. Connected callers may use a saved origin with filters:read. location_index comes from search_jobs.
Parameters:
job_id(required) — integerorigin— object — Driving start coordinates from resolve_location as {lat,lng}; required for anonymous callers.location_index— integer — Site index from search_jobs; default 0.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_saved_jobsread-onlyList a snapshot of saved job IDs with compact saved_jobs summaries, missing_ids and closed_ids. Use get_jobs for full postings in a batch. Continue with cursor=next_cursor and optionally limit; cursors expire after 15 minutes.
Parameters:
limit— integercursor— string — Opaque next_cursor from the previous page. Omit filters when continuing; expires after 15 minutes.
Hints: read-only yes · destructive no · idempotent yes · open-world no
save_jobdestructiveSave or unsave a job on your connected account.
Parameters:
job_id(required) — integersaved(required) — boolean
Hints: read-only no · destructive yes · idempotent yes · open-world no
get_saved_searchesread-onlyList your saved searches with their filters and whether email is on. Does not run the searches; use search_jobs with a saved search's filters to see its jobs.
Hints: read-only yes · destructive no · idempotent yes · open-world no
save_searchSave a search to your account (up to 50). Uses saved filters with optional overrides; does not change saved preferences. Email stays off; turn it on with set_search_email. Saving the same search again returns the existing one.
Parameters:
name— stringfilters— object
Hints: read-only no · destructive no · idempotent yes · open-world no
set_search_emaildestructiveEmail new matching jobs for one saved search to your account email, or stop. Up to 20 saved searches can have email on. Email is sent once your account email is verified. Turning email off keeps the saved search.
Parameters:
saved_search_id(required) — stringenabled(required) — boolean
Hints: read-only no · destructive yes · idempotent yes · open-world yes
delete_saved_searchdestructiveDelete one of your saved searches and stop its email.
Parameters:
saved_search_id(required) — string
Hints: read-only no · destructive yes · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.