Skip to content

Reduce default GitLab MCP tool surface#547

Open
zereight wants to merge 1 commit into
mainfrom
prune-default-toolsets
Open

Reduce default GitLab MCP tool surface#547
zereight wants to merge 1 commit into
mainfrom
prune-default-toolsets

Conversation

@zereight

@zereight zereight commented Jun 21, 2026

Copy link
Copy Markdown
Owner

Summary

  • add a lean core toolset as the only default toolset
  • make the previous broad default toolsets opt-in via GITLAB_TOOLSETS/discover_tools
  • update toolset docs and tests for overlapping toolsets

Default tools drop from 115 to 36, with approximate schema tokens down from 24.2k to 8.9k.

Tests

  • npm run build
  • node --import tsx/esm --test test/test-ci-lint.ts
  • node --import tsx/esm --test test/test-todos.ts
  • node --import tsx/esm --test test/test-toolset-filtering.ts
  • npm run test:mock

Note

Medium Risk
This is a behavior-breaking default for clients that assumed the old wide tool list without setting GITLAB_TOOLSETS; upgrades need the documented restore string or GITLAB_TOOLSETS=all to avoid missing tools.

Overview
Shrinks the default MCP tool surface by introducing a core toolset (35 tools) as the only always-on group when GITLAB_TOOLSETS is unset, plus discover_tools. The former broad defaults (merge requests, issues, repositories, branches, projects, labels, CI, groups, users) are opt-in again.

Registry changes mark those categories isDefault: false, define overlapping tools in both core and the full toolsets, and use TOOLSETS_BY_TOOL_NAME so enabling a full category still exposes tools that also appear in core. Filtering tests now derive counts from TOOLSET_DEFINITIONS and assert advanced tools (merge, drafts, push_files, etc.) stay out of the lean default.

Docs and operator UX add docs/tools/core.md, CLI flags --toolsets / --tools, env-var guidance for all and a pre-lean restore toolset list, opt-in notes on group pages, and updated skill/MkDocs index. Tests for CI lint and todos require explicit GITLAB_TOOLSETS=ci / issues.

Reviewed by Cursor Bugbot for commit b24f928. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Introduces a new core toolset as the lean default, switching all previously default toolsets (merge_requests, issues, repositories, branches, projects, labels, ci, groups, users) to opt-in. Adds multi-toolset tool membership via TOOLSETS_BY_TOOL_NAME. Updates the doc generator, tests, and all documentation to reflect the new default and opt-in structure.

Changes

Lean core toolset + opt-in restructure

