Skip to main content
Glama

Gitlab List Issues

gitlab_list_issues
Read-onlyIdempotent

Search issues in a GitLab project by project ID. Returns issue ID, title, state (open/closed), labels, assignee, and URL. Filter by status and labels.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
stateNoFilter by state: "opened", "closed", or "all" (default: "opened")
searchNoSearch issues by title or description
_apiKeyYesGitLab personal access token
per_pageNoNumber of issues to return (default 20, max 100)
project_idYesProject ID (numeric) or full path "namespace/project" (e.g. "gitlab-org/gitlab") — pass the plain path, do not URL-encode it.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
issuesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / project_id / description
      Previous value: -"Project ID or URL-encoded path"New value: +"Project ID (numeric) or full path \"namespace/project\" (e.g. \"gitlab-org/gitlab\") — pass the plain path, do not URL-encode it."
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "issues": {
      +      "items": {
      +        "properties": {
      +          "assignee": {
      +            "description": "Assignee username",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "author": {
      +            "description": "Author username",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "created_at": {
      +            "description": "Creation timestamp",
      +            "type": "string"
      +          },
      +          "iid": {
      +            "description": "Issue internal ID",
      +            "type": "number"
      +          },
      +          "labels": {
      +            "description": "Issue labels",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "state": {
      +            "description": "Issue state (opened/closed)",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "Issue title",
      +            "type": "string"
      +          },
      +          "updated_at": {
      +            "description": "Last update timestamp",
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "Issue web URL",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "iid",
      +          "title",
      +          "state",
      +          "labels",
      +          "assignee",
      +          "author",
      +          "url",
      +          "created_at",
      +          "updated_at"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "issues"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "_apiKey": "your-gitlab-api-key",
      +    "project_id": "123"
      +  },
      +  {
      +    "_apiKey": "your-gitlab-api-key",
      +    "per_page": 30,
      +    "project_id": "123",
      +    "search": "bug",
      +    "state": "closed"
      +  }
      +]
  4. First observed

TDQS

A3.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds a claim about filtering by labels, but the input schema has no label parameter—this is a misleading behavior that could cause the agent to pass a non-existent parameter. The description also uses 'status' while the schema uses 'state', adding minor confusion. The return fields are mentioned, but that is largely redundant given the output schema.

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

Conciseness5/5

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

Two sentences with zero waste. The first sentence states the purpose and return fields; the second describes filtering. Information is front-loaded, and the description is appropriately sized for the tool's simplicity.

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?

The output schema and annotations cover safety and return values, and the schema documents all parameters. However, the description's incorrect claim about label filtering is a significant gap that could lead to incorrect usage. Additionally, it doesn't explicitly mention pagination (per_page) but that is in the schema. Overall, the description is mostly complete but compromised by the misleading filter claim.

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

Parameters2/5

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

Schema description coverage is 100%, so the baseline is 3. However, the description introduces a label filter that does not exist in the schema, actively misleading the agent about parameter capabilities. It does not add meaningful value beyond the schema and, in fact, reduces clarity by suggesting a filter that is unavailable. The mention of 'status' instead of 'state' also adds ambiguity.

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?

States a specific verb and resource: 'Search issues in a GitLab project by project ID.' Clearly differentiates from siblings like gitlab_list_mrs and gitlab_list_projects by focusing on issues. Also lists the returned fields (ID, title, state, labels, assignee, URL), making the tool's purpose unambiguous.

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

Usage Guidelines4/5

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

Provides clear context on what the tool does (search issues by project ID) but does not explicitly mention when not to use it or name alternatives. The sibling list includes gitlab_list_mrs and gitlab_list_projects, and the description makes it obvious that this is for issues, so an agent can infer the right choice, but there's no explicit routing or exclusion.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.