Skip to main content
Glama

Remove work package watcher

remove_work_package_watcher
Idempotent

Unsubscribe a user from work package notifications to stop updates for those who no longer need them. Specify the work package and user ID to remove watch access.

Instructions

Unsubscribe a user from a work package's notifications.

Use this to stop notifying someone who no longer needs the updates. Returns the user, the watch state after the call (always not watching) and a confirmation message.

Pitfalls. OpenProject answers the same 204 whether or not the user was watching, so changed comes back null — do not report "removed" as proof that they were subscribed. Removing another user needs the delete-work-package-watchers permission; removing yourself only needs view access. A 404 means the user id is unknown (or the work package is), not that they were not watching. This does not unassign anyone and does not remove them from the project.

Cross-references: get_work_package(include=['watchers']) shows who watches today; add_work_package_watcher is the reverse.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
user_idYesNumeric id of the watcher to remove. get_work_package(include=['watchers']) lists the current watchers with their ids. The string 'me' is not accepted here.
work_package_idYesWork package to unsubscribe the user from. Ids come from search_work_packages, list_work_packages or get_work_package.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
userNoThe watcher. 'id' is the user id; 'name' is filled in only when OpenProject returned the user resource (it does on add, not on remove).
changedNoTrue when this call actually changed the watcher list, false when the user was already watching. Null when OpenProject does not report it — removals answer 204 whether or not the user was watching.
messageYesHuman-readable confirmation.
watchingYesWatch state after the call: true after adding, false after removing.
work_package_idYesWork package whose watcher list was changed.
Behavior5/5

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

The description goes far beyond annotations by disclosing critical behavioral nuances: the API returns 204 regardless of whether the user was actually watching, resulting in 'changed' being null; a 404 indicates an unknown user or work package, not non-membership; and the operation does not unassign or remove from project. These are exactly the kind of hidden behaviors agents need, and they complement the idempotentHint and destructiveHint annotations without contradiction.

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 longer than necessary but earns its length through crucial pitfalls and permission details. It is well-structured with a clear 'Pitfalls' section that is immediately relevant to safe execution. No sentence is wasted, though a more compressed format could have achieved the same impact.

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?

For a mutation tool with subtle API behaviors, the description covers all essential context: operation, return value (though output schema exists), permission requirements, error semantics, and cross-references to related tools. The presence of an output schema does not detract; the description adds the non-obvious 'changed is null' detail that the output schema alone would not convey.

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

Parameters3/5

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

The input schema already provides 100% coverage of both parameters, including how to obtain IDs and the rejection of 'me' for user_id. The description adds no new parameter-level meaning beyond what the schema states; it merely restates and contextualizes. Per the rubric, baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Unsubscribe a user from a work package's notifications.' This clearly distinguishes it from siblings like add_work_package_watcher and get_work_package, and the cross-reference to add_work_package_watcher as the reverse further cements its unique purpose.

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?

The description explicitly states when to use this tool ('Use this to stop notifying someone who no longer needs the updates'), provides permission prerequisites (removing others requires delete-work-package-watchers permission, self-removal requires view access), and names alternatives (get_work_package with include=['watchers'] for listing current watchers, add_work_package_watcher as the reverse). This fully covers usage context and exclusions.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kar-thik/openproject-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server