mcp-gitlab-workflow
Provides tools for issue-driven GitLab development, including workflows for requirement analysis, issue creation, branching, coding, merge request creation, and issue updates, as well as atomic GitLab API tools for custom orchestration.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-gitlab-workflowUse workflow_requirement_to_delivery to add a forum interaction feature"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-gitlab-workflow
mcp-gitlab-workflow is an MCP server for issue-driven GitLab development.
It can take a requirement or an existing GitLab issue and drive a standardized delivery flow: requirement analysis, issue creation, branching, coding, merge request creation, and issue updates. It also provides a set of atomic GitLab API tools for custom orchestration and fine-grained control.
1. Core Capabilities
workflow_*: higher-level tools that package common requirement-to-delivery flows into a single tool callgitlab_*: atomic GitLab API tools for custom orchestration and fine-grained control
Target projects for issues and code delivery are configured with WORKFLOW_ISSUE_PROJECT_ID and WORKFLOW_CODE_PROJECT_ID. See the environment variable section below for the full configuration matrix.
Workflow Tools
workflow_requirement_to_issue: analyze a requirement and create a GitLab issueworkflow_review_mr_post_comment: review a target merge request and post a review commentworkflow_issue_to_delivery: start from an existing issue and complete branch -> code change -> MR -> issue comment -> issue logworkflow_requirement_to_delivery: run the full end-to-end flow from a requirement
Atomic GitLab Tools
Issue tools fall back to WORKFLOW_ISSUE_PROJECT_ID by default, while code and merge request tools fall back to WORKFLOW_CODE_PROJECT_ID.
Users and labels:
gitlab_get_current_user,gitlab_list_labels,gitlab_create_label,gitlab_update_label,gitlab_delete_labelIssues:
gitlab_create_issue,gitlab_get_issue,gitlab_get_issue_notes,gitlab_add_issue_comment,gitlab_get_issue_imagesRepository:
gitlab_create_branch,gitlab_get_file,gitlab_commit_files,gitlab_upload_project_fileMerge requests:
gitlab_get_merge_request,gitlab_get_mr_notes,gitlab_create_merge_request,gitlab_create_mr_note,gitlab_get_mr_changes,gitlab_approve_mr,gitlab_unapprove_mr
Related MCP server: GitLab MCP Server
2. Example
Using workflow_requirement_to_delivery as an example, it is best to explicitly name the tool in your prompt or wrap it in a higher-level custom instruction / skill so the LLM can reliably choose the intended workflow.
Input
Use workflow_requirement_to_delivery to add a forum interaction feature
Result
The workflow can automatically complete the flow below:
requirement analysis -> issue creation -> branch -> code change -> MR -> issue update

(1) Issue creation

(2) Code changes and MR submission based on the issue

(3) Issue comment

(4) Local issue-log.md

