Skip to main content
Glama

Set project favorite

set_project_favorite
Idempotent

Toggle a project's favorite status for an OpenProject user, adding or removing it from their personal favorites list.

Instructions

Add or remove a project from the authenticated user's favorites (OpenProject 17+).

Favorites are per user, not per project: this changes what the account behind OPENPROJECT_API_KEY sees starred on its own overview page, and nothing about the project itself or about anybody else's view. Use it when the user asks to pin, star or favorite a project they work in.

Returns {id, favorite, message}favorite is the state now in effect. The call is idempotent: favoriting an already-favorited project succeeds again.

Pitfalls: this endpoint only exists from OpenProject 17. When the instance reports a version older than that the call is REFUSED before anything is sent, with the detected version in the message, because there is no downgrade that would achieve the same thing — favorite the project in the web UI instead. When it reports no version at all the request IS sent, since an unreported version says nothing about the endpoint. A 404 is ambiguous on purpose in the hint: it means either the project does not exist for this account or the endpoint is missing. This is not project 'status' and not a work-package watcher.

Cross-references: list_projects(favorites_only=true) lists the current favorites (and works on older instances too); get_project resolves an identifier first; get_instance_info reports the detected OpenProject version.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
favoriteYestrue adds the project to the authenticated user's favorites, false removes it. Required — there is no toggle, so read the current state with list_projects(favorites_only=true) if you do not know it.
id_or_identifierYesNumeric project id or URL identifier to favorite or un-favorite; both are accepted and come from list_projects or get_project.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesProject id or identifier that was changed.
messageYesHuman-readable confirmation.
favoriteYesThe state now in effect: true when the project was favorited, false when the favorite was removed.
Behavior5/5

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

Beyond the annotations (idempotentHint, readOnlyHint=false, destructiveHint=false), the description discloses per-user scoping, idempotent success on repeated calls, version-specific refusal/send behavior, and the deliberate 404 ambiguity. There is no contradiction with the annotations; the description adds substantial context the structured data does not convey.

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 the calibration examples but well-structured with sections for purpose, use case, return value, pitfalls, and cross-references. Every sentence carries meaningful information; the version pitfalls and 404 ambiguity are necessary for correct use, though some phrasing could be tightened. It is front-loaded with the core action.

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 the tool's complexity (version dependency, ambiguous 404, per-user scope), the description is remarkably complete: it covers the return shape, behavioral nuances, fallback instructions, and cross-tool references. The output schema exists, but the description still adds valuable context about version-specific behavior and error interpretation, leaving no significant gap.

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

Parameters4/5

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

Both parameters are already fully described in the schema (100% coverage), so the baseline is 3. The description adds a small but useful cross-reference that id_or_identifier comes from list_projects or get_project, and clarifies that favorite is not a toggle, though the schema already says most of this. Overall it adds some value beyond the schema but does not need to compensate for gaps.

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 opening sentence states a specific verb ('Add or remove') and resource ('a project from the authenticated user's favorites'), making the action and scope unambiguous. It explicitly distinguishes itself from project status and work-package watchers, which are the closest sibling-tool concepts, so it is clearly differentiated.

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 provides an explicit trigger ('when the user asks to pin, star or favorite a project they work in'), names alternatives (list_projects for reading favorites, web UI for older instances), and states exclusions (not project status, not a watcher). This gives the agent clear decision rules for when to invoke the tool.

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