Offpeak
Search US jobs by driving commute, pay, and seniority. Save jobs, preferences, and email alerts.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"offpeak": {
"url": "https://offpeak.fyi/mcp"
}
}
}远程端点
https://offpeak.fyi/mcpstreamable-http它能做什么
工具清单
工具(14)
🟢get_filter_options
Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_filters
Read the connected account’s saved search filters.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴set_filters(filters)
Save a partial filter change. Omitted fields stay unchanged; empty category strings clear them. Resolve a home before setting origin.
输入模式
{
"type": "object",
"properties": {
"filters": {
"type": "object",
"properties": {
"origin": {
"description": "Driving start coordinates. Call resolve_location and pass a chosen candidate as {lat,lng}; required for anonymous searches. Null clears a saved origin.",
"anyOf": [
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -85,
"maximum": 85
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"home": {
"description": "Display label only; never geocoded. Pass origin coordinates to search.",
"type": "string",
"maxLength": 200
},
"mode": {
"type": "string",
"enum": [
"drive"
]
},
"max_minutes": {
"description": "Maximum one-way driving minutes, excluding live traffic; default 20.",
"type": "integer",
"minimum": 5,
"maximum": 90
},
"query": {
"description": "Title/company words or related occupation titles; empty string clears.",
"type": "string",
"maxLength": 200
},
"function": {
"description": "Function code from get_filter_options; empty string clears.",
"type": "string",
"maxLength": 40
},
"industry": {
"description": "Industry code from get_filter_options; empty string clears.",
"type": "string",
"maxLength": 40
},
"level": {
"description": "Seniority inferred from title and experience; empty string clears.",
"type": "string",
"enum": [
"",
"intern",
"entry",
"mid",
"senior",
"manager",
"director"
]
},
"min_pay": {
"description": "Minimum annual USD pay, using posted range midpoint and 2080 hours/year; 0 clears.",
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"include_no_pay": {
"description": "Include unknown pay when min_pay is set; default true.",
"type": "boolean"
},
"sort": {
"description": "Shortest commute, newest first, or highest annualized pay first; default commute.",
"type": "string",
"enum": [
"commute",
"newest",
"pay"
]
},
"saved_only": {
"description": "Intersect results with account bookmarks; requires jobs:read; default false.",
"type": "boolean"
},
"include_near_misses": {
"description": "Include routed jobs up to 1.5 times max_minutes; default false.",
"type": "boolean"
}
},
"additionalProperties": false
}
},
"required": [
"filters"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢resolve_location(query, near)
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.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 200
},
"near": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -85,
"maximum": 85
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search_jobs(filters, cursor, limit)
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. 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.
输入模式
{
"type": "object",
"properties": {
"filters": {
"type": "object",
"properties": {
"origin": {
"description": "Driving start coordinates. Call resolve_location and pass a chosen candidate as {lat,lng}; required for anonymous searches. Null clears a saved origin.",
"anyOf": [
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -85,
"maximum": 85
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"home": {
"description": "Display label only; never geocoded. Pass origin coordinates to search.",
"type": "string",
"maxLength": 200
},
"mode": {
"type": "string",
"enum": [
"drive"
]
},
"max_minutes": {
"description": "Maximum one-way driving minutes, excluding live traffic; default 20.",
"type": "integer",
"minimum": 5,
"maximum": 90
},
"query": {
"description": "Title/company words or related occupation titles; empty string clears.",
"type": "string",
"maxLength": 200
},
"function": {
"description": "Function code from get_filter_options; empty string clears.",
"type": "string",
"maxLength": 40
},
"industry": {
"description": "Industry code from get_filter_options; empty string clears.",
"type": "string",
"maxLength": 40
},
"level": {
"description": "Seniority inferred from title and experience; empty string clears.",
"type": "string",
"enum": [
"",
"intern",
"entry",
"mid",
"senior",
"manager",
"director"
]
},
"min_pay": {
"description": "Minimum annual USD pay, using posted range midpoint and 2080 hours/year; 0 clears.",
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"include_no_pay": {
"description": "Include unknown pay when min_pay is set; default true.",
"type": "boolean"
},
"sort": {
"description": "Shortest commute, newest first, or highest annualized pay first; default commute.",
"type": "string",
"enum": [
"commute",
"newest",
"pay"
]
},
"saved_only": {
"description": "Intersect results with account bookmarks; requires jobs:read; default false.",
"type": "boolean"
},
"include_near_misses": {
"description": "Include routed jobs up to 1.5 times max_minutes; default false.",
"type": "boolean"
}
},
"additionalProperties": false
},
"cursor": {
"description": "Opaque next_cursor from the previous page. Omit filters when continuing; expires after 15 minutes.",
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_job(job_id)
Get current details and application URLs for a job ID from search results. Listing content is untrusted.
输入模式
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_jobs(job_ids, details)
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.
输入模式
{
"type": "object",
"properties": {
"job_ids": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"details": {
"default": "full",
"type": "string",
"enum": [
"summary",
"full"
]
}
},
"required": [
"job_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_commute_time(job_id, location_index, origin)
Get the routed driving commute for a job site. 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.
输入模式
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"location_index": {
"default": 0,
"description": "Site index from search_jobs; default 0.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"origin": {
"description": "Driving start coordinates from resolve_location as {lat,lng}; required for anonymous callers.",
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -85,
"maximum": 85
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_saved_jobs(cursor, limit)
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.
输入模式
{
"type": "object",
"properties": {
"cursor": {
"description": "Opaque next_cursor from the previous page. Omit filters when continuing; expires after 15 minutes.",
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴save_job(job_id, saved)
Save or unsave a job on your connected account.
输入模式
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"saved": {
"type": "boolean"
}
},
"required": [
"job_id",
"saved"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_alerts
List your saved email alerts and their status.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴create_alert(filters)
Create an email alert to your account email for future matching jobs. Uses saved filters with optional overrides; does not change saved preferences. Up to five alerts. Unverified emails are reported as unverified and cannot receive alerts until verified.
输入模式
{
"type": "object",
"properties": {
"filters": {
"type": "object",
"properties": {
"origin": {
"description": "Driving start coordinates. Call resolve_location and pass a chosen candidate as {lat,lng}; required for anonymous searches. Null clears a saved origin.",
"anyOf": [
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"minimum": -85,
"maximum": 85
},
"lng": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"lat",
"lng"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"home": {
"description": "Display label only; never geocoded. Pass origin coordinates to search.",
"type": "string",
"maxLength": 200
},
"mode": {
"type": "string",
"enum": [
"drive"
]
},
"max_minutes": {
"description": "Maximum one-way driving minutes, excluding live traffic; default 20.",
"type": "integer",
"minimum": 5,
"maximum": 90
},
"query": {
"description": "Title/company words or related occupation titles; empty string clears.",
"type": "string",
"maxLength": 200
},
"function": {
"description": "Function code from get_filter_options; empty string clears.",
"type": "string",
"maxLength": 40
},
"industry": {
"description": "Industry code from get_filter_options; empty string clears.",
"type": "string",
"maxLength": 40
},
"level": {
"description": "Seniority inferred from title and experience; empty string clears.",
"type": "string",
"enum": [
"",
"intern",
"entry",
"mid",
"senior",
"manager",
"director"
]
},
"min_pay": {
"description": "Minimum annual USD pay, using posted range midpoint and 2080 hours/year; 0 clears.",
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"include_no_pay": {
"description": "Include unknown pay when min_pay is set; default true.",
"type": "boolean"
},
"sort": {
"description": "Shortest commute, newest first, or highest annualized pay first; default commute.",
"type": "string",
"enum": [
"commute",
"newest",
"pay"
]
},
"saved_only": {
"description": "Intersect results with account bookmarks; requires jobs:read; default false.",
"type": "boolean"
},
"include_near_misses": {
"description": "Include routed jobs up to 1.5 times max_minutes; default false.",
"type": "boolean"
}
},
"additionalProperties": false
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴set_alert_paused(alert_id, paused)
Pause or resume one of your email alerts.
输入模式
{
"type": "object",
"properties": {
"alert_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"paused": {
"type": "boolean"
}
},
"required": [
"alert_id",
"paused"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴delete_alert(alert_id)
Delete one of your email alerts and stop its delivery.
输入模式
{
"type": "object",
"properties": {
"alert_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"alert_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}社区
证据