{"serverId":"mcp-registry/co.getrefine/refine","tools":[{"name":"account.agenda","fixed":{"name":"account_agenda","description":"Get upcoming interviews and action items","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Upcoming agenda","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"account.agenda\" → \"account_agenda\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":52,"tokensAfter":52},{"name":"companies.submissions.create","fixed":{"name":"companies_submissions_create","description":"Submit a missing company using its public HTTPS careers URL, supplied or confirmed by the user. Refine detects supported sources and processes openings asynchronously. This adds to the shared index, not to Following. Use companies.submissions.get for progress; follow separately once company.id is available.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["company_name","careers_url"],"properties":{"careers_url":{"type":"string","format":"uri","maxLength":2048},"company_name":{"type":"string","maxLength":120,"minLength":1}}},"annotations":{"title":"Submit company","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"companies.submissions.create\" → \"companies_submissions_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":177,"tokensAfter":177},{"name":"companies.submissions.get","fixed":{"name":"companies_submissions_get","description":"Read company submission progress. queued/detecting/processing means wait; ready means search again using the company name. unsupported means the careers source is not supported; failed means processing failed. Do not claim the company was added or invent jobs while it is still working.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["submission_id"],"properties":{"submission_id":{"type":"string"}}},"annotations":{"title":"Company submission status","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"companies.submissions.get\" → \"companies_submissions_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"following.digest.get","fixed":{"name":"following_digest_get","description":"Read the user-wide Following email digest schedule. data is null if no schedule is configured. Company match filters are managed separately with following.update.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Following email schedule","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.digest.get\" → \"following_digest_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":88,"tokensAfter":88},{"name":"following.digest.update","fixed":{"name":"following_digest_update","description":"Set the user-wide Following email digest schedule after the user requests it. Requires Plus or Student. For a new schedule supply frequency, hour (0–23), timezone (IANA), and weekday (Sunday=0) when weekly. Existing schedules can be patched.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"hour":{"type":"integer","maximum":23,"minimum":0},"weekday":{"type":"integer","maximum":6,"minimum":0},"timezone":{"type":"string","minLength":1},"frequency":{"enum":["daily","weekly"],"type":"string"}}},"annotations":{"title":"Update Following email schedule","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.digest.update\" → \"following_digest_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"following.follow","fixed":{"name":"following_follow","description":"Follow an indexed company for future matching openings and company recommendations. Get company_id from Search, a ready submission, or a recommendation candidate_company.id. Specify at least one match; [{}] follows all new openings. This does not submit an unknown careers page or collect historical matches.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["company_id","filters"],"properties":{"filters":{"type":"array","items":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Role keyword groups: alternatives within a group (OR); every group must match (AND). Example: [[\"designer\", \"design\"], [\"senior\"]]."},"remote":{"type":["boolean","null"],"description":"true: remote only; false: on-site or hybrid; omitted/null: any workplace."},"markets":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Market slugs, when known. Do not invent slugs."},"companies":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Exact company names or slugs, not company IDs."},"locations":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Location alternatives, supplied as groups. Search matches any listed location."},"seniority":{"type":"array","items":{"enum":["intern","junior","mid","senior","staff","principal","manager","director","executive"],"type":"string"},"maxItems":20},"departments":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20},"include_unknown":{"type":"array","items":{"enum":["compensation","seniority","workplace","employment_type","department"],"type":"string"},"maxItems":5,"description":"Also include openings missing these fields when filtering by them."},"employment_types":{"type":"array","items":{"enum":["full_time","part_time","contract","internship","temporary"],"type":"string"},"maxItems":20},"posted_within_days":{"type":"integer","maximum":3650,"exclusiveMinimum":0},"compensation_maximum":{"type":"integer","maximum":9007199254740991,"description":"Maximum listed annual pay amount, not cents. Omit for no maximum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0},"compensation_minimum":{"type":"integer","maximum":9007199254740991,"description":"Minimum listed annual pay amount, not cents. Omit for no minimum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0}}},"minItems":1,"description":"Alternative matches (OR). Fields inside each match combine with AND. [{}] follows every new opening. This is the complete filter set, not a patch."},"company_id":{"type":"string"}}},"annotations":{"title":"Follow company","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.follow\" → \"following_follow\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":830,"tokensAfter":830},{"name":"following.list","fixed":{"name":"following_list","description":"List all followed companies, their filters, state, and unread counts. Returns the full list without pagination. Following delivers future matching openings; use Search to browse jobs already in the index.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Followed companies","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.list\" → \"following_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"following.openings.list","fixed":{"name":"following_openings_list","description":"Read matching openings from followed companies. tab defaults to unread. Use the row id for marking read and nested opening.id for opening details or adding to the board. meta.unread_count/read_count cover the selected follow or all companies before view filters; meta.filtered_count covers the current filtered tab.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"q":{"type":"string","description":"Search opening titles."},"tab":{"enum":["unread","read","all"],"type":"string","default":"unread"},"page":{"type":"string","description":"Pagination cursor returned as meta.next_page"},"limit":{"type":"integer","maximum":100,"description":"Maximum records to return","exclusiveMinimum":0},"location":{"type":"string","description":"Exact location facet or \"remote\"."},"follow_id":{"type":"string","description":"Follow ID from following.list, not company.id."},"department":{"type":"string"}}},"annotations":{"title":"Following openings","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.openings.list\" → \"following_openings_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":278,"tokensAfter":278},{"name":"following.openings.mark_all_read","fixed":{"name":"following_openings_mark_all_read","description":"Mark all unread openings as read for one follow, or every followed company if follow_id is omitted. Includes every page and openings hidden by view filters. Confirm the scope with the user first. The API returns no affected count; do not invent one.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["confirmed"],"properties":{"confirmed":{"type":"boolean","const":true},"follow_id":{"type":"string","description":"Follow ID from following.list, not company.id."}}},"annotations":{"title":"Mark all openings read","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.openings.mark_all_read\" → \"following_openings_mark_all_read\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"following.openings.mark_read","fixed":{"name":"following_openings_mark_read","description":"Mark one Following row as read. Use the row id from following.openings.list, not nested opening.id.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["follow_opening_id"],"properties":{"follow_opening_id":{"type":"string"}}},"annotations":{"title":"Mark opening read","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.openings.mark_read\" → \"following_openings_mark_read\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"following.pause","fixed":{"name":"following_pause","description":"Pause future matching openings for this follow without deleting it. This does not stop shared company indexing or pause other follows.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["follow_id"],"properties":{"follow_id":{"type":"string","description":"Follow ID from following.list, not company.id."}}},"annotations":{"title":"Pause follow","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.pause\" → \"following_pause\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":111,"tokensAfter":111},{"name":"following.resume","fixed":{"name":"following_resume","description":"Resume a paused company follow.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["follow_id"],"properties":{"follow_id":{"type":"string","description":"Follow ID from following.list, not company.id."}}},"annotations":{"title":"Resume follow","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.resume\" → \"following_resume\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"following.unfollow","fixed":{"name":"following_unfollow","description":"Unfollow a company and remove its Following feed and recommendation source. Confirm with the user first. Board jobs remain. To pause temporarily instead, use following.pause.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["follow_id","confirmed"],"properties":{"confirmed":{"type":"boolean","const":true},"follow_id":{"type":"string","description":"Follow ID from following.list, not company.id."}}},"annotations":{"title":"Unfollow company","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"following.unfollow\" → \"following_unfollow\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"following.update","fixed":{"name":"following_update","description":"Replace all match filters for a followed company. Other follow settings are unchanged. Pass [{}] for all new openings. Pending means the new filters are being applied; old unread counts may change.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["follow_id","filters"],"properties":{"filters":{"type":"array","items":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Role keyword groups: alternatives within a group (OR); every group must match (AND). Example: [[\"designer\", \"design\"], [\"senior\"]]."},"remote":{"type":["boolean","null"],"description":"true: remote only; false: on-site or hybrid; omitted/null: any workplace."},"markets":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Market slugs, when known. Do not invent slugs."},"companies":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Exact company names or slugs, not company IDs."},"locations":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Location alternatives, supplied as groups. Search matches any listed location."},"seniority":{"type":"array","items":{"enum":["intern","junior","mid","senior","staff","principal","manager","director","executive"],"type":"string"},"maxItems":20},"departments":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20},"include_unknown":{"type":"array","items":{"enum":["compensation","seniority","workplace","employment_type","department"],"type":"string"},"maxItems":5,"description":"Also include openings missing these fields when filtering by them."},"employment_types":{"type":"array","items":{"enum":["full_time","part_time","contract","internship","temporary"],"type":"string"},"maxItems":20},"posted_within_days":{"type":"integer","maximum":3650,"exclusiveMinimum":0},"compensation_maximum":{"type":"integer","maximum":9007199254740991,"description":"Maximum listed annual pay amount, not cents. Omit for no maximum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0},"compensation_minimum":{"type":"integer","maximum":9007199254740991,"description":"Minimum listed annual pay amount, not cents. Omit for no minimum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0}}},"minItems":1,"description":"Alternative matches (OR). Fields inside each match combine with AND. [{}] follows every new opening. This is the complete filter set, not a patch."},"follow_id":{"type":"string","description":"Follow ID from following.list, not company.id."}}},"annotations":{"title":"Update follow filters","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"following.update\" → \"following_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":816,"tokensAfter":816},{"name":"inbox.acknowledge","fixed":{"name":"inbox_acknowledge","description":"Keep auto-applied inbox items as-is and finalize the automatic action. Confirm the specific items with the user first.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["ids","confirmed"],"properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":200,"minItems":1,"description":"Inbox item ids to acknowledge"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms keeping these automatic actions"}}},"annotations":{"title":"Acknowledge inbox items","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"inbox.acknowledge\" → \"inbox_acknowledge\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":153,"tokensAfter":153},{"name":"inbox.apply_suggestion","fixed":{"name":"inbox_apply_suggestion","description":"Apply an inbox item's suggested action, such as adding an application to the board or recording a rejection. Confirm the specific action with the user first.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id","confirmed"],"properties":{"item_id":{"type":"string","description":"Inbox item id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms applying this suggestion"}}},"annotations":{"title":"Apply inbox suggestion","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"inbox.apply_suggestion\" → \"inbox_apply_suggestion\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":147,"tokensAfter":147},{"name":"inbox.decline","fixed":{"name":"inbox_decline","description":"Queue decline replies to recruiter outreach. Depending on the user's preference this SENDS email from their address. Only call after the user explicitly approved declining these specific conversations.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["ids","confirmed"],"properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":200,"minItems":1,"description":"Inbox item ids to decline"},"remember":{"type":"boolean","description":"Save the preference for future declines"},"confirmed":{"type":"boolean","const":true,"description":"Must be true, and only after the user explicitly approved declining these conversations"},"preference":{"enum":["always","review","never"],"type":"string","description":"Send preference to apply; omit to use the saved preference"}}},"annotations":{"title":"Decline conversations","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"inbox.decline\" → \"inbox_decline\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":242,"tokensAfter":242},{"name":"inbox.dismiss","fixed":{"name":"inbox_dismiss","description":"Dismiss inbox items you are not acting on (also marks the mail read in Gmail)","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["ids","confirmed"],"properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":200,"minItems":1,"description":"Inbox item ids to dismiss"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms dismissing these items and marking their mail read"}}},"annotations":{"title":"Dismiss inbox items","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"inbox.dismiss\" → \"inbox_dismiss\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":145,"tokensAfter":145},{"name":"inbox.draft_reply","fixed":{"name":"inbox_draft_reply","description":"Generate an AI reply draft for an inbox item. Returns HTML for review; it does not send anything.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id","kind"],"properties":{"kind":{"enum":["decline","interested"],"type":"string","description":"decline politely passes; interested asks to continue the conversation"},"item_id":{"type":"string","description":"Inbox item id"}}},"annotations":{"title":"Draft reply","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"inbox.draft_reply\" → \"inbox_draft_reply\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":133,"tokensAfter":133},{"name":"inbox.get","fixed":{"name":"inbox_get","description":"Get one inbox item with its related job and application","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id"],"properties":{"item_id":{"type":"string","description":"Inbox item id"}}},"annotations":{"title":"Inbox item","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"inbox.get\" → \"inbox_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"inbox.get_thread","fixed":{"name":"inbox_get_thread","description":"Fetch the full email thread for an inbox item","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id"],"properties":{"item_id":{"type":"string","description":"Inbox item id"}}},"annotations":{"title":"Email thread","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"inbox.get_thread\" → \"inbox_get_thread\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"inbox.list","fixed":{"name":"inbox_list","description":"List email conversations Refine matched to your job search (applications, interviews, recruiter outreach)","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"tab":{"enum":["applications","interviews","outreach"],"type":"string","description":"Which inbox tab to list; defaults to applications"},"page":{"type":"string","description":"Pagination cursor returned as meta.next_page"},"limit":{"type":"integer","maximum":100,"description":"Maximum records to return","exclusiveMinimum":0},"shelf":{"enum":["low_signal"],"type":"string","description":"For the outreach tab: show the low-signal shelf instead of the main feed"},"status":{"enum":["pending","auto","active","handled"],"type":"string","description":"pending needs a decision, auto was auto-applied, active has an open conversation, handled is done"},"unread":{"type":"boolean","description":"With status=active: only conversations with (or without) an unread reply"},"account":{"type":"string","description":"Filter to one connected Google account id"}}},"annotations":{"title":"List inbox","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"inbox.list\" → \"inbox_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":306,"tokensAfter":306},{"name":"inbox.mark_read","fixed":{"name":"inbox_mark_read","description":"Clear an inbox item's unread-reply flag","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id"],"properties":{"item_id":{"type":"string","description":"Inbox item id"}}},"annotations":{"title":"Mark read","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"inbox.mark_read\" → \"inbox_mark_read\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"inbox.refresh","fixed":{"name":"inbox_refresh","description":"Check Gmail for new mail now; returns per-account sync status","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Refresh inbox","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"inbox.refresh\" → \"inbox_refresh\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":58,"tokensAfter":58},{"name":"inbox.send_reply","fixed":{"name":"inbox_send_reply","description":"Send an email reply through the user's Gmail. This emails a real person from the user's address. Only call after the user has seen the exact message body and explicitly approved sending it.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id","body","confirmed"],"properties":{"body":{"type":"string","description":"HTML body of the reply, exactly as approved by the user"},"item_id":{"type":"string","description":"Inbox item id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true, and only after the user explicitly approved sending this exact message"},"draft_kind":{"enum":["decline","interested"],"type":"string","description":"Set when the body came from inbox.draft_reply"}}},"annotations":{"title":"Send reply","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"inbox.send_reply\" → \"inbox_send_reply\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":224,"tokensAfter":224},{"name":"inbox.sync_status","fixed":{"name":"inbox_sync_status","description":"Per-account Gmail synchronization status, including current progress and last sync time","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Inbox sync status","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"inbox.sync_status\" → \"inbox_sync_status\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":66,"tokensAfter":66},{"name":"inbox.undo","fixed":{"name":"inbox_undo","description":"Undo an auto-applied inbox action. This can delete a board record that the automatic action created, so confirm with the user first.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id","confirmed"],"properties":{"item_id":{"type":"string","description":"Inbox item id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms undoing the automatic action"}}},"annotations":{"title":"Undo inbox action","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"inbox.undo\" → \"inbox_undo\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"inbox.unsubscribe","fixed":{"name":"inbox_unsubscribe","description":"Unsubscribe the user from this sender's mailing list via one-click list-unsubscribe. This changes the user's real email subscriptions; confirm with them before calling. Use it for unwanted bulk senders, not for a person you can simply decline.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["item_id","confirmed"],"properties":{"item_id":{"type":"string","description":"Inbox item id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true, and only after the user explicitly approved unsubscribing from this sender"}}},"annotations":{"title":"Unsubscribe sender","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"inbox.unsubscribe\" → \"inbox_unsubscribe\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":177,"tokensAfter":177},{"name":"integrations.connect_google","fixed":{"name":"integrations_connect_google","description":"Get a link for the user to connect Gmail to Refine or approve a missing Gmail permission. Refine selects the permission needed for the connected account. The connection happens in the browser with no Refine sign-in required. Share the link only with the owner of this Refine account.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Connect Gmail","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"integrations.connect_google\" → \"integrations_connect_google\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"integrations.list","fixed":{"name":"integrations_list","description":"List connected Google accounts and their grant status. To connect a new account, use integrations.connect_google.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Connected accounts","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"integrations.list\" → \"integrations_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"jobs.add","fixed":{"name":"jobs_add","description":"Add a new job to your journey","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["title","company"],"properties":{"url":{"type":"string","format":"uri","description":"URL of the job posting"},"title":{"type":"string","description":"Job title"},"source":{"type":"string","description":"Where this job came from"},"company":{"type":"string","description":"Company name"},"location":{"type":"string","description":"Job location"},"description":{"type":"string","description":"Job description"},"qualifications":{"type":"string","description":"Job qualifications"},"compensation_text":{"type":"string","description":"Compensation text from the posting"}}},"annotations":{"title":"Add job","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.add\" → \"jobs_add\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":205,"tokensAfter":205},{"name":"jobs.archive","fixed":{"name":"jobs_archive","description":"Hide a job from the active board without recording a rejection or closing the application","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id"}}},"annotations":{"title":"Archive job","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.archive\" → \"jobs_archive\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"jobs.delete","fixed":{"name":"jobs_delete","description":"Permanently delete a job and its application from the board. Confirm with the user first; it cannot be undone. To hide a job without recording a rejection or closure, use jobs.archive instead.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","confirmed"],"properties":{"job_id":{"type":"string","description":"Job id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms permanent deletion"}}},"annotations":{"title":"Delete job","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"jobs.delete\" → \"jobs_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":149,"tokensAfter":149},{"name":"jobs.get","fixed":{"name":"jobs_get","description":"Get details of a specific job","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id"}}},"annotations":{"title":"Job details","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.get\" → \"jobs_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"jobs.interviews.add","fixed":{"name":"jobs_interviews_add","description":"Log an interview for a job","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","name"],"properties":{"name":{"type":"string","description":"Interview name, e.g. phone screen, technical, behavioral, onsite"},"notes":{"type":"string","description":"Notes or debrief from the interview"},"job_id":{"type":"string","description":"Job id"},"location":{"type":"string","description":"Location or meeting link"},"scheduled_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date/time with timezone"}}},"annotations":{"title":"Log interview","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.interviews.add\" → \"jobs_interviews_add\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":259,"tokensAfter":259},{"name":"jobs.interviews.delete","fixed":{"name":"jobs_interviews_delete","description":"Permanently delete an interview from a job. Confirm with the user first; it cannot be undone.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","interview_id","confirmed"],"properties":{"job_id":{"type":"string","description":"Job id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms permanent deletion"},"interview_id":{"type":"string","description":"Interview id"}}},"annotations":{"title":"Delete interview","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"jobs.interviews.delete\" → \"jobs_interviews_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":146,"tokensAfter":146},{"name":"jobs.interviews.update","fixed":{"name":"jobs_interviews_update","description":"Update an existing interview","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","interview_id"],"properties":{"name":{"type":"string","description":"Interview name, e.g. phone screen, technical, onsite"},"notes":{"type":"string","description":"Notes or debrief from the interview"},"job_id":{"type":"string","description":"Job id"},"rating":{"type":"integer","maximum":5,"minimum":1,"description":"Your rating of the interview, 1 to 5"},"outcome":{"enum":["passed","didnt_pass","pending_decision","withdrew","no_show","other"],"type":"string","description":"Interview outcome"},"feedback":{"type":"string","description":"Feedback received or given"},"location":{"type":"string","description":"Location or meeting link"},"next_action":{"type":"string","description":"The next step after this interview"},"cancelled_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 cancellation time with timezone"},"completed_at":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Completion date in YYYY-MM-DD format"},"interview_id":{"type":"string","description":"Interview id"},"interviewers":{"type":"string","description":"Names or roles of the interviewers"},"scheduled_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 date/time with timezone"},"cancelled_reason":{"type":"string","description":"Why the interview was cancelled"}}},"annotations":{"title":"Update interview","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.interviews.update\" → \"jobs_interviews_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":645,"tokensAfter":645},{"name":"jobs.list","fixed":{"name":"jobs_list","description":"List jobs in your journey","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"page":{"type":"string","description":"Pagination cursor returned as meta.next_page"},"limit":{"type":"integer","maximum":100,"description":"Maximum records to return","exclusiveMinimum":0}}},"annotations":{"title":"List jobs","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.list\" → \"jobs_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"jobs.mark_applied","fixed":{"name":"jobs_mark_applied","description":"Mark a job as applied","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id"}}},"annotations":{"title":"Mark applied","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"jobs.mark_applied\" → \"jobs_mark_applied\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":68,"tokensAfter":68},{"name":"jobs.offer.accept","fixed":{"name":"jobs_offer_accept","description":"Accept the offer for a job. This is a major state change that closes out the search for this role; confirm with the user before calling. It does not email the employer.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","confirmed"],"properties":{"job_id":{"type":"string","description":"Job id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms accepting the offer"}}},"annotations":{"title":"Accept offer","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"jobs.offer.accept\" → \"jobs_offer_accept\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"jobs.offer.add_negotiation","fixed":{"name":"jobs_offer_add_negotiation","description":"Log a negotiation event on an offer (counter-offer, update, etc.)","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","event_type"],"properties":{"notes":{"type":"string","description":"Notes about this negotiation event"},"job_id":{"type":"string","description":"Job id"},"event_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Event date in YYYY-MM-DD format"},"event_type":{"enum":["offer","counter"],"type":"string","description":"Whether the event records an employer offer or your counter"},"bonus_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Signing bonus in cents"},"equity_text":{"type":"string","minLength":1,"description":"Equity details (e.g. \"0.05% over 4 years\")"},"salary_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Salary in cents (e.g. 15000000 for $150k)"}}},"annotations":{"title":"Log negotiation event","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.offer.add_negotiation\" → \"jobs_offer_add_negotiation\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":331,"tokensAfter":331},{"name":"jobs.offer.create","fixed":{"name":"jobs_offer_create","description":"Record a job offer with compensation details","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"notes":{"type":"string","description":"Notes about the offer"},"job_id":{"type":"string","description":"Job id"},"currency":{"enum":["USD","EUR","GBP","CAD","AUD"],"type":"string","description":"Supported currency code"},"rsu_text":{"type":"string","minLength":1,"description":"RSU details as text"},"bonus_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Bonus in cents"},"deadline_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 offer deadline with timezone"},"equity_text":{"type":"string","minLength":1,"description":"Equity details as text"},"next_action":{"type":"string","description":"The next step on this offer"},"target_rsu_text":{"type":"string","description":"The RSUs you are negotiating toward, as text"},"initial_rsu_text":{"type":"string","description":"The originally offered RSUs as text"},"base_salary_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Base salary in cents (e.g. 15000000 for $150k)"},"target_bonus_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The bonus you are negotiating toward, in cents"},"target_equity_text":{"type":"string","description":"The equity you are negotiating toward, as text"},"initial_bonus_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The originally offered bonus in cents"},"initial_equity_text":{"type":"string","description":"The originally offered equity as text"},"target_salary_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The base salary you are negotiating toward, in cents"},"initial_salary_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The originally offered base salary in cents"}}},"annotations":{"title":"Record offer","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.offer.create\" → \"jobs_offer_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":638,"tokensAfter":638},{"name":"jobs.offer.decline","fixed":{"name":"jobs_offer_decline","description":"Decline the offer for a job, a major state change; confirm with the user first. It does not email the employer.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","confirmed"],"properties":{"job_id":{"type":"string","description":"Job id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms declining the offer"}}},"annotations":{"title":"Decline offer","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"jobs.offer.decline\" → \"jobs_offer_decline\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":129,"tokensAfter":129},{"name":"jobs.offer.delete","fixed":{"name":"jobs_offer_delete","description":"Permanently delete the offer recorded for a job (the job stays). Use only to fix a mistake, and confirm with the user first; it cannot be undone.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","confirmed"],"properties":{"job_id":{"type":"string","description":"Job id"},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms permanent deletion"}}},"annotations":{"title":"Delete offer","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"jobs.offer.delete\" → \"jobs_offer_delete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":138,"tokensAfter":138},{"name":"jobs.offer.delete_negotiation","fixed":{"name":"jobs_offer_delete_negotiation","description":"Remove a negotiation event from an offer","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id","event_id","confirmed"],"properties":{"job_id":{"type":"string","description":"Job id"},"event_id":{"type":"integer","maximum":9007199254740991,"description":"Negotiation event id","exclusiveMinimum":0},"confirmed":{"type":"boolean","const":true,"description":"Must be true after the user confirms deletion"}}},"annotations":{"title":"Delete negotiation event","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"jobs.offer.delete_negotiation\" → \"jobs_offer_delete_negotiation\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"jobs.offer.update","fixed":{"name":"jobs_offer_update","description":"Update the offer recorded for a job","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"notes":{"type":"string","description":"Notes about the offer"},"job_id":{"type":"string","description":"Job id"},"currency":{"enum":["USD","EUR","GBP","CAD","AUD"],"type":"string","description":"Supported currency code"},"rsu_text":{"type":"string","minLength":1,"description":"RSU details as text"},"bonus_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Bonus in cents"},"deadline_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO 8601 offer deadline with timezone"},"equity_text":{"type":"string","minLength":1,"description":"Equity details as text"},"next_action":{"type":"string","description":"The next step on this offer"},"target_rsu_text":{"type":"string","description":"The RSUs you are negotiating toward, as text"},"initial_rsu_text":{"type":"string","description":"The originally offered RSUs as text"},"base_salary_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Base salary in cents (e.g. 15000000 for $150k)"},"target_bonus_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The bonus you are negotiating toward, in cents"},"target_equity_text":{"type":"string","description":"The equity you are negotiating toward, as text"},"initial_bonus_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The originally offered bonus in cents"},"initial_equity_text":{"type":"string","description":"The originally offered equity as text"},"target_salary_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The base salary you are negotiating toward, in cents"},"initial_salary_cents":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"The originally offered base salary in cents"}}},"annotations":{"title":"Update offer","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.offer.update\" → \"jobs_offer_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":635,"tokensAfter":635},{"name":"jobs.refresh","fixed":{"name":"jobs_refresh","description":"Queue a job posting to be re-scraped. The returned job may remain pending; use jobs.get later to inspect the refreshed state.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id"}}},"annotations":{"title":"Re-scrape job","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.refresh\" → \"jobs_refresh\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"jobs.unarchive","fixed":{"name":"jobs_unarchive","description":"Restore an archived job to the active board","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"job_id":{"type":"string","description":"Job id"}}},"annotations":{"title":"Unarchive job","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.unarchive\" → \"jobs_unarchive\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"jobs.update","fixed":{"name":"jobs_update","description":"Update a job in your journey","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["job_id"],"properties":{"url":{"type":"string","format":"uri","description":"URL of the job posting"},"notes":{"type":"string","description":"Markdown notes about this application"},"title":{"type":"string","description":"Job title"},"job_id":{"type":"string","description":"Job id"},"source":{"type":"string","description":"Where this job came from"},"company":{"type":"string","description":"Company name"},"location":{"type":"string","description":"Job location"},"description":{"type":"string","description":"Job description"},"qualifications":{"type":"string","description":"Job qualifications"},"compensation_text":{"type":"string","description":"Compensation text from the posting"}}},"annotations":{"title":"Update job","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"jobs.update\" → \"jobs_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":239,"tokensAfter":239},{"name":"openings.add_to_board","fixed":{"name":"openings_add_to_board","description":"Add an indexed opening to the board after the user chooses it. Uses opening.id, not the Following row ID. Returns the existing board job if already added. This does not apply to the employer or send email; it also marks any matching Following item as read.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["opening_id"],"properties":{"opening_id":{"type":"string"}}},"annotations":{"title":"Add opening to board","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"openings.add_to_board\" → \"openings_add_to_board\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"openings.get","fixed":{"name":"openings_get","description":"Read an indexed opening, including its full description and qualifications. Use opening.id from Search or Following, not a follow-opening row ID.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["opening_id"],"properties":{"opening_id":{"type":"string"}}},"annotations":{"title":"Opening details","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"openings.get\" → \"openings_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":97,"tokensAfter":97},{"name":"persona.get","fixed":{"name":"persona_get","description":"Get the user's persona: inferred job-search preferences and traits with an understanding score. Use it to tailor advice and searches.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"title":"Get persona","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"persona.get\" → \"persona_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"recommendations.block","fixed":{"name":"recommendations_block","description":"Dismiss a recommended company and block it from future recommendations","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["recommendation_id"],"properties":{"recommendation_id":{"type":"string","description":"Recommendation id"}}},"annotations":{"title":"Block recommendation","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"recommendations.block\" → \"recommendations_block\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"recommendations.dismiss","fixed":{"name":"recommendations_dismiss","description":"Dismiss a recommended company","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["recommendation_id"],"properties":{"reason":{"type":"string","description":"Why it was dismissed; sharpens future recommendations"},"recommendation_id":{"type":"string","description":"Recommendation id"}}},"annotations":{"title":"Dismiss recommendation","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"recommendations.dismiss\" → \"recommendations_dismiss\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":108,"tokensAfter":108},{"name":"recommendations.feedback","fixed":{"name":"recommendations_feedback","description":"Record recommendation feedback to improve future suggestions. The historical feedback tag \"watched\" records that a company was followed; it does not create a follow. Use following.follow first. Dismiss/block/restore actions are separate tools.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["recommendation_id","feedback_types"],"properties":{"feedback_types":{"type":"array","items":{"enum":["watched","dismissed","more_like_this","prefer_startups_growth","prefer_public_companies","too_similar","too_different","wrong_market","wrong_industry","wrong_role_fit","already_know","not_enough_signal","not_interested"],"type":"string"},"minItems":1,"description":"One or more supported feedback tags"},"recommendation_id":{"type":"string","description":"Recommendation id"},"interaction_source":{"type":"string","description":"Where the feedback came from in the UI or agent flow"}}},"annotations":{"title":"Recommendation feedback","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"recommendations.feedback\" → \"recommendations_feedback\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":274,"tokensAfter":274},{"name":"recommendations.get","fixed":{"name":"recommendations_get","description":"Get one recommended company with sources and persona fit","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["recommendation_id"],"properties":{"recommendation_id":{"type":"string","description":"Recommendation id"}}},"annotations":{"title":"Recommendation details","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"recommendations.get\" → \"recommendations_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"recommendations.list","fixed":{"name":"recommendations_list","description":"Discover companies recommended from the companies you follow. Optionally filter by source_company_id (company.id from following.list, not a follow ID). Returns one flat list plus per-source counts. To follow a recommendation, use following.follow with candidate_company.id and your chosen filters.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"page":{"type":"string","description":"Pagination cursor returned as meta.next_page"},"limit":{"type":"integer","maximum":100,"description":"Maximum records to return","exclusiveMinimum":0},"source_company_id":{"type":"string","description":"Company ID of a followed company."}}},"annotations":{"title":"List recommendations","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"recommendations.list\" → \"recommendations_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":202,"tokensAfter":202},{"name":"recommendations.restore","fixed":{"name":"recommendations_restore","description":"Restore a dismissed or blocked recommendation","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["recommendation_id"],"properties":{"recommendation_id":{"type":"string","description":"Recommendation id"}}},"annotations":{"title":"Restore recommendation","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"recommendations.restore\" → \"recommendations_restore\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"search.company_openings","fixed":{"name":"search_company_openings","description":"Read all matching jobs for a company in a ready search, not just its three preview jobs. Continue with data.next_page until null. Use company.id from the search results.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["search_id","company_id"],"properties":{"page":{"type":"integer","maximum":9007199254740991,"description":"Numeric results page from results.next_page; not a cursor.","exclusiveMinimum":0},"sort":{"enum":["relevance","newest","highest_pay"],"type":"string"},"search_id":{"type":"string"},"company_id":{"type":"string"}}},"annotations":{"title":"Company search openings","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"search.company_openings\" → \"search_company_openings\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":179,"tokensAfter":179},{"name":"search.create","fixed":{"name":"search_create","description":"Search indexed jobs or companies. Supply input OR query, not both. Natural-language searches return a search ID and processing state: use search.get later, without rapid polling. Keep the ID to paginate or update this same search. Empty query {} is All openings, currently sorted by newest without persona personalization.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"page":{"type":"integer","maximum":9007199254740991,"description":"Numeric results page from results.next_page; not a cursor.","exclusiveMinimum":0},"sort":{"enum":["relevance","newest","highest_pay"],"type":"string"},"view":{"enum":["jobs","companies"],"type":"string"},"input":{"type":"string","maxLength":500,"minLength":1,"description":"Natural-language search, processed asynchronously. Omit when supplying query."},"query":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Role keyword groups: alternatives within a group (OR); every group must match (AND). Example: [[\"designer\", \"design\"], [\"senior\"]]."},"remote":{"type":["boolean","null"],"description":"true: remote only; false: on-site or hybrid; omitted/null: any workplace."},"markets":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Market slugs, when known. Do not invent slugs."},"companies":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Exact company names or slugs, not company IDs."},"locations":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Location alternatives, supplied as groups. Search matches any listed location."},"seniority":{"type":"array","items":{"enum":["intern","junior","mid","senior","staff","principal","manager","director","executive"],"type":"string"},"maxItems":20},"departments":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20},"include_unknown":{"type":"array","items":{"enum":["compensation","seniority","workplace","employment_type","department"],"type":"string"},"maxItems":5,"description":"Also include openings missing these fields when filtering by them."},"employment_types":{"type":"array","items":{"enum":["full_time","part_time","contract","internship","temporary"],"type":"string"},"maxItems":20},"posted_within_days":{"type":"integer","maximum":3650,"exclusiveMinimum":0},"compensation_maximum":{"type":"integer","maximum":9007199254740991,"description":"Maximum listed annual pay amount, not cents. Omit for no maximum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0},"compensation_minimum":{"type":"integer","maximum":9007199254740991,"description":"Minimum listed annual pay amount, not cents. Omit for no minimum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0}},"description":"Structured filters. Use {} for All openings; results are immediately available."}}},"annotations":{"title":"Create search","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"search.create\" → \"search_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":902,"tokensAfter":902},{"name":"search.get","fixed":{"name":"search_get","description":"Read a search and its results, switch jobs/companies view, or fetch results.next_page. Pending/interpreting/processing means it is still working: do not create another search or poll rapidly. If missing_company_name is set, ask for its careers URL and use companies.submissions.create. Company rows contain samples, not all matching jobs.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["search_id"],"properties":{"page":{"type":"integer","maximum":9007199254740991,"description":"Numeric results page from results.next_page; not a cursor.","exclusiveMinimum":0},"sort":{"enum":["relevance","newest","highest_pay"],"type":"string"},"view":{"enum":["jobs","companies"],"type":"string"},"search_id":{"type":"string"}}},"annotations":{"title":"Search results","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"search.get\" → \"search_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":224,"tokensAfter":224},{"name":"search.update","fixed":{"name":"search_update","description":"Update the existing search instead of creating another. Supply input OR the complete replacement query; omitted filters are cleared. Wait until the current search is ready or failed before updating it.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["search_id"],"properties":{"page":{"type":"integer","maximum":9007199254740991,"description":"Numeric results page from results.next_page; not a cursor.","exclusiveMinimum":0},"sort":{"enum":["relevance","newest","highest_pay"],"type":"string"},"view":{"enum":["jobs","companies"],"type":"string"},"input":{"type":"string","maxLength":500,"minLength":1,"description":"Natural-language search, processed asynchronously. Omit when supplying query."},"query":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Role keyword groups: alternatives within a group (OR); every group must match (AND). Example: [[\"designer\", \"design\"], [\"senior\"]]."},"remote":{"type":["boolean","null"],"description":"true: remote only; false: on-site or hybrid; omitted/null: any workplace."},"markets":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Market slugs, when known. Do not invent slugs."},"companies":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20,"description":"Exact company names or slugs, not company IDs."},"locations":{"type":"array","items":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":40,"minItems":1},"maxItems":20,"description":"Location alternatives, supplied as groups. Search matches any listed location."},"seniority":{"type":"array","items":{"enum":["intern","junior","mid","senior","staff","principal","manager","director","executive"],"type":"string"},"maxItems":20},"departments":{"type":"array","items":{"type":"string","maxLength":100,"minLength":1},"maxItems":20},"include_unknown":{"type":"array","items":{"enum":["compensation","seniority","workplace","employment_type","department"],"type":"string"},"maxItems":5,"description":"Also include openings missing these fields when filtering by them."},"employment_types":{"type":"array","items":{"enum":["full_time","part_time","contract","internship","temporary"],"type":"string"},"maxItems":20},"posted_within_days":{"type":"integer","maximum":3650,"exclusiveMinimum":0},"compensation_maximum":{"type":"integer","maximum":9007199254740991,"description":"Maximum listed annual pay amount, not cents. Omit for no maximum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0},"compensation_minimum":{"type":"integer","maximum":9007199254740991,"description":"Minimum listed annual pay amount, not cents. Omit for no minimum. The index does not convert currencies; check compensation.currency in results.","exclusiveMinimum":0}},"description":"Structured filters. Use {} for All openings; results are immediately available."},"search_id":{"type":"string"}}},"annotations":{"title":"Update search","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"search.update\" → \"search_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":884,"tokensAfter":884}],"toolsChanged":62,"tokensSaved":0,"todo":[{"tool":"companies_submissions_create","params":["careers_url","company_name"]},{"tool":"companies_submissions_get","params":["submission_id"]},{"tool":"following_digest_update","params":["hour","weekday","timezone","frequency"]},{"tool":"following_follow","params":["company_id"]},{"tool":"following_openings_list","params":["tab","department"]},{"tool":"following_openings_mark_all_read","params":["confirmed"]},{"tool":"following_openings_mark_read","params":["follow_opening_id"]},{"tool":"following_unfollow","params":["confirmed"]},{"tool":"openings_add_to_board","params":["opening_id"]},{"tool":"openings_get","params":["opening_id"]},{"tool":"search_company_openings","params":["sort","search_id","company_id"]},{"tool":"search_create","params":["sort","view"]},{"tool":"search_get","params":["sort","view","search_id"]},{"tool":"search_update","params":["sort","view","search_id"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}