Skip to content

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.

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,060actionsin one signed file
  • 415readlook, never change
  • 491writecreate and update
  • 154wait for a yesdestructive, 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.

    • tokenGitLab personal, project or group access token
    • hostWhere 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 callcheck { 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 2026gitlab.com
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.

  • 415readlook, never change
  • 491writecreate and update
  • 154destructivewait 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, 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.

ActionWhat it doesEffectSame name in
gitlab.users.listList usersList usersreadidentity.user.list474 connectors
gitlab.projects.listList all projectsList all projectsreaddevops.repository.list28 connectors
gitlab.projects.releases_assets_links_listList all release linksList all release linksreaddevops.artifact.list17 connectors
gitlab.groups.listList all groupsList all groupsreadidentity.group.list262 connectors
gitlab.projects.issues_listList all project issuesList all project issuesreadwork.task.list122 connectors
gitlab.users.followers_listList a user's followersList a user's followersreadidentity.user.list474 connectors
gitlab.projects.forks_listList all forks of a projectList all forks of a projectreaddevops.repository.list28 connectors
gitlab.projects.createCreate a projectCreate a projectwritedevops.repository.create18 connectors
gitlab.projects.user_createCreate a project for a userCreate a project for a userwritedevops.repository.create18 connectors
gitlab.projects.packages_package_files_listList all package filesList all package filesreaddevops.artifact.list17 connectors
gitlab.projects.issues_createCreate an issueCreate an issuewritework.task.create127 connectors
gitlab.projects.deleteDelete a projectDelete a projectdestructivedevops.repository.delete20 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. Readread

    Which GitLab tasks are overdue, and who owns each one?

    callsgitlab.projects.issues_list

  2. Planread

    Snapshot the health of one project in GitLab.

    callsgitlab.projects.storage_getgitlab.projects.environments_listgitlab.projects.protected_branches_listgitlab.projects.hooks_listgitlab.projects.integrations_list+1 more

  3. Planread

    Assemble everything a reviewer needs on one merge request in GitLab.

    callsgitlab.projects.merge_requests_changes_getgitlab.projects.merge_requests_diffs_listgitlab.projects.merge_requests_approval_state_getgitlab.projects.merge_requests_pipelines_listgitlab.projects.merge_requests_time_stats_get

  4. Writewrite

    Create a project in GitLab. Show me exactly what you will send before you save it.

    callsgitlab.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 decidesPublish 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 decidesGrant 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 decidesRetry 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 decidesAttach 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 decidesActivate 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 decidesDelete 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 decidesDelete 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 projectgitlab.projects.delete
  • Remove a shared project from a groupgitlab.groups.shared_projects_delete
  • Transfer a groupgitlab.groups.transfer_create
  • POST /groups/{id}/transfer_to_organizationgitlab.groups.transfer_to_organization_create
  • Delete a usergitlab.users.delete
  • Delete a release linkgitlab.projects.releases_assets_links_delete
  • Delete a package filegitlab.projects.packages_package_files_delete
  • Schedule a group for deletiongitlab.groups.delete
  • Delete an issuegitlab.projects.issues_delete
  • Transfer a project to another namespacegitlab.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.

dogitlab.projects.deleteconfirm_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: "[email protected]" },    { match: "gitlab.groups.shared_projects_delete", approver: "[email protected]" },    { match: "gitlab.groups.transfer_create", approver: "[email protected]" }  ]}
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.

  • 1upstream call per actionall 1,060 GitLab actions
  • 1,060actions pageeach page of a long list is one call
  • 398reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every GitLab action.

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

Projects411
  • gitlab.projects.forks_listList all forks of a projectread
  • gitlab.projects.listList all projectsread
  • gitlab.projects.releases_assets_links_listList all release linksread
  • gitlab.projects.starrers_listList all users who starred a projectread
  • gitlab.projects.access_requests_approve_updateApprove an access requestwrite
  • gitlab.projects.access_requests_createRequest access to a projectwrite
  • and 405 more in this area
Groups196
  • gitlab.groups.listList all groupsread
  • gitlab.groups.projects_listList all projects in a groupread
  • gitlab.groups.provisioned_users_listList all provisioned usersread
  • gitlab.groups.saml_users_listList all SAML usersread
  • gitlab.groups.access_requests_approve_updateApprove an access requestwrite
  • gitlab.groups.access_requests_createRequest access to a groupwrite
  • and 190 more in this area