With this workflow, a developer can hand a requirement or an assigned issue directly to an agent and let it complete the full development flow in an issue-driven way.
3. Configuration
3.1 NPX
{
"mcpServers": {
"gitlab-workflow": {
"command": "npx",
"args": ["-y", "@chntif/mcp-gitlab-workflow"],
"env": {
"GITLAB_TOKEN": "YOUR_TOKEN",
"GITLAB_API_BASE_URL": "https://gitlab.com/api/v4",
"WORKFLOW_ISSUE_PROJECT_ID": "82346102",
"WORKFLOW_ISSUE_PROJECT_PATH": "tchen1690/test",
"WORKFLOW_CODE_PROJECT_ID": "82346102",
"WORKFLOW_CODE_PROJECT_PATH": "tchen1690/test",
"WORKFLOW_BASE_BRANCH": "develop",
"WORKFLOW_TARGET_BRANCH": "develop",
"WORKFLOW_LOCAL_REMOTE_NAME": "origin"
}
}
}
}3.2 Codex
(1) Add from the terminal
codex mcp add gitlab-workflow \
--env GITLAB_TOKEN=YOUR_TOKEN \
--env GITLAB_API_BASE_URL=https://gitlab.com/api/v4 \
--env WORKFLOW_ISSUE_PROJECT_ID=80376102 \
--env WORKFLOW_ISSUE_PROJECT_PATH=tchen1690/test \
--env WORKFLOW_CODE_PROJECT_ID=80376102 \
--env WORKFLOW_CODE_PROJECT_PATH=tchen1690/test \
--env WORKFLOW_BASE_BRANCH=develop \
--env WORKFLOW_TARGET_BRANCH=develop \
--env WORKFLOW_LOCAL_REMOTE_NAME=origin \
-- npx -y @chntif/mcp-gitlab-workflow(2) Or add it to config.toml
[mcp_servers.gitlab-workflow]
command = "npx"
args = ["-y", "@chntif/mcp-gitlab-workflow"]
[mcp_servers.gitlab-workflow.env]
GITLAB_TOKEN = "YOUR_TOKEN"
GITLAB_API_BASE_URL = "https://gitlab.com/api/v4"
WORKFLOW_ISSUE_PROJECT_ID = "80376102"
WORKFLOW_ISSUE_PROJECT_PATH = "tchen1690/test"
WORKFLOW_CODE_PROJECT_ID = "80376102"
WORKFLOW_CODE_PROJECT_PATH = "tchen1690/test"
WORKFLOW_BASE_BRANCH = "develop"
WORKFLOW_TARGET_BRANCH = "develop"
WORKFLOW_LOCAL_REMOTE_NAME = "origin"3.3 Claude Code
claude mcp add gitlab-workflow \
-e GITLAB_TOKEN=YOUR_TOKEN \
-e GITLAB_API_BASE_URL=https://gitlab.com/api/v4 \
-e WORKFLOW_ISSUE_PROJECT_ID=80376102 \
-e WORKFLOW_ISSUE_PROJECT_PATH=tchen1690/test \
-e WORKFLOW_CODE_PROJECT_ID=80376102 \
-e WORKFLOW_CODE_PROJECT_PATH=tchen1690/test \
-e WORKFLOW_BASE_BRANCH=develop \
-e WORKFLOW_TARGET_BRANCH=develop \
-e WORKFLOW_LOCAL_REMOTE_NAME=origin \
-- npx -y @chntif/mcp-gitlab-workflowYou can also directly write the configuration in 3.1 into Claude Code's configuration file.
3.4 Local startup
{
"mcpServers": {
"gitlab-workflow": {
"command": "node",
"args": ["/gitlab-workflow-server/dist/src/server.js"],
"env": {
"GITLAB_TOKEN": "YOUR_TOKEN",
"GITLAB_API_BASE_URL": "https://gitlab.com/api/v4",
"WORKFLOW_ISSUE_PROJECT_ID": "82346102",
"WORKFLOW_ISSUE_PROJECT_PATH": "tchen1690/test",
"WORKFLOW_CODE_PROJECT_ID": "82346102",
"WORKFLOW_CODE_PROJECT_PATH": "tchen1690/test",
"WORKFLOW_BASE_BRANCH": "develop",
"WORKFLOW_TARGET_BRANCH": "develop",
"WORKFLOW_LOCAL_REMOTE_NAME": "origin"
}
}
}
}3.5 About uv/uvx
This project is a Node.js package. npx is the recommended way to run it.
4. Environment Variables
Parameter resolution order:
tool args -> user-provided env -> built-in defaults
If the user does not explicitly pass a parameter such as project_id, the tool can use runtime configuration from environment variables. Some variables also have built-in defaults.
Environment Variable | Purpose | Default | Required |
| GitLab API access token used by the server and all GitLab operations | None | Yes |
| Base URL for the GitLab API |
| No |
| Default target project ID for issue-related tools | None | No |
| Default issue project path used in templates and references | None | No |
| Default target project ID for repository, branch, commit, and MR tools | None | No |
| Default code project path used in templates, logs, and output | None | No |
| Default base branch used before creating a new delivery branch |
| No |
| Default merge request target branch |
| No |
| Default git remote used by local git workflows |
| No |
| Default issue title prefix and fallback label | None | No |
| Default assignee username for issues and merge requests | None | No |
| Path of the local issue log file |
| No |
| Whether delivery workflows update the local issue log by default |
| No |
| Default delivery mode, supports |
| No |
| Whether |
| No |
| Restrict issue operations to a fixed issue project ID | None | No |
| Restrict code and MR operations to a fixed code project ID | None | No |
Recommended configuration
GITLAB_TOKEN,GITLAB_API_BASE_URL: required to connect to GitLabWORKFLOW_ISSUE_PROJECT_ID,WORKFLOW_CODE_PROJECT_ID: define the issue project and code project, and can point to the same projectWORKFLOW_ISSUE_PROJECT_PATH,WORKFLOW_CODE_PROJECT_PATH: improve rendered references and display output, but are optionalWORKFLOW_BASE_BRANCH,WORKFLOW_TARGET_BRANCH: should follow your team branching strategyWORKFLOW_LOCAL_REMOTE_NAME: usuallyorigin
If a specific operation should target values different from your default environment configuration, passing explicit tool arguments will override the configured values.
5. License
MIT
Available Tools
28 toolsgitlab_add_issue_commentA
Create issue note/comment. Supports direct body or auto-generation from MR changed files (by MR IID or source branch).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_iid | No | Issue IID. | |
| body | No | Comment markdown body. If provided, auto-generation fields are ignored. | |
| auto_generate_from_mr_changes | No | When true and body is missing, generate comment from MR changed-file analysis. | |
| code_project_id | No | Code project ID used for MR lookup/changes when auto_generate_from_mr_changes=true. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | No | Optional MR IID for changed-file analysis. | |
| branch_name | No | Optional source branch for MR lookup when mr_iid is not provided. | |
| target_branch | No | Optional target branch filter while resolving MR by branch_name. | |
| local_repo_path | No | Optional local repo path used to detect current branch when branch_name is missing. | |
| include_issue_context | No | Whether generated comment includes compact issue requirement context. Default true. | |
| max_changed_files | No | Maximum number of changed files included in generated comment. Default 30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Created GitLab issue note payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It states a write operation (create) but omits side effects, authorization requirements, rate limits, or error scenarios. The auto-generation logic is mentioned but not detailed. Minimal added transparency beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences totaling 18 words, front-loaded with the core purpose. Every word earns its place; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters and an existing output schema, the description covers the two primary use cases. However, it lacks guidance on when to use this vs siblings, does not mention required permissions or prerequisites, and does not describe the return value (though output schema likely covers it). Adequate but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions. The tool description adds value by summarizing the two usage patterns (direct body vs auto-generation), helping agents understand parameter grouping, but does not add new details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates an issue note/comment and specifies two modes: direct body or auto-generation from MR changes. The verb 'Create' and resource 'issue note/comment' are precise and distinguish it from sibling tools like gitlab_create_mr_note, which comments on MRs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use direct body vs auto-generation and provides context on how to specify the MR (by IID or source branch). However, it does not explicitly state when not to use this tool or mention alternatives like gitlab_create_mr_note for MR comments. Still, given the sibling list, the differentiation is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_approve_mrB
Approve merge request by GitLab approval API.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | No | Merge request IID. | |
| sha | No | Optional expected HEAD SHA for optimistic locking during approval. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | GitLab merge request approval payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It only states the basic action without mentioning idempotency, side effects of approving an already approved MR, authentication requirements, or whether approval is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, highly concise. However, it could briefly mention prerequisites or refer to parameters without losing compactness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks essential context like prerequisites, permission requirements, or behavior when the MR is already approved. The tool has 3 parameters, but the description does not explain their role or the tool's overall workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing detailed descriptions for all parameters, especially project_id. The tool description adds no additional parameter context, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (Approve) and the resource (merge request) with the method (GitLab approval API), making the purpose very clear. It distinguishes from the sibling tool 'gitlab_unapprove_mr' which reverses the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool, prerequisites (e.g., MR must be open, user needs approval permissions), or when to avoid it. Without context, the agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_commit_filesB
Create one commit with multiple file actions via GitLab commits API.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| branch | No | Target branch. | |
| commit_message | No | Commit message. | |
| start_branch | No | Optional source branch when committing to a new branch. | |
| actions | No | Commit actions list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Created GitLab commit payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool creates a commit, which implies a mutation, but it does not disclose any behavioral traits such as required permissions, rate limits, idempotency, or side effects (e.g., whether it pushes the commit immediately). The description is too brief to adequately inform an AI agent about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the main action. However, it is so brief that it may sacrifice clarity on usage context. Still, there is no fluff, and it earns a high score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters including nested objects and an output schema, the description is minimal. It provides no context beyond the basic action, such as when to use multiple actions, error scenarios, or integration with workflows. The existence of an output schema reduces the burden for return values, but additional context is needed for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, providing detailed semantics for each parameter (e.g., project_id includes runtime config instructions). The tool description itself adds no additional meaning beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates one commit with multiple file actions via the GitLab commits API. It specifies the verb 'create' and the resource 'one commit with multiple file actions', which distinguishes it from sibling tools like gitlab_create_branch or gitlab_get_file that do not perform commits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It does not mention when not to use it, prerequisites (e.g., branch existence), or compare to potential alternatives like creating separate commits. The usage context is only implied by the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_branchB
Create repository branch by GitLab REST API.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| branch | No | Branch name to create. | |
| ref | No | Source ref (branch/tag/SHA). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Created GitLab branch payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden but fails to disclose traits like error handling (e.g., branch already exists), permissions needed, or mutability. The terse description is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the verb front-loaded. It is concise but could include additional behavioral context without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and schema coverage is high, the description omits important contextual details (e.g., idempotency, ref validity). The minimalism leaves gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides 100% description coverage for all three parameters, including detailed guidance on project_id. The tool description adds no extra meaning beyond the schema, meeting baseline but not exceeding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create repository branch by GitLab REST API' clearly states a specific verb (create) and resource (repository branch), distinguishing it from sibling tools like gitlab_create_issue or gitlab_create_merge_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., gitlab_commit_files) or what prerequisites are needed. The description lacks context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_issueB
Create an issue with GitLab REST API /projects/:id/issues.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| title | No | Issue title. | |
| description | No | Issue description markdown. | |
| labels | No | Issue labels array. | |
| assignee_ids | No | Assignee user IDs. | |
| assignee_usernames | No | Optional assignee GitLab usernames. Resolved to assignee_ids internally. | |
| assign_to_current_user_if_missing | No | When true, assign issue to current token user if no assignee is provided. | |
| milestone_id | No | Milestone ID. | |
| due_date | No | Due date in YYYY-MM-DD. | |
| confidential | No | Whether issue is confidential. | |
| issue_type | No | GitLab issue_type value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Created GitLab issue payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only mentions the API endpoint but fails to describe important aspects like authentication requirements, side effects of creation, error conditions (e.g., missing project_id behavior), or any rate limits. This is insufficient for safe agent invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is appropriately sized for a clear purpose, though it could be slightly expanded with usage guidance without losing conciseness. Rating 4 for efficient but not perfect communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (implied), the description does not mention return values, error handling, or any special behavior. Given the complexity of 11 parameters and many options, the description lacks the context needed for a complete understanding. It falls short of what is minimally required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for its 11 parameters, so the description adds no additional meaning. Baseline is 3 because the schema carries the burden; the description's minimal statement does not enhance parameter understanding beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create an issue') and the resource ('GitLab REST API /projects/:id/issues'), making the tool's primary purpose unmistakable. It distinguishes from sibling tools like gitlab_get_issue or gitlab_create_merge_request through the specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives (e.g., gitlab_create_merge_request) or when not to use it. Usage is implied through the purpose, but no contextual advice is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_labelB
Create a project label (/projects/:id/labels).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the tool tries the current runtime config defaults from WORKFLOW_ISSUE_PROJECT_ID or WORKFLOW_CODE_PROJECT_ID. If both are unset, or both are set to different values, the tool returns a missing-parameter error and you must pass project_id explicitly. Do not infer or auto-generate this value. | |
| name | No | Label name. | |
| color | No | Label color, e.g. #FF8800. | |
| description | No | Label description. | |
| priority | No | Label priority. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Created label payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only gives the endpoint. It does not disclose authentication needs, side effects, rate limits, or any constraints beyond what the schema already offers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. Action and resource are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a complete schema and output schema, the description lacks context on tool behavior, such as success outcomes or edge cases. It is minimal for a tool with five parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no further semantic value beyond the endpoint context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (create) and resource (project label), and provides the API endpoint for reference. Distinct from siblings like gitlab_delete_label and gitlab_update_label.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: when a new label is needed. However, no explicit guidance on when to use this tool versus alternatives like gitlab_update_label or gitlab_list_labels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_merge_requestB
Create merge request by GitLab REST API /projects/:id/merge_requests.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| source_branch | No | Source branch. | |
| target_branch | No | Target branch. | |
| title | No | Merge request title. | |
| description | No | Merge request description. | |
| issue_project_id | No | Optional issue project ID used to render related issue reference in MR description. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_project_path | No | Optional issue project path used to render related issue reference. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_iid | No | Optional related issue IID. If provided, MR description will include related issue section. | |
| labels | No | Labels array. | |
| assignee_ids | No | Assignee user IDs. | |
| reviewer_ids | No | Reviewer user IDs. | |
| remove_source_branch | No | Remove source branch after merge. | |
| squash | No | Enable squash on merge. | |
| draft | No | Create MR as draft. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Created GitLab merge request payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It only states the API endpoint, omitting details about idempotency, side effects (e.g., triggering pipelines), authentication, or error conditions. The input schema provides some constraints, but the tool description itself lacks behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core action. It is efficient and wastes no words, though it could benefit from slightly more depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters, no annotations, and the presence of an output schema, the description is far too minimal. It does not explain the overall workflow, return values, or how the tool fits into a larger process. The input schema compensates somewhat, but the description lacks context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The tool description adds no extra meaning beyond the schema; the parameter descriptions in the schema are detailed (e.g., for project_id, referencing runtime config), but the top-level description does not enhance them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and resource 'merge request', and explicitly references the GitLab REST API endpoint. This distinguishes it from sibling tools like gitlab_get_merge_request and gitlab_approve_mr.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., when to create a merge request vs. approving or getting one). No context about prerequisites or when not to use it is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_mr_noteC
Create merge-request note/comment.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | No | Merge request IID. | |
| body | No | Comment markdown body. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Created GitLab merge request note payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the action without disclosing any behavioral traits such as side effects, authentication needs, or data mutations. For example, it does not indicate whether adding a note triggers notifications or requires specific permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it lacks structure. Important information about usage and behavior is missing, making it too sparse for a tool with three parameters and no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple purpose but the description is incomplete. It does not explain what a note/comment is, the format of the body, any constraints (e.g., markdown support), or the return value. With no annotations and an output schema present, the description should provide more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all three parameters (project_id, mr_iid, body), with clear explanations. The description does not add any additional semantic meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a merge-request note or comment. The verb 'create' and resource 'merge-request note' are specific, distinguishing it from issue comment tools like gitlab_add_issue_comment. However, it lacks additional context that could further differentiate it from related tools like gitlab_get_mr_notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as gitlab_add_issue_comment or gitlab_approve_mr. The description does not mention use cases, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_delete_labelB
Delete a project label (/projects/:id/labels/:label_id).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the tool tries the current runtime config defaults from WORKFLOW_ISSUE_PROJECT_ID or WORKFLOW_CODE_PROJECT_ID. If both are unset, or both are set to different values, the tool returns a missing-parameter error and you must pass project_id explicitly. Do not infer or auto-generate this value. | |
| label_name | No | Label name to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Label deletion result payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It only states the action and API path, without disclosing side effects (e.g., permanence, permission requirements, or impact on issues). This is insufficient for an agent to understand behavioral implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that efficiently conveys the core action without extraneous words. It is well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the deletion action and absence of annotations, the description lacks important context such as idempotency, error conditions, or whether deletion is reversible. Although an output schema exists (not shown), the description does not address the tool's overall completeness for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions, including fallback logic for project_id. The tool description adds no extra semantic meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete') and resource ('project label'), and includes the API endpoint for additional clarity. Among sibling tools like gitlab_create_label and gitlab_update_label, the purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. There is no mention of appropriate contexts, prerequisites, or situations where this tool should be avoided. The usage is only implied by the action name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_current_userA
Get current authenticated GitLab user (/user).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Current authenticated GitLab user payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It accurately describes a read-only operation with no side effects. While it doesn't mention authentication or error scenarios, the tool's simplicity and the presence of an output schema mitigate the need for extensive behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the verb and resource. No extraneous information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, output schema present), the description is complete. It tells the agent exactly what the tool does and references the API endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema description coverage is 100%. The description adds no parameter information, but none is needed. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('current authenticated GitLab user'), and includes the API endpoint for clarity. It is easily distinguishable from sibling tools which focus on issues, merge requests, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing the current user's information, but does not provide explicit guidance on when to use this tool versus alternatives. No when-not-to-use or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_fileB
Get repository file by GitLab REST API /repository/files/:file_path.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| file_path | No | Repository file path. | |
| ref | No | Branch/tag/SHA to read. Optional; when omitted GitLab HEAD is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | GitLab file payload with decoded content. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. 'Get' implies a read operation, but it does not explicitly state idempotency, safety (read-only), error handling, or authentication needs. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, no redundancy or fluff. However, it is overly brief and could expand on usage or behavior without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of an output schema (which explains return values), the description is still too minimal. It lacks context about runtime config for project_id, branch fallback behavior, and what constitutes a successful response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters (project_id, file_path, ref). The description adds the API endpoint context but does not enhance parameter meaning beyond the schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get' and resource 'repository file', along with the API endpoint. This is specific, but does not explicitly distinguish from sibling tools like gitlab_upload_project_file, which also deals with files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., gitlab_commit_files for writing, or other read tools). No conditions or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_issueB
Get one issue by project_id + issue_iid.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_iid | No | Issue IID (internal ID). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | GitLab issue payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description should disclose behavioral traits. It only says 'Get one issue' without mentioning idempotency, read-only nature, or any side effects. The output schema exists but the description adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to explain return values. However, it omits details like the possibility of a missing-parameter error or the runtime config behavior for project_id, which are only in the schema. It is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already describes both parameters well. The description repeats 'by project_id + issue_iid' but adds no new meaning beyond the schema, earning a baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'issue' with the required identifiers (project_id and issue_iid). This distinguishes it from siblings like gitlab_create_issue or gitlab_get_issue_notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, such as when to use gitlab_get_issue_notes instead. No explicit context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_issue_imagesA
Extract image references from issue description/notes. When include_base64=true, download each image, return base64 metadata, and attach MCP image content blocks so the model can inspect the image itself.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_iid | No | Issue IID. | |
| include_notes | No | Whether to extract images from issue notes as well. | |
| include_base64 | No | Whether to download every extracted image and include base64. | |
| max_images | No | Maximum number of image references to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Parsed issue image references with optional base64 payloads. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains that include_base64 triggers downloading images, returning base64, and attaching MCP content blocks. However, it does not disclose potential side effects like network timeouts or permission requirements, which would push it to a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. It front-loads the core purpose and then adds a conditional behavior. No redundant words or tangential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, an output schema, and reasonable complexity, the description covers the main functionality. However, it lacks details like default values for max_images or the format of image references, which would make it more complete. The presence of an output schema partially compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context for include_base64 but does not elaborate on other parameters beyond what the schema says. The schema descriptions are already quite detailed (e.g., project_id usage rules), so the description adds minimal extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts image references from issue description/notes, with a specific verb-noun combination. It distinguishes from sibling tools like gitlab_get_issue, which retrieves issue fields, and gitlab_get_issue_notes, which gets notes. The mention of include_base64 behavior further clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. For example, it does not indicate that this tool is for extracting images versus getting the full issue or notes. A user would have to infer usage from the description and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_issue_notesB
Get issue notes/comments by project_id + issue_iid.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_iid | No | Issue IID (internal ID). | |
| sort | No | Sort order. | |
| order_by | No | Field used for ordering. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | GitLab issue notes list. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only states 'Get' indicating a read operation, but lacks details on authentication, rate limits, pagination, or potential side effects. Minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core purpose. No redundant words, efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, covering return values. However, the description omits behavioral context such as default sorting, the optionality of project_id (runtime config fallback), and error conditions. Adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description reiterates the two key parameters (project_id, issue_iid) but adds no additional meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves issue notes/comments using project_id and issue_iid. It distinguishes from siblings like gitlab_get_issue (issue details) and gitlab_add_issue_comment (add comment).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention when to prefer get_issue_notes over get_issue or add_issue_comment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_merge_requestB
Get merge request detail (/projects/:id/merge_requests/:mr_iid).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | No | Merge request IID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Merge request detail payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as authentication requirements, rate limits, or whether all fields are returned. The minimal description fails to add value beyond the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the verb and resource. It earns its place but could be slightly expanded for clarity without becoming wordy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and parameters are well-documented, the description is minimally adequate. However, it omits error conditions or any hints about the response structure, which would be helpful for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description includes the API path which indirectly shows parameter roles, but it adds no additional semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get merge request detail' with the exact API path, differentiating it from sibling tools like 'gitlab_get_mr_changes' and 'gitlab_get_mr_notes' which handle related but distinct resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'gitlab_get_mr_changes' or 'gitlab_get_mr_notes'. Usage is implied by the resource name, but no exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_mr_changesB
Get merge request changes/diff metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | No | Merge request IID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | GitLab merge request changes payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It fails to mention the tool is read-only, the effect of invalid parameters, or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. It is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with 2 parameters and has an output schema, so the description need not explain return values. However, it lacks context like required permissions or typical use cases, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add information about parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves merge request changes/diff metadata using the verb 'get' and specific resource. It distinguishes from sibling tools like gitlab_get_merge_request (which gets MR details) and gitlab_get_mr_notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like gitlab_get_merge_request. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_mr_notesC
Get merge request notes/comments (/projects/:id/merge_requests/:mr_iid/notes).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | No | Merge request IID. | |
| sort | No | Sort order. | |
| order_by | No | Field used for ordering. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Merge request notes list payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden for behavioral disclosure. It only states a read operation (get notes), but does not disclose pagination, rate limits, authentication needs, error modes, or response structure. The description is minimal and leaves important behavioral traits unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and includes the endpoint path for clarity. It is front-loaded and contains no extraneous information. However, it could be slightly more structured to improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and an output schema, the description is minimal. It does not reference the output schema or explain what the returned notes contain. It lacks information about filtering, sorting, or potential edge cases, making it adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds no additional meaning beyond what the input schema already provides for each parameter. It does not elaborate on parameter values or usage tips.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves merge request notes/comments and includes the API endpoint path. It is specific about the resource and action, but does not explicitly differentiate from sibling tools like gitlab_get_mr_changes or gitlab_create_mr_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of when not to use it, prerequisites, or recommendations for sibling tools that might be more appropriate in certain scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_list_labelsB
List labels of a GitLab project (/projects/:id/labels).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the tool tries the current runtime config defaults from WORKFLOW_ISSUE_PROJECT_ID or WORKFLOW_CODE_PROJECT_ID. If both are unset, or both are set to different values, the tool returns a missing-parameter error and you must pass project_id explicitly. Do not infer or auto-generate this value. | |
| search | No | Search text for label name/description. | |
| page | No | Page number. | |
| per_page | No | Items per page. | |
| with_counts | No | Whether to include issue counts. | |
| include_ancestor_groups | No | Whether to include ancestor group labels. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Label list payload for the target project. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only mentions the endpoint and does not describe pagination, rate limits, or whether the operation is read-only (though implied).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that states the purpose without fluff. However, it could be slightly more informative without losing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters and an output schema is present, the description could explain pagination behavior or search functionality. The existing description is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no parameter-specific information beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'labels of a GitLab project', with the endpoint path. This distinguishes it from sibling tools like gitlab_create_label (create) and gitlab_delete_label (delete).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as gitlab_create_label or gitlab_update_label. The description only states the action, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_unapprove_mrB
Remove approval from merge request.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | No | Merge request IID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | GitLab merge request unapproval payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description only states the action without disclosing side effects, error states (e.g., if no approval exists), or permission requirements. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that gets straight to the point. No unnecessary words, though it could benefit from slightly more detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the action and the presence of output schema, the description is adequate but lacks details on preconditions (e.g., must be approved first) and possible outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Remove approval from merge request' uses a specific verb and resource, clearly indicating the action. It distinguishes from sibling 'gitlab_approve_mr' which adds approval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The sibling 'gitlab_approve_mr' is present, but conditions like needing prior approval or error states are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_update_labelB
Update a project label (/projects/:id/labels).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the tool tries the current runtime config defaults from WORKFLOW_ISSUE_PROJECT_ID or WORKFLOW_CODE_PROJECT_ID. If both are unset, or both are set to different values, the tool returns a missing-parameter error and you must pass project_id explicitly. Do not infer or auto-generate this value. | |
| name | No | Existing label name. | |
| new_name | No | New label name. | |
| color | No | New color, e.g. #00AAFF. | |
| description | No | New label description. | |
| priority | No | New label priority. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Updated label payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose mutation behavior, required fields for identification, or error handling; it only states the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence, but could marginally include usage conditions without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple update operation and presence of output schema, the description covers basic purpose but lacks context like prerequisites or field dependencies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions for each parameter; the tool description adds no additional meaning, warranting baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update a project label' with the endpoint, distinguishing it from sibling tools like create, delete, and list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives; the description only restates the name without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_upload_project_fileB
Upload binary file to project markdown uploads and return markdown/url metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | GitLab project ID. Omit this field unless the user explicitly provided a value. When omitted, the tool tries the current runtime config defaults from WORKFLOW_ISSUE_PROJECT_ID or WORKFLOW_CODE_PROJECT_ID. If both are unset, or both are set to different values, the tool returns a missing-parameter error and you must pass project_id explicitly. Do not infer or auto-generate this value. | |
| filename | No | Original file name. | |
| content_base64 | No | File content encoded in base64. | |
| content_type | No | Optional MIME type, e.g. image/png. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Project markdown upload payload. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose side effects (e.g., file modification, permissions needed, rate limits, or error conditions). The return metadata is implied but not detailed; output schema partially covers return format but behavioral aspects are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that communicates the core purpose. It is efficient with no redundant words, though additional structure (e.g., bullet points for output) could be beneficial.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and an output schema, the description lacks context about when to use it, behavioral expectations, and error handling. It is minimal and leaves gaps for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed descriptions for each parameter (especially project_id). The description does not add extra semantics beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (upload binary file), target (project markdown uploads), and what is returned (markdown/url metadata). It distinguishes from siblings like gitlab_get_file or gitlab_commit_files which handle different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use it, or suggest other tools for different purposes. The description only states functionality without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_issue_log_appendA
Use when only local issue log markdown should be appended. This tool does not create MR or commit.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_title | Yes | Issue title. | |
| issue_iid | Yes | Issue IID. | |
| issue_web_url | Yes | Issue web URL. | |
| branch_name | Yes | Code branch name. | |
| summary | Yes | Short issue summary. | |
| status | Yes | Status text. | |
| issue_project_id | No | Issue project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_project_path | No | Issue project path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| code_project_id | No | Code project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| code_project_path | No | Code project path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| repo_path | Yes | Local repository path used as the base for resolving log_path. | |
| log_path | No | Issue log path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_LOG_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Issue log append result. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral disclosure. It only states the action and a negative constraint, but lacks details on side effects, error conditions, permissions, or output behavior. With 12 parameters, more context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very brief (two sentences) and front-loads the purpose. No extraneous content. However, given the tool's complexity (12 parameters), it could potentially include more useful information without being wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the existence of an output schema, the description does not mention return values or behavior details. With 12 parameters, no annotations, and only two sentences of description, the tool is not fully specified for an agent to use reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The tool description adds no additional parameter information beyond the schema. Some parameters have helpful notes in the schema itself, but the description does not contribute to their semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('append') and the resource ('local issue log markdown'), and distinguishes from siblings by explicitly noting it does not create MR or commit. This is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use when only local issue log markdown should be appended,' which indicates the primary use case. It also says what the tool does not do (create MR or commit), implying alternative tools. However, it does not explicitly mention sibling tools or when to use them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_issue_to_deliveryA
Use when an existing issue_iid should be delivered end-to-end: branch, commit, MR, issue comment, local sync, and issue log. Before composing commit_actions, first call workflow_prepare_delivery_workspace and use its preparation_key here. Then inspect the issue text and any screenshots. If the issue may contain image references, call gitlab_get_issue_images(project_id, issue_iid, include_base64=true) first and review the returned image blocks. Do not call this twice for the same issue or same user request. If the issue and MR may already exist, inspect GitLab first before retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| preparation_key | Yes | Required key returned by workflow_prepare_delivery_workspace. Delivery is rejected if the prepared base branch is no longer current. | |
| delivery_method | No | Delivery implementation mode. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_DELIVERY_METHOD overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_project_id | No | Issue project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_project_path | No | Issue project path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_iid | Yes | Issue IID. | |
| issue_images_reviewed | No | Set to true only after you have inspected issue images with gitlab_get_issue_images(..., include_base64=true). Required when the target issue contains screenshots or image references. | |
| code_project_id | No | Code project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| code_project_path | No | Code project path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| target_branch | No | MR target branch. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_TARGET_BRANCH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| branch_name | No | Optional branch name override. | |
| english_slug | No | Optional English slug used when generating branch name. | |
| work_type | No | Optional git/conventional work type override like feat, fix, docs, refactor, hotfix, feature. | |
| summary | No | Optional summary used for branch/commit/MR title. | |
| commit_message | No | Optional commit message. | |
| commit_actions | No | Commit actions list. Required when delivery_method=remote_api. | |
| change_summary | Yes | Change summary used in MR description and issue log. | |
| test_plan | Yes | Test/acceptance plan used in MR description. | |
| label | No | Optional MR label. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_LABEL overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| assignee_username | No | Optional assignee username for MR. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ASSIGNEE_USERNAME overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| checkout_local_branch | No | Whether to fetch/pull and switch local repo to target branch. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CHECKOUT_LOCAL_BRANCH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_comment_body | No | Direct issue comment body. | |
| implementation_summary | No | Implementation summary for generated issue comment. | |
| acceptance_steps | No | Acceptance steps for generated issue comment. | |
| update_log | No | Whether to update local issue log. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_UPDATE_ISSUE_LOG overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| log_path | No | Issue log path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_LOG_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. This field matters only when update_log=true. | |
| log_status | No | Issue log status text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Issue to MR full-chain workflow result. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the tool's behavioral scope: it creates a branch, commits, MR, issue comment, performs local sync, and updates the issue log. It warns about the preparation_key rejection if base branch is outdated. No contradictions; the tool's actions are clearly described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured paragraph that front-loads the primary purpose. Every sentence adds value: prerequisites, image inspection, idempotency warning, and parameter usage. No redundant or missing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (26 parameters, 4 required) and the presence of an output schema, the description covers the full workflow: prerequisite call, image review, parameter usage rules, and warnings. The agent has all necessary context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds significant context beyond the schema. For example, it explains when to omit fields (if not explicitly provided by user), that runtime config overrides apply, and for 'issue_images_reviewed' it specifies the prerequisite action. The commit_actions parameter description ties it to delivery_method.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: delivering an issue end-to-end (branch, commit, MR, issue comment, local sync, issue log). It uses a specific verb 'delivered' and resource 'issue_iid', clearly distinguishing it from sibling tools like gitlab_create_merge_request or workflow_requirement_to_delivery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool (for existing issue_iid), prerequisites (call workflow_prepare_delivery_workspace first), when to inspect images (if issue may contain image references), and prohibitions ('Do not call this twice for the same issue or same user request'). It also advises checking GitLab first if issue/MR may already exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_prepare_delivery_workspaceA
Use before delivery workflows. Pass the explicit local repo_path for the target project. This tool verifies a clean local repo, refreshes the latest base branch, and returns a preparation_key that workflow_issue_to_delivery/workflow_requirement_to_delivery must provide. When delivery_method=local_git, it also creates and checks out the local working branch where code changes should be made.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes | Local repository path. | |
| delivery_method | No | Delivery implementation mode. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_DELIVERY_METHOD overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| remote_name | No | Git remote name. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_LOCAL_REMOTE_NAME overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| base_branch | No | Base branch to refresh before code generation. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_BASE_BRANCH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| branch_name | No | Optional branch name override. Required for local_git when no summary/requirement_text is provided. | |
| english_slug | No | Optional English slug used when generating a local working branch. | |
| work_type | No | Optional git/conventional work type override when generating a local working branch. | |
| summary | No | Optional summary used to help generate a local working branch. | |
| requirement_text | No | Optional requirement text used to help generate a local working branch. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Prepared local workspace state used to generate delivery commit_actions. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses core behaviors: verification of clean repo, base branch refresh, preparation_key return, and optional branch creation. Missing details include error handling (e.g., what if repo is not clean) and auth/permissions. The output schema likely covers return structure, but description doesn't reference it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a distinct purpose: set context, state main function and key output, add conditional behavior. No redundant or extraneous information. Efficiency and clarity are excellent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (references preparation_key) and sibling tools, the description covers essential aspects. It could mention error scenarios or prerequisites (e.g., git installed), but overall it provides enough context for an agent to understand when and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions (e.g., omitting fields unless user provided). The description adds minimal value by contextualizing repo_path as explicit and delivery_method behavior, but it largely summarizes what's already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: preparation before delivery workflows. It specifies actions (verify clean repo, refresh base branch, return preparation_key) and distinguishes itself from sibling tools by naming the exact tools that require its output (workflow_issue_to_delivery/workflow_requirement_to_delivery). The verb 'prepare' and resource 'delivery workspace' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use before delivery workflows' and names the sibling tools that require the preparation_key, providing clear context for when to use. It also notes the conditional behavior for local_git. However, it does not explicitly state when not to use or mention alternatives beyond the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_requirement_to_deliveryA
Use when requirement text should run the full chain once: create issue, then continue in the same workflow through branch, commit, MR, issue comment, local sync, and issue log. Before composing commit_actions, first call workflow_prepare_delivery_workspace and use its preparation_key here. Do not combine this with workflow_requirement_to_issue or workflow_issue_to_delivery for the same user request.
| Name | Required | Description | Default |
|---|---|---|---|
| requirement_text | Yes | Raw user requirement text. | |
| preparation_key | Yes | Required key returned by workflow_prepare_delivery_workspace. Delivery is rejected if the prepared base branch is no longer current. | |
| delivery_method | No | Delivery implementation mode. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_DELIVERY_METHOD overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| source_text | No | Optional extra background text for the default issue template. | |
| issue_template | No | Optional full issue markdown template. Supported built-in variables include {{summary}}, {{requirement_text}}, {{source_text}}, {{expected_change}}, {{issue_project_id}}, {{code_project_id}}, {{issue_project_path}}, {{code_project_path}}, {{branch_name}}, {{work_type}}, {{label}}. | |
| template_variables | No | Optional custom variables map merged into issue_template rendering. | |
| english_slug | No | Optional branch slug. | |
| work_type | No | Optional git/conventional work type override like feat, fix, docs, refactor, hotfix, feature. | |
| summary | No | Optional short summary used for issue and MR title. | |
| issue_project_id | No | Issue project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_project_path | No | Issue project path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| code_project_id | No | Code project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| code_project_path | No | Code project path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| labels | No | Issue labels list. | |
| label | No | Issue title prefix and fallback issue label. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_LABEL overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| auto_create_labels | No | Whether to auto-create missing labels. | |
| assignee_username | No | Single assignee username. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ASSIGNEE_USERNAME overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| assignee_usernames | No | Assignee usernames list. | |
| assign_to_current_user_if_missing | No | Whether to assign issue to current user when no assignee is provided. | |
| target_branch | No | MR target branch. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_TARGET_BRANCH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| branch_name | No | Optional branch name override. | |
| commit_message | No | Optional commit message. | |
| commit_actions | No | Commit actions list. Required when delivery_method=remote_api. | |
| change_summary | Yes | Change summary used in MR/log. | |
| test_plan | Yes | Test/acceptance plan used in MR description and issue comment. | |
| checkout_local_branch | No | Whether to sync and switch local repo to created branch. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CHECKOUT_LOCAL_BRANCH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_comment_body | No | Direct issue comment body. | |
| implementation_summary | No | Implementation summary for generated issue comment. | |
| acceptance_steps | No | Acceptance steps for generated issue comment. | |
| update_log | No | Whether to update local issue log. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_UPDATE_ISSUE_LOG overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| log_path | No | Issue log path. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_LOG_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. This field matters only when update_log=true. | |
| log_status | No | Issue log status text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Requirement to delivery full workflow result. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It describes the high-level workflow steps but lacks explicit mention of potential side effects (e.g., creating issues, branches, commits, MRs, modifying repository) or required permissions. It does not mention error conditions or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and front-loaded with purpose. It efficiently conveys when to use, prerequisite, and exclusions without extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (32 parameters, nested objects, 4 required), the description provides a clear high-level workflow. An output schema exists, so return value details are likely covered there. However, the description could mention expected outcomes (e.g., created MR URL or issue ID) to be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters have descriptions). The description adds minimal semantic value beyond the schema; it reinforces the prerequisite role of preparation_key but does not enhance understanding of other parameters. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to run the full chain from requirement to delivery (create issue, branch, commit, MR, comment, sync, log). It distinguishes from sibling tools like workflow_requirement_to_issue and workflow_issue_to_delivery by specifying the complete workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (full chain), what prerequisite to fulfill first (call workflow_prepare_delivery_workspace), and which tools not to combine with. This provides clear guidance for agent selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_requirement_to_issueA
Use when requirement text should only create a GitLab issue and stop there. Do not combine this with workflow_requirement_to_delivery for the same user request. If the issue is already created, continue with workflow_issue_to_delivery instead of calling this tool again.
| Name | Required | Description | Default |
|---|---|---|---|
| requirement_text | Yes | Raw user requirement text. | |
| source_text | No | Optional extra background text for the default issue template. | |
| issue_template | No | Optional full issue markdown template. Supported built-in variables include {{summary}}, {{requirement_text}}, {{source_text}}, {{expected_change}}, {{issue_project_id}}, {{code_project_id}}, {{issue_project_path}}, {{code_project_path}}, {{branch_name}}, {{work_type}}, {{label}}. | |
| template_variables | No | Optional custom variables map merged into issue_template rendering. | |
| english_slug | No | Optional branch slug. | |
| work_type | No | Optional git/conventional work type override like feat, fix, docs, refactor, hotfix, feature. | |
| summary | No | Optional issue summary. | |
| issue_project_id | No | Issue project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| issue_project_path | No | Issue project path for issue template variables. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ISSUE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| code_project_id | No | Optional code project ID used in issue template variables. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| code_project_path | No | Code project path for template/render context. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_PATH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| labels | No | Issue labels list. | |
| label | No | Issue title prefix label and fallback issue label. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_LABEL overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| auto_create_labels | No | When true, create missing labels in issue project automatically. | |
| assignee_username | No | Single assignee username. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_ASSIGNEE_USERNAME overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| assignee_usernames | No | Assignee usernames list. | |
| assign_to_current_user_if_missing | No | When true, assign issue to current token user if no assignee is provided. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Analyze requirement and create issue workflow result. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description lacks behavioral details like destructive actions, authentication, or failure modes. Only usage guidance is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise (3 sentences) with clear, actionable information; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and detailed input schema, the description provides sufficient usage context; however, it omits behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline 3; description adds no extra parameter meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a GitLab issue from requirement text and stops, distinguishing it from sibling workflow_requirement_to_delivery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use, when-not-to-combine, and what to do if issue already exists (use workflow_issue_to_delivery).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_review_mr_post_commentA
Two-step MR review workflow. Step 1: call with prepare_review_context=true to fetch review_prompt + diffs for LLM review. Step 2: let the LLM inspect that context, then call again with review_comment_body to post the final review comment (optional approval).
| Name | Required | Description | Default |
|---|---|---|---|
| code_project_id | No | Code project ID. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_CODE_PROJECT_ID overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| mr_iid | Yes | Merge request IID. | |
| review_comment_body | No | Step 2 of 2. Final review comment markdown body, generated after the LLM inspects prepared_review.review_prompt + prepared_review.diffs from the prepare step. | |
| prepare_review_context | No | Step 1 of 2. When true, do not post a comment. Return concise review prompt text plus MR diff context for an external LLM. After the LLM generates review_comment_body, call this tool again without prepare_review_context to post the comment. | |
| review_summary | No | Short review summary used when review_comment_body is missing. | |
| include_changes | No | Whether to include changed files list in generated review comment. | |
| include_existing_notes | No | Whether to load existing MR notes and include count in generated comment. | |
| approve | No | Whether to approve MR after posting review comment. | |
| sha | No | Optional expected MR HEAD SHA when approve=true. | |
| max_changed_files | No | Maximum number of changed files included in prepared review context. Default 20. | |
| max_diff_chars_per_file | No | Maximum diff characters returned per file in prepared review context. Default 12000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Review merge request and create comment workflow result. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the two-step behavior, returns of step 1 (review_prompt + diffs), and the posting of comments with optional approval. It lacks details on idempotency, error handling (e.g., both step parameters provided), auth requirements, or rate limits, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences that front-load the critical two-step workflow information. No redundant or verbose content. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, two-step workflow), the description covers the core workflow and key behaviors. An output schema exists (not shown) but the description explains step 1's return. Lacks details on error conditions (e.g., invalid parameter combinations) and edge cases, but overall sufficient for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the workflow roles of key parameters (prepare_review_context and review_comment_body as steps) and the approval parameter, which goes beyond the schema's individual field descriptions. This clarifies how parameters interact in the two-step process.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as a two-step MR review workflow, with specific verbs ('fetch review_prompt + diffs' and 'post the final review comment') and distinct resources. It differentiates from siblings like gitlab_approve_mr and gitlab_create_mr_note by combining review generation and comment posting in a workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly outlines the two-step process (Step 1 with prepare_review_context, Step 2 with review_comment_body) and mentions optional approval. However, it does not explicitly state when to avoid this tool (e.g., for simple approval, use gitlab_approve_mr), though this is implied by sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_sync_local_branchA
Use when local repository should fetch/pull and switch to a target branch. Local git operations only.
| Name | Required | Description | Default |
|---|---|---|---|
| branch_name | Yes | Target branch to checkout locally. | |
| repo_path | Yes | Local repository path. | |
| remote_name | No | Git remote name. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_LOCAL_REMOTE_NAME overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. | |
| base_branch | No | Optional base branch to pull before checkout. Omit this field unless the user explicitly provided a value. When omitted, the current runtime config value is used (WORKFLOW_BASE_BRANCH overrides the built-in default when configured). If the runtime config is still unset, the tool returns a missing-parameter error. Do not infer or auto-generate this value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether the tool call succeeded. |
| tool | Yes | Tool name. |
| data | No | Local repository sync and branch checkout result. |
| error_type | No | Error type when ok=false. |
| message | No | Error message when ok=false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It states 'Local git operations only' and implies fetch/pull and branch switching, but lacks details on side effects like conflicts, uncommitted changes, or branch creation fallback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that clearly communicates purpose and scope without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered. The description adequately explains the main action and scope, but could mention prerequisites like repository existence or error scenarios for a more complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant meaning for 'remote_name' and 'base_branch' by advising to omit unless user-provided and explaining runtime config fallback, which is valuable beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool synchronizes a local repository by fetching/pulling and switching to a target branch. The phrase 'Local git operations only' distinguishes it from sibling tools that operate on remote GitLab resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when local repository should fetch/pull and switch to a target branch.' It provides clear context for when to use the tool and implies exclusion for remote operations via 'Local git operations only.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes targeting specific GitLab resources (issues, MRs, labels, files). A few potential overlaps exist (e.g., gitlab_add_issue_comment vs gitlab_create_mr_note) but they apply to different resources, and descriptions clarify the difference.
Tools use two prefixes ('gitlab_' and 'workflow_'), creating a split. Within each prefix, naming follows verb_noun pattern, but verbs are inconsistent (e.g., 'add' vs 'create', 'get' vs 'list'). Overall pattern is present but not uniform.
28 tools cover both low-level GitLab API actions and high-level workflow orchestrations, which is appropriate for a full-featured workflow server. While on the higher side, each tool serves a distinct role.
Core operations for issues, MRs, labels, and files are covered, but notable gaps exist: no tool to list issues, no update issue tool, and no delete for issues/MRs. The high-level workflows partially compensate but leave some CRUD incomplete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
MCP server for generating rough-draft project plans from natural-language prompts.
Related MCP Servers
- AlicenseCqualityDmaintenanceAn MCP server that enables communication with GitLab repositories, allowing interaction with GitLab's API to manage projects, issues, and repositories through natural language.45123,8991MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server for the GitLab API that enables comprehensive project management, file operations, and issue tracking. It supports automated branch creation, batch file pushes, and interaction with merge requests and CI/CD logs.
- AlicenseCqualityAmaintenanceA production-ready MCP server for GitLab enabling AI assistants to read and manage GitLab projects, merge requests, issues, pipelines, wikis, releases, and more through a unified interface.10030210MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI agents to perform automated code reviews on GitLab merge requests, including fetching details, reading diffs, posting inline comments, managing labels, and approving or unapproving MRs.302MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/chntif/mcp-gitlab-workflow'
If you have feedback or need assistance with the MCP directory API, please join our Discord server