ClawLink

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.

Get started for free
OpenClaw
OpenClaw
ClawLink
ClawLink
GitLab
GitLab
GitLabOAUTH2MCP

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.

58 tools

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.

Prompt for OpenClaw
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.

  1. 1

    Install 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. 2

    Connect GitLab

    One-click OAuth in the dashboard.

  3. 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-plugin

Then 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 login

login 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

ToolWhat it does
Archive project gitlab_archive_projectTool 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_groupTool to create a new group in GitLab. Use when you need to establish a new group for projects or collaboration.
Create project gitlab_create_projectTool to create a new project in GitLab. Implements POST /projects endpoint.
Create project issue gitlab_create_project_issueTool 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_branchTool 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_avatarTool to download a project's avatar image. Use when you need the raw avatar bytes after confirming the project exists.
Erase job gitlab_erase_jobTool 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_refsTool 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_sequenceTool 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_groupTool 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_memberTool 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_groupsGet Groups
Get job details gitlab_get_job_detailsRetrieve details of a single job by its ID within a specified project
Get merge request notes gitlab_get_merge_request_notesFetch comments on a merge request
Get project gitlab_get_projectGet a single project by ID or URL-encoded path
Get project languages gitlab_get_project_languagesList programming languages used in a project with percentages
Get project member gitlab_get_project_memberRetrieve details for a specific project member
Get project member all gitlab_get_project_member_allRetrieve details for a specific project member (including inherited and invited members)
Get project merge request gitlab_get_project_merge_requestFetch full details for a single merge request when the MR IID is known
Get project merge request commits gitlab_get_project_merge_request_commitsGet commits of a merge request
Get project merge requests gitlab_get_project_merge_requestsRetrieve a list of merge requests for a specific project
Get projects gitlab_get_projectsList all projects accessible to the authenticated user
Get projects ID merge requests iid diffs gitlab_get_projects_id_merge_requests_iid_diffsList all diff versions of a merge request
Get repository branch gitlab_get_repository_branchRetrieve information about a specific branch in a project
Get repository branches gitlab_get_repository_branchesRetrieves a list of repository branches for a project
Get single commit gitlab_get_single_commitGet a specific commit identified by the commit hash or name of a branch or tag
Get single pipeline gitlab_get_single_pipelineRetrieve details of a single pipeline by its ID within a specified project
Get user gitlab_get_userRetrieve information about a specific user by their ID
Get user preferences gitlab_get_user_preferencesGet the current user's preferences
Get user status gitlab_get_user_statusGet 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_projects lists 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_project and gitlab_get_group return 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, and gitlab_get_commit_refs answer history questions, and creating a branch is a visible write in a shared repository.
  • Membership is readable. gitlab_get_group_member and gitlab_get_project_member answer access questions without opening the GitLab UI, which is the first call to make on a 403.

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.

ManualClawLink
Connection flowRegister 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 maintenanceYou 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 usabilityYou 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.

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.