---
title: "GitLab MCP server for AI agents - actionlake"
description: "Give Claude 1,060 GitLab actions through one MCP server: projects, groups, CI. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/gitlab
updated: 2026-10-10
---

Connectors · Developer & infrastructure

# GitLab MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to GitLab and the rest of your systems. It gives your agent 1,060 GitLab actions (415 reads, 491 writes and 154 that wait for a confirmation) and holds the GitLab credential itself, so the agent never does. It paces GitLab's limits and records every call.

[Connect GitLab free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "gitlab.users.list",
  intent: "check which GitLab account is connected"
}
# List users · read · 1 upstream call
```

- 1,060 actions in one signed file
- 415 read look, never change
- 491 write create and update
- 154 wait for a yes destructive, confirmed first

Set up

## Connect GitLab in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect GitLab.
   Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `token` GitLab personal, project or group access token
   - `host` Where your GitLab lives: your host
   ```
   account { op: "connections.requirements", service: "gitlab" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "gitlab.users.list" }
   # list users · read · 1 upstream call
   check { action: "gitlab.projects.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

GitLab at a glance

**Sign-in**

Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`token`

**Setup fields**

`host`

**Limits we pace to**

2,000 calls a minute, per connection

**API covered**

GitLab API v4, at your GitLab instance's API base URL, which you enter when connecting (path /api/v4)

**Built from**

GitLab's documentation, read 19 September 2026[gitlab.com](https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/openapi/openapi_v2.yaml)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

398 of 415 reads, for up to an hour; a write clears what it affects

**Ready-made plans**

12 in the store

**Shared entities**

6, so ask can line GitLab up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in GitLab.

1,060 actions in 46 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **415** read look, never change
- **491** write create and update
- **154** destructive wait for a confirmation

1. ### Projects
   411
   125 read · 224 write · 62 destructive
   List all projects · List all release links · List all users who starred a project · List all forks of a project
2. ### Groups
   196
   64 read · 103 write · 29 destructive
   List all groups · List all provisioned users · List all SAML users · List all projects in a group
3. ### CI
   72
   36 read · 24 write · 12 destructive
   List runner's projects · List all instance variables · List all group variables · List all pipeline variables
4. ### Merge requests
   70
   36 read · 27 write · 7 destructive
   List all issues that close on merge · List all issues related to the merge request · List all merge request pipelines · List all group merge requests
5. ### Issues
   55
   28 read · 20 write · 7 destructive
   List all project issues · List all notes · Create an issue · List all issues for a group
6. ### Repository
   55
   30 read · 17 write · 8 destructive
   Retrieve contributors metrics · Retrieve repository health statistics · List all repository branches · List all references a commit is pushed to
7. ### Users
   53
   24 read · 19 write · 10 destructive
   List users · List a user's followers · List a user's following · List all projects contributions for a user
8. ### Admin
   16
   8 read · 7 write · 1 destructive
   GET /admin/batched_background_migrations · Get the list of batched background operations · GET /admin/batched_background_migrations/{id} · Retrieve a batched background operation

**38 more areas · 132 actions**

- Geo **10**
- Hooks **10**
- Integrations **9**
- Namespaces **8**
- Personal access tokens **8**
- Snippets **8**
- Bulk imports **7**
- Usage data **7**
- Topics **6**
- Broadcast messages **5**
- Feature flags **5**
- Import **5**
- Application **4**
- Applications **4**
- Features **4**
- Offline exports **3**
- Todos **3**
- Audit events **2**
- Deploy keys **2**
- Keys **2**
- Organizations **2**
- Suggestions **2**
- Activity **1**
- Container registry event **1**
- Databases **1**
- Deploy tokens **1**
- Discover cert based clusters **1**
- GLQL **1**
- Markdown **1**
- Metadata **1**
- Offline imports **1**
- Pages **1**
- Registry **1**
- Search **1**
- Slack **1**
- User counts **1**
- Version **1**
- Web commits **1**

GitLab's own MCP server

## GitLab's MCP server, or actionlake?

GitLab serves an MCP server from your own GitLab at /api/v4/mcp, generally available from GitLab 19.5 on every tier, once an owner or admin allows it. It signs in with OAuth or a fine-grained personal access token.

Use GitLab's server when one person wants to work in GitLab from their own AI client. Use actionlake when you also want GitLab behind the same endpoint as your other systems: a key per agent with allowed actions and a spending cap, a named person's approval before destructive actions, a sealed record of every call, and one ask across GitLab and another system.

Source: [GitLab's documentation](https://docs.gitlab.com/user/model_context_protocol/mcp_server/), checked 22 October 2026.

Top actions

## The GitLab API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 378 of GitLab's 406 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `gitlab.users.list` List users | List users | read | `identity.user.list` 474 connectors |
| `gitlab.projects.list` List all projects | List all projects | read | `devops.repository.list` 28 connectors |
| `gitlab.projects.releases_assets_links_list` List all release links | List all release links | read | `devops.artifact.list` 17 connectors |
| `gitlab.groups.list` List all groups | List all groups | read | `identity.group.list` 262 connectors |
| `gitlab.projects.issues_list` List all project issues | List all project issues | read | `work.task.list` 122 connectors |
| `gitlab.users.followers_list` List a user's followers | List a user's followers | read | `identity.user.list` 474 connectors |
| `gitlab.projects.forks_list` List all forks of a project | List all forks of a project | read | `devops.repository.list` 28 connectors |
| `gitlab.projects.create` Create a project | Create a project | write | `devops.repository.create` 18 connectors |
| `gitlab.projects.user_create` Create a project for a user | Create a project for a user | write | `devops.repository.create` 18 connectors |
| `gitlab.projects.packages_package_files_list` List all package files | List all package files | read | `devops.artifact.list` 17 connectors |
| `gitlab.projects.issues_create` Create an issue | Create an issue | write | `work.task.create` 127 connectors |
| `gitlab.projects.delete` Delete a project | Delete a project | destructive | `devops.repository.delete` 20 connectors |

Try it

## Prompts to paste into Claude.

Each one names the GitLab actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which GitLab tasks are overdue, and who owns each one?
   calls `gitlab.projects.issues_list`
2. Plan read
   Snapshot the health of one project in GitLab.
   calls `gitlab.projects.storage_get` `gitlab.projects.environments_list` `gitlab.projects.protected_branches_list` `gitlab.projects.hooks_list` `gitlab.projects.integrations_list` +1 more
3. Plan read
   Assemble everything a reviewer needs on one merge request in GitLab.
   calls `gitlab.projects.merge_requests_changes_get` `gitlab.projects.merge_requests_diffs_list` `gitlab.projects.merge_requests_approval_state_get` `gitlab.projects.merge_requests_pipelines_list` `gitlab.projects.merge_requests_time_stats_get`
4. Write write
   Create a project in GitLab. Show me exactly what you will send before you save it.
   calls `gitlab.projects.create`

The plan store

## Ready-made plans for GitLab.

12 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

1. ### Report on open epics across a group
   Use it when Someone asks how the epics in a GitLab group are tracking.
   **Effect**
   read
   **Steps**
   4 · loops
   **Needs**
   group id
   **Install**
   `gitlab-group-epic-status-report`
2. ### Assemble everything a reviewer needs on one merge request
   Use it when You need the full picture of a merge request before reviewing or merging it.
   **Effect**
   read
   **Steps**
   5
   **Needs**
   mr iid and project id
   **Install**
   `gitlab-merge-request-review-pack`
3. ### Snapshot the health of one project
   Use it when You are taking over or reviewing a GitLab project and need its configuration and activity at a glance.
   **Effect**
   read
   **Steps**
   6
   **Needs**
   project id
   **Install**
   `gitlab-project-health-snapshot`
4. ### Publish a wiki page after review
   Use it when A documentation page needs adding to a project wiki and someone should approve the wording first.
   A person decides Publish wiki page '_title_' to project _project id_.
   **Effect**
   write
   **Steps**
   4
   **Needs**
   content, project id and title
   **Install**
   `gitlab-publish-wiki-page`
5. ### Start a pipeline and wait for it to finish
   Use it when You want to kick off a CI pipeline on a branch and get the result rather than just the pipeline id.
   **Effect**
   write
   **Steps**
   4
   **Needs**
   ci content, project id and ref
   **Install**
   `gitlab-run-pipeline-and-wait`
6. ### Open a triage issue and record context on it
   Use it when Someone reports a problem and you want it filed in GitLab as an issue with a triage note attached.
   **Effect**
   write
   **Steps**
   4
   **Needs**
   body, project id, reported by and title
   **Install**
   `gitlab-triage-new-issue`
7. ### Approve pending access requests for a group
   Use it when Someone has requested access to a GitLab group and it needs a person to sign off before granting it.
   A person decides Grant _username_ access level _access level_ on group _group id_.
   **Effect**
   write
   **Steps**
   5
   **Needs**
   access level, group id and user id
   **Install**
   `gitlab-approve-group-access-requests`
8. ### Retry the latest pipeline after a human signs off
   Use it when A pipeline failed on a branch and you want someone to look at the failures before re-running it.
   A person decides Retry pipeline _id_ on _ref_ — _failed count_ failed tests in the last run.
   **Effect**
   write
   **Steps**
   5
   **Needs**
   project id and ref
   **Install**
   `gitlab-retry-failed-pipeline`
9. ### Build release notes from a tag and attach a link
   Use it when A tag has been cut and you need release notes plus a download link attached to the release.
   A person decides Attach asset '_asset name_' at _asset url_ to release _tag name_.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   asset name, asset url, project id and tag name
   **Install**
   `gitlab-release-notes-from-tag`
10. ### Activate a user and give them an SSH key and email
    Use it when A new starter's GitLab account needs activating with their SSH key and work email.
    A person decides Activate _username_ and add SSH key '_key title_' plus email _email_.
    **Effect**
    write
    **Steps**
    7
    **Needs**
    email, key title, public key and user id
    **Install**
    `gitlab-onboard-user-ssh-key`
11. ### Remove a broadcast message after sign-off
    Use it when A banner or broadcast message needs taking down from the GitLab instance.
    A person decides Delete broadcast message _message id_ from the instance — requested by _username_.
    **Effect**
    destructive
    **Steps**
    4
    **Needs**
    message id
    **Install**
    `gitlab-delete-stale-broadcast-message`
12. ### Retire a remote mirror once its target is confirmed dead
    Use it when A push mirror to another host is obsolete and needs removing with a person signing off.
    A person decides Delete remote mirror _url_ on project _project id_ — replication to it stops immediately.
    **Effect**
    destructive
    **Steps**
    4
    **Needs**
    mirror id and project id
    **Install**
    `gitlab-retire-remote-mirror`

install a plan

```
account { op: "plans.install", slug: "gitlab-group-epic-status-report" }
# then ask for it by name; a schedule can run it on a timetable
```

Governance for GitLab

## Destructive actions wait for a yes.

154 GitLab actions are destructive. The first 10:

- Delete a project `gitlab.projects.delete`
- Remove a shared project from a group `gitlab.groups.shared_projects_delete`
- Transfer a group `gitlab.groups.transfer_create`
- POST /groups/{id}/transfer_to_organization `gitlab.groups.transfer_to_organization_create`
- Delete a user `gitlab.users.delete`
- Delete a release link `gitlab.projects.releases_assets_links_delete`
- Delete a package file `gitlab.projects.packages_package_files_delete`
- Schedule a group for deletion `gitlab.groups.delete`
- Delete an issue `gitlab.projects.issues_delete`
- Transfer a project to another namespace `gitlab.projects.transfer_update`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do gitlab.projects.delete confirm_policy: **human**

Delete a project?

**intent:** the user asked me to delete a project

run suspended · waiting for a named person · key _gitlab-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "gitlab-agent",
  allowed_actions: ["gitlab.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "gitlab.projects.delete", approver: "lead@example.com" },
    { match: "gitlab.groups.shared_projects_delete", approver: "lead@example.com" },
    { match: "gitlab.groups.transfer_create", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to GitLab only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What GitLab costs on actionlake.

Every GitLab action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call GitLab refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 1,060 GitLab actions
- 1,060 actions page each page of a long list is one call
- 398 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every GitLab action.

1,060 actions by area: the id your agent calls, what it does, and its effect.

**Projects 411**

- `gitlab.projects.forks_list` List all forks of a project read
- `gitlab.projects.list` List all projects read
- `gitlab.projects.releases_assets_links_list` List all release links read
- `gitlab.projects.starrers_list` List all users who starred a project read
- `gitlab.projects.access_requests_approve_update` Approve an access request write
- `gitlab.projects.access_requests_create` Request access to a project write
- and 405 more in this area

**Groups 196**

- `gitlab.groups.list` List all groups read
- `gitlab.groups.projects_list` List all projects in a group read
- `gitlab.groups.provisioned_users_list` List all provisioned users read
- `gitlab.groups.saml_users_list` List all SAML users read
- `gitlab.groups.access_requests_approve_update` Approve an access request write
- `gitlab.groups.access_requests_create` Request access to a group write
- and 190 more in this area

**CI 72**

- `gitlab.admin.ci_variables_list` List all instance variables read
- `gitlab.groups.variables_list` List all group variables read
- `gitlab.projects.pipelines_variables_list` List all pipeline variables read
- `gitlab.runners.projects_list` List runner's projects read
- `gitlab.admin.ci_variables_create` Create instance variable write
- `gitlab.admin.ci_variables_delete` Delete instance variable destructive
- and 66 more in this area

**Merge requests 70**

- `gitlab.groups.merge_requests_list` List all group merge requests read
- `gitlab.projects.merge_requests_closes_issues_list` List all issues that close on merge read
- `gitlab.projects.merge_requests_pipelines_list` List all merge request pipelines read
- `gitlab.projects.merge_requests_related_issues_list` List all issues related to the merge request read
- `gitlab.groups.milestones_merge_requests_list` Get all merge requests assigned to a single milestone read
- `gitlab.merge_requests.list` List all merge requests read
- and 64 more in this area

**Issues 55**

- `gitlab.groups.issues_list` List all issues for a group read
- `gitlab.projects.issues_create` Create an issue write
- `gitlab.projects.issues_list` List all project issues read
- `gitlab.projects.issues_notes_list` List all notes read
- `gitlab.groups.issues_statistics_get` Retrieve issues statistics for a group read
- `gitlab.groups.milestones_issues_list` Get all issues assigned to a single milestone read
- and 49 more in this area

**Repository 55**

- `gitlab.projects.repository_branches_list` List all repository branches read
- `gitlab.projects.repository_commits_refs_list` List all references a commit is pushed to read
- `gitlab.projects.repository_contributors_list` Retrieve contributors metrics read
- `gitlab.projects.repository_health_get` Retrieve repository health statistics read
- `gitlab.projects.registry_protection_repository_rules_create` Create a container repository protection rule write
- `gitlab.projects.registry_protection_repository_rules_delete` Delete a container repository protection rule destructive
- and 49 more in this area

**Users 53**

- `gitlab.users.contributed_projects_list` List all projects contributions for a user read
- `gitlab.users.followers_list` List a user's followers read
- `gitlab.users.following_list` List a user's following read
- `gitlab.users.list` List users read
- `gitlab.user.activities_list` Get user activities read
- `gitlab.user.emails_create` Add an email to the current user write
- and 47 more in this area

**Admin 16**

- `gitlab.admin.batched_background_migrations_get` GET /admin/batched_background_migrations/{id} read
- `gitlab.admin.batched_background_migrations_list` GET /admin/batched_background_migrations read
- `gitlab.admin.batched_background_operations_get` Retrieve a batched background operation read
- `gitlab.admin.batched_background_operations_list` Get the list of batched background operations read
- `gitlab.admin.batched_background_migrations_pause_update` PUT /admin/batched_background_migrations/{id}/pause write
- `gitlab.admin.batched_background_migrations_resume_update` PUT /admin/batched_background_migrations/{id}/resume write
- and 10 more in this area

**Geo 10**

- `gitlab.geo.failures_create` Internal endpoint that reports persistent verification failures to the primary write
- `gitlab.geo.repositories_pipeline_refs_list` Used by secondary runners to verify the secondary instance has the very latest version read
- `gitlab.geo.retrieve_get` Internal endpoint that returns a replicable file read
- `gitlab.geo.status_create` Internal endpoint that posts the current node status write
- `gitlab.geo.node_proxy_graphql_create` Query the GraphQL endpoint of an existing Geo node write
- `gitlab.geo.proxy_get` Determine if a Geo site should proxy requests read
- and 4 more in this area

**Hooks 10**

- `gitlab.hooks.create` Create a system hook write
- `gitlab.hooks.custom_headers_update` Update a custom header write
- `gitlab.hooks.list` List all system hooks read
- `gitlab.hooks.update` Update a system hook write
- `gitlab.hooks.custom_headers_delete` Delete a custom header destructive
- `gitlab.hooks.delete` Delete a system hook destructive
- and 4 more in this area

**Integrations 9**

- `gitlab.integrations.jira_connect_subscriptions_create` Subscribe a namespace to a JiraConnectInstallation write
- `gitlab.integrations.jira_forge_installation_forge_token_create` Register the GitLab for Jira (Forge) system token for direct dev-info sync write
- `gitlab.integrations.jira_forge_subscriptions_create` Create a GitLab for Jira (Forge) namespace subscription write
- `gitlab.integrations.jira_forge_subscriptions_get` List GitLab for Jira (Forge) namespace subscriptions read
- `gitlab.integrations.jira_forge_installation_update` Update the GitLab for Jira (Forge) installation instance URL write
- `gitlab.integrations.jira_forge_subscriptions_delete` Delete a GitLab for Jira (Forge) namespace subscription destructive
- and 3 more in this area

**Namespaces 8**

- `gitlab.namespaces.exists_get` Verify namespace availability read
- `gitlab.namespaces.get` Retrieve namespace details read
- `gitlab.namespaces.list` List all namespaces read
- `gitlab.namespaces.update` Update a namespace write
- `gitlab.namespaces.gitlab_subscription_get` Retrieve namespace subscription read
- `gitlab.namespaces.storage_limit_exclusion_create` Creates a storage limit exclusion for a Namespace write
- and 2 more in this area

**Personal access tokens 8**

- `gitlab.personal_access_tokens.get` Retrieve a personal access token read
- `gitlab.personal_access_tokens.list` List all personal access tokens read
- `gitlab.personal_access_tokens.self_associations_list` List all token associations read
- `gitlab.personal_access_tokens.self_get` Retrieve a personal access token read
- `gitlab.personal_access_tokens.delete` Revoke a personal access token destructive
- `gitlab.personal_access_tokens.rotate_create` Rotate a personal access token destructive
- and 2 more in this area

**Snippets 8**

- `gitlab.snippets.all_list` List all snippets read
- `gitlab.snippets.create` Create a snippet write
- `gitlab.snippets.list` List all snippets for current user read
- `gitlab.snippets.public_list` List all public snippets read
- `gitlab.snippets.delete` Delete snippet destructive
- `gitlab.snippets.get` Retrieve a snippet read
- and 2 more in this area

**Bulk imports 7**

- `gitlab.bulk_imports.entities_entities_list` List all group or project migration entities read
- `gitlab.bulk_imports.entities_failures_get` List all failed import records for a migration entity read
- `gitlab.bulk_imports.entities_list` List all group or project migration entities read
- `gitlab.bulk_imports.list` List all group or project migrations read
- `gitlab.bulk_imports.cancel_apply` Cancel a migration destructive
- `gitlab.bulk_imports.entities_get` Retrieve a group or project migration entity read
- and 1 more in this area

**Usage data 7**

- `gitlab.usage_data.increment_counter_create` Track usage data event write
- `gitlab.usage_data.increment_unique_users_create` POST /usage_data/increment_unique_users write
- `gitlab.usage_data.track_event_create` Track an internal GitLab event write
- `gitlab.usage_data.track_events_create` Track multiple internal GitLab events write
- `gitlab.usage_data.non_sql_metrics_get` List all non-SQL metrics read
- `gitlab.usage_data.queries_get` List all Service Ping SQL queries read
- and 1 more in this area

**Topics 6**

- `gitlab.topics.create` Create a project topic write
- `gitlab.topics.get` Retrieve a topic read
- `gitlab.topics.list` List all topics read
- `gitlab.topics.update` Update a project topic write
- `gitlab.topics.delete` Delete a project topic destructive
- `gitlab.topics.merge_create` Merge topics destructive

**Broadcast messages 5**

- `gitlab.broadcast_messages.create` Create a broadcast message write
- `gitlab.broadcast_messages.get` Retrieve a broadcast message read
- `gitlab.broadcast_messages.list` List all broadcast messages read
- `gitlab.broadcast_messages.update` Update a broadcast message write
- `gitlab.broadcast_messages.delete` Delete a broadcast message destructive

**Feature flags 5**

- `gitlab.feature_flags.unleash_client_features_get` GET /feature_flags/unleash/{project_id}/client/features read
- `gitlab.feature_flags.unleash_client_metrics_create` POST /feature_flags/unleash/{project_id}/client/metrics write
- `gitlab.feature_flags.unleash_features_get` Get a list of features (v2 client support) read
- `gitlab.feature_flags.unleash_get` GET /feature_flags/unleash/{project_id} read
- `gitlab.feature_flags.unleash_client_register_create` POST /feature_flags/unleash/{project_id}/client/register write

**Import 5**

- `gitlab.import.bitbucket_create` Import repository from Bitbucket Cloud write
- `gitlab.import.bitbucket_server_create` Import repository from Bitbucket Server write
- `gitlab.import.github_create` Import a repository from GitHub write
- `gitlab.import.github_gists_create` Import GitHub gists into GitLab snippets write
- `gitlab.import.github_cancel_apply` Cancel a GitHub project import destructive

**Application 4**

- `gitlab.application.appearance_get` GET /application/appearance read
- `gitlab.application.plan_limits_get` Get current plan limits read
- `gitlab.application.plan_limits_update` Change plan limits write
- `gitlab.application.statistics_get` Retrieve application statistics read

**Applications 4**

- `gitlab.applications.create` Create a new application write
- `gitlab.applications.delete` Delete an application destructive
- `gitlab.applications.list` Get applications read
- `gitlab.applications.renew_secret_create` Renew an application secret write

**Features 4**

- `gitlab.features.create` Create or update a feature flag write
- `gitlab.features.definitions_list` List all feature flag definitions read
- `gitlab.features.delete` Delete a feature destructive
- `gitlab.features.list` List all feature flags read

**Offline exports 3**

- `gitlab.offline_exports.create` Start a new offline transfer export write
- `gitlab.offline_exports.get` Get offline transfer export details read
- `gitlab.offline_exports.list` List all offline transfer exports read

**Todos 3**

- `gitlab.todos.list` List all to-do items read
- `gitlab.todos.mark_as_done_create` Mark all to-do items as done write
- `gitlab.todos.mark_as_done_mark_as_done_create` Mark a to-do item as done write

**Audit events 2**

- `gitlab.audit_events.get` Get a single instance audit event read
- `gitlab.audit_events.list` List all instance audit events read

**Deploy keys 2**

- `gitlab.deploy_keys.create` Create a deploy key write
- `gitlab.deploy_keys.list` List all deploy keys read

**Keys 2**

- `gitlab.keys.get` Retrieve user by SSH key fingerprint read
- `gitlab.keys.get_get` Retrieve user by SSH key ID read

**Organizations 2**

- `gitlab.organizations.create` Create an organization write
- `gitlab.organizations.delete` Soft-delete an organization destructive

**Suggestions 2**

- `gitlab.suggestions.apply_update` Apply a suggestion to a merge request write
- `gitlab.suggestions.batch_apply_update` Apply multiple suggestions to a merge request write

**Activity 1**

- `gitlab.events.list` List all events read

**Container registry event 1**

- `gitlab.container_registry_event.events_create` Receives notifications from the container registry when an operation occurs write

**Databases 1**

- `gitlab.databases.dictionary_tables_list` List dictionary tables read

**Deploy tokens 1**

- `gitlab.deploy_tokens.list` List all deploy tokens read

**Discover cert based clusters 1**

- `gitlab.discover_cert_based_clusters.get` List all certificate-based clusters read

**GLQL 1**

- `gitlab.glql.query` Execute a GLQL query read

**Markdown 1**

- `gitlab.markdown.create` Render Markdown content read

**Metadata 1**

- `gitlab.metadata.get` Retrieve metadata information for this GitLab instance read

**Offline imports 1**

- `gitlab.offline_imports.create` Start a new offline transfer import write

**Pages 1**

- `gitlab.pages.domains_list` List all Pages domains read

**Registry 1**

- `gitlab.registry.repositories_get` Retrieve details of a container registry repository read

**Search 1**

- `gitlab.search.list` Search an instance read

**Slack 1**

- `gitlab.slack.trigger_create` Trigger a global slack command write

**User counts 1**

- `gitlab.user_counts.get` Return the user specific counts read

**Version 1**

- `gitlab.version.get` Retrieves version information for the GitLab instance read

**Web commits 1**

- `gitlab.web_commits.public_key_get` Retrieve the public signing key read

This index shows a sample of each area. All 1,060 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The GitLab MCP server, answered.

**Is there a GitLab MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 1,060 GitLab actions across projects, groups, CI and merge requests, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by GitLab.

**Does GitLab have its own MCP server?**

GitLab serves an MCP server from your own GitLab at /api/v4/mcp, generally available from GitLab 19.5 on every tier, once an owner or admin allows it. It signs in with OAuth or a fine-grained personal access token. (GitLab's documentation, checked 22 October 2026.) Use GitLab's server when one person wants to work in GitLab from their own AI client. Use actionlake when you also want GitLab behind the same endpoint as your other systems: a key per agent with allowed actions and a spending cap, a named person's approval before destructive actions, a sealed record of every call, and one ask across GitLab and another system.

**What do I need to connect GitLab?**

GitLab personal, project or group access token. Plus your host. The free call account { op: "connections.requirements", service: "gitlab" } lists exactly what to paste.

**Can an AI agent delete or change things in GitLab?**

Only if its key allows it, and only with an explicit confirmation. 154 GitLab actions are destructive, including delete a project, remove a shared project from a group and transfer a group. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my GitLab API limit?**

actionlake paces every call to the limits in the GitLab service file: 2,000 calls a minute per connection. Repeated reads are answered from cache (398 GitLab actions can be), which never reaches GitLab.

**What does a GitLab action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (1,060 GitLab actions page). Cache hits, searches, dry runs and calls GitLab refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which GitLab API does it cover?**

The GitLab API v4 at your GitLab instance's API base URL, which you enter when connecting (path /api/v4). It is built from GitLab's documentation as read on 19 September 2026. 1,060 actions in 46 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my GitLab data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your GitLab credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like GitLab

Shares the most action names with

- [GitHub 189](https://actionlake.com/connectors/github)
- [Azure DevOps Services 168](https://actionlake.com/connectors/azure-devops-services)
- [Bitbucket Cloud 105](https://actionlake.com/connectors/bitbucket-cloud)
- [Vercel 91](https://actionlake.com/connectors/vercel)
- [Postman 66](https://actionlake.com/connectors/postman)
- [Apple App Store Connect 46](https://actionlake.com/connectors/apple-app-store-connect)

Joins with, on shared entities

- [Jira 4](https://actionlake.com/connectors/jira)
- [Gitea 4](https://actionlake.com/connectors/gitea)
- [Forgejo 4](https://actionlake.com/connectors/forgejo)
- [JetBrains YouTrack 4](https://actionlake.com/connectors/jetbrains-youtrack)
- [Asana 4](https://actionlake.com/connectors/asana)
- [Wrike 4](https://actionlake.com/connectors/wrike)

Browse

- [All Developer & infrastructure connectors](https://actionlake.com/connectors/category/developer-and-infrastructure)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by GitLab; the name is the vendor's own. Counts are from the GitLab service file, version 1.0.0.

## Give your agent GitLab today.

[Connect GitLab free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/gitlab
More: https://actionlake.com/llms.txt
