Tool tree
gradeNot graded
page: Every page
plan_job_workflowAction
Pass one required goal: complete_job_hunt, find_roles, compare_roles, save_search, monitor_search, manage_saved_search, prepare_application, withdraw_application_consent, enable_recovery, or recover_workspace. Search, compare, and prepare default to headless; use follow only when asked to open them. Jobbbler-managed email updates use monitor_search, not a client-side scheduler. Returns route-aware decision steps. Advisory only; grants nothing.
View tool JSON
{
"name": "plan_job_workflow",
"kind": "act",
"impl": "imperative",
"description": "Pass one required goal: complete_job_hunt, find_roles, compare_roles, save_search, monitor_search, manage_saved_search, prepare_application, withdraw_application_consent, enable_recovery, or recover_workspace. Search, compare, and prepare default to headless; use follow only when asked to open them. Jobbbler-managed email updates use monitor_search, not a client-side scheduler. Returns route-aware decision steps. Advisory only; grants nothing.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"goal": {
"type": "string",
"description": "The outcome to plan for.",
"enum": [
"complete_job_hunt",
"find_roles",
"compare_roles",
"save_search",
"monitor_search",
"manage_saved_search",
"prepare_application",
"withdraw_application_consent",
"enable_recovery",
"recover_workspace"
]
}
},
"required": [
"goal"
]
},
"page": "/"
}get_search_filtersAnswer
Read Jobbbler's exact search vocabulary: accepted categories, work models, seniorities, salary options, and sort orders. Use when an enum is unclear, not before every search; search_jobs already documents common values.
View tool JSON
{
"name": "get_search_filters",
"kind": "answer",
"impl": "imperative",
"description": "Read Jobbbler's exact search vocabulary: accepted categories, work models, seniorities, salary options, and sort orders. Use when an enum is unclear, not before every search; search_jobs already documents common values.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {}
},
"page": "/"
}search_jobsAnswer
Search Jobbbler's source-backed catalog directly. Do not use external job sources when the person asks for this site's tools. Pass only the criteria the person stated; leave categories, employmentTypes and unknownPolicy unset so nothing is narrowed silently. For ‘Berlin or remote’, pass locations=['Berlin'] with remoteOrLocations=true. Default headless keeps the page unchanged; use follow only when asked to watch. Results include IDs, salary, seniority, evidence, and a cursor.
View tool JSON
{
"name": "search_jobs",
"kind": "answer",
"impl": "imperative",
"description": "Search Jobbbler's source-backed catalog directly. Do not use external job sources when the person asks for this site's tools. Pass only the criteria the person stated; leave categories, employmentTypes and unknownPolicy unset so nothing is narrowed silently. For ‘Berlin or remote’, pass locations=['Berlin'] with remoteOrLocations=true. Default headless keeps the page unchanged; use follow only when asked to watch. Results include IDs, salary, seniority, evidence, and a cursor.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"remoteOrLocations": {
"const": true
}
},
"required": [
"remoteOrLocations"
]
},
"then": {
"required": [
"locations"
],
"properties": {
"locations": {
"minItems": 1
}
}
}
}
],
"properties": {
"query": {
"type": "string",
"description": "Technology role, skill, or outcome to search for.",
"maxLength": 500
},
"categories": {
"type": "array",
"description": "Technology job functions to include.",
"maxItems": 12,
"items": {
"type": "string",
"enum": [
"software_engineering",
"data_ai",
"product",
"design_research",
"security",
"infrastructure",
"quality_assurance",
"developer_relations",
"technical_support_success",
"technical_recruiting",
"tech_operations_sales"
]
}
},
"workModels": {
"type": "array",
"description": "Allowed work arrangements.",
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"remote",
"hybrid",
"onsite",
"flexible"
]
}
},
"employmentTypes": {
"type": "array",
"description": "Employment arrangements that matching roles must use.",
"maxItems": 5,
"items": {
"type": "string",
"enum": [
"full_time",
"part_time",
"contract",
"freelance",
"internship"
]
}
},
"seniorities": {
"type": "array",
"description": "Seniority levels to include.",
"maxItems": 9,
"items": {
"type": "string",
"enum": [
"entry",
"mid",
"senior",
"staff",
"principal",
"lead",
"manager",
"director",
"executive"
]
}
},
"locations": {
"type": "array",
"description": "Cities, countries, or regions to include. Do not use Remote as a place; use remoteOrLocations for requests such as ‘Berlin or remote’.",
"maxItems": 12,
"items": {
"type": "string",
"maxLength": 120
}
},
"remoteOrLocations": {
"type": "boolean",
"description": "Match listed locations OR remote roles anywhere. Requires a location; for remote-only, use workModels=['remote']."
},
"skills": {
"type": "array",
"description": "Technology skills to prefer in match ranking.",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 120
}
},
"excludeKeywords": {
"type": "array",
"description": "Keywords that must not appear in a matching role.",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 120
}
},
"salary": {
"type": "object",
"description": "Annual, monthly, or hourly compensation constraint.",
"additionalProperties": false,
"properties": {
"minimum": {
"type": "number",
"minimum": 0
},
"maximum": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"period": {
"type": "string",
"enum": [
"hour",
"month",
"year"
]
},
"unknownPolicy": {
"type": "string",
"enum": [
"include",
"exclude",
"only"
]
}
}
},
"postedWithinDays": {
"type": "integer",
"description": "Maximum age of a posting in days.",
"minimum": 1,
"maximum": 365
},
"sort": {
"type": "string",
"description": "Result ordering.",
"enum": [
"relevance",
"newest",
"updated_desc",
"salary_desc",
"salary_asc"
]
},
"cursor": {
"type": "string",
"description": "Opaque nextCursor from search_jobs; keep every other search criterion unchanged.",
"maxLength": 256
},
"limit": {
"type": "integer",
"description": "Fixed agent page size. Omit this field or pass 3 so nextCursor reaches every result.",
"minimum": 3,
"maximum": 3,
"default": 3
},
"presentation": {
"type": "string",
"description": "headless keeps the current page unchanged; follow opens and synchronizes the visible search.",
"enum": [
"headless",
"follow"
],
"default": "headless"
}
}
},
"page": "/"
}open_job_detailsAction
Navigate to a role returned by search_jobs while preserving the current criteria. Every Jobbbler tool stays registered across the navigation.
View tool JSON
{
"name": "open_job_details",
"kind": "act",
"impl": "imperative",
"description": "Navigate to a role returned by search_jobs while preserving the current criteria. Every Jobbbler tool stays registered across the navigation.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"jobId": {
"type": "string",
"description": "A job ID returned by search_jobs.",
"pattern": "^job_[0-9a-f-]{36}$"
}
},
"required": [
"jobId"
]
},
"page": "/"
}prepare_applicationAction
Use one job ID the person selected to create or reopen its private application and return the application ID, URL, and next tool. Default headless keeps the current page; use presentation=follow only when the person asks to open it. This grants no preparation authority, shares no candidate data, and submits nothing.
View tool JSON
{
"name": "prepare_application",
"kind": "act",
"impl": "imperative",
"description": "Use one job ID the person selected to create or reopen its private application and return the application ID, URL, and next tool. Default headless keeps the current page; use presentation=follow only when the person asks to open it. This grants no preparation authority, shares no candidate data, and submits nothing.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"jobId": {
"type": "string",
"description": "A job ID returned by search_jobs or get_job_details.",
"pattern": "^job_[0-9a-f-]{36}$"
},
"presentation": {
"type": "string",
"description": "headless keeps the current page unchanged; follow opens the application workspace.",
"enum": [
"headless",
"follow"
],
"default": "headless"
}
},
"required": [
"jobId"
]
},
"page": "/"
}get_applicationsAnswer
Use optional limit and offset with a current or recovered owner session to return application and job IDs, each application's page href, role details, status, update time, receipt availability, and nextOffset without returning answers, contact data, or credentials.
View tool JSON
{
"name": "get_applications",
"kind": "answer",
"impl": "imperative",
"description": "Use optional limit and offset with a current or recovered owner session to return application and job IDs, each application's page href, role details, status, update time, receipt availability, and nextOffset without returning answers, contact data, or credentials.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10,
"description": "Number of applications to return, from 1 to 20. Defaults to 10."
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "Zero-based offset into applications sorted newest first. Defaults to 0."
}
}
},
"page": "/"
}open_jobbbler_pageAction
Use a supported page name plus exact job or application IDs when required to open Search, Saved searches, Applications, the WebMCP guide, a comparison, or one application, and return the opened page and URL without changing stored data.
View tool JSON
{
"name": "open_jobbbler_page",
"kind": "act",
"impl": "imperative",
"description": "Use a supported page name plus exact job or application IDs when required to open Search, Saved searches, Applications, the WebMCP guide, a comparison, or one application, and return the opened page and URL without changing stored data.",
"inputSchema": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"page": {
"type": "string",
"enum": [
"search",
"saved",
"applications",
"webmcp_guide"
]
}
},
"required": [
"page"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"page": {
"type": "string",
"enum": [
"comparison"
]
},
"jobIds": {
"type": "array",
"minItems": 2,
"maxItems": 3,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^job_[0-9a-f-]{36}$"
}
}
},
"required": [
"page",
"jobIds"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"page": {
"type": "string",
"enum": [
"application"
]
},
"draftId": {
"type": "string",
"pattern": "^application_[0-9a-f-]{36}$"
}
},
"required": [
"page",
"draftId"
]
}
]
},
"page": "/"
}enable_workspace_recoveryAction
Use the current owner session and the person's exact email to start, then its challengeId and the six-digit code the person supplies to finish, returning only the phase and next tools; this is not data consent, not submission approval, and not email-update permission.
View tool JSON
{
"name": "enable_workspace_recovery",
"kind": "act",
"impl": "imperative",
"description": "Use the current owner session and the person's exact email to start, then its challengeId and the six-digit code the person supplies to finish, returning only the phase and next tools; this is not data consent, not submission approval, and not email-update permission.",
"inputSchema": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"start"
]
},
"email": {
"type": "string",
"format": "email",
"maxLength": 320,
"description": "Email explicitly supplied by the person for optional recovery."
}
},
"required": [
"action",
"email"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"complete"
]
},
"challengeId": {
"type": "string",
"pattern": "^challenge_[0-9a-f-]{36}$",
"description": "Exact challengeId returned by this tool's start action."
},
"code": {
"type": "string",
"pattern": "^[0-9]{6}$",
"description": "Six-digit code explicitly supplied by the person in the agent client."
}
},
"required": [
"action",
"challengeId",
"code"
]
}
]
},
"page": "/"
}recover_jobbbler_workspaceAction
Use the verified email the person supplies to start, then its exact recoveryId and six-digit code to finish, returning only the phase and next tools without exposing the email, code, owner, or session credential.
View tool JSON
{
"name": "recover_jobbbler_workspace",
"kind": "act",
"impl": "imperative",
"description": "Use the verified email the person supplies to start, then its exact recoveryId and six-digit code to finish, returning only the phase and next tools without exposing the email, code, owner, or session credential.",
"inputSchema": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"start"
]
},
"email": {
"type": "string",
"format": "email",
"maxLength": 320,
"description": "Verified email explicitly supplied by the person in the agent client."
}
},
"required": [
"action",
"email"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"complete"
]
},
"recoveryId": {
"type": "string",
"pattern": "^recovery_[0-9a-f-]{36}$",
"description": "Exact recoveryId returned by this tool's start action."
},
"code": {
"type": "string",
"pattern": "^[0-9]{6}$",
"description": "Six-digit code explicitly supplied by the person in the agent client."
}
},
"required": [
"action",
"recoveryId",
"code"
]
}
]
},
"page": "/"
}get_search_stateAnswer
Read the latest headless or visible search. Use detail=summary for a bounded explanation, or detail=exact for criteria accepted by save_job_search and request_search_alert. Returns whether the search is visible and never reruns it.
View tool JSON
{
"name": "get_search_state",
"kind": "answer",
"impl": "imperative",
"description": "Read the latest headless or visible search. Use detail=summary for a bounded explanation, or detail=exact for criteria accepted by save_job_search and request_search_alert. Returns whether the search is visible and never reruns it.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"detail": {
"type": "string",
"description": "summary for display; exact for criteria reusable by save_job_search or request_search_alert.",
"enum": [
"summary",
"exact"
]
}
}
},
"page": "/"
}get_job_detailsAnswer
Read one technology role's full description, requirements, provenance, compensation, known unknowns, and fit evidence. Pass the exact Jobbbler role ID in jobId. It works from any page and changes nothing.
View tool JSON
{
"name": "get_job_details",
"kind": "answer",
"impl": "imperative",
"description": "Read one technology role's full description, requirements, provenance, compensation, known unknowns, and fit evidence. Pass the exact Jobbbler role ID in jobId. It works from any page and changes nothing.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"jobId": {
"type": "string",
"description": "A Jobbbler job ID returned by search_jobs or another Jobbbler tool.",
"pattern": "^job_[0-9a-f-]{36}$"
}
},
"required": [
"jobId"
]
},
"page": "/"
}compare_jobsAction
Compare source-backed roles after two or three exact job IDs are known. Pass every selected ID in jobIds. Default headless keeps the current page; use presentation=follow only when the person asks to open the comparison. Never call it with one role; search or ask for the missing target first.
View tool JSON
{
"name": "compare_jobs",
"kind": "act",
"impl": "imperative",
"description": "Compare source-backed roles after two or three exact job IDs are known. Pass every selected ID in jobIds. Default headless keeps the current page; use presentation=follow only when the person asks to open the comparison. Never call it with one role; search or ask for the missing target first.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"jobIds": {
"type": "array",
"description": "Two or three distinct job IDs returned by Jobbbler tools.",
"minItems": 2,
"maxItems": 3,
"uniqueItems": true,
"items": {
"type": "string",
"description": "A Jobbbler job ID returned by search_jobs or another Jobbbler tool.",
"pattern": "^job_[0-9a-f-]{36}$"
}
},
"presentation": {
"type": "string",
"description": "headless keeps the current page unchanged; follow opens the visible comparison.",
"enum": [
"headless",
"follow"
],
"default": "headless"
}
},
"required": [
"jobIds"
]
},
"page": "/"
}get_comparisonAnswer
Read the current one-to-three-role comparison, including fit evidence, compensation, provenance, and unknowns. Use when the user asks about the comparison already open. If the person asks which role is best, which to keep, or which to remove without giving a ranking preference, ask for the person's ranking criteria instead of asking them to choose a role ID.
View tool JSON
{
"name": "get_comparison",
"kind": "answer",
"impl": "imperative",
"description": "Read the current one-to-three-role comparison, including fit evidence, compensation, provenance, and unknowns. Use when the user asks about the comparison already open. If the person asks which role is best, which to keep, or which to remove without giving a ranking preference, ask for the person's ranking criteria instead of asking them to choose a role ID.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {}
},
"page": "/"
}remove_job_from_comparisonAction
Remove a specified job from the comparison already open. Use only for a job ID in the visible set. This updates local page state and does not change server data.
View tool JSON
{
"name": "remove_job_from_comparison",
"kind": "act",
"impl": "imperative",
"description": "Remove a specified job from the comparison already open. Use only for a job ID in the visible set. This updates local page state and does not change server data.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"jobId": {
"type": "string",
"description": "A job ID present in the visible comparison.",
"pattern": "^job_[0-9a-f-]{36}$"
}
},
"required": [
"jobId"
]
},
"page": "/"
}add_job_to_comparisonAction
Add a job by ID to the comparison already open. The comparison holds at most three distinct roles; the visible page and URL update to include the new set.
View tool JSON
{
"name": "add_job_to_comparison",
"kind": "act",
"impl": "imperative",
"description": "Add a job by ID to the comparison already open. The comparison holds at most three distinct roles; the visible page and URL update to include the new set.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"jobId": {
"type": "string",
"description": "A job ID from search_jobs or get_job_details to add to this comparison.",
"pattern": "^job_[0-9a-f-]{36}$"
}
},
"required": [
"jobId"
]
},
"page": "/"
}get_saved_alertsAnswer
Use optional limit and offset with the current private owner to list saved searches newest first, returning each saved-search ID, email-update state, next check, and nextOffset without exposing an email address or sign-in information.
View tool JSON
{
"name": "get_saved_alerts",
"kind": "answer",
"impl": "imperative",
"description": "Use optional limit and offset with the current private owner to list saved searches newest first, returning each saved-search ID, email-update state, next check, and nextOffset without exposing an email address or sign-in information.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"limit": {
"type": "integer",
"description": "How many saved searches to return, from 1 to 6. If omitted, return 6.",
"minimum": 1,
"maximum": 6,
"default": 6
},
"offset": {
"type": "integer",
"description": "How many saved searches to skip, starting with the newest. If omitted, skip none.",
"minimum": 0,
"default": 0
}
}
},
"page": "/"
}request_search_alertAction
When the person asks Jobbbler to keep checking a search or email changes, ask in the agent client for any missing name, schedule, time zone, or email, then use the exact supplied values to return one review for approve or decline with decide_search_alert. This is server-side monitoring that continues after the browser closes; do not substitute client automation. Require a six-digit code only for a new email.
View tool JSON
{
"name": "request_search_alert",
"kind": "act",
"impl": "imperative",
"description": "When the person asks Jobbbler to keep checking a search or email changes, ask in the agent client for any missing name, schedule, time zone, or email, then use the exact supplied values to return one review for approve or decline with decide_search_alert. This is server-side monitoring that continues after the browser closes; do not substitute client automation. Require a six-digit code only for a new email.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "A short name the person will recognize for these email updates.",
"minLength": 1,
"maxLength": 100
},
"criteria": {
"type": "object",
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"remoteOrLocations": {
"const": true
}
},
"required": [
"remoteOrLocations"
]
},
"then": {
"required": [
"locations"
],
"properties": {
"locations": {
"minItems": 1
}
}
}
}
],
"properties": {
"query": {
"type": "string",
"description": "Technology role, skill, or outcome to search for.",
"maxLength": 500
},
"categories": {
"type": "array",
"description": "Technology job functions to include.",
"maxItems": 12,
"items": {
"type": "string",
"enum": [
"software_engineering",
"data_ai",
"product",
"design_research",
"security",
"infrastructure",
"quality_assurance",
"developer_relations",
"technical_support_success",
"technical_recruiting",
"tech_operations_sales"
]
}
},
"workModels": {
"type": "array",
"description": "Allowed work arrangements.",
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"remote",
"hybrid",
"onsite",
"flexible"
]
}
},
"employmentTypes": {
"type": "array",
"description": "Employment arrangements that matching roles must use.",
"maxItems": 5,
"items": {
"type": "string",
"enum": [
"full_time",
"part_time",
"contract",
"freelance",
"internship"
]
}
},
"seniorities": {
"type": "array",
"description": "Seniority levels to include.",
"maxItems": 9,
"items": {
"type": "string",
"enum": [
"entry",
"mid",
"senior",
"staff",
"principal",
"lead",
"manager",
"director",
"executive"
]
}
},
"locations": {
"type": "array",
"description": "Cities, countries, or regions to include. Do not use Remote as a place; use remoteOrLocations for requests such as ‘Berlin or remote’.",
"maxItems": 12,
"items": {
"type": "string",
"maxLength": 120
}
},
"remoteOrLocations": {
"type": "boolean",
"description": "Match listed locations OR remote roles anywhere. Requires a location; for remote-only, use workModels=['remote']."
},
"skills": {
"type": "array",
"description": "Technology skills to prefer in match ranking.",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 120
}
},
"excludeKeywords": {
"type": "array",
"description": "Keywords that must not appear in a matching role.",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 120
}
},
"salary": {
"type": "object",
"description": "Annual, monthly, or hourly compensation constraint.",
"additionalProperties": false,
"properties": {
"minimum": {
"type": "number",
"minimum": 0
},
"maximum": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"period": {
"type": "string",
"enum": [
"hour",
"month",
"year"
]
},
"unknownPolicy": {
"type": "string",
"enum": [
"include",
"exclude",
"only"
]
}
}
},
"postedWithinDays": {
"type": "integer",
"description": "Maximum age of a posting in days.",
"minimum": 1,
"maximum": 365
},
"sort": {
"type": "string",
"description": "Result ordering.",
"enum": [
"relevance",
"newest",
"updated_desc",
"salary_desc",
"salary_asc"
]
},
"cursor": {
"type": "string",
"description": "Opaque nextCursor from search_jobs; keep every other search criterion unchanged.",
"maxLength": 256
},
"limit": {
"type": "integer",
"description": "Number of visible results to request.",
"minimum": 1,
"maximum": 50
}
},
"description": "Search choices from search_jobs or the exact choices from get_search_state."
},
"recurrence": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"frequency": {
"type": "string",
"enum": [
"daily"
]
},
"time": {
"type": "string",
"description": "Time on the person's clock, written in 24-hour HH:mm form, for example 09:30.",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"timeZone": {
"type": "string",
"description": "Time zone name, for example Europe/Kyiv.",
"maxLength": 120
}
},
"required": [
"frequency",
"time",
"timeZone"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"frequency": {
"type": "string",
"enum": [
"weekly"
]
},
"time": {
"type": "string",
"description": "Time on the person's clock, written in 24-hour HH:mm form, for example 09:30.",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"timeZone": {
"type": "string",
"description": "Time zone name, for example Europe/Kyiv.",
"maxLength": 120
},
"days": {
"type": "array",
"description": "Days of the week to check. List each day only once.",
"minItems": 1,
"maxItems": 7,
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
]
}
}
},
"required": [
"frequency",
"time",
"timeZone",
"days"
]
}
]
},
"email": {
"type": "string",
"description": "Email address the person gave for job updates.",
"format": "email",
"maxLength": 320
}
},
"required": [
"name",
"criteria",
"recurrence",
"email"
]
},
"page": "/"
}decide_search_alertAction
Use the exact requestId and reviewToken from request_search_alert, the person's explicit approved or declined decision, and a six-digit code only when requested to return the decision and turn on only the unchanged reviewed updates.
View tool JSON
{
"name": "decide_search_alert",
"kind": "act",
"impl": "imperative",
"description": "Use the exact requestId and reviewToken from request_search_alert, the person's explicit approved or declined decision, and a six-digit code only when requested to return the decision and turn on only the unchanged reviewed updates.",
"inputSchema": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"requestId": {
"type": "string",
"description": "Copy the requestId returned by request_search_alert.",
"pattern": "^[a-z][a-z0-9_]*_[0-9a-f-]{36}$"
},
"reviewToken": {
"type": "string",
"description": "Copy the reviewToken returned by request_search_alert exactly as given.",
"maxLength": 4096
},
"decision": {
"type": "string",
"enum": [
"approved"
]
},
"code": {
"type": "string",
"description": "The 6-digit code sent to the person's email. Include it only when request_search_alert asks for it; otherwise leave it out.",
"pattern": "^\\d{6}$"
}
},
"required": [
"requestId",
"reviewToken",
"decision"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"requestId": {
"type": "string",
"description": "Copy the requestId returned by request_search_alert.",
"pattern": "^[a-z][a-z0-9_]*_[0-9a-f-]{36}$"
},
"reviewToken": {
"type": "string",
"description": "Copy the reviewToken returned by request_search_alert exactly as given.",
"maxLength": 4096
},
"decision": {
"type": "string",
"enum": [
"declined"
]
}
},
"required": [
"requestId",
"reviewToken",
"decision"
]
}
]
},
"page": "/"
}set_job_alert_stateAction
Pause or resume email updates with the scheduleId from get_saved_alerts or the savedSearchId of the search; delete permanently only with the exact savedSearchId and confirmation after the person clearly requests it, and return the resulting state or deletion receipt; an ambiguous stop request means pause, and more than one possible match requires a question.
View tool JSON
{
"name": "set_job_alert_state",
"kind": "act",
"impl": "imperative",
"description": "Pause or resume email updates with the scheduleId from get_saved_alerts or the savedSearchId of the search; delete permanently only with the exact savedSearchId and confirmation after the person clearly requests it, and return the resulting state or deletion receipt; an ambiguous stop request means pause, and more than one possible match requires a question.",
"inputSchema": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"pause"
],
"description": "Pause email updates. Keep the saved search."
},
"scheduleId": {
"type": "string",
"description": "The scheduleId returned by get_saved_alerts for this alert.",
"pattern": "^schedule_[0-9a-f-]{36}$"
},
"savedSearchId": {
"type": "string",
"description": "Alternatively, the savedSearchId returned by save_job_search or decide_search_alert; its alert is resolved for you.",
"pattern": "^saved_[0-9a-f-]{36}$"
}
},
"required": [
"action"
],
"anyOf": [
{
"required": [
"scheduleId"
]
},
{
"required": [
"savedSearchId"
]
}
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"resume"
],
"description": "Turn email updates back on for this paused alert."
},
"scheduleId": {
"type": "string",
"description": "The scheduleId returned by get_saved_alerts for this alert.",
"pattern": "^schedule_[0-9a-f-]{36}$"
},
"savedSearchId": {
"type": "string",
"description": "Alternatively, the savedSearchId returned by save_job_search or decide_search_alert; its alert is resolved for you.",
"pattern": "^saved_[0-9a-f-]{36}$"
}
},
"required": [
"action"
],
"anyOf": [
{
"required": [
"scheduleId"
]
},
{
"required": [
"savedSearchId"
]
}
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"action": {
"type": "string",
"enum": [
"delete"
],
"description": "Permanently delete one saved search and stop its email updates, if any."
},
"savedSearchId": {
"type": "string",
"description": "The savedSearchId returned by get_saved_alerts for this search.",
"pattern": "^saved_[0-9a-f-]{36}$"
},
"confirmation": {
"type": "string",
"enum": [
"DELETE_SAVED_SEARCH_AND_ALERT"
],
"description": "Use only after the person clearly asks to permanently delete this saved search and its email updates."
}
},
"required": [
"action",
"savedSearchId",
"confirmation"
]
}
]
},
"page": "/"
}open_saved_searchAction
Use a savedSearchId from get_saved_alerts to open its exact choices on the results page and return the opened route and saved-search ID without changing the criteria.
View tool JSON
{
"name": "open_saved_search",
"kind": "act",
"impl": "imperative",
"description": "Use a savedSearchId from get_saved_alerts to open its exact choices on the results page and return the opened route and saved-search ID without changing the criteria.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"savedSearchId": {
"type": "string",
"description": "The savedSearchId returned by get_saved_alerts for this search.",
"pattern": "^saved_[0-9a-f-]{36}$"
}
},
"required": [
"savedSearchId"
]
},
"page": "/"
}get_latest_search_updateAnswer
Use a savedSearchId plus optional limit and offset to return counts and a paged list of job IDs that are new, updated, closed, or no longer match since the latest check, including nextOffset when more changes remain.
View tool JSON
{
"name": "get_latest_search_update",
"kind": "answer",
"impl": "imperative",
"description": "Use a savedSearchId plus optional limit and offset to return counts and a paged list of job IDs that are new, updated, closed, or no longer match since the latest check, including nextOffset when more changes remain.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"savedSearchId": {
"type": "string",
"description": "The savedSearchId returned by get_saved_alerts for this search.",
"pattern": "^saved_[0-9a-f-]{36}$"
},
"limit": {
"type": "integer",
"description": "How many changed jobs to return, from 1 to 5. If omitted, return 5.",
"minimum": 1,
"maximum": 5,
"default": 5
},
"offset": {
"type": "integer",
"description": "How many changed jobs to skip. If omitted, skip none.",
"minimum": 0,
"default": 0
}
},
"required": [
"savedSearchId"
]
},
"page": "/"
}save_job_searchAction
Use a short name and exact choices the person supplied or get_search_state(detail=exact) to save and return a saved-search ID with email updates off; ask for missing values, and use request_search_alert instead when the person wants notifications.
View tool JSON
{
"name": "save_job_search",
"kind": "act",
"impl": "imperative",
"description": "Use a short name and exact choices the person supplied or get_search_state(detail=exact) to save and return a saved-search ID with email updates off; ask for missing values, and use request_search_alert instead when the person wants notifications.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "A short name the person will recognize for this saved search.",
"minLength": 1,
"maxLength": 100
},
"criteria": {
"type": "object",
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"remoteOrLocations": {
"const": true
}
},
"required": [
"remoteOrLocations"
]
},
"then": {
"required": [
"locations"
],
"properties": {
"locations": {
"minItems": 1
}
}
}
}
],
"properties": {
"query": {
"type": "string",
"description": "Technology role, skill, or outcome to search for.",
"maxLength": 500
},
"categories": {
"type": "array",
"description": "Technology job functions to include.",
"maxItems": 12,
"items": {
"type": "string",
"enum": [
"software_engineering",
"data_ai",
"product",
"design_research",
"security",
"infrastructure",
"quality_assurance",
"developer_relations",
"technical_support_success",
"technical_recruiting",
"tech_operations_sales"
]
}
},
"workModels": {
"type": "array",
"description": "Allowed work arrangements.",
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"remote",
"hybrid",
"onsite",
"flexible"
]
}
},
"employmentTypes": {
"type": "array",
"description": "Employment arrangements that matching roles must use.",
"maxItems": 5,
"items": {
"type": "string",
"enum": [
"full_time",
"part_time",
"contract",
"freelance",
"internship"
]
}
},
"seniorities": {
"type": "array",
"description": "Seniority levels to include.",
"maxItems": 9,
"items": {
"type": "string",
"enum": [
"entry",
"mid",
"senior",
"staff",
"principal",
"lead",
"manager",
"director",
"executive"
]
}
},
"locations": {
"type": "array",
"description": "Cities, countries, or regions to include. Do not use Remote as a place; use remoteOrLocations for requests such as ‘Berlin or remote’.",
"maxItems": 12,
"items": {
"type": "string",
"maxLength": 120
}
},
"remoteOrLocations": {
"type": "boolean",
"description": "Match listed locations OR remote roles anywhere. Requires a location; for remote-only, use workModels=['remote']."
},
"skills": {
"type": "array",
"description": "Technology skills to prefer in match ranking.",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 120
}
},
"excludeKeywords": {
"type": "array",
"description": "Keywords that must not appear in a matching role.",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 120
}
},
"salary": {
"type": "object",
"description": "Annual, monthly, or hourly compensation constraint.",
"additionalProperties": false,
"properties": {
"minimum": {
"type": "number",
"minimum": 0
},
"maximum": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"period": {
"type": "string",
"enum": [
"hour",
"month",
"year"
]
},
"unknownPolicy": {
"type": "string",
"enum": [
"include",
"exclude",
"only"
]
}
}
},
"postedWithinDays": {
"type": "integer",
"description": "Maximum age of a posting in days.",
"minimum": 1,
"maximum": 365
},
"sort": {
"type": "string",
"description": "Result ordering.",
"enum": [
"relevance",
"newest",
"updated_desc",
"salary_desc",
"salary_asc"
]
},
"cursor": {
"type": "string",
"description": "Opaque nextCursor from search_jobs; keep every other search criterion unchanged.",
"maxLength": 256
},
"limit": {
"type": "integer",
"description": "Number of visible results to request.",
"minimum": 1,
"maximum": 50
}
},
"description": "Search choices from search_jobs or the exact choices from get_search_state."
}
},
"required": [
"name",
"criteria"
]
},
"page": "/"
}get_application_readinessAnswer
Pass the application ID returned by prepare_application as draftId. Read safe completion counts, missing field keys and labels, receipt state, and the next useful action without returning private answers.
View tool JSON
{
"name": "get_application_readiness",
"kind": "answer",
"impl": "imperative",
"description": "Pass the application ID returned by prepare_application as draftId. Read safe completion counts, missing field keys and labels, receipt state, and the next useful action without returning private answers.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"draftId": {
"type": "string",
"description": "An application ID returned by prepare_application.",
"pattern": "^application_[0-9a-f-]{36}$"
}
},
"required": [
"draftId"
]
},
"page": "/"
}request_application_assistanceAction
Pass the application ID returned by prepare_application as draftId. The person's request to apply is the authority: assistance is granted at once, without a question, and propose_application_updates is the next step. Nothing is sent to an employer until the person approves the exact completed application.
View tool JSON
{
"name": "request_application_assistance",
"kind": "act",
"impl": "imperative",
"description": "Pass the application ID returned by prepare_application as draftId. The person's request to apply is the authority: assistance is granted at once, without a question, and propose_application_updates is the next step. Nothing is sent to an employer until the person approves the exact completed application.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"draftId": {
"type": "string",
"description": "An application ID returned by prepare_application.",
"pattern": "^application_[0-9a-f-]{36}$"
}
},
"required": [
"draftId"
]
},
"page": "/"
}decide_application_assistanceAction
Assistance is granted automatically; call this only when the person asks to stop the agent's help. Pass draftId, the requestId from request_application_assistance, and withdraw (or declined) to revoke active assistance bound to it; it never shares data or submits.
View tool JSON
{
"name": "decide_application_assistance",
"kind": "act",
"impl": "imperative",
"description": "Assistance is granted automatically; call this only when the person asks to stop the agent's help. Pass draftId, the requestId from request_application_assistance, and withdraw (or declined) to revoke active assistance bound to it; it never shares data or submits.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"draftId": {
"type": "string",
"description": "An application ID returned by prepare_application.",
"pattern": "^application_[0-9a-f-]{36}$"
},
"requestId": {
"type": "string",
"description": "The server-issued assistance request ID.",
"pattern": "^delegation_[0-9a-f-]{36}$"
},
"decision": {
"type": "string",
"description": "The person's explicit decision in the agent client.",
"enum": [
"approved",
"declined",
"withdraw"
]
}
},
"required": [
"draftId",
"requestId",
"decision"
]
},
"page": "/"
}propose_application_updatesAction
Pass draftId for the application and update up to 24 distinct fields from known facts in one call. For cover_letter, use the full role and local CV context but send only the finished letter. Ask once, in a single message, for every fact readiness reports as missing; skip optional fields the person never mentioned.
View tool JSON
{
"name": "propose_application_updates",
"kind": "act",
"impl": "imperative",
"description": "Pass draftId for the application and update up to 24 distinct fields from known facts in one call. For cover_letter, use the full role and local CV context but send only the finished letter. Ask once, in a single message, for every fact readiness reports as missing; skip optional fields the person never mentioned.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"draftId": {
"type": "string",
"description": "An application ID returned by prepare_application.",
"pattern": "^application_[0-9a-f-]{36}$"
},
"patches": {
"type": "array",
"description": "Answers from known facts only. For cover_letter, use get_job_details and local CV facts; send only the letter. Ask; never invent missing facts.",
"minItems": 1,
"maxItems": 24,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"fieldKey": {
"type": "string",
"description": "A field key reported by get_application_readiness.",
"maxLength": 64
},
"value": {
"type": "string",
"description": "A truthful answer written from supplied facts. A cover_letter should be complete and role-specific, not a generic motivation sentence.",
"maxLength": 10000
}
},
"required": [
"fieldKey",
"value"
]
}
}
},
"required": [
"draftId",
"patches"
]
},
"page": "/"
}request_submission_reviewAction
Pass draftId for the completed application. Freeze its exact field values and return them to the already-authorized agent client. Present every value before asking for one final decision. The review link is an optional browser fallback; this submits nothing.
View tool JSON
{
"name": "request_submission_review",
"kind": "act",
"impl": "imperative",
"description": "Pass draftId for the completed application. Freeze its exact field values and return them to the already-authorized agent client. Present every value before asking for one final decision. The review link is an optional browser fallback; this submits nothing.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"draftId": {
"type": "string",
"description": "An application ID returned by prepare_application.",
"pattern": "^application_[0-9a-f-]{36}$"
}
},
"required": [
"draftId"
]
},
"page": "/"
}decide_application_submissionSensitive Action
Pass draftId for the same application, the exact requestId and draftVersion returned by request_submission_review, and the person's explicit decision. Never approve on the person's behalf. On approval, store disclosure consent, seal the unchanged payload, submit once, and return a receipt; on decline, share and submit nothing.
View tool JSON
{
"name": "decide_application_submission",
"kind": "transact",
"impl": "imperative",
"description": "Pass draftId for the same application, the exact requestId and draftVersion returned by request_submission_review, and the person's explicit decision. Never approve on the person's behalf. On approval, store disclosure consent, seal the unchanged payload, submit once, and return a receipt; on decline, share and submit nothing.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"draftId": {
"type": "string",
"description": "An application ID returned by prepare_application.",
"pattern": "^application_[0-9a-f-]{36}$"
},
"requestId": {
"type": "string",
"description": "The review request ID returned by request_submission_review.",
"maxLength": 128
},
"draftVersion": {
"type": "integer",
"description": "The exact draft version returned with the review request.",
"minimum": 0
},
"decision": {
"type": "string",
"description": "The person's explicit decision in the agent client.",
"enum": [
"approved",
"declined"
]
}
},
"required": [
"draftId",
"requestId",
"draftVersion",
"decision"
]
},
"page": "/"
}withdraw_application_consentAction
Pass draftId for the owner-accessible application to immediately withdraw every live consent-based permission tied to it. This stops future processing under that consent; it does not erase the application or retract a submission already sent.
View tool JSON
{
"name": "withdraw_application_consent",
"kind": "act",
"impl": "imperative",
"description": "Pass draftId for the owner-accessible application to immediately withdraw every live consent-based permission tied to it. This stops future processing under that consent; it does not erase the application or retract a submission already sent.",
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"draftId": {
"type": "string",
"description": "An application ID returned by prepare_application.",
"pattern": "^application_[0-9a-f-]{36}$"
}
},
"required": [
"draftId"
]
},
"page": "/"
}