gitlab
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGitlab
Gitlab
Independent, unofficial connector for Gitlab. Not affiliated with, endorsed by, or sponsored by Gitlab. "Gitlab" is a trademark of its owner, used only to identify the service this connector works with.
Agent-callable tools for GitLab, the DevOps platform for source code, merge requests, and CI/CD. The connector wraps the GitLab REST API v4 (with one GraphQL island — the Work Items surface — reached through ), giving an agent the ability to read and drive projects, issues, merge requests, repository contents, and pipelines. It is centered on the merge-request review loop and repository authoring: read an MR and its diffs and discussions, comment or approve, commit file changes atomically, and run or inspect CI. It targets GitLab SaaS () by default; the host is configurable for self-managed and GitLab Dedicated instances.
POST /api/graphqlgitlab.com独立的非官方GitLab连接器。与GitLab无关联、未获其认可或赞助。"GitLab"是其所有者的商标,仅用于标识本连接器所适配的服务。
适用于GitLab的Agent可调用工具,GitLab是一款面向源代码、合并请求和CI/CD的DevOps平台。该连接器封装了GitLab REST API v4(其中工作项(Work Items)模块通过访问的GraphQL接口),使Agent能够读取和管理项目、议题、合并请求、仓库内容以及流水线。它围绕合并请求评审流程和仓库创作功能构建:读取MR及其差异和讨论内容、添加评论或批准、原子性提交文件变更、运行或检查CI。默认适配GitLab SaaS();可配置主机地址以适配自托管和GitLab Dedicated实例。
POST /api/graphqlgitlab.comWhen to use this
使用场景
- An agent needs to drive the merge-request review loop: list and read MRs, fetch their diffs, commits, notes, and threaded discussions, comment inline on a diff line, approve or unapprove, and merge.
- An agent needs to author repository changes: create a branch, commit many files in one atomic commit, read files and the repository tree, list commits, and compare two refs.
- An agent needs to manage issues (REST): create, update, comment on, and close/reopen them — or manage work items like epics, tasks, and objectives (GraphQL): create, update, and close/reopen.
- An agent needs to run and inspect CI/CD: trigger, list, get, retry, or cancel pipelines; list jobs, read a job log, and play a manual job.
- An agent needs to search — globally, within a project, or within a group — across issues, merge requests, code, commits, users, and more, and resolve project, user, label, and milestone ids before writing.
- Agent需要驱动合并请求评审流程:列出并读取MR、获取其差异、提交记录、评论和线程讨论、在差异的特定行添加内联评论、批准或取消批准、合并MR。
- Agent需要创作仓库变更:创建分支、在单次原子提交中提交多个文件、读取文件和仓库目录结构、列出提交记录、比较两个引用。
- Agent需要管理议题(REST接口):创建、更新、添加评论、关闭/重新打开议题;或管理工作项(如史诗、任务、目标,通过GraphQL接口):创建、更新、关闭/重新打开。
- Agent需要运行和检查CI/CD:触发、列出、获取、重试或取消流水线;列出作业、读取作业日志、启动手动作业。
- Agent需要进行搜索——全局搜索、项目内搜索或群组内搜索——涵盖议题、合并请求、代码、提交记录、用户等,并且在执行写入操作前解析项目、用户、标签和里程碑ID。
Setup
安装配置
This is an agentskills.io skill.
If the connector has not been installed as a skill yet, install it first with (or your harness's own skill-install mechanism), then continue here. Installing the skill copies these files, not dependencies. Before running the CLI, a local MCP server, or auth commands, run here once. Importing the published package as a dependency in your own project instead? That already resolves everything — see .
npx skills add zapier/connectors --skill gitlabzapier-sdknpm install --omit=devnpm installreferences/use-as-sdk.mdThe connector runs on Node.js 22.18+. Pick the reference that matches how you're running it, and load it before doing anything else:
| You have... | Load |
|---|---|
An MCP-aware client — tools may already be loaded (e.g. | |
Terminal / subprocess access (you can run | |
| Only your own code, importing this package as a dependency | |
| No tool access, no terminal, no ability to import this package — you write your own code that calls the Gitlab API directly (e.g. a code-execution sandbox) | |
这是一款agentskills.io技能。
如果尚未将该连接器作为技能安装,请先使用(或你的工具链自带的技能安装机制)进行安装,然后继续后续操作。安装技能会复制这些文件,但不会安装依赖项。在运行CLI、本地MCP服务器或认证命令前,请先在此目录执行一次。如果你是在自己的项目中引入已发布的包作为依赖?此时已经解决了所有依赖问题——详见。
npx skills add zapier/connectors --skill gitlabzapier-sdknpm install --omit=devnpm installreferences/use-as-sdk.md该连接器运行在**Node.js 22.18+**环境下。根据你的运行方式选择对应的参考文档,并在执行任何操作前加载它:
| 你的环境... | 加载文档 |
|---|---|
支持MCP的客户端——工具可能已加载(例如 | |
可访问终端/子进程(可以运行 | |
| 仅使用自有代码,将此包作为依赖引入 | |
| 无法访问工具、终端,也无法引入此包——你需要编写直接调用Gitlab API的代码(例如代码执行沙箱) | |
Scripts
脚本列表
All 47 scripts use the single connection . Project-scoped tools take a (numeric id or URL-encoded path); issues and MRs are addressed by their project-scoped , not the global id. The script's / (Zod) inside the file is the source of truth for its contract.
gitlabprojectIdgroup/projectiidinputSchemaoutputSchemaProjects & search
| Script | Script name | Connections | Description |
|---|---|---|---|
| | | List or search projects the token can see (resolves |
| | | Get one project's metadata by id or path (incl. |
| | | Search globally across projects, issues, MRs, milestones, users, code, or commits. |
| | | Search within one project across issues, MRs, milestones, users, code, or commits. |
| | | Search within one group across projects, issues, MRs, milestones, users, code, or commits. |
Issues
| Script | Script name | Connections | Description |
|---|---|---|---|
| | | List issues in a project, filterable by state, labels, assignee, or milestone. |
| | | Get one issue including its full markdown description. |
| | | Open a new issue with a markdown description. |
| | | Update an issue's fields, or close/reopen it. |
| | | Add a comment (note) to an issue. |
Merge requests
| Script | Script name | Connections | Description |
|---|---|---|---|
| | | List MRs assigned to or created by the token identity across all projects (global). |
| | | List merge requests in one project. |
| | | List merge requests across all projects in one group. |
| | | Get one merge request's full detail (the entry point to the review loop). |
| | | Open a merge request from a source branch into a target branch. |
| | | Update an MR's fields, or close/reopen it. |
| | | Merge a merge request (optionally squash, or guard with a head |
| | | Approve (or revoke approval on) a merge request. |
| | | Get the paginated file diffs for a merge request. |
| | | List the commits on a merge request. |
| | | List the comments (notes) on a merge request. |
| | | Add a top-level comment (note) to a merge request. |
| | | Add a review comment pinned to a specific line of an MR diff. |
| | | List discussion threads on an MR, incl. diff notes and resolved/resolvable status. |
Repository
| Script | Script name | Connections | Description |
|---|---|---|---|
| | | List (or search) a project's branches. |
| | | Create a branch from an existing ref (ref is required — no silent default). |
| | | Create, update, delete, or move multiple files in a single atomic commit. |
| | | List commits on a branch or across the repository. |
| | | Read a file's contents at a ref. |
| | | List files and directories in a repository path. |
| | | Compare two refs and return the diff between them. |
CI/CD
| Script | Script name | Connections | Description |
|---|---|---|---|
| | | Run a new pipeline on a ref, with optional CI/CD variables. |
| | | List pipelines for a project, filterable by ref or status. |
| | | Get one pipeline's status and metadata. |
| | | List the jobs in a pipeline. |
| | | Get the log (trace) output of a CI job. |
| | | Retry the failed and canceled jobs in a pipeline, keeping the passed ones. |
| | | Cancel a running pipeline, stopping its in-progress and pending jobs. |
| | | Start a manual job waiting on a manual action (a play button). |
Work items (GraphQL)
| Script | Script name | Connections | Description |
|---|---|---|---|
| | | List work items in a project or group, filterable by type and state. |
| | | Get one work item's full detail including its description and type. |
| | | Create a work item (epic, task, objective, etc.) in a project or group. |
| | | Update a work item's fields, or close/reopen it. |
Metadata & resolvers
| Script | Script name | Connections | Description |
|---|---|---|---|
| | | List a project's labels (resolves valid label names). |
| | | List a project's milestones (resolves |
| | | Get the identity of the authenticated token (also the connection test). |
| | | Find users by username or search term (resolves assignee/reviewer ids). |
全部47个脚本均使用单一连接。项目范围的工具需要传入(数字ID或URL编码的路径);议题和MR通过其项目范围内的而非全局ID来定位。脚本文件内部的/(基于Zod)是其契约的权威来源。
gitlabprojectIdgroup/projectiidinputSchemaoutputSchema项目与搜索
| 脚本 | 脚本名称 | 连接配置 | 描述 |
|---|---|---|---|
| | | 列出或搜索令牌可访问的项目(解析 |
| | | 通过ID或路径获取单个项目的元数据(包含 |
| | | 在项目、议题、MR、里程碑、用户、代码或提交记录中进行全局搜索。 |
| | | 在单个项目内搜索议题、MR、里程碑、用户、代码或提交记录。 |
| | | 在单个群组内搜索项目、议题、MR、里程碑、用户、代码或提交记录。 |
议题
| 脚本 | 脚本名称 | 连接配置 | 描述 |
|---|---|---|---|
| | | 列出项目中的议题,可按状态、标签、经办人或里程碑筛选。 |
| | | 获取单个议题的完整信息,包括其Markdown描述。 |
| | | 新建一个带有Markdown描述的议题。 |
| | | 更新议题的字段,或关闭/重新打开议题。 |
| | | 向议题添加评论(备注)。 |
合并请求
| 脚本 | 脚本名称 | 连接配置 | 描述 |
|---|---|---|---|
| | | 列出令牌标识所分配或创建的所有项目中的MR(全局范围)。 |
| | | 列出单个项目中的合并请求。 |
| | | 列出单个群组下所有项目中的合并请求。 |
| | | 获取单个合并请求的完整细节(评审流程的入口)。 |
| | | 从源分支向目标分支发起合并请求。 |
| | | 更新MR的字段,或关闭/重新打开MR。 |
| | | 合并合并请求(可选压缩提交,或通过头部 |
| | | 批准(或撤销批准)合并请求。 |
| | | 获取合并请求的分页文件差异。 |
| | | 列出合并请求中的提交记录。 |
| | | 列出合并请求中的评论(备注)。 |
| | | 向合并请求添加顶级评论(备注)。 |
| | | 在MR差异的特定行添加评审评论。 |
| | | 列出MR上的讨论线程,包括差异评论和已解决/可解决状态。 |
仓库
| 脚本 | 脚本名称 | 连接配置 | 描述 |
|---|---|---|---|
| | | 列出(或搜索)项目的分支。 |
| | | 从现有引用创建分支(必须指定引用——无默认值)。 |
| | | 在单次原子提交中创建、更新、删除或移动多个文件。 |
| | | 列出分支或整个仓库的提交记录。 |
| | | 读取引用对应的文件内容。 |
| | | 列出仓库路径下的文件和目录。 |
| | | 比较两个引用并返回它们之间的差异。 |
CI/CD
| 脚本 | 脚本名称 | 连接配置 | 描述 |
|---|---|---|---|
| | | 在指定引用上运行新流水线,可传入可选的CI/CD变量。 |
| | | 列出项目的流水线,可按引用或状态筛选。 |
| | | 获取单个流水线的状态和元数据。 |
| | | 列出流水线中的作业。 |
| | | 获取CI作业的日志(跟踪)输出。 |
| | | 重试流水线中失败和取消的作业,保留已通过的作业。 |
| | | 取消正在运行的流水线,停止其进行中和待处理的作业。 |
| | | 启动等待手动操作的作业(即带有播放按钮的作业)。 |
工作项(GraphQL)
| 脚本 | 脚本名称 | 连接配置 | 描述 |
|---|---|---|---|
| | | 列出项目或群组中的工作项,可按类型和状态筛选。 |
| | | 获取单个工作项的完整细节,包括其描述和类型。 |
| | | 在项目或群组中创建工作项(如史诗、任务、目标等)。 |
| | | 更新工作项的字段,或关闭/重新打开工作项。 |
元数据与解析器
| 脚本 | 脚本名称 | 连接配置 | 描述 |
|---|---|---|---|
| | | 列出项目的标签(解析有效的标签名称)。 |
| | | 列出项目的里程碑(解析 |
| | | 获取已认证令牌的身份信息(同时也是连接测试)。 |
| | | 通过用户名或搜索词查找用户(解析经办人/评审人ID)。 |
Disambiguation & refusals
歧义处理与拒绝规则
This connector resolves names to ids, then writes. Two situations trip up an action-biased agent — handle both before you write.
Before writing to a record you looked up by name — count how many returned records match the name the user gave exactly (case-insensitive). This applies to projects looked up by path/name via , users looked up by username via , and labels or milestones via / :
listProjectsfindUserslistLabelslistMilestones- One exact match (even among other fuzzy hits) → use it. Don't ask for confirmation you don't need.
- No exact match but one clear fuzzy hit → use it.
- Two or more that tie (two projects both pathed , two users both named "Jordan Lee", two labels both "backend") → stop. List them with a distinguishing field (id +
.../api/ username / description) and ask which one. Never pick one yourself and write against it.path_with_namespace
Before fulfilling a request, check that a script actually does it:
- A script does it → use it.
- No script does it → say plainly it's unsupported and stop. There are no tools for project, group, or instance administration (creating or deleting a project, managing members, protected branches, runners, webhooks, or pipeline triggers) — these are out of scope. Work items (epics/tasks/objectives) require a Premium/Ultimate project — if a work-item call returns a tier/availability error, say so plainly and stop; don't fake success. Don't substitute a different script and call it done, and never report success for an action you didn't perform.
该连接器会将名称解析为ID,然后执行写入操作。有两种情况会导致偏向执行操作的Agent出错——在执行写入操作前需处理这两种情况。
在写入通过名称查找的记录之前——统计用户提供的名称(不区分大小写)精确匹配的记录数量。这适用于通过按路径/名称查找的项目、通过按用户名查找的用户,以及通过/查找的标签或里程碑:
listProjectsfindUserslistLabelslistMilestones- 精确匹配1条记录(即使存在其他模糊匹配结果)→ 使用该记录。无需不必要的确认。
- 无精确匹配但有1条明确的模糊匹配结果→ 使用该记录。
- 两条或多条记录匹配度相同(两个项目路径均为,两个用户均名为"Jordan Lee",两个标签均为"backend")→ 停止操作。列出这些记录并附带区分字段(ID +
.../api/用户名/描述),询问用户选择哪一个。切勿自行选择并执行写入操作。path_with_namespace
在执行请求之前,检查脚本是否实际支持该操作:
- 脚本支持该操作→ 使用脚本。
- 无脚本支持该操作→ 明确告知用户该操作不受支持并停止。本连接器不支持项目、群组或实例管理相关操作(创建或删除项目、管理成员、保护分支、运行器、Webhook或流水线触发器)——这些均超出范围。工作项(史诗/任务/目标)需要Premium/Ultimate级别的项目——如果工作项调用返回层级/可用性错误,明确告知用户并停止;切勿伪造成功。切勿替换为其他脚本并声称已完成操作,永远不要报告未执行操作的成功结果。
Auth
认证
Every shape passes auth as one connection selector, not the secret — a string. This connector accepts two resolvers on its single connection:
[<resolver>:]<value>gitlab- — a long-lived GitLab access token (personal, project, or group), read from the named environment variable and sent as the
env:GITLAB_TOKENheader. Mint the token with thePRIVATE-TOKENscope for full read+write access, orapifor a read-only agent (the list/get/search/diff/log tools). Setread_api(defaultGITLAB_HOST) to point the connector at a self-managed or GitLab Dedicated instance; the token is only ever sent to that host.gitlab.com - — Zapier-managed auth, which routes through Zapier's auth, retries, and governance layer and also supports OAuth. A UUID-shaped bare value always claims
zapier:<connection-id>.zapier:
The prefix is optional; a bare value goes to the first resolver that claims it. Each script declares the connections it needs and the resolvers each accepts. The exact syntax for passing a connection (and how to see this connector's resolver list) differs by shape — see the reference you loaded above.
<resolver>:Checking what's already configured first? Don't dump environment values to do it — or prints the value along with the name, leaking a live credential into the transcript if one is set. Check names only () or test a known name directly ().
envenv | grep <name>env | cut -d= -f1 | grep -i <name>[ -n "$VAR_NAME" ]No connection yet? Pick one — and follow the reference's own flow to obtain it; never just ask the user for a connection id or token as if they already have one memorized:
| Load | |
|---|---|
| Pass the credential directly | |
| Route it through a Zapier connection | |
所有场景均通过单个连接选择器传递认证信息,而非密钥——格式为的字符串。该连接器的单个连接接受两种解析器:
[<resolver>:]<value>gitlab- ——长期有效的GitLab访问令牌(个人、项目或群组令牌),从指定环境变量读取,并作为
env:GITLAB_TOKEN头发送。创建令牌时,若需要完整的读写权限,请选择PRIVATE-TOKEN范围;若仅需只读Agent(列表/获取/搜索/差异/日志工具),请选择api范围。设置read_api(默认值为GITLAB_HOST)可将连接器指向自托管或GitLab Dedicated实例;令牌仅会发送至该主机。gitlab.com - ——由Zapier管理的认证,通过Zapier的认证、重试和治理层路由,同时支持OAuth。UUID格式的纯值默认使用
zapier:<connection-id>解析器。zapier:
<resolver>:想要先检查已配置的内容?不要直接输出环境变量值——或会同时打印名称和值,如果已设置有效凭据,会将其泄露到日志中。请仅检查名称()或直接测试已知名称()。
envenv | grep <name>env | cut -d= -f1 | grep -i <name>[ -n "$VAR_NAME" ]还没有连接?选择一种方式——并按照参考文档的流程获取连接;切勿直接向用户索要连接ID或令牌,仿佛他们已经记住了这些信息:
| 加载文档 | |
|---|---|
| 直接传递凭据 | |
| 通过Zapier连接路由 | |
Output format
输出格式
Every script returns a envelope:
{ data, meta }- — the script's result (the shape its
datadeclares; see the reference you loaded above for how to inspect a script's exact schema in your shape).outputSchema - — what validating
meta.outputDataValidationdid:data- — validated, nothing removed.
{ skipped: false, droppedPaths: null } - — validated, but those paths were stripped from
{ skipped: false, droppedPaths: [...], instruction }: fields the script returned from the API that thedatadoesn't declare. If you need them, re-run with output validation skipped.outputSchema - — validation was bypassed;
{ skipped: true }is the raw, unchecked script output.data
Reading dropped fields / . To receive the raw, unvalidated result, opt out of output validation (the exact syntax differs by shape — see the reference you loaded above). Input validation is never skipped.
skipOutputDataValidationTrimming the result / . To shrink a large result down to the fields you need, pass a jq expression that post-processes (again, exact syntax per shape). The jq runs against only, NOT the envelope, so write it rooted at (run the script's — or your shape's equivalent — to see its output schema). The transformed value replaces , is preserved, and the result is NOT re-validated against the output schema.
filterOutputDatadatadata{ data, meta }data--helpdatameta每个脚本都会返回格式的结果包:
{ data, meta }- ——脚本的执行结果(其
data声明的格式;请参阅你加载的参考文档,了解如何在你的场景中查看脚本的确切模式)。outputSchema - ——对
meta.outputDataValidation的验证结果:data- ——已验证,未移除任何内容。
{ skipped: false, droppedPaths: null } - ——已验证,但这些路径已从
{ skipped: false, droppedPaths: [...], instruction }中移除:脚本从API返回的字段未在data中声明。如果需要这些字段,请跳过输出验证重新运行。outputSchema - ——已跳过验证;
{ skipped: true }是原始的、未经过检查的脚本输出。data
读取被移除的字段 / 。若要接收原始的、未验证的结果,请选择跳过输出验证(具体语法因场景而异——请参阅你加载的参考文档)。输入验证永远不会被跳过。
skipOutputDataValidation精简结果 / 。若要将大型结果精简到你需要的字段,请传入一个jq表达式对进行后处理(同样,具体语法因场景而异)。jq仅针对运行,而非结果包,因此请以为根编写表达式(运行脚本的——或你的场景中的等效命令——查看其输出模式)。转换后的值会替换,会被保留,且结果不会重新根据输出模式进行验证。
filterOutputDatadatadata{ data, meta }data--helpdatametaReferences
参考文档
Load the matching reference file before working in that area:
| Reference | Covers | Load it when |
|---|---|---|
| Vendor behaviors that break a naive caller: | Before any write, or when a call returns a non-2xx status, a 405 on merge, an empty/errored pipeline or work-item call, or an unexpected pagination result. |
| GitLab Flavored Markdown: blank-line paragraph breaks, | When composing a GitLab issue or merge-request description, a work-item body, or a note/diff comment. |
在对应场景工作前,请加载匹配的参考文档:
| 参考文档 | 涵盖内容 | 加载时机 |
|---|---|---|
| 可能导致调用出错的厂商特性: | 在执行任何写入操作前,或当调用返回非2xx状态码、合并时返回405错误、流水线或工作项调用返回空结果/错误、或分页结果不符合预期时。 |
| GitLab风格Markdown:空行段落分隔、 | 撰写GitLab议题或合并请求描述、工作项内容、备注/差异评论时。 |