Offpeak

Search US jobs by driving commute, pay, and seniority. Save jobs, preferences, and email alerts.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
97%
Integridad del esquema
69%
Calidad de los nombres
99%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,360Tokens (definiciones de herramientas)
~2.1 KBTamaño de respuesta típico
Impacto significativo en la atención (2.63% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "offpeak": {
      "url": "https://offpeak.fyi/mcp"
    }
  }
}

Puntos de conexión remotos

https://offpeak.fyi/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (14)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢get_filter_options

Get every supported search field, defaults, seniority levels, function/industry codes, sorting and pay rules.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_filters

Read the connected account’s saved search filters.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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.

Esquema de entrada

{
  "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
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada14 herramientas