Skip to main content
Glama
GitLab MCP Server

GitLab MCP Server

by ttpears

Search GitLab

search_gitlab
Read-onlyIdempotent

Search GitLab projects and issues by text to find relevant content. Does not filter by assignee/labels or search merge requests globally; use dedicated tools for those.

Instructions

Text search across GitLab projects and issues (Note: Does not support filtering by assignee/labels - use search_issues for that. MRs cannot be searched globally - use search_merge_requests with username)

Input Schema

NameRequiredDescriptionDefault
afterNoPagination cursor. To fetch the next page, pass the previous response pageInfo.endCursor here and repeat until pageInfo.hasNextPage is false. Paginating this way is the reliable path to complete results and accurate totals.
firstNoNumber of results to retrieve per category
fetchAllNoFetch multiple pages per category up to first items each (default 20, max 100), starting at after — NOT exhaustive. Each category returns its own pageInfo. Use search_projects and search_issues to continue those categories independently.
searchTermNoSearch term (leave empty for recent activity)
userCredentialsNoYour GitLab credentials (optional — falls back to the configured env token if not provided)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv4.0.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / fetchAll / description
      Previous value: -"Fetch multiple pages per category in one call, up to ~100 items each — NOT exhaustive. For complete results, leave this false and paginate via after (pageInfo.endCursor)."New value: +"Fetch multiple pages per category up to first items each (default 20, max 100), starting at after — NOT exhaustive. Each category returns its own pageInfo. Use search_projects and search_issues to continue those categories independently."
    • changedInput schema / properties / userCredentials / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "accessToken": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "gitlabUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "accessToken": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "gitlabUrl": {
      +        "format": "uri",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed2 schema fields changedv2.2.4
    • changedInput schema / properties / after / description
      Previous value: -"Cursor for pagination"New value: +"Pagination cursor. To fetch the next page, pass the previous response pageInfo.endCursor here and repeat until pageInfo.hasNextPage is false. Paginating this way is the reliable path to complete results and accurate totals."
    • changedInput schema / properties / fetchAll / description
      Previous value: -"Fetch all pages up to 100 results per category"New value: +"Fetch multiple pages per category in one call, up to ~100 items each — NOT exhaustive. For complete results, leave this false and paginate via after (pageInfo.endCursor)."
  3. Changed4 schema fields changedv1.15.0
    • addedInput schema / properties / after
      Added value: +{
      +  "description": "Cursor for pagination",
      +  "type": "string"
      +}
    • addedInput schema / properties / fetchAll
      Added value: +{
      +  "default": false,
      +  "description": "Fetch all pages up to 100 results per category",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / first
      Added value: +{
      +  "default": 20,
      +  "description": "Number of results to retrieve per category",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • changedInput schema / properties / userCredentials / description
      Previous value: -"Your GitLab credentials (optional - uses shared token if not provided)"New value: +"Your GitLab credentials (optional — falls back to the configured env token if not provided)"
  4. First observedv1.7.3

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine scope disclosure beyond the annotations: no assignee/label filtering, no global MR search. It says nothing about result shape or that results are grouped per category, which the schema alludes to only indirectly.

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 compact sentences, parenthetically scoped, with the limitations front-loaded and paired directly to the alternative tools. No filler.

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?

For a multi-category search with no output schema, the description does not say what the response looks like (separate result sets per category, each with its own pageInfo) even though that shapes how the agent should paginate. The exclusion guidance is strong, but a bigger share of the behavioral burden should rest here given there is no output schema.

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?

Schema description coverage is 100%, with detailed guidance on after, first, and fetchAll, so the schema carries parameter semantics fully. The description adds nothing about parameters, which is acceptable but is the baseline rather than added value.

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 scope: 'Text search across GitLab projects and issues', which is enough to distinguish it from single-resource siblings like get_project or get_issues. It does not, however, clarify its relationship to the near-name siblings search_projects and search_issues, leaving some ambiguity about which to pick for a plain search.

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?

Explicitly names two non-obvious exclusions and the correct alternative for each (search_issues for assignee/label filtering, search_merge_requests for MRs). That is real when-not-to-use guidance. The gap is that it never states the primary positive case versus search_projects/search_issues for a simple global text search.

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