CI72
  • gitlab.admin.ci_variables_listList all instance variablesread
  • gitlab.groups.variables_listList all group variablesread
  • gitlab.projects.pipelines_variables_listList all pipeline variablesread
  • gitlab.runners.projects_listList runner's projectsread
  • gitlab.admin.ci_variables_createCreate instance variablewrite
  • gitlab.admin.ci_variables_deleteDelete instance variabledestructive
  • and 66 more in this area
Merge requests70
  • gitlab.groups.merge_requests_listList all group merge requestsread
  • gitlab.projects.merge_requests_closes_issues_listList all issues that close on mergeread
  • gitlab.projects.merge_requests_pipelines_listList all merge request pipelinesread
  • gitlab.projects.merge_requests_related_issues_listList all issues related to the merge requestread
  • gitlab.groups.milestones_merge_requests_listGet all merge requests assigned to a single milestoneread
  • gitlab.merge_requests.listList all merge requestsread
  • and 64 more in this area
Issues55
  • gitlab.groups.issues_listList all issues for a groupread
  • gitlab.projects.issues_createCreate an issuewrite
  • gitlab.projects.issues_listList all project issuesread
  • gitlab.projects.issues_notes_listList all notesread
  • gitlab.groups.issues_statistics_getRetrieve issues statistics for a groupread
  • gitlab.groups.milestones_issues_listGet all issues assigned to a single milestoneread
  • and 49 more in this area
Repository55
  • gitlab.projects.repository_branches_listList all repository branchesread
  • gitlab.projects.repository_commits_refs_listList all references a commit is pushed toread
  • gitlab.projects.repository_contributors_listRetrieve contributors metricsread
  • gitlab.projects.repository_health_getRetrieve repository health statisticsread
  • gitlab.projects.registry_protection_repository_rules_createCreate a container repository protection rulewrite
  • gitlab.projects.registry_protection_repository_rules_deleteDelete a container repository protection ruledestructive
  • and 49 more in this area
Users53
  • gitlab.users.contributed_projects_listList all projects contributions for a userread
  • gitlab.users.followers_listList a user's followersread
  • gitlab.users.following_listList a user's followingread
  • gitlab.users.listList usersread
  • gitlab.user.activities_listGet user activitiesread
  • gitlab.user.emails_createAdd an email to the current userwrite
  • and 47 more in this area
Admin16
  • gitlab.admin.batched_background_migrations_getGET /admin/batched_background_migrations/{id}read
  • gitlab.admin.batched_background_migrations_listGET /admin/batched_background_migrationsread
  • gitlab.admin.batched_background_operations_getRetrieve a batched background operationread
  • gitlab.admin.batched_background_operations_listGet the list of batched background operationsread
  • gitlab.admin.batched_background_migrations_pause_updatePUT /admin/batched_background_migrations/{id}/pausewrite
  • gitlab.admin.batched_background_migrations_resume_updatePUT /admin/batched_background_migrations/{id}/resumewrite
  • and 10 more in this area
Geo10
  • gitlab.geo.failures_createInternal endpoint that reports persistent verification failures to the primarywrite
  • gitlab.geo.repositories_pipeline_refs_listUsed by secondary runners to verify the secondary instance has the very latest versionread
  • gitlab.geo.retrieve_getInternal endpoint that returns a replicable fileread
  • gitlab.geo.status_createInternal endpoint that posts the current node statuswrite
  • gitlab.geo.node_proxy_graphql_createQuery the GraphQL endpoint of an existing Geo nodewrite
  • gitlab.geo.proxy_getDetermine if a Geo site should proxy requestsread
  • and 4 more in this area
Hooks10
  • gitlab.hooks.createCreate a system hookwrite
  • gitlab.hooks.custom_headers_updateUpdate a custom headerwrite
  • gitlab.hooks.listList all system hooksread
  • gitlab.hooks.updateUpdate a system hookwrite
  • gitlab.hooks.custom_headers_deleteDelete a custom headerdestructive
  • gitlab.hooks.deleteDelete a system hookdestructive
  • and 4 more in this area
