Skip to main content
Glama

list_capabilities

Read-onlyIdempotent

Lists API capabilities exposed by OpenProject for a given project or capability ID, requiring a scope to respect project read allowlists and avoid unfiltered global listings.

Instructions

List API capabilities exposed by OpenProject.

At least one of project or capability_id is required; there is no unfiltered global listing, since one would bypass the project read allowlist.

Input Schema

NameRequiredDescriptionDefault
limitNoPage size, capped at OPENPROJECT_MAX_PAGE_SIZE.
offsetNo1-based page number; pass the previous result's next_offset.
selectNoFields to return; a requested unset field comes back as null. Allowed: action_id, context, id, principal_id, principal_name, url.
projectNoProject identifier, id, or name; a unique part of a name or identifier also matches.
capability_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.4.4
  2. Removedv0.4.0
  3. Changed1 schema field changedv0.3.7
    • addedInput schema / additionalProperties
      Added value: +false
  4. Addedv0.3.3
  5. Removedv0.3.0
  6. Changed1 schema field changedv0.2.3
    • changedOutput schema / (root)
      Previous value: -{
      -  "$defs": {
      -    "CapabilitySummary": {
      -      "properties": {
      -        "action_id": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "title": "Action Id"
      -        },
      -        "action_name": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "title": "Action Name"
      -        },
      -        "context": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "title": "Context"
      -        },
      -        "id": {
      -          "title": "Id",
      -          "type": "string"
      -        },
      -        "name": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "title": "Name"
      -        },
      -        "principal_id": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "title": "Principal Id"
      -        },
      -        "principal_name": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "title": "Principal Name"
      -        },
      -        "url": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ],
      -          "title": "Url"
      -        }
      -      },
      -      "required": [
      -        "id",
      -        "name",
      -        "action_id",
      -        "action_name",
      -        "principal_id",
      -        "principal_name",
      -        "context",
      -        "url"
      -      ],
      -      "title": "CapabilitySummary",
      -      "type": "object"
      -    }
      -  },
      -  "properties": {
      -    "count": {
      -      "title": "Count",
      -      "type": "integer"
      -    },
      -    "limit": {
      -      "title": "Limit",
      -      "type": "integer"
      -    },
      -    "next_offset": {
      -      "anyOf": [
      -        {
      -          "type": "integer"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "title": "Next Offset"
      -    },
      -    "offset": {
      -      "title": "Offset",
      -      "type": "integer"
      -    },
      -    "results": {
      -      "items": {
      -        "$ref": "#/$defs/CapabilitySummary"
      -      },
      -      "title": "Results",
      -      "type": "array"
      -    },
      -    "total": {
      -      "title": "Total",
      -      "type": "integer"
      -    },
      -    "truncated": {
      -      "title": "Truncated",
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "offset",
      -    "limit",
      -    "total",
      -    "count",
      -    "next_offset",
      -    "truncated",
      -    "results"
      -  ],
      -  "title": "CapabilityListResult",
      -  "type": "object"
      -}New value: +null
  7. First observedv0.2.2

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds non-obvious policy behavior the annotations do not: a required scoping filter and the reason (bypassing the project read allowlist). That is real added context, though it says nothing about result size or pagination behavior beyond what the schema provides.

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?

Two short sentences, the scoping rule front-loaded, and the rationale for the restriction tucked behind it. Efficient, though the trailing motivation clause is slightly explanatory for what is essentially one constraint.

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

Completeness3/5

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

There is no output schema, and the description never explains what a 'capability' record contains (the select enum hints at action_id, principal_id, context) or what the list is typically used for. The access-control constraint is covered, but an agent gets little sense of the returned data.

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?

Schema coverage is 80% and project/limit/offset/select are well documented there, but the schema declares zero required parameters while the description imposes a conditional requirement tying project and capability_id together — a semantic rule that exists nowhere in the schema. capability_id itself remains undocumented, which caps it below 5.

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?

States a specific verb and resource ("List API capabilities exposed by OpenProject"), which is clearly distinct from the many list_* siblings such as list_actions or list_roles. It doesn't explicitly differentiate from any named sibling, keeping it just short of a 5.

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

Usage Guidelines3/5

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

Gives a firm usage constraint — at least one of project or capability_id must be supplied, and no global unfiltered listing exists — which is genuinely useful. However, it never says when to reach for this tool versus alternatives (e.g. list_actions for global action lists), so the guidance is only partially complete.

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

Deploy Server

Other Tools