Layer / File(s) Summary
ToolsetId, TOOLSET_DEFINITIONS, and multi-toolset membership
tools/registry.ts
Adds "core" to ToolsetId, inserts the core entry in TOOLSET_DEFINITIONS as the sole default, flips isDefault to false for merge_requests, issues, repositories, branches, projects, labels, ci, groups, and users. Replaces the per-tool single-ID mapping with TOOLSETS_BY_TOOL_NAME: Map<string, Set<ToolsetId>> and updates isToolInEnabledToolset to enable a tool when any of its associated toolset IDs are active.
Doc generator: core group metadata and feature-toggle text
scripts/generate-tool-docs.ts
Adds core to GROUP_META and GROUP_ORDER, reformats a multi-line error message, and inserts the GITLAB_TOOLSETS=merge_requests,issues,repositories,branches,projects,labels,ci,groups,users restore example into the generated feature-toggle documentation.
Toolset filtering tests: dynamic counts and lean-default assertions
test/test-toolset-filtering.ts
Derives toolset counts, default/non-default IDs, and total tool counts dynamically from TOOLSET_DEFINITIONS instead of hardcoded values. Updates TOOLSET_SAMPLE_TOOLS for new toolset IDs (core, variables, dependency_proxy) and adds an assertion that the lean default set excludes advanced/destructive tools.
Per-toolset opt-in test updates
test/test-ci-lint.ts, test/test-todos.ts
Updates CI lint and todos tests to explicitly enable the ci and issues toolsets respectively, replacing assumptions about default toolset presence with explicit environment variable configuration.
New core tools reference page
docs/tools/core.md, mkdocs.yml
Creates the full docs/tools/core.md reference (660 lines) with parameter tables for all core tools (merge requests, issues, repository/file browsing, discovery, auth). Registers the page in mkdocs.yml navigation.
Tools index restructure and per-toolset opt-in docs
docs/tools/index.md, docs/tools/branches.md, docs/tools/ci.md, docs/tools/groups.md, docs/tools/issues.md, docs/tools/labels.md, docs/tools/merge-requests.md, docs/tools/meta.md, docs/tools/projects.md, docs/tools/repositories.md, docs/tools/users.md, docs/configuration/environment-variables.md, docs/getting-started/cli-arguments.md, README.md, skills/gitlab-mcp/SKILL.md
Rewrites the index Feature toggles section to show only Core as default and lists the pre-lean restore value. Inserts "Feature toggle" opt-in notes in all optional toolset pages. Updates discover_tools category lists, env-vars doc, CLI args table, README, and SKILL.md to match the new toolset structure.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • zereight/gitlab-mcp#499: Directly related — also updates scripts/generate-tool-docs.ts and tools/registry.ts for toolset grouping and the MkDocs tool reference generator.
  • zereight/gitlab-mcp#537: Both PRs modify tools/registry.ts toolset definitions and test/test-toolset-filtering.ts; the retrieved PR adds tools to the ci toolset which overlaps with the ci isDefault flip here.
  • zereight/gitlab-mcp#539: Both PRs touch the projects toolset entry in tools/registry.ts and the shared toolset filtering test infrastructure.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Reduce default GitLab MCP tool surface' directly and concisely describes the main change: introducing a lean core toolset as the default instead of the broad previous default.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The PR description clearly documents the addition of a lean core toolset as the default, making previous broad defaults opt-in, with specific metrics and implementation details.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch prune-default-toolsets
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch prune-default-toolsets

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/configuration/environment-variables.md`:
- Around line 330-333: The special value documentation for restoring pre-lean
default toolsets in environment-variables.md is missing the required
GITLAB_TOOLSETS= prefix, making it unclear how users should actually apply this
value. Update the special value entry around line 333 that currently shows just
"merge_requests,issues,repositories,branches,projects,labels,ci,groups,users" to
prepend it with GITLAB_TOOLSETS= so it reads
"GITLAB_TOOLSETS=merge_requests,issues,repositories,branches,projects,labels,ci,groups,users",
matching the format produced by the upstream generator in
scripts/generate-tool-docs.ts (lines 295–320).

In `@test/test-toolset-filtering.ts`:
- Line 39: The constant NON_DEFAULT_TOOLSETS defined in the test file is
assigned but never used anywhere, which triggers an ESLint error. Remove this
unused constant declaration entirely from the file to resolve the lint failure.

In `@tools/registry.ts`:
- Around line 1869-1875: The map TOOLSET_BY_TOOL_NAME declared alongside
TOOLSETS_BY_TOOL_NAME is never read from in the codebase and is redundant.
Remove the unused TOOLSET_BY_TOOL_NAME map declaration and any code that
populates it within the loop that iterates over TOOLSET_DEFINITIONS. Ensure that
only TOOLSETS_BY_TOOL_NAME remains, which correctly maintains the set of
toolsets for each tool name.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bbf6442d-e144-4d76-acbe-8a47c8baf802

📥 Commits

Reviewing files that changed from the base of the PR and between c662a3d and ea91cb0.

📒 Files selected for processing (20)
  • README.md
  • docs/configuration/environment-variables.md
  • docs/getting-started/cli-arguments.md
  • docs/tools/branches.md
  • docs/tools/ci.md
  • docs/tools/core.md
  • docs/tools/groups.md
  • docs/tools/index.md
  • docs/tools/issues.md
  • docs/tools/labels.md
  • docs/tools/merge-requests.md
  • docs/tools/meta.md
  • docs/tools/projects.md
  • docs/tools/repositories.md
  • docs/tools/users.md
  • mkdocs.yml
  • scripts/generate-tool-docs.ts
  • skills/gitlab-mcp/SKILL.md
  • test/test-toolset-filtering.ts
  • tools/registry.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: test
  • GitHub Check: coverage
🧰 Additional context used
🪛 ESLint
test/test-toolset-filtering.ts

[error] 39-39: 'NON_DEFAULT_TOOLSETS' is assigned a value but never used.

(@typescript-eslint/no-unused-vars)

🔇 Additional comments (23)
tools/registry.ts (1)

1482-1482: LGTM!

Also applies to: 1511-1553, 1602-1602, 1632-1632, 1645-1645, 1666-1666, 1682-1682, 1693-1693, 1703-1703, 1788-1788, 1952-1958

scripts/generate-tool-docs.ts (1)

55-59: LGTM!

Also applies to: 146-146, 277-279, 312-312

test/test-toolset-filtering.ts (1)

19-21: LGTM!

Also applies to: 30-38, 41-87, 96-108, 209-224, 483-488

docs/tools/core.md (1)

1-42: LGTM!

The core toolset documentation is comprehensive and well-structured. The tool list is complete with 35 tools correctly categorized (merge requests, issues, repositories, branches, projects, labels, identity), and the detailed documentation with parameter tables follows consistent formatting.

mkdocs.yml (1)

87-87: LGTM!

The nav entry correctly registers the new core toolset documentation in the sidebar.

docs/tools/index.md (5)

19-20: LGTM!

Default/opt-in structure is clear and correct. Default is exclusively Core, and the opt-in list comprehensively covers all 19 other toolsets.


26-26: LGTM!

The restore value GITLAB_TOOLSETS=merge_requests,issues,repositories,branches,projects,labels,ci,groups,users correctly documents the pre-lean default set and matches the value in the doc generator (scripts/generate-tool-docs.ts:315).


46-93: LGTM!

Core section is prominent and accurate: title, description, "(35 tools)" count, and full tool table all align with core.md inventory. The core tools table rows match the 35 tools listed in core.md (lines 7-41) with no discrepancies.


92-92: LGTM!

All opt-in notes follow the standard format from generate-tool-docs.ts and correctly specify the toolset ID and activation methods (GITLAB_TOOLSETS, GITLAB_TOOLS, discover_tools).

Also applies to: 111-111, 127-127, 151-151, 161-161, 213-213, 246-246, 287-287, 395-395


472-472: LGTM!

The discover_tools available categories list includes core and all 19 other toolsets (20 total), accurately reflecting the new toolset inventory.

docs/getting-started/cli-arguments.md (1)

35-36: LGTM!

The two new CLI argument rows correctly document the toolsets and tools options, with clear descriptions of default behavior (lean core) and additive tool selection. These map to GITLAB_TOOLSETS_RAW and GITLAB_TOOLS_RAW in config.ts.

README.md (1)

96-97: LGTM!

The CLI argument documentation is consistent with docs/getting-started/cli-arguments.md and correctly specifies the lean core default and additive tool selection. The descriptions are appropriately verbose for a README audience.

skills/gitlab-mcp/SKILL.md (1)

8-35: LGTM!

The toolsets table and introduction accurately reflect the new default/opt-in structure. Core is correctly marked as default with 35 tools, all 19 other toolsets are marked opt-in with their tool counts, and the restore instruction on line 35 matches the index.md value exactly. The 204 total / 202 unique count is consistent with multi-toolset tool membership.

docs/tools/branches.md (1)

5-7: LGTM!

docs/tools/ci.md (1)

5-7: LGTM!

docs/tools/groups.md (1)

5-7: LGTM!

docs/tools/issues.md (1)

5-7: LGTM!

docs/tools/labels.md (1)

5-7: LGTM!

docs/tools/merge-requests.md (1)

5-7: LGTM!

docs/tools/meta.md (1)

32-32: LGTM!

docs/tools/projects.md (1)

5-7: LGTM!

docs/tools/repositories.md (1)

5-7: LGTM!

docs/tools/users.md (1)

5-7: LGTM!

Comment thread docs/configuration/environment-variables.md
];
const DEFAULT_TOOLSETS = TOOLSET_DEFINITIONS.filter(def => def.isDefault).map(def => def.id);

const NON_DEFAULT_TOOLSETS = TOOLSET_DEFINITIONS.filter(def => !def.isDefault).map(def => def.id);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove unused NON_DEFAULT_TOOLSETS constant to clear lint failure.

This constant is assigned but never used, and ESLint flags it as an error.

Suggested fix
-const NON_DEFAULT_TOOLSETS = TOOLSET_DEFINITIONS.filter(def => !def.isDefault).map(def => def.id);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const NON_DEFAULT_TOOLSETS = TOOLSET_DEFINITIONS.filter(def => !def.isDefault).map(def => def.id);
🧰 Tools
🪛 ESLint

[error] 39-39: 'NON_DEFAULT_TOOLSETS' is assigned a value but never used.

(@typescript-eslint/no-unused-vars)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/test-toolset-filtering.ts` at line 39, The constant NON_DEFAULT_TOOLSETS
defined in the test file is assigned but never used anywhere, which triggers an
ESLint error. Remove this unused constant declaration entirely from the file to
resolve the lint failure.