Integrations9
  • gitlab.integrations.jira_connect_subscriptions_createSubscribe a namespace to a JiraConnectInstallationwrite
  • gitlab.integrations.jira_forge_installation_forge_token_createRegister the GitLab for Jira (Forge) system token for direct dev-info syncwrite
  • gitlab.integrations.jira_forge_subscriptions_createCreate a GitLab for Jira (Forge) namespace subscriptionwrite
  • gitlab.integrations.jira_forge_subscriptions_getList GitLab for Jira (Forge) namespace subscriptionsread
  • gitlab.integrations.jira_forge_installation_updateUpdate the GitLab for Jira (Forge) installation instance URLwrite
  • gitlab.integrations.jira_forge_subscriptions_deleteDelete a GitLab for Jira (Forge) namespace subscriptiondestructive
  • and 3 more in this area
Namespaces8
  • gitlab.namespaces.exists_getVerify namespace availabilityread
  • gitlab.namespaces.getRetrieve namespace detailsread
  • gitlab.namespaces.listList all namespacesread
  • gitlab.namespaces.updateUpdate a namespacewrite
  • gitlab.namespaces.gitlab_subscription_getRetrieve namespace subscriptionread
  • gitlab.namespaces.storage_limit_exclusion_createCreates a storage limit exclusion for a Namespacewrite
  • and 2 more in this area
Personal access tokens8
  • gitlab.personal_access_tokens.getRetrieve a personal access tokenread
  • gitlab.personal_access_tokens.listList all personal access tokensread
  • gitlab.personal_access_tokens.self_associations_listList all token associationsread
  • gitlab.personal_access_tokens.self_getRetrieve a personal access tokenread
  • gitlab.personal_access_tokens.deleteRevoke a personal access tokendestructive
  • gitlab.personal_access_tokens.rotate_createRotate a personal access tokendestructive
  • and 2 more in this area
Snippets8
  • gitlab.snippets.all_listList all snippetsread
  • gitlab.snippets.createCreate a snippetwrite
  • gitlab.snippets.listList all snippets for current userread
  • gitlab.snippets.public_listList all public snippetsread
  • gitlab.snippets.deleteDelete snippetdestructive
  • gitlab.snippets.getRetrieve a snippetread
  • and 2 more in this area
Bulk imports7
  • gitlab.bulk_imports.entities_entities_listList all group or project migration entitiesread
  • gitlab.bulk_imports.entities_failures_getList all failed import records for a migration entityread
  • gitlab.bulk_imports.entities_listList all group or project migration entitiesread
  • gitlab.bulk_imports.listList all group or project migrationsread
  • gitlab.bulk_imports.cancel_applyCancel a migrationdestructive
  • gitlab.bulk_imports.entities_getRetrieve a group or project migration entityread
  • and 1 more in this area
Usage data7
  • gitlab.usage_data.increment_counter_createTrack usage data eventwrite
  • gitlab.usage_data.increment_unique_users_createPOST /usage_data/increment_unique_userswrite
  • gitlab.usage_data.track_event_createTrack an internal GitLab eventwrite
  • gitlab.usage_data.track_events_createTrack multiple internal GitLab eventswrite
  • gitlab.usage_data.non_sql_metrics_getList all non-SQL metricsread
  • gitlab.usage_data.queries_getList all Service Ping SQL queriesread
  • and 1 more in this area
Topics6
  • gitlab.topics.createCreate a project topicwrite
  • gitlab.topics.getRetrieve a topicread
  • gitlab.topics.listList all topicsread
  • gitlab.topics.updateUpdate a project topicwrite
  • gitlab.topics.deleteDelete a project topicdestructive
  • gitlab.topics.merge_createMerge topicsdestructive
Broadcast messages5
  • gitlab.broadcast_messages.createCreate a broadcast messagewrite
  • gitlab.broadcast_messages.getRetrieve a broadcast messageread
  • gitlab.broadcast_messages.listList all broadcast messagesread
  • gitlab.broadcast_messages.updateUpdate a broadcast messagewrite
  • gitlab.broadcast_messages.deleteDelete a broadcast messagedestructive
