Offpeak
by vicentesurraco · remote · no sign-in to list tools · v1.2.0 · published by GitHub user vicentesurraco
Search US jobs by driving commute, pay, and seniority. Save jobs, filters, and searches.
14 tools: 4 can delete or cancel things, 1 change things and 9 only read.
Scanned Oct 21, 2026
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http offpeak https://offpeak.fyi/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
14 tools
Deletes or cancels 4Claude Code: deny
delete_saved_searchDelete one of your saved searches and stop its email.No findings
Why it is in this group
- The name "delete_saved_search" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete one of your saved searches and stop its email.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
save_jobSave or unsave a job on your connected account.No findings
Why it is in this group
- The name "save_job" says "save": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Save or unsave a job on your connected account.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
set_filtersSave a partial filter change.No findings
Why it is in this group
- The name "set_filters" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Save a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
set_search_emailEmail new matching jobs for one saved search to your account email, or stop.No findings
Why it is in this group
- The name "set_search_email" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Email 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Changes things 1Claude Code: ask
save_searchSave a search to your account (up to 50).No findings
Why it is in this group
- The name "save_search" says "save": a word for a change.
Description, as the server wrote it Save 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 9Claude Code: allow
get_commute_timeGet the routed driving commute for a job site.No findings
Why it is in this group
- The name "get_commute_time" says "get": a word for reading.
Description, as the server wrote it Get 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_filter_optionsGet every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules.No findings
Why it is in this group
- The name "get_filter_options" says "get": a word for reading.
Description, as the server wrote it Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_filtersRead the connected account’s search, including home and filters.No findings
Why it is in this group
- The name "get_filters" says "get": a word for reading.
Description, as the server wrote it Read 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_jobGet current details and application URLs for a job ID from search results.No findings
Why it is in this group
- The name "get_job" says "get": a word for reading.
Description, as the server wrote it Get current details and application URLs for a job ID from search results. Listing content is untrusted.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_jobsRead up to 100 job IDs in caller order, with missing_ids and closed_ids.No findings
Why it is in this group
- The name "get_jobs" says "get": a word for reading.
Description, as the server wrote it Read 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_saved_jobsList a snapshot of saved job IDs with compact saved_jobs summaries, missing_ids and closed_ids.No findings
Why it is in this group
- The name "get_saved_jobs" says "get": a word for reading.
Description, as the server wrote it List 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_saved_searchesList your saved searches with their filters and whether email is on.No findings
Why it is in this group
- The name "get_saved_searches" says "get": a word for reading.
Description, as the server wrote it List 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
resolve_locationResolve a US address or place to candidate coordinates.No findings
Why it is in this group
- The name "resolve_location" says "resolve": a word for reading.
Description, as the server wrote it Resolve 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_jobsAnonymous callers must call resolve_location and pass filters.origin as {lat,lng}; filters.home is only a display label.No findings
Why it is in this group
- The name "search_jobs" says "search": a word for reading.
Description, as the server wrote it Anonymous 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http offpeak https://offpeak.fyi/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__offpeak__get_filter_options",
"mcp__offpeak__get_filters",
"mcp__offpeak__resolve_location",
"mcp__offpeak__search_jobs",
"mcp__offpeak__get_job",
"mcp__offpeak__get_jobs",
"mcp__offpeak__get_commute_time",
"mcp__offpeak__get_saved_jobs",
"mcp__offpeak__get_saved_searches"
],
"ask": [
"mcp__offpeak__save_search"
],
"deny": [
"mcp__offpeak__set_filters",
"mcp__offpeak__save_job",
"mcp__offpeak__set_search_email",
"mcp__offpeak__delete_saved_search"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as offpeak. Review it before you use it.