Source: Linters/SAST tools

Comment thread tools/registry.ts
Comment on lines +1869 to +1875
export const TOOLSETS_BY_TOOL_NAME = new Map<string, Set<ToolsetId>>();
export const TOOLSET_BY_TOOL_NAME = new Map<string, ToolsetId>();
for (const def of TOOLSET_DEFINITIONS) {
for (const tool of def.tools) {
if (TOOLSET_BY_TOOL_NAME.has(tool)) {
console.warn(
`Tool "${tool}" is defined in multiple toolsets: "${TOOLSET_BY_TOOL_NAME.get(tool)}" and "${def.id}"`
);
}
const toolsets = TOOLSETS_BY_TOOL_NAME.get(tool) ?? new Set<ToolsetId>();
toolsets.add(def.id);
TOOLSETS_BY_TOOL_NAME.set(tool, toolsets);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Find all references to both maps with context
rg -n -C3 '\bTOOLSET_BY_TOOL_NAME\b|\bTOOLSETS_BY_TOOL_NAME\b'

# 2) Specifically inspect call-sites using .get(...)
rg -n -C3 'TOOLSET_BY_TOOL_NAME\.get\(|TOOLSETS_BY_TOOL_NAME\.get\('

# 3) Check whether single-map lookups are used in gating/filtering logic
rg -n -C3 'isToolInEnabledToolset|enabledToolsets|filter\(tool =>'

Repository: zereight/gitlab-mcp

Length of output: 5750


Old map TOOLSET_BY_TOOL_NAME is unused and can be removed.

The old single-map is still populated at line 1876 but never read from anywhere in the codebase. The filtering logic correctly uses TOOLSETS_BY_TOOL_NAME and properly iterates through all toolsets for each tool via isToolInEnabledToolset(). No functional correctness issue exists, but consider removing the redundant population of TOOLSET_BY_TOOL_NAME at line 1876.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tools/registry.ts` around lines 1869 - 1875, The map TOOLSET_BY_TOOL_NAME
declared alongside TOOLSETS_BY_TOOL_NAME is never read from in the codebase and
is redundant. Remove the unused TOOLSET_BY_TOOL_NAME map declaration and any
code that populates it within the loop that iterates over TOOLSET_DEFINITIONS.
Ensure that only TOOLSETS_BY_TOOL_NAME remains, which correctly maintains the
set of toolsets for each tool name.

@zereight zereight force-pushed the prune-default-toolsets branch from ea91cb0 to b24f928 Compare June 21, 2026 04:59

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
docs/configuration/environment-variables.md (1)

330-333: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Restore the GITLAB_TOOLSETS= prefix.

The pre-lean restore value is still missing the variable name, so users cannot copy it directly. This also repeats the earlier documentation issue.

Fix
-- `merge_requests,issues,repositories,branches,projects,labels,ci,groups,users` — restore the pre-lean default set.
+- `GITLAB_TOOLSETS=merge_requests,issues,repositories,branches,projects,labels,ci,groups,users` — restore the pre-lean default set.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/configuration/environment-variables.md` around lines 330 - 333, The
pre-lean default set value in the special values list is missing the
GITLAB_TOOLSETS= prefix. Update the second bullet point in the special values
section to include the GITLAB_TOOLSETS= prefix before the comma-separated
toolset list so that users can directly copy and paste the complete
configuration value without needing to add the variable name themselves.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/tools/index.md`:
- Around line 19-20: The Meta & GraphQL entry is incorrectly included in the
opt-in toolsets row because it does not follow the same enablement pattern as
other toolsets. Remove Meta & GraphQL from the opt-in toolsets list on line 20
(the row containing Projects & Namespaces through Search, Dependency Proxy, and
Meta & GraphQL). Create a separate documentation section or note that clearly
explains Meta & GraphQL tools are handled differently: discover_tools is always
available and execute_graphql is enabled through GITLAB_TOOLS configuration, not
through TOOLSET_DEFINITIONS like the other opt-in tools.
- Around line 46-48: The tool count listed in the Core section description is
outdated. Update the number from 35 to 36 in the description text within the
Core section to accurately reflect the current number of tools available.

In `@skills/gitlab-mcp/SKILL.md`:
- Around line 8-35: The opening summary on line 8 states "202 tools across 20
toolsets" but the toolsets table below that contains core, merge_requests,
issues, repositories, branches, projects, labels, ci, groups, users, pipelines,
milestones, wiki, releases, tags, workitems, webhooks, search, variables, and
dependency_proxy actually sums to 239 tools total. Update the summary line to
reflect the correct tool count of 239 tools across 20 toolsets, and adjust the
total count from 204 to 241 (239 toolset tools plus the 2 meta-tools
execute_graphql and discover_tools).

---

Duplicate comments:
In `@docs/configuration/environment-variables.md`:
- Around line 330-333: The pre-lean default set value in the special values list
is missing the GITLAB_TOOLSETS= prefix. Update the second bullet point in the
special values section to include the GITLAB_TOOLSETS= prefix before the
comma-separated toolset list so that users can directly copy and paste the
complete configuration value without needing to add the variable name
themselves.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f6eee8c0-cf84-4150-b974-46ef0cc0afaa

📥 Commits

Reviewing files that changed from the base of the PR and between ea91cb0 and b24f928.

📒 Files selected for processing (22)
  • README.md
  • docs/configuration/environment-variables.md
  • docs/getting-started/cli-arguments.md
  • docs/tools/branches.md
  • docs/tools/ci.md
  • docs/tools/core.md
  • docs/tools/groups.md
  • docs/tools/index.md
  • docs/tools/issues.md
  • docs/tools/labels.md
  • docs/tools/merge-requests.md
  • docs/tools/meta.md
  • docs/tools/projects.md
  • docs/tools/repositories.md
  • docs/tools/users.md
  • mkdocs.yml
  • scripts/generate-tool-docs.ts
  • skills/gitlab-mcp/SKILL.md
  • test/test-ci-lint.ts
  • test/test-todos.ts
  • test/test-toolset-filtering.ts
  • tools/registry.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: test
  • GitHub Check: coverage
🧰 Additional context used
🪛 ESLint
test/test-toolset-filtering.ts

[error] 39-39: 'NON_DEFAULT_TOOLSETS' is assigned a value but never used.

(@typescript-eslint/no-unused-vars)

🔇 Additional comments (13)
tools/registry.ts (1)

1869-1870: Remove stale single-toolset map export.

Line 1870 still exports TOOLSET_BY_TOOL_NAME, which was already flagged as redundant after introducing TOOLSETS_BY_TOOL_NAME.

test/test-toolset-filtering.ts (1)

39-39: Drop unused NON_DEFAULT_TOOLSETS to fix lint.

Line 39 defines a constant that remains unused and has already been reported in earlier review feedback.

Source: Linters/SAST tools

docs/tools/ci.md (1)

5-7: LGTM!

docs/tools/groups.md (1)

5-7: LGTM!

docs/tools/issues.md (1)

5-7: LGTM!

docs/tools/labels.md (1)

5-7: LGTM!

docs/tools/merge-requests.md (1)

5-7: LGTM!

docs/tools/branches.md (1)

5-7: LGTM!

docs/tools/meta.md (1)

32-32: LGTM!

docs/tools/projects.md (1)

5-7: LGTM!

docs/tools/repositories.md (1)

5-7: LGTM!

docs/tools/users.md (1)

5-7: LGTM!

docs/configuration/environment-variables.md (1)

325-329: LGTM!

Comment thread docs/tools/index.md
Comment on lines +19 to +20
| **Default** — always exposed | [Core](core.md) |
| **Opt-in** — must be enabled | [Projects & Namespaces](projects.md), [Projects & Files](repositories.md), [Branches & Commits](branches.md), [Groups](groups.md), [Merge Requests](merge-requests.md), [Issues](issues.md), [Labels](labels.md), [Work Items](workitems.md), [CI Lint](ci.md), [Pipelines, Jobs & Deployments](pipelines.md) (also `USE_PIPELINE=true`), [Milestones](milestones.md) (also `USE_MILESTONE=true`), [Wiki](wiki.md) (also `USE_GITLAB_WIKI=true`), [Releases](releases.md), [Tags](tags.md), [Users & Events](users.md), [Variables](variables.md), [Webhooks](webhooks.md), [Search](search.md), [Dependency Proxy](dependency-proxy.md), [Meta & GraphQL](meta.md) |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Keep the Meta & GraphQL note separate from toolset enablement.

Meta & GraphQL is not a toolset in TOOLSET_DEFINITIONS; discover_tools is always available and execute_graphql is enabled through GITLAB_TOOLS. Putting it in the opt-in toolset matrix makes the enablement story inconsistent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tools/index.md` around lines 19 - 20, The Meta & GraphQL entry is
incorrectly included in the opt-in toolsets row because it does not follow the
same enablement pattern as other toolsets. Remove Meta & GraphQL from the opt-in
toolsets list on line 20 (the row containing Projects & Namespaces through
Search, Dependency Proxy, and Meta & GraphQL). Create a separate documentation
section or note that clearly explains Meta & GraphQL tools are handled
differently: discover_tools is always available and execute_graphql is enabled
through GITLAB_TOOLS configuration, not through TOOLSET_DEFINITIONS like the
other opt-in tools.

Comment thread docs/tools/index.md
Comment on lines +46 to +48
### [Core](core.md)

Lean default starter set for common MR, issue, repository, branch, project, label, and identity workflows. *(35 tools)*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the Core tool count.

The Core section now lists 36 tools, so the “35 tools” label is off by one.

Suggested fix
-*(35 tools)*
+*(36 tools)*
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### [Core](core.md)
Lean default starter set for common MR, issue, repository, branch, project, label, and identity workflows. *(35 tools)*
### [Core](core.md)
Lean default starter set for common MR, issue, repository, branch, project, label, and identity workflows. *(36 tools)*
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tools/index.md` around lines 46 - 48, The tool count listed in the Core
section description is outdated. Update the number from 35 to 36 in the
description text within the Core section to accurately reflect the current
number of tools available.

Comment on lines +8 to +35
GitLab MCP server providing 204 tools total: 202 tools across 20 toolsets, plus `execute_graphql` and the always-available `discover_tools` meta-tool.

## Toolsets

| Toolset | Default | Enable with |
| ------------------------- | ------- | ---------------------------------------------------- |
| merge_requests (41 tools) | yes | - |
| issues (23 tools) | yes | - |
| repositories (7 tools) | yes | - |
| branches (6 tools) | yes | - |
| projects (8 tools) | yes | - |
| labels (5 tools) | yes | - |
| ci (2 tools) | yes | - |
| users (5 tools) | yes | - |
| pipelines (19 tools) | no | `USE_PIPELINE=true` or `GITLAB_TOOLSETS=pipelines` |
| milestones (9 tools) | no | `USE_MILESTONE=true` or `GITLAB_TOOLSETS=milestones` |
| wiki (10 tools) | no | `USE_GITLAB_WIKI=true` or `GITLAB_TOOLSETS=wiki` |
| releases (7 tools) | no | `GITLAB_TOOLSETS=releases` |
| tags (5 tools) | no | `GITLAB_TOOLSETS=tags` |
| workitems (18 tools) | no | `GITLAB_TOOLSETS=workitems` |
| webhooks (3 tools) | no | `GITLAB_TOOLSETS=webhooks` |
| search (3 tools) | no | `GITLAB_TOOLSETS=search` |

Enable all: `GITLAB_TOOLSETS=all`. Use `GITLAB_TOOLS` to enable individual tools outside their toolset. `discover_tools` can activate opt-in categories for the current session.
| Toolset | Default | Enable with |
| -------------------------- | ------- | ---------------------------------------------------- |
| core (35 tools) | yes | default lean starter set |
| merge_requests (43 tools) | no | `GITLAB_TOOLSETS=merge_requests` |
| issues (24 tools) | no | `GITLAB_TOOLSETS=issues` |
| repositories (7 tools) | no | `GITLAB_TOOLSETS=repositories` |
| branches (15 tools) | no | `GITLAB_TOOLSETS=branches` |
| projects (10 tools) | no | `GITLAB_TOOLSETS=projects` |
| labels (5 tools) | no | `GITLAB_TOOLSETS=labels` |
| ci (4 tools) | no | `GITLAB_TOOLSETS=ci` |
| groups (1 tool) | no | `GITLAB_TOOLSETS=groups` |
| users (7 tools) | no | `GITLAB_TOOLSETS=users` |
| pipelines (19 tools) | no | `USE_PIPELINE=true` or `GITLAB_TOOLSETS=pipelines` |
| milestones (9 tools) | no | `USE_MILESTONE=true` or `GITLAB_TOOLSETS=milestones` |
| wiki (10 tools) | no | `USE_GITLAB_WIKI=true` or `GITLAB_TOOLSETS=wiki` |
| releases (7 tools) | no | `GITLAB_TOOLSETS=releases` |
| tags (5 tools) | no | `GITLAB_TOOLSETS=tags` |
| workitems (18 tools) | no | `GITLAB_TOOLSETS=workitems` |
| webhooks (3 tools) | no | `GITLAB_TOOLSETS=webhooks` |
| search (3 tools) | no | `GITLAB_TOOLSETS=search` |
| variables (10 tools) | no | `GITLAB_TOOLSETS=variables` |
| dependency_proxy (4 tools) | no | `GITLAB_TOOLSETS=dependency_proxy` |

Enable all: `GITLAB_TOOLSETS=all`. Restore the pre-lean default with `GITLAB_TOOLSETS=merge_requests,issues,repositories,branches,projects,labels,ci,groups,users`. Use `GITLAB_TOOLS` to enable individual tools outside their toolset. `discover_tools` can activate opt-in categories for the current session.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the tool-count summary.

Line 8 says 202 tools across 20 toolsets, but the table below sums to 239 tools across those same 20 toolsets. Please update the intro so it matches the actual inventory.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/gitlab-mcp/SKILL.md` around lines 8 - 35, The opening summary on line
8 states "202 tools across 20 toolsets" but the toolsets table below that
contains core, merge_requests, issues, repositories, branches, projects, labels,
ci, groups, users, pipelines, milestones, wiki, releases, tags, workitems,
webhooks, search, variables, and dependency_proxy actually sums to 239 tools
total. Update the summary line to reflect the correct tool count of 239 tools
across 20 toolsets, and adjust the total count from 204 to 241 (239 toolset
tools plus the 2 meta-tools execute_graphql and discover_tools).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant