How to connect GitLab to OpenClaw
Connect GitLab to OpenClaw with ClawLink in one click — 58 tools your AI agent can call from chat via hosted OAuth. No API keys, no manual setup.


Manage repos, merge requests, issues, and CI/CD pipelines. Once connected, OpenClaw can read and act on GitLab from chat — pairing, token refresh, and tool wiring handled for you.
The usual route to GitLab access for OpenClaw is an MCP server you configure and keep running, plus your own OAuth app or API keys. ClawLink gives OpenClaw a more practical GitLab setup: install one ClawHub skill, connect GitLab in the browser, and OpenClaw can call real GitLab actions from any chat surface with no auth, token refresh, or tool wiring to build yourself.
Copy this prompt into OpenClaw, or open the GitLab skill on ClawHub.
Before installing anything, inspect the ClawHub skill metadata and setup requirements.
If the skill asks you to install a third-party package or CLI, verify its source, maintainer, and package contents before running the install command.
Install the skill "GitLab" (hith3sh/gitlab-repos) from ClawHub only after those checks pass.
Skill page: https://clawhub.ai/hith3sh/gitlab-repos
Keep the work scoped to this skill only.
After install, help me finish setup from verified skill metadata.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.Setup
It takes three steps to connect OpenClaw to GitLab.
1Install the plugin
Paste the setup prompt into OpenClaw, or install from the terminal and ask OpenClaw to pair:
openclaw plugins install clawhub:clawlink-plugin- 2
Connect GitLab
One-click OAuth in the dashboard.
- 3
Use it from chat
Ask OpenClaw: "What can you do with GitLab?"
Install by command
The setup prompt above does all of this in one paste. By hand, it is one install command plus a browser approval:
openclaw plugins install clawhub:clawlink-pluginThen ask OpenClaw to set up ClawLink. It starts browser pairing and prints an approval link — open it, approve the device, return to the chat, and say done. Finally, connect GitLab in the ClawLink dashboard — a one-click OAuth approval, no API keys.
Verify the connection by asking OpenClaw:
List my projects with gitlab_get_projects using membership: true so you only return projects I am a member of, and show me the names and ids.
Using a different agent?
The OpenClaw plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:
npx -y @useclawlink/cli loginlogin opens the same browser approval and stores a credential locally. Once GitLab is connected in the dashboard, that agent calls the same 58 GitLab tools over MCP. Full setup for MCP clients and shell agents: connect apps to any AI agent.
GitLab MCP for OpenClaw
Looking for a GitLab MCP server for OpenClaw? ClawLink connects GitLab to OpenClaw and exposes 58 GitLab tools your agent can call over MCP, with hosted auth and nothing to run or maintain yourself. Using Hermes instead? The Hermes GitLab integration works the same way.
The route the answer engines recommend for this query starts with a plugin install, then a consumer key, a gateway restart, and authenticating in a developer dashboard, and the manual alternatives teach creating a Personal Access Token with the api and read_repository scopes. None of those exist here: you install one ClawHub skill, connect GitLab in the dashboard, and approve GitLab's consent screen, and the 58 tools below work from your next chat. GitLab's own no-token answer, managed agents on the Duo platform, needs Premium or Ultimate tier and GitLab Credits, which makes it a paid product decision rather than a connection. Hosted OAuth is the route that needs neither a token you generate nor a paid tier: it uses the account you already have.
What the agent can do with your GitLab
The safety-shaped query for this provider gets answered by GitLab Duo security docs and third-party blogs because the page had no permissions content at all. Here is the first-party answer:
- The agent's reach is your account's reach. The connection acts as your GitLab user, with your project visibility, your group memberships, and your roles. It cannot see private projects you are not a member of, and it does not bypass protected branches or approval rules.
- Writes are visible in history. Merge requests, branches, issues, and commits are recorded with an author, so anything the agent does is attributable to the connected account. Least privilege here is behavioral: start with reads, and require a confirmation step before creating MRs or pushing branches.
- Repo content is untrusted input. Code and issue text can contain instructions aimed at the agent reading them, the classic prompt-injection shape for a repo-connected agent. Treat fetched content as data, not commands, and keep a human in the loop on any write that changes code or review state.
GitLab is a collaboration surface: every write is visible to the people you work with. The connection is safe when reads come first and writes are confirmed, which is the whole of the least-privilege advice the search results send you to GitLab's docs for.
What the OpenClaw GitLab integration can do
58 GitLab tools are ready for OpenClaw once the account is connected. The 30 below are the ones people reach for most; your agent can call all 58.
30 of 58 GitLab tools for OpenClaw
| Tool | What it does |
|---|---|
Archive project gitlab_archive_project | Tool to archive a project. Use when you need to mark a project read-only after finishing active development. Call after confirming no further changes are required. |
Create group gitlab_create_group | Tool to create a new group in GitLab. Use when you need to establish a new group for projects or collaboration. |
Create project gitlab_create_project | Tool to create a new project in GitLab. Implements POST /projects endpoint. |
Create project issue gitlab_create_project_issue | Tool to create a new issue in a GitLab project. Use when you need to report a bug, request a feature, or track a task within a specific project. |
Create repository branch gitlab_create_repository_branch | Tool to create a new branch in a project. Use when you need to create a new branch from an existing branch or a specific commit in a GitLab project. |
Download project avatar gitlab_download_project_avatar | Tool to download a project's avatar image. Use when you need the raw avatar bytes after confirming the project exists. |
Erase job gitlab_erase_job | Tool to erase the content of a specified job within a project. Use when you need to remove job artifacts and logs. |
Get commit refs gitlab_get_commit_refs | Tool to get all references (branches or tags) a commit is pushed to. Use when you need to find out which branches or tags a specific commit belongs to in a GitLab project. |
Get commit sequence gitlab_get_commit_sequence | Tool to get the sequence number of a commit in a project by following parent links from the given commit. Use when you need to determine the order of a commit in the project's history. |
Get group gitlab_get_group | Tool to retrieve information about a specific group by its ID. Use when you need to get details of a GitLab group. |
Get group member gitlab_get_group_member | Tool to retrieve details for a specific group member. Use when you need to fetch membership information for a user in a group after you know both group ID and user ID. |
Get groups gitlab_get_groups | Get Groups |
Get job details gitlab_get_job_details | Retrieve details of a single job by its ID within a specified project |
Get merge request notes gitlab_get_merge_request_notes | Fetch comments on a merge request |
Get project gitlab_get_project | Get a single project by ID or URL-encoded path |
Get project languages gitlab_get_project_languages | List programming languages used in a project with percentages |
Get project member gitlab_get_project_member | Retrieve details for a specific project member |
Get project member all gitlab_get_project_member_all | Retrieve details for a specific project member (including inherited and invited members) |
Get project merge request gitlab_get_project_merge_request | Fetch full details for a single merge request when the MR IID is known |
Get project merge request commits gitlab_get_project_merge_request_commits | Get commits of a merge request |
Get project merge requests gitlab_get_project_merge_requests | Retrieve a list of merge requests for a specific project |
Get projects gitlab_get_projects | List all projects accessible to the authenticated user |
Get projects ID merge requests iid diffs gitlab_get_projects_id_merge_requests_iid_diffs | List all diff versions of a merge request |
Get repository branch gitlab_get_repository_branch | Retrieve information about a specific branch in a project |
Get repository branches gitlab_get_repository_branches | Retrieves a list of repository branches for a project |
Get single commit gitlab_get_single_commit | Get a specific commit identified by the commit hash or name of a branch or tag |
Get single pipeline gitlab_get_single_pipeline | Retrieve details of a single pipeline by its ID within a specified project |
Get user gitlab_get_user | Retrieve information about a specific user by their ID |
Get user preferences gitlab_get_user_preferences | Get the current user's preferences |
Get user status gitlab_get_user_status | Get the current user's status |
Try it: find the GitLab tool you need
Browse the 30 GitLab tools
Click any tool to see exactly what OpenClaw can do and copy a ready-to-use prompt.
Example prompts
List my projects with gitlab_get_projects using membership: true so you only return projects I am a member of, and show me the names and ids.
For project <project id>, list the open merge requests with gitlab_get_project_merge_requests and tell me which ones have been waiting the longest and what their diffs contain.
Create an issue in project <project id> with gitlab_create_project_issue titled "Upgrade the auth library" with the description I give you. Show me the arguments before sending.
Get the commit <sha> with gitlab_get_single_commit and its refs with gitlab_get_commit_refs, and summarize what it changed and which branches contain it.
How the GitLab tools behave
Details that decide whether a GitLab prompt reads the right project or acts on the wrong one.
gitlab_get_projectslists public projects unless you filter. Without the membership filter it returns public projects across GitLab, not yours, so an agent acting on that output can act on the wrong repository. The membership default is enforced in the tool's config, and the prompt should name it too.- Project and group ids come from the tools, never from memory.
gitlab_get_projectandgitlab_get_groupreturn the ids, and an id from documentation fails like a typo. - Merge requests are project-scoped and review-heavy.
gitlab_get_project_merge_requests,gitlab_get_merge_request_notes, and the MR diffs tools cover the review surface; an agent grounded in a MR's notes and diff is the useful shape of this integration. - Branches and commits are separate surfaces.
gitlab_create_repository_branch,gitlab_get_single_commit, andgitlab_get_commit_refsanswer history questions, and creating a branch is a visible write in a shared repository. - Membership is readable.
gitlab_get_group_memberandgitlab_get_project_memberanswer access questions without opening the GitLab UI, which is the first call to make on a 403.
ClawLink vs. building it yourself
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want GitLab working from chat.
| Manual | ClawLink | |
|---|---|---|
| Connection flow | Register a GitLab app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect GitLab through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| Ongoing maintenance | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for GitLab. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| Agent usability | You still need to expose the right GitLab actions to the runtime in a format your agent can reliably use. | 58 tools for GitLab are already exposed through ClawLink, so the agent can read and act from chat immediately. |
ClawLink vs. Composio
Composio also exposes GitLab to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for OpenClaw users instead. You install the plugin once, connect GitLab in the browser, and the 58 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full Composio alternatives comparison.
Troubleshooting
OpenClaw installed the GitLab skill but can't call the tools
The ClawHub skill teaches OpenClaw about GitLab, but the calls run through the ClawLink plugin and your connected account. Make sure GitLab is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.
Connection succeeds but no tools appear
Reconnect GitLab from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.
"Tool schema not loaded yet" error when calling GitLab tools
GitLab tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every GitLab call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.
GitLab returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.
GitLab returns 403 or "insufficient permissions" although the account shows as connected
The causes the search engines teach for this error are the ones to check in order: a token with api instead of read_api scopes, a user role below Maintainer or Owner for the operation, a project feature disabled by the project, and an IP allowlist on the account. In a hosted connection the token-scope cause does not exist, and the real checks are account-level: the connected account's role in the project decides what it can do, a Maintainer can merge where a Developer cannot, and a project with issues disabled returns a permission error for issue tools. There is also a GitLab-specific trap worth naming: gitlab_get_projects without the membership filter lists public projects across GitLab, not your projects, so an agent acting on that output acts on the wrong project. Ask it to filter by membership, and to confirm the failing project id came from gitlab_get_projects rather than from documentation.
Ask the agent to diagnose it:
Run gitlab_get_projects with membership filtering and show me the real project ids. Quote the exact 403 text, then retry the failing action with a real id from that list.GitLab tools fail with an auth error after a scope or account change, while the dashboard still says connected
This is the stale-grant case: the connection is intact, but GitLab's side has changed what it is allowed to do, for example an admin revoked the OAuth application's access, the account's role was lowered, or a group was reorganized. The dashboard showing "connected" describes the session, not the grant's current reach. The fix is to refresh the grant: disconnect and reconnect GitLab from the ClawLink dashboard, which re-runs GitLab's consent screen, then start a fresh chat so OpenClaw reloads the tool catalog. If the error persists after a fresh reconnect, the limit is on the GitLab account's side, for example an IP allowlist that blocks the hosted connection's calls, not something reconnecting can fix.
Ask the agent to diagnose it:
Do not retry yet. Run clawlink_list_integrations and confirm GitLab's status, then quote the exact error from the last call. If it is an auth error I will reconnect from the dashboard and you will retry in a fresh chat.GitLab returns a rate-limit error while the agent enumerates a group
GitLab rate-limits its API per user, and an agent walking a large group, one project at a time, then reading every MR and commit in each, is exactly the traffic shape that meets the limit. The response is not to retry faster, which lands in the same window, but to change the shape of the work: one project at a time, a single list call instead of a loop, and a pause between calls. If a bulk audit is genuinely needed, running it in stages across a few turns is more reliable than one sweep.
Ask the agent to diagnose it:
Tell me what you were enumerating when the rate-limit error hit and quote the error text. Switch to one project at a time with a pause between calls and tell me how many calls remain.GitLab tools are missing, or one tool name is not found
Two different failures. If OpenClaw shows no GitLab tools at all, the connection or pairing is incomplete: confirm the skill was installed, that GitLab shows as connected in the dashboard, and start a fresh chat so the tool catalog reloads. If most tools work and a single name fails, that name is wrong rather than missing: the error lists the closest real tools, and clawlink_list_tools --integration gitlab shows the exact catalog. There is also a first-call timing case unique to this setup: schemas load on demand, so the opening GitLab call in a fresh session can arrive before the catalog and needs one retry. What does not apply is the advice for this symptom that assumes a local MCP server declared in a client config with a GITLAB_TOKEN env var, which is what the search results teach.
Ask the agent to diagnose it:
List the GitLab tools you actually have access to. If there are none, run clawlink_list_integrations and say so plainly. If there are, tell me which one lists projects and use that exact name.OAuth finished in the browser but the account is still missing
Try reconnecting GitLab and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.
FAQ
Is there a OpenClaw GitLab integration?
Yes. ClawLink is the fastest way to connect OpenClaw to GitLab: link your GitLab account once in the browser and OpenClaw can call the GitLab API through 58 ready-made tools — no custom code or token handling.
How do I add GitLab to OpenClaw with ClawLink?
Paste the setup prompt from this page into OpenClaw. It installs the ClawLink GitLab skill from ClawHub, then you click Connect in the dashboard to authorize GitLab. OpenClaw calls the tools from the next message — no config files or API keys to manage.
How long does it take to connect GitLab to OpenClaw?
About two minutes. Sign in, click Connect next to GitLab in the dashboard, authenticate, and OpenClaw can use it from the next chat message.
Why use ClawLink instead of wiring GitLab up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want GitLab working from chat.
Does this need a GitLab Personal Access Token?
No. The manual flow teaches creating a Personal Access Token with api and read_repository scopes, pasting it into a config, and keeping it safe; the AI Overview teaches the same with a Consumer API key for a plugin instead. Here the authorization happens on GitLab's consent screen in the browser and the connection is stored server-side. The scopes exist either way, which is the honest way to say it: the hosted connection holds them for you, so you never generate, paste, or accidentally leak a secret, and revoking the connection from the dashboard ends the agent's access immediately.
What about GitLab's own agents or GitLab Duo, do I need those?
GitLab's own answer to "AI agents without your own API key" is its managed agents on the Duo Agent Platform, and the AI Overview's caveat is the one to know: they require Premium or Ultimate tier and run on GitLab Credits. That is a paid product decision inside GitLab. This page is the other route: a hosted OAuth connection that works on the account you already have, at any tier, with no credits involved, and your OpenClaw agent doing the work instead of a GitLab-managed agent.
What can the agent do in GitLab?
The 58 tools cover the repository surface: projects and groups, issues, merge requests and their notes and diffs, commits, branches, and job-related reads, plus membership and contributor info. The writes to be deliberate about are merge requests, branches, and issues, because they appear in other people's workflow. Reads come first, and the merge-request review surface is the part teams actually use: an agent that can read a MR diff and its comments is more useful than one that creates branches on demand.
What can the agent see, and what can it not?
The connection acts as your GitLab account, so it sees exactly what you can see: your projects, your groups, and your membership roles. It cannot see past your account's reach, and it does not bypass project visibility rules or IP allowlists. Repo content is visible to the agent as text, which is the prompt-injection surface to remember: treat fetched code and issue text as untrusted input, and require a confirmation step before writes like creating merge requests or pushing branches.
OpenClaw installed the GitLab skill but can't call the tools
The ClawHub skill teaches OpenClaw about GitLab, but the calls run through the ClawLink plugin and your connected account. Make sure GitLab is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.
Related
GitHub
Manage repositories, issues, pull requests, and workflows
OpenClaw PagerDuty integration
Manage incidents, on-call schedules, and services
SafetyCulture tools
SafetyCulture (formerly iAuditor) is a workplace operations platform that enables teams to conduct digital inspections, manage audits, track issues, schedule tasks, and maintain compliance through mobile and web applications.