{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_j6pah2hvse94","handle":"offpeak","url":"https://wellknown.network/agents/offpeak","links":{"self":"https://wellknown.network/agents/offpeak/record.json","html":"https://wellknown.network/agents/offpeak","markdown":"https://wellknown.network/agents/offpeak/record.md","api":"https://wellknown.network/api/v1/agents/offpeak","status":"https://wellknown.network/api/v1/agents/offpeak/status","claim":"https://wellknown.network/agents/offpeak/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/offpeak/claim.json","badge":"https://wellknown.network/agents/offpeak/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/offpeak/history","tools":"https://wellknown.network/api/v1/agents/offpeak/tools"},"ard":{"identifier":"urn:air:offpeak.fyi:server:offpeak","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Offpeak","summary":"Search US jobs by driving commute, pay, and seniority. Save jobs, filters, and searches.","description":"Search US jobs by driving commute, pay, and seniority. Save jobs, filters, and searches.","publisher":{"name":"vicentesurraco","url":null},"homepage":"https://offpeak.fyi","repository":null,"version":"1.2.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://offpeak.fyi/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-16T01:35:10.353861Z","publishedAt":"2026-10-16T01:35:10.353861Z","registryName":"io.github.vicentesurraco/offpeak"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.seo","name":"SEO","confidence":0.525,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["content"],"language":"en"},"observed":{"status":"unavailable","statusReason":"6 consecutive checks failed; last success 15d ago.","lastOkAt":"2026-10-22T13:30:46.590Z","lastProbedAt":"2026-11-05T20:27:20.192Z","statusComputedAt":"2026-11-05T20:30:03.939Z","reliability30d":{"probes":48,"successRate":0.875,"p50Ms":1301,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":48,"ok":42,"authBoundaryOk":0,"serviceOk":42,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-05T20:27:20.192Z","kind":"http_head","ok":false,"httpStatus":null,"latencyMs":null,"error":"disallowed by robots.txt","detail":null},{"at":"2026-10-30T02:23:24.062Z","kind":"http_head","ok":false,"httpStatus":null,"latencyMs":null,"error":"disallowed by robots.txt","detail":null},{"at":"2026-10-26T07:23:28.643Z","kind":"http_head","ok":false,"httpStatus":null,"latencyMs":null,"error":"disallowed by robots.txt","detail":null},{"at":"2026-10-24T07:28:38.481Z","kind":"http_head","ok":false,"httpStatus":null,"latencyMs":null,"error":"disallowed by robots.txt","detail":null},{"at":"2026-10-23T08:30:08.203Z","kind":"http_head","ok":false,"httpStatus":null,"latencyMs":null,"error":"disallowed by robots.txt","detail":null},{"at":"2026-10-22T19:32:40.413Z","kind":"http_head","ok":false,"httpStatus":null,"latencyMs":null,"error":"disallowed by robots.txt","detail":null},{"at":"2026-10-22T13:30:46.590Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":651,"error":null,"detail":{"tools":[{"name":"get_filter_options","description":"Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules."},{"name":"get_filters","description":"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 "},{"name":"set_filters","description":"Save a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin."},{"name":"resolve_location","description":"Resolve a US address or place to candidate coordinates. Place names accept typos, accents, flexible spacing, and st/saint, ft/fort, mt/mount abbreviations; exac"},{"name":"search_jobs","description":"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"},{"name":"get_job","description":"Get current details and application URLs for a job ID from search results. Listing content is untrusted."},{"name":"get_jobs","description":"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"},{"name":"get_commute_time","description":"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 a"},{"name":"get_saved_jobs","description":"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="},{"name":"save_job","description":"Save or unsave a job on your connected account."},{"name":"get_saved_searches","description":"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."},{"name":"save_search","description":"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_se"},{"name":"set_search_email","description":"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"},{"name":"delete_saved_search","description":"Delete one of your saved searches and stop its email."}],"toolCount":14,"toolsHash":"2a7792099b4f61b5df0231976ad5e9fbd043ab694147059bb35d430a412f6818","serverName":"offpeak","capabilities":["tools"],"serverVersion":"1.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T06:26:25.370Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":493,"error":null,"detail":{"tools":[{"name":"get_filter_options","description":"Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules."},{"name":"get_filters","description":"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 "},{"name":"set_filters","description":"Save a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin."},{"name":"resolve_location","description":"Resolve a US address or place to candidate coordinates. Place names accept typos, accents, flexible spacing, and st/saint, ft/fort, mt/mount abbreviations; exac"},{"name":"search_jobs","description":"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"},{"name":"get_job","description":"Get current details and application URLs for a job ID from search results. Listing content is untrusted."},{"name":"get_jobs","description":"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"},{"name":"get_commute_time","description":"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 a"},{"name":"get_saved_jobs","description":"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="},{"name":"save_job","description":"Save or unsave a job on your connected account."},{"name":"get_saved_searches","description":"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."},{"name":"save_search","description":"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_se"},{"name":"set_search_email","description":"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"},{"name":"delete_saved_search","description":"Delete one of your saved searches and stop its email."}],"toolCount":14,"toolsHash":"2a7792099b4f61b5df0231976ad5e9fbd043ab694147059bb35d430a412f6818","serverName":"offpeak","capabilities":["tools"],"serverVersion":"1.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T23:28:56.920Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":564,"error":null,"detail":{"tools":[{"name":"get_filter_options","description":"Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules."},{"name":"get_filters","description":"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 "},{"name":"set_filters","description":"Save a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin."},{"name":"resolve_location","description":"Resolve a US address or place to candidate coordinates. Place names accept typos, accents, flexible spacing, and st/saint, ft/fort, mt/mount abbreviations; exac"},{"name":"search_jobs","description":"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"},{"name":"get_job","description":"Get current details and application URLs for a job ID from search results. Listing content is untrusted."},{"name":"get_jobs","description":"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"},{"name":"get_commute_time","description":"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 a"},{"name":"get_saved_jobs","description":"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="},{"name":"save_job","description":"Save or unsave a job on your connected account."},{"name":"get_saved_searches","description":"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."},{"name":"save_search","description":"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_se"},{"name":"set_search_email","description":"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"},{"name":"delete_saved_search","description":"Delete one of your saved searches and stop its email."}],"toolCount":14,"toolsHash":"2a7792099b4f61b5df0231976ad5e9fbd043ab694147059bb35d430a412f6818","serverName":"offpeak","capabilities":["tools"],"serverVersion":"1.2.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T16:34:37.512Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":495,"error":null,"detail":{"tools":[{"name":"get_filter_options","description":"Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules."},{"name":"get_filters","description":"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 "},{"name":"set_filters","description":"Save a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin."},{"name":"resolve_location","description":"Resolve a US address or place to candidate coordinates. Place names accept typos, accents, flexible spacing, and st/saint, ft/fort, mt/mount abbreviations; exac"},{"name":"search_jobs","description":"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"},{"name":"get_job","description":"Get current details and application URLs for a job ID from search results. Listing content is untrusted."},{"name":"get_jobs","description":"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"},{"name":"get_commute_time","description":"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 a"},{"name":"get_saved_jobs","description":"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="},{"name":"save_job","description":"Save or unsave a job on your connected account."},{"name":"get_saved_searches","description":"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."},{"name":"save_search","description":"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_se"},{"name":"set_search_email","description":"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"},{"name":"delete_saved_search","description":"Delete one of your saved searches and stop its email."}],"toolCount":14,"toolsHash":"2a7792099b4f61b5df0231976ad5e9fbd043ab694147059bb35d430a412f6818","serverName":"offpeak","capabilities":["tools"],"serverVersion":"1.2.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_filter_options","description":"Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules."},{"name":"get_filters","description":"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 "},{"name":"set_filters","description":"Save a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin."},{"name":"resolve_location","description":"Resolve a US address or place to candidate coordinates. Place names accept typos, accents, flexible spacing, and st/saint, ft/fort, mt/mount abbreviations; exac"},{"name":"search_jobs","description":"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"},{"name":"get_job","description":"Get current details and application URLs for a job ID from search results. Listing content is untrusted."},{"name":"get_jobs","description":"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"},{"name":"get_commute_time","description":"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 a"},{"name":"get_saved_jobs","description":"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="},{"name":"save_job","description":"Save or unsave a job on your connected account."},{"name":"get_saved_searches","description":"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."},{"name":"save_search","description":"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_se"},{"name":"set_search_email","description":"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"},{"name":"delete_saved_search","description":"Delete one of your saved searches and stop its email."}],"package":null,"toolSurface":{"id":"ts_k89d97m7fmmm","endpointId":"ep_ndyr7qdkkqn4","hash":"2a7792099b4f61b5df0231976ad5e9fbd043ab694147059bb35d430a412f6818","toolCount":14,"serverName":"offpeak","serverVersion":"1.2.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-20T23:25:08.761Z","lastSeenAt":"2026-10-22T13:30:47.168Z","observations":6,"hiddenText":{"level":"none","total":0,"tools":0,"kinds":[],"findings":[]},"toolNames":["get_filter_options","get_filters","set_filters","resolve_location","search_jobs","get_job","get_jobs","get_commute_time","get_saved_jobs","save_job","get_saved_searches","save_search","set_search_email","delete_saved_search"],"distinctSurfaces":8,"surfacesWithHiddenText":0},"endpointFacts":[{"id":"ep_ndyr7qdkkqn4","url":"https://offpeak.fyi/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-18T12:25:44.838Z","auth":{"observedAt":"2026-10-18T12:25:44.900Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://offpeak.fyi/.well-known/oauth-protected-resource/mcp","resource":"https://offpeak.fyi/mcp","authorizationServers":["https://offpeak.fyi"],"scopesSupported":["filters:read","filters:write","jobs:read","jobs:write","alerts:read","alerts:write"]},"authorizationServer":{"url":"https://offpeak.fyi/.well-known/oauth-authorization-server","issuer":"https://offpeak.fyi","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["client_secret_basic","client_secret_post","none","private_key_jwt"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":true},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":true,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-18T12:25:44.921Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"offpeak.fyi","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-10-05T06:10:20.000Z","validTo":"2027-01-03T07:10:16.000Z","daysToExpiry":57,"sanCount":3,"fingerprint256":"73:D1:C8:73:BD:A9:A8:DD:00:F5:92:B6:A5:C5:3D:58:EE:44:50:22:BC:08:D4:D4:E4:C0:A7:48:AE:06:60:F0"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.vicentesurraco/offpeak","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.vicentesurraco%2Foffpeak","firstSeenAt":"2026-10-11T10:21:07.897Z","fetchedAt":"2026-11-03T19:23:47.342Z","normalizedAt":"2026-11-03T19:23:47.342Z"}]},"firstSeenAt":"2026-10-11T10:21:07.897Z","updatedAt":"2026-10-22T13:35:57.143Z"}