Skip to main content
Glama
freehire

freehire

by strelov1

update_subscription

Idempotent

Modify an existing job alert by ID, changing only the fields you provide—such as search filters, salary range, delivery channels, or paused status—to update alerts without recreating them.

Instructions

Change one of the person's job alerts by its id. Read its current search from list_subscriptions and pass only what changes — every field is optional: name; the search (query, filters, salary_min, salary_max — each replaces that part, an empty filters object clears the facet filters, a salary bound of 0 clears it; website-only filters in other are kept); channels (the full set to deliver on — added ones must be connected, missing ones stop); paused (true stops every channel, false resumes them — prefer it to unsubscribe for holding an alert). The new search must still narrow the catalogue, and unknown values are dropped and named in ignored_params. e.g. remote senior Go roles in the EU paying at least 80k EUR is {"filters":{"work_mode":["remote"],"seniority":["senior"],"skills":["go"],"regions":["eu"],"salary_currency":["EUR"]},"salary_min":80000}. Digest timing is account-wide and not changed here. A removed channel's record of matches is deleted with it.

Input Schema

NameRequiredDescriptionDefault
idYesThe alert id, from list_subscriptions or subscribe.
nameNoA new name (1-100 characters).
queryNoFree-text query, with the job search's operators.
pausedNotrue pauses every channel, false resumes them.
filtersNoFacet filters by param name (skills, seniority, category, work_mode, regions, countries, cities, metros, company_slug, employment_type, salary_currency, source, …), each a list of values. An unknown filter name is refused.
channelsNoThe complete set of channels to deliver on.
salary_maxNoOnly postings whose stated salary ceiling is at most this. 0 clears it on update.
salary_minNoOnly postings whose stated salary floor is at least this, in the posting's currency — pair it with filters.salary_currency. 0 clears it on update.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.8.0

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true), the description discloses rich behavioral details: empty filters clear facet filters, salary 0 clears a bound, website-only filters are kept, removed channels delete their match records, and unknown values are dropped and named in ignored_params. It also clarifies that digest timing is account-wide and unchanged, which an agent could not infer otherwise.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then layers parameter semantics logically. It is dense but every sentence carries useful information; the example earns its place. It is slightly long, but appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a complex mutation tool with nested filters and no output schema, the description covers clearing behavior, error handling via ignored_params, channel side effects, and account-wide constraints. Nothing an agent needs to call it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds substantial meaning beyond the schema: it explains replacement versus clearing semantics, distinguishes 'full set' channel behavior, and provides a concrete JSON example for a complex filter payload. This materially improves correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Change one of the person's job alerts by its id') and references list_subscriptions for reading the current state. It distinguishes this from subscribe and unsubscribe implicitly, though it does not explicitly differentiate from subscription_updates, leaving a minor ambiguity among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent to read the current search from list_subscriptions and pass only what changes, and it names a concrete alternative ('prefer it to unsubscribe for holding an alert'). The optional-field guidance and replacement semantics make when-to-use and how-to-invoke unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.