Feature flags5
  • gitlab.feature_flags.unleash_client_features_getGET /feature_flags/unleash/{project_id}/client/featuresread
  • gitlab.feature_flags.unleash_client_metrics_createPOST /feature_flags/unleash/{project_id}/client/metricswrite
  • gitlab.feature_flags.unleash_features_getGet a list of features (v2 client support)read
  • gitlab.feature_flags.unleash_getGET /feature_flags/unleash/{project_id}read
  • gitlab.feature_flags.unleash_client_register_createPOST /feature_flags/unleash/{project_id}/client/registerwrite
Import5
  • gitlab.import.bitbucket_createImport repository from Bitbucket Cloudwrite
  • gitlab.import.bitbucket_server_createImport repository from Bitbucket Serverwrite
  • gitlab.import.github_createImport a repository from GitHubwrite
  • gitlab.import.github_gists_createImport GitHub gists into GitLab snippetswrite
  • gitlab.import.github_cancel_applyCancel a GitHub project importdestructive
Application4
  • gitlab.application.appearance_getGET /application/appearanceread
  • gitlab.application.plan_limits_getGet current plan limitsread
  • gitlab.application.plan_limits_updateChange plan limitswrite
  • gitlab.application.statistics_getRetrieve application statisticsread
Applications4
  • gitlab.applications.createCreate a new applicationwrite
  • gitlab.applications.deleteDelete an applicationdestructive
  • gitlab.applications.listGet applicationsread
  • gitlab.applications.renew_secret_createRenew an application secretwrite
Features4
  • gitlab.features.createCreate or update a feature flagwrite
  • gitlab.features.definitions_listList all feature flag definitionsread
  • gitlab.features.deleteDelete a featuredestructive
  • gitlab.features.listList all feature flagsread
Offline exports3
  • gitlab.offline_exports.createStart a new offline transfer exportwrite
  • gitlab.offline_exports.getGet offline transfer export detailsread
  • gitlab.offline_exports.listList all offline transfer exportsread
Todos3
  • gitlab.todos.listList all to-do itemsread
  • gitlab.todos.mark_as_done_createMark all to-do items as donewrite
  • gitlab.todos.mark_as_done_mark_as_done_createMark a to-do item as donewrite
Audit events2
  • gitlab.audit_events.getGet a single instance audit eventread
  • gitlab.audit_events.listList all instance audit eventsread
Deploy keys2
  • gitlab.deploy_keys.createCreate a deploy keywrite
  • gitlab.deploy_keys.listList all deploy keysread
Keys2
  • gitlab.keys.getRetrieve user by SSH key fingerprintread
  • gitlab.keys.get_getRetrieve user by SSH key IDread
Organizations2
  • gitlab.organizations.createCreate an organizationwrite
  • gitlab.organizations.deleteSoft-delete an organizationdestructive
Suggestions2
  • gitlab.suggestions.apply_updateApply a suggestion to a merge requestwrite
  • gitlab.suggestions.batch_apply_updateApply multiple suggestions to a merge requestwrite
Activity1
  • gitlab.events.listList all eventsread
Container registry event1
  • gitlab.container_registry_event.events_createReceives notifications from the container registry when an operation occurswrite
Databases1
  • gitlab.databases.dictionary_tables_listList dictionary tablesread
Deploy tokens1
  • gitlab.deploy_tokens.listList all deploy tokensread
Discover cert based clusters1
  • gitlab.discover_cert_based_clusters.getList all certificate-based clustersread
GLQL1
  • gitlab.glql.queryExecute a GLQL queryread
Markdown1
  • gitlab.markdown.createRender Markdown contentread
Metadata1
  • gitlab.metadata.getRetrieve metadata information for this GitLab instanceread
Offline imports1
  • gitlab.offline_imports.createStart a new offline transfer importwrite
Pages1
  • gitlab.pages.domains_listList all Pages domainsread
Registry1
  • gitlab.registry.repositories_getRetrieve details of a container registry repositoryread
Search1
  • gitlab.search.listSearch an instanceread
Slack1
  • gitlab.slack.trigger_createTrigger a global slack commandwrite
User counts1
  • gitlab.user_counts.getReturn the user specific countsread
Version1
  • gitlab.version.getRetrieves version information for the GitLab instanceread
Web commits1
  • gitlab.web_commits.public_key_getRetrieve the public signing keyread

This index shows a sample of each area. All 1,060 actions, with their inputs and prices, are in the 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.

Give your agent GitLab today.

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