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/mcpdo { 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.
- 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 - 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 tokenhostWhere your GitLab lives: your host
account { op: "connections.requirements", service: "gitlab" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates 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
Projects
411125 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
Groups
19664 read · 103 write · 29 destructive
List all groups · List all provisioned users · List all SAML users · List all projects in a group
CI
7236 read · 24 write · 12 destructive
List runner's projects · List all instance variables · List all group variables · List all pipeline variables
Merge requests
7036 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
Issues
5528 read · 20 write · 7 destructive
List all project issues · List all notes · Create an issue · List all issues for a group
Repository
5530 read · 17 write · 8 destructive
Retrieve contributors metrics · Retrieve repository health statistics · List all repository branches · List all references a commit is pushed to
Users
5324 read · 19 write · 10 destructive
List users · List a user's followers · List a user's following · List all projects contributions for a user
Admin
168 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.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
gitlab.users.listList users | List users | read | identity.user.list474 connectors |
gitlab.projects.listList all projects | List all projects | read | devops.repository.list28 connectors |
gitlab.projects.releases_assets_links_listList all release links | List all release links | read | devops.artifact.list17 connectors |
gitlab.groups.listList all groups | List all groups | read | identity.group.list262 connectors |
gitlab.projects.issues_listList all project issues | List all project issues | read | work.task.list122 connectors |
gitlab.users.followers_listList a user's followers | List a user's followers | read | identity.user.list474 connectors |
gitlab.projects.forks_listList all forks of a project | List all forks of a project | read | devops.repository.list28 connectors |
gitlab.projects.createCreate a project | Create a project | write | devops.repository.create18 connectors |
gitlab.projects.user_createCreate a project for a user | Create a project for a user | write | devops.repository.create18 connectors |
gitlab.projects.packages_package_files_listList all package files | List all package files | read | devops.artifact.list17 connectors |
gitlab.projects.issues_createCreate an issue | Create an issue | write | work.task.create127 connectors |
gitlab.projects.deleteDelete a project | Delete a project | destructive | devops.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.
- Readread
Which GitLab tasks are overdue, and who owns each one?
calls
gitlab.projects.issues_list - Planread
Snapshot the health of one project in GitLab.
calls
gitlab.projects.storage_getgitlab.projects.environments_listgitlab.projects.protected_branches_listgitlab.projects.hooks_listgitlab.projects.integrations_list+1 more - Planread
Assemble everything a reviewer needs on one merge request in GitLab.
calls
gitlab.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 - Writewrite
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.
Report on open epics across a group
Use it when Someone asks how the epics in a GitLab group are tracking.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
account { op: "plans.install", slug: "gitlab-group-epic-status-report" }
# then ask for it by name; a schedule can run it on a timetableGovernance 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.
Delete a project?
intent: the user asked me to delete a project
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]" } ]}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
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 projectreadgitlab.projects.listList all projectsreadgitlab.projects.releases_assets_links_listList all release linksreadgitlab.projects.starrers_listList all users who starred a projectreadgitlab.projects.access_requests_approve_updateApprove an access requestwritegitlab.projects.access_requests_createRequest access to a projectwrite- and 405 more in this area
Groups196
gitlab.groups.listList all groupsreadgitlab.groups.projects_listList all projects in a groupreadgitlab.groups.provisioned_users_listList all provisioned usersreadgitlab.groups.saml_users_listList all SAML usersreadgitlab.groups.access_requests_approve_updateApprove an access requestwritegitlab.groups.access_requests_createRequest access to a groupwrite- and 190 more in this area
CI72
gitlab.admin.ci_variables_listList all instance variablesreadgitlab.groups.variables_listList all group variablesreadgitlab.projects.pipelines_variables_listList all pipeline variablesreadgitlab.runners.projects_listList runner's projectsreadgitlab.admin.ci_variables_createCreate instance variablewritegitlab.admin.ci_variables_deleteDelete instance variabledestructive- and 66 more in this area
Merge requests70
gitlab.groups.merge_requests_listList all group merge requestsreadgitlab.projects.merge_requests_closes_issues_listList all issues that close on mergereadgitlab.projects.merge_requests_pipelines_listList all merge request pipelinesreadgitlab.projects.merge_requests_related_issues_listList all issues related to the merge requestreadgitlab.groups.milestones_merge_requests_listGet all merge requests assigned to a single milestonereadgitlab.merge_requests.listList all merge requestsread- and 64 more in this area
Issues55
gitlab.groups.issues_listList all issues for a groupreadgitlab.projects.issues_createCreate an issuewritegitlab.projects.issues_listList all project issuesreadgitlab.projects.issues_notes_listList all notesreadgitlab.groups.issues_statistics_getRetrieve issues statistics for a groupreadgitlab.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 branchesreadgitlab.projects.repository_commits_refs_listList all references a commit is pushed toreadgitlab.projects.repository_contributors_listRetrieve contributors metricsreadgitlab.projects.repository_health_getRetrieve repository health statisticsreadgitlab.projects.registry_protection_repository_rules_createCreate a container repository protection rulewritegitlab.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 userreadgitlab.users.followers_listList a user's followersreadgitlab.users.following_listList a user's followingreadgitlab.users.listList usersreadgitlab.user.activities_listGet user activitiesreadgitlab.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}readgitlab.admin.batched_background_migrations_listGET /admin/batched_background_migrationsreadgitlab.admin.batched_background_operations_getRetrieve a batched background operationreadgitlab.admin.batched_background_operations_listGet the list of batched background operationsreadgitlab.admin.batched_background_migrations_pause_updatePUT /admin/batched_background_migrations/{id}/pausewritegitlab.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 primarywritegitlab.geo.repositories_pipeline_refs_listUsed by secondary runners to verify the secondary instance has the very latest versionreadgitlab.geo.retrieve_getInternal endpoint that returns a replicable filereadgitlab.geo.status_createInternal endpoint that posts the current node statuswritegitlab.geo.node_proxy_graphql_createQuery the GraphQL endpoint of an existing Geo nodewritegitlab.geo.proxy_getDetermine if a Geo site should proxy requestsread- and 4 more in this area
Hooks10
gitlab.hooks.createCreate a system hookwritegitlab.hooks.custom_headers_updateUpdate a custom headerwritegitlab.hooks.listList all system hooksreadgitlab.hooks.updateUpdate a system hookwritegitlab.hooks.custom_headers_deleteDelete a custom headerdestructivegitlab.hooks.deleteDelete a system hookdestructive- and 4 more in this area
Integrations9
gitlab.integrations.jira_connect_subscriptions_createSubscribe a namespace to a JiraConnectInstallationwritegitlab.integrations.jira_forge_installation_forge_token_createRegister the GitLab for Jira (Forge) system token for direct dev-info syncwritegitlab.integrations.jira_forge_subscriptions_createCreate a GitLab for Jira (Forge) namespace subscriptionwritegitlab.integrations.jira_forge_subscriptions_getList GitLab for Jira (Forge) namespace subscriptionsreadgitlab.integrations.jira_forge_installation_updateUpdate the GitLab for Jira (Forge) installation instance URLwritegitlab.integrations.jira_forge_subscriptions_deleteDelete a GitLab for Jira (Forge) namespace subscriptiondestructive- and 3 more in this area
Namespaces8
gitlab.namespaces.exists_getVerify namespace availabilityreadgitlab.namespaces.getRetrieve namespace detailsreadgitlab.namespaces.listList all namespacesreadgitlab.namespaces.updateUpdate a namespacewritegitlab.namespaces.gitlab_subscription_getRetrieve namespace subscriptionreadgitlab.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 tokenreadgitlab.personal_access_tokens.listList all personal access tokensreadgitlab.personal_access_tokens.self_associations_listList all token associationsreadgitlab.personal_access_tokens.self_getRetrieve a personal access tokenreadgitlab.personal_access_tokens.deleteRevoke a personal access tokendestructivegitlab.personal_access_tokens.rotate_createRotate a personal access tokendestructive- and 2 more in this area
Snippets8
gitlab.snippets.all_listList all snippetsreadgitlab.snippets.createCreate a snippetwritegitlab.snippets.listList all snippets for current userreadgitlab.snippets.public_listList all public snippetsreadgitlab.snippets.deleteDelete snippetdestructivegitlab.snippets.getRetrieve a snippetread- and 2 more in this area
Bulk imports7
gitlab.bulk_imports.entities_entities_listList all group or project migration entitiesreadgitlab.bulk_imports.entities_failures_getList all failed import records for a migration entityreadgitlab.bulk_imports.entities_listList all group or project migration entitiesreadgitlab.bulk_imports.listList all group or project migrationsreadgitlab.bulk_imports.cancel_applyCancel a migrationdestructivegitlab.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 eventwritegitlab.usage_data.increment_unique_users_createPOST /usage_data/increment_unique_userswritegitlab.usage_data.track_event_createTrack an internal GitLab eventwritegitlab.usage_data.track_events_createTrack multiple internal GitLab eventswritegitlab.usage_data.non_sql_metrics_getList all non-SQL metricsreadgitlab.usage_data.queries_getList all Service Ping SQL queriesread- and 1 more in this area
Topics6
gitlab.topics.createCreate a project topicwritegitlab.topics.getRetrieve a topicreadgitlab.topics.listList all topicsreadgitlab.topics.updateUpdate a project topicwritegitlab.topics.deleteDelete a project topicdestructivegitlab.topics.merge_createMerge topicsdestructive
Broadcast messages5
gitlab.broadcast_messages.createCreate a broadcast messagewritegitlab.broadcast_messages.getRetrieve a broadcast messagereadgitlab.broadcast_messages.listList all broadcast messagesreadgitlab.broadcast_messages.updateUpdate a broadcast messagewritegitlab.broadcast_messages.deleteDelete a broadcast messagedestructive
Feature flags5
gitlab.feature_flags.unleash_client_features_getGET /feature_flags/unleash/{project_id}/client/featuresreadgitlab.feature_flags.unleash_client_metrics_createPOST /feature_flags/unleash/{project_id}/client/metricswritegitlab.feature_flags.unleash_features_getGet a list of features (v2 client support)readgitlab.feature_flags.unleash_getGET /feature_flags/unleash/{project_id}readgitlab.feature_flags.unleash_client_register_createPOST /feature_flags/unleash/{project_id}/client/registerwrite
Import5
gitlab.import.bitbucket_createImport repository from Bitbucket Cloudwritegitlab.import.bitbucket_server_createImport repository from Bitbucket Serverwritegitlab.import.github_createImport a repository from GitHubwritegitlab.import.github_gists_createImport GitHub gists into GitLab snippetswritegitlab.import.github_cancel_applyCancel a GitHub project importdestructive
Application4
gitlab.application.appearance_getGET /application/appearancereadgitlab.application.plan_limits_getGet current plan limitsreadgitlab.application.plan_limits_updateChange plan limitswritegitlab.application.statistics_getRetrieve application statisticsread
Applications4
gitlab.applications.createCreate a new applicationwritegitlab.applications.deleteDelete an applicationdestructivegitlab.applications.listGet applicationsreadgitlab.applications.renew_secret_createRenew an application secretwrite
Features4
gitlab.features.createCreate or update a feature flagwritegitlab.features.definitions_listList all feature flag definitionsreadgitlab.features.deleteDelete a featuredestructivegitlab.features.listList all feature flagsread
Offline exports3
gitlab.offline_exports.createStart a new offline transfer exportwritegitlab.offline_exports.getGet offline transfer export detailsreadgitlab.offline_exports.listList all offline transfer exportsread
Todos3
gitlab.todos.listList all to-do itemsreadgitlab.todos.mark_as_done_createMark all to-do items as donewritegitlab.todos.mark_as_done_mark_as_done_createMark a to-do item as donewrite
Audit events2
gitlab.audit_events.getGet a single instance audit eventreadgitlab.audit_events.listList all instance audit eventsread
Deploy keys2
gitlab.deploy_keys.createCreate a deploy keywritegitlab.deploy_keys.listList all deploy keysread
Keys2
gitlab.keys.getRetrieve user by SSH key fingerprintreadgitlab.keys.get_getRetrieve user by SSH key IDread
Organizations2
gitlab.organizations.createCreate an organizationwritegitlab.organizations.deleteSoft-delete an organizationdestructive
Suggestions2
gitlab.suggestions.apply_updateApply a suggestion to a merge requestwritegitlab.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.