MCP Server

GitBlixt is a Model Context Protocol (MCP) server. AI agents such as Claude Code connect to it and get tools for your repositories, merge requests, pipelines, deployed apps and AI jobs, so you can ask things like "why is production returning 500s?" and let the agent read the app's logs itself.

The endpoint is https://git.vianet.us/mcp (Streamable HTTP, stateless). It offers one gitlab_api tool that reaches the whole REST API, plus native tools for GitBlixt features the REST API doesn't cover, such as app logs, deploys, AI jobs, wiki pages and server administration.

Connecting a client

  1. Create a personal access token with the read_api scope (read-only) or the api scope (read and write).
  2. Add the server to your client, passing the token as a Bearer token.

Claude Code

claude mcp add --transport http gitblixt https://git.vianet.us/mcp \
  --header "Authorization: Bearer glpat-YOUR_TOKEN"

Add --scope user to make it available in every project. Run claude mcp list, or /mcp inside Claude Code, to confirm it connected and see its tools.

Other clients and shared config

Clients that read an mcpServers JSON config, such as a project's .mcp.json, take:

{
  "mcpServers": {
    "gitblixt": {
      "type": "http",
      "url": "https://git.vianet.us/mcp",
      "headers": { "Authorization": "Bearer ${GITBLIXT_TOKEN}" }
    }
  }
}

Claude Code expands ${GITBLIXT_TOKEN} from your environment, so the token never has to be committed. The client must be able to send a header: GitBlixt doesn't implement MCP's OAuth discovery, so clients that only support OAuth sign-in can't connect.

Checking the connection with curl

curl -X POST https://git.vianet.us/mcp \
  -H "Authorization: Bearer glpat-YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

A valid token returns the tools it can use; a missing or invalid one returns 401.

Permissions

The token's scopes decide which tools a client sees. Tools the token can't use are left out of the list entirely, so the agent never tries them.

Tools Token needs
Read read_api or api
Write api
Admin An admin account with the matching admin permission, plus the scope above

Every tool also checks your role on the project it touches, exactly as the web UI does. For example, reading app logs, deploying and seeing AI job logs need developer access. The environment variable tools follow the REST API instead and need maintainer access, though the environment's Variables page lets developers change variables. Through gitlab_api, a read_api token can only make GET requests.

Example prompts

  • "Show me the errors in the production logs of alice/shop since the last deploy."
  • "The latest deploy of staging failed. Find out why and fix it."
  • "Summarize the unresolved threads on merge request !42."
  • "Pipeline #318 failed. Read the job logs and tell me what broke."
  • "Redeploy production of alice/shop, then watch the logs for a minute."
  • "Start an AI review of merge request !42 using my default model."
  • "What's left on my Roadmap idea board? Close the ideas we shipped this week."
  • "Create a staging environment for alice/shop with a managed database, copy POOL_SIZE from production and generate a SECRET_KEY_BASE."

Using Ideas from Claude

With the server connected, you can tell Claude about an idea and let it keep track of it on your idea boards. A typical exchange:

  1. You: "I want to add offline mode to the mobile app. Put it on my Roadmap board for next sprint, label it mobile, due the 30th, and break it into steps."
  2. Claude calls list_idea_boards to find Roadmap and its columns, then create_idea with title "Offline mode", column_id of Next, labels: ["mobile"], due_date and a checklist of steps, and answers with the new idea's number and link.
  3. You, a week later: "We shipped offline mode." Claude calls search_ideas (or list_ideas) to find it and transition_idea with action: "complete", which files it in the done column.

Claude can also comment (add_idea_comment), move ideas between columns and boards (move_idea), set reminders, convert an idea to an issue, or start an AI agent on it (run_idea_ai): every Ideas tool is listed below.

Tool reference

Project-scoped tools take a project argument: the numeric project ID or its full path, e.g. 42 or "alice/shop". Environments are named as on the project's Environments page.

GitLab API

gitlab_api read

Call GitBlixt's GitLab-compatible REST API (GitLab API v4) as the current user. `path` is relative to /api/v4, e.g. "/projects/12/merge_requests" or "/projects/group%2Frepo/issues/3": a "namespace/repo" project id must be URL-encoded ("/" as %2F). Covers projects, repository tree/files/branches/commits/compare, merge requests (notes, discussions, changes, merge), issues, labels, milestones, releases, pipelines and jobs, CI variables, protected branches, webhooks and users. Returns the HTTP status and the decoded JSON body. List endpoints are paginated (20 per page, max 100): pass `page` and `per_page` in `query`, and read the `pagination` object in the result (page, per_page, total, total_pages, next_page, prev_page; next_page is null on the last page, and keys the endpoint does not report are omitted).

Argument Type Notes
method * string One of: GET, POST, PUT, PATCH, DELETE
path * string Path under /api/v4, starting with "/", without a query string
body object JSON request body
query object Query string parameters

Apps & environments

list_environments read

List a project's PaaS deployment environments, including active MR previews: branch, status, domains/url, replicas and last deploy.

Argument Type Notes
project * integer or string Project id or full path, e.g. 42 or "group/repo"

get_environment read

Show one PaaS environment of a project: branch, status, domains/url, replicas, last deploy, port, health check path, auto deploy, skip smoke test, build platform and whether it has a managed database. Environment variable values are never returned; the smoke test variables' values only to developers.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

create_environment write

Create a PaaS environment in a project, like the New environment page. Settings left out default as on that page: the project's default branch, port 4000, 1 replica, health check path /health, auto deploy on. managed_db also creates its Postgres database right away, as provision_database does, and sets DATABASE_URL (never returned); if that fails, the environment is kept and the error says how to retry. requires_approval needs maintainer access. Nothing is deployed until deploy_environment, or a push to the branch with auto deploy on, so set the environment's variables first (set_env_var, which needs maintainer access; developers can use the environment's Variables page). Needs developer access and the feature:deploy_apps permission.

Argument Type Notes
name * string Environment name, e.g. "staging": lowercase letters, digits and hyphens
project * integer or string Project id or full path, e.g. 42 or "group/repo"
auto_deploy boolean Deploy on every push to the branch
branch string Branch to deploy; empty for the project's default branch
build_platform string Docker platform to build for, e.g. "linux/amd64"; empty for the host's
deploy_trigger string When auto deploy deploys a push: after_ci once its CI pipeline passes, or on_push straight away, running no CI on the branch. One of: after_ci, on_push
domains array of string Domains the environment serves; SSL is automatic
health_check_path string Path the smoke test and health checks request, e.g. "/up"; empty resets it to "/health"
managed_db boolean Create a managed Postgres database for it and set DATABASE_URL. Default false
port integer Range 1–65535
replicas integer Range 0–10
requires_approval boolean Require approval before every deploy. Needs maintainer access. Default false
skip_smoke_test boolean Deploy without first checking the new image answers the health check
smoke_test_env object Variables set over the environment's for the smoke test container only, e.g. {"OBAN_ENABLED": "false"}; replaces the current ones. Plain text, not for secrets

get_app_logs read

Read the runtime logs (container stdout/stderr) of a deployed PaaS environment, oldest to newest. Returns the most recent `limit` lines matching the filters. Requires developer access to the project.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
http_status string Only lines containing an HTTP status of this class. One of: 2xx, 3xx, 4xx, 5xx
limit integer Range 1–1000. Default 200
query string Case-insensitive substring to match
since string ISO 8601 timestamp; only lines at or after it
source string One of: stdout, stderr, system
until string ISO 8601 timestamp; only lines at or before it

get_environment_metrics read

Read a deployed PaaS environment's metrics over a time range, oldest first: CPU (cores in use) and memory (bytes) per container instance with the host's limits, and per bucket request counts by status class with the chosen latency percentile in seconds (10.0 means 10 s or more). Request metrics exist only for environments with a domain; buckets without requests are left out. Includes successful deploys in the range. Requires developer access to the project.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
percentile integer One of: 50, 90, 95, 99. Default 90
range string One of: 1h, 6h, 24h, 2d, 7d, 14d. Default "24h"

list_deployments read

List recent deploys of a PaaS environment, newest first: status, commit sha, ref and timing. Failed deploys include the tail of the deploy log when you have developer access.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
limit integer Range 1–50. Default 10

deploy_environment write

Deploy the latest commit of a PaaS environment's branch, like the Deploy button. The deploy runs asynchronously; follow it with list_deployments. Environments that require approval report status awaiting_approval until a reviewer approves.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

stop_environment write

Stop a PaaS environment, like the Stop button: removes its running service. Deploy it again to bring it back.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

restart_environment write

Restart a running PaaS environment's containers on the same image and environment variables. To pick up new code or changed variables, deploy instead.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

update_environment write

Change a PaaS environment's settings: branch, domains, port, replicas, health check path, auto deploy, deploy trigger, skip smoke test, smoke test variables and build platform. Only the settings given change. The proxy picks up domain and port changes within 30 minutes, without a deploy, so deploy (deploy_environment) right after changing the port; the rest take effect on the next deploy.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
auto_deploy boolean Deploy on every push to the branch
branch string Branch to deploy; empty for the project's default branch
build_platform string Docker platform to build for, e.g. "linux/amd64"; empty for the host's
deploy_trigger string When auto deploy deploys a push: after_ci once its CI pipeline passes, or on_push straight away, running no CI on the branch. One of: after_ci, on_push
domains array of string Every domain the environment serves, replacing the current list
health_check_path string Path the smoke test and health checks request, e.g. "/up"; empty resets it to "/health"
port integer Range 1–65535
replicas integer Range 0–10
skip_smoke_test boolean Deploy without first checking the new image answers the health check
smoke_test_env object Variables set over the environment's for the smoke test container only, e.g. {"OBAN_ENABLED": "false"}; replaces the current ones. Plain text, not for secrets

provision_database write

Create a managed database for a PaaS environment on GitBlixt's own Postgres (or MariaDB), like Create database on the environment's Database page: the environment gets DATABASE_URL, plus POOL_SIZE=5 for Postgres unless it sets one, or WORDPRESS_DB_HOST, _NAME, _USER and _PASSWORD for MariaDB. Refused when the environment already has a managed database, a DATABASE_URL or, for MariaDB, any of those WORDPRESS_DB_ variables. Also the retry when create_environment couldn't provision one. The URL is never returned; the app picks it up on its next deploy (deploy_environment).

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
engine string mariadb for WordPress and other MySQL apps. One of: postgres, mariadb. Default "postgres"

Environment variables

list_env_vars read

List the names of a PaaS environment's variables; values are never returned. keys are the environment's own variables; shared_keys are app-level variables every environment gets unless it sets the same key itself (left out for project-restricted (AI job) tokens). Needs maintainer access.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

set_env_var write

Set one of a PaaS environment's own variables, creating it or replacing its value (replaced says which). Give exactly one of: value, a literal, which passes through your transcript; generate, random bytes encoded on the server, e.g. {"bytes": 64} for a Phoenix SECRET_KEY_BASE or {"bytes": 32} for a Cloak key; or copy_from, another environment's value copied on the server, e.g. {"environment": "production"}. The value is never returned. Regenerating a key that encrypts stored data makes that data unreadable. The running app keeps its old value until the next deploy (deploy_environment). Needs maintainer access.

Argument Type Notes
environment * string Environment name, e.g. "production"
key * string Variable name: uppercase letters, digits and underscores
project * integer or string Project id or full path, e.g. 42 or "group/repo"
copy_from object Copy another environment's own variable in this project, on the server: environment, plus key when its name differs from this one's
generate object A random value made on the server: bytes (16 to 128) random bytes, encoded as base64 (standard, padded; the default), base64url (unpadded) or hex (lowercase)
value string A literal value. It appears in your transcript, so not for secrets

delete_env_var write

Delete one of a PaaS environment's own variables (not an app-level shared one). The running app keeps it until the next deploy (deploy_environment). Needs maintainer access.

Argument Type Notes
environment * string Environment name, e.g. "production"
key * string Variable name, e.g. POOL_SIZE
project * integer or string Project id or full path, e.g. 42 or "group/repo"

App email

get_email_setup read

Show a PaaS environment's email setup: provider, sending domain, From address, status (pending_dns, verifying, issuing, verified or failed), the last error, the DNS records to publish and, once verified, the env vars written. Needs developer access and the feature:manage_email permission. Secrets are never returned.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

set_up_email write

Set up outbound email for a PaaS environment, replacing any earlier setup. Registers the sending domain with the provider and returns the DNS records to publish (publish_email_dns adds them to Cloudflare). Verification is then checked automatically for 72 hours; once verified, SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD and MAIL_FROM are written to the environment, which picks them up on its next deploy. mailgun and ses use your stored credential (save_email_credential); smtp takes host, port, username and password. Not available on preview environments.

Argument Type Notes
domain * string Sending domain; a subdomain such as mail.example.com is recommended
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
provider * string One of: mailgun, ses, smtp
dkim_records array of object smtp only: the provider's DKIM records as {type, name, value} objects, named under <domain>'s _domainkey
from string MAIL_FROM address at the domain; defaults to noreply@<domain>
host string smtp only
password string smtp only
port integer smtp only. Range 1–65535
spf_include string smtp only: the provider's SPF include host, e.g. spf.example.com
username string smtp only

check_email_setup write

Ask the provider now whether an environment's sending domain is verified, instead of waiting for the automatic check. Once it is, the SMTP env vars are written; deploy the environment to pick them up.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

publish_email_dns write

Add an environment's email DNS records (SPF, DKIM, DMARC) to the domain's Cloudflare zone with your stored Cloudflare credential (save_email_credential with an API token that can edit DNS, or connect Cloudflare in the web UI), then check verification. Returns each record's outcome.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

request_ses_production_access write

For an Amazon SES email setup, ask AWS to move the account out of the SES sandbox (where mail only reaches verified addresses). AWS reviews the request manually. Only the person who set up the email may request it, as it acts on their AWS account.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
website_url * string The app's public URL, shown to AWS in the request

remove_email_setup write

Delete a PaaS environment's email setup. The domain and sending credentials at the provider, the DNS records and the SMTP env vars already written are left in place.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"

list_email_credentials read

List your stored email setup credentials (mailgun, ses, cloudflare) with their region and last update. Secrets are never returned.

save_email_credential write

Store your credential for an email setup provider, encrypted, replacing any earlier one. It is tested first, so a bad key never replaces a working one. mailgun: api_key and region (us or eu). ses: access_key_id, secret_access_key and region (e.g. us-east-1). cloudflare: api_token with DNS edit access.

Argument Type Notes
provider * string One of: mailgun, ses, cloudflare
access_key_id string ses
api_key string mailgun
api_token string cloudflare
region string mailgun and ses
secret_access_key string ses

delete_email_credential write

Delete your stored credential for an email setup provider. Pending mailgun or ses setups that use it fail at their next check; verified ones keep sending.

Argument Type Notes
provider * string One of: mailgun, ses, cloudflare

Databases

describe_database read

Describe a PaaS environment's database (Postgres or MariaDB). Without table: its schemas with their tables and views. With table: its columns, indexes, foreign keys, row estimate and size. Read data with query_database. An admin must enable the DB editor for environments and grant you the db_admin:environments permission, and you need developer access to the project. Not available to project-restricted (AI job) tokens.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
schema string Schema (on MariaDB, the database) to describe. Default: every schema, or public (MariaDB: the connected database) when table is given
table string Table to describe in detail

query_database read

Run one SQL statement against a PaaS environment's database (Postgres or MariaDB). Read-only by default: only SELECT, WITH, SHOW, EXPLAIN, DESCRIBE, VALUES and TABLE statements run, inside a READ ONLY transaction that is always rolled back, with a 30 second statement timeout; ones that write files, cancel or terminate backends, take session locks or call dblink_exec/lo_export are refused. Set allow_write to change data: that needs a token with the api scope, commits immediately, and runs only INSERT, REPLACE, MERGE, and UPDATE/DELETE with WHERE; use the browser DB editor for anything else. Rows are capped at limit (truncated is true when more exist). Binary values, Postgres uuids included, come back as \x-prefixed hex; cast them to text for readable output. Every query is recorded in the DB editor audit log. An admin must enable the DB editor for environments and grant you the db_admin:environments permission, and you need developer access to the project. Not available to project-restricted (AI job) tokens.

Argument Type Notes
environment * string Environment name, e.g. "production"
project * integer or string Project id or full path, e.g. 42 or "group/repo"
sql * string One SQL statement
allow_write boolean Run outside the read-only transaction so INSERT/UPDATE/DELETE take effect. Needs the api scope.. Default false
limit integer Most rows to return. Range 1–1000. Default 100

AI jobs

run_ai_job write

Start an AI agent job on a project, like the "Fix with AI" / "Review with AI" buttons: fix_issue fixes an issue on a new branch and opens a merge request (needs issue_iid); review_mr reviews a merge request at the chosen review_depth and posts the review as notes, fix_mr applies its review feedback as new commits, resolve_conflicts merges the target branch into a conflicting merge request and resolves the conflicts, landing the merge on its source branch or a draft follow-up merge request (all three need merge_request_iid); freeform runs an open-ended prompt on a new branch off `branch` (default: the project's default branch) and opens a merge request into that branch only if the agent changed code — otherwise its answer is the job's result_summary. provider, model and effort default to your last-used selection. Runs asynchronously; follow it with get_ai_job. Requires developer access.

Argument Type Notes
job_type * string One of: fix_issue, review_mr, fix_mr, resolve_conflicts, freeform
project * integer or string Project id or full path, e.g. 42 or "group/repo"
background boolean Fix and resolve_conflicts jobs only: run in the background (default) or show live. Default true
branch string Existing branch to work from and open the merge request into (freeform; defaults to the project's default branch)
dry_run boolean review_mr only: runs the review and stores it on the job without posting anything to the merge request, for benchmarking. Cannot be combined with auto-merge. Default false
effort string One of: low, medium, high, xhigh, max
issue_iid integer Issue to fix (fix_issue)
merge_request_iid integer Merge request to review, fix or resolve (review_mr, fix_mr, resolve_conflicts)
model string Model id; required except for Anthropic
prompt string What the agent should do (freeform, required)
provider string Slug of one of your AI provider keys, e.g. "anthropic"
review_depth string review_mr only; defaults to your AI settings. quick: One agent reviews the diff with a secrets scan and semgrep, without compiling or running tests; about 5 to 10 minutes. moderate: Parallel subagents review the diff after compiling and running the project's static analysis; about 20 to 45 minutes. thorough: Everything in Moderate, plus the tests that cover the change, run against a provisioned test database; about 40 to 75 minutes.. One of: quick, moderate, thorough

list_ai_jobs read

List a project's AI agent jobs, newest first: type, status, provider/model, result summary and timing. Requires developer access.

Argument Type Notes
project * integer or string Project id or full path, e.g. 42 or "group/repo"
limit integer Range 1–50. Default 20
status string One of: pending, running, success, failed, canceled

get_ai_job read

Show an AI agent job: status, type, provider/model, timing, result summary, exit code, the branch and merge request it worked on or created, and the last lines of its log. Requires developer access.

Argument Type Notes
id * integer
project * integer or string Project id or full path, e.g. 42 or "group/repo"
log_tail_lines integer Range 0–2000. Default 200

get_ai_job_log read

Read an AI agent job's full log in pages of lines, oldest first, optionally filtered by a case-insensitive substring. get_ai_job only returns the tail; use this for the hunt phase of a review or anything earlier in a run. Requires developer access.

Argument Type Notes
id * integer
project * integer or string Project id or full path, e.g. 42 or "group/repo"
limit integer Maximum number of lines to return. Range 1–2000. Default 500
offset integer Index of the first line to return; counts only matching lines when query is given. Range 0–. Default 0
query string Case-insensitive substring to match

cancel_ai_job write

Cancel a pending or running AI agent job, stopping its container. Allowed for the job's creator and developers of the project.

Argument Type Notes
id * integer
project * integer or string Project id or full path, e.g. 42 or "group/repo"

Wiki & snippets

list_wiki_pages read

List a project's wiki pages (title and slug). Read one with get_wiki_page.

Argument Type Notes
project * integer or string Project id or full path, e.g. 42 or "group/repo"

get_wiki_page read

Read a project wiki page's Markdown content by its slug.

Argument Type Notes
project * integer or string Project id or full path, e.g. 42 or "group/repo"
slug * string Page slug, e.g. "getting-started"

write_wiki_page write

Create or update a project wiki page. Updates the page at `slug` when it exists, otherwise creates it; `slug` defaults to one derived from the title. Content is Markdown. Requires developer access.

Argument Type Notes
content * string Markdown; replaces the page body
project * integer or string Project id or full path, e.g. 42 or "group/repo"
title * string
slug string Lowercase letters, numbers, - and _; pass it to update a page

list_snippets read

List code snippets: your own (any visibility) and everyone's public ones, newest first, without content. Read one with get_snippet.

Argument Type Notes
limit integer Range 1–100. Default 50

get_snippet read

Read a code snippet with its content: public, internal (any signed-in user) or your own.

Argument Type Notes
id * integer

write_snippet write

Create a code snippet, or update one of your own by passing its id. Visibility: private (default, only you), internal (signed-in users) or public.

Argument Type Notes
content * string
title * string
description string
file_name string Used for syntax highlighting, e.g. "notes.md"
id integer Snippet to update; omit to create
visibility string One of: public, internal, private

Releases

list_releases read

List a project's releases (GitLab release JSON, newest first), or pass tag_name for one release or latest: true for the newest one already released (the releases/permalink/latest release). Each asset link carries a direct_asset_url, the stable download address to hand out. Files for asset links can be uploaded through the generic package API (PUT /api/v4/projects/:id/packages/generic/<name>/<version>/<file>), which gitlab_api cannot carry. Change releases with manage_release.

Argument Type Notes
project * integer or string Project id or full path, e.g. 42 or "group/repo"
latest boolean Return only the newest release already released
tag_name string Return only this tag's release

manage_release write

Create, update or delete a project's release (identified by tag_name), or add, update or delete one of its asset links. Actions: create (name, description, released_at, ref, links), update (name, description, released_at), delete, add_link (name and url; optional direct_asset_path and link_type), update_link (link_id plus fields), delete_link (link_id). For link actions name is the link's name. A link's direct_asset_path gives it a permanent direct_asset_url under the release. Returns the release (see list_releases).

Argument Type Notes
action * string One of: create, update, delete, add_link, update_link, delete_link
project * integer or string Project id or full path, e.g. 42 or "group/repo"
tag_name * string The release's tag
description string Release notes (Markdown)
direct_asset_path string Stable path for the link's direct asset URL, e.g. "/bin/app.tar.gz"
link_id integer Link to update or delete
link_type string Defaults to other. One of: other, runbook, image, package
links array of object Asset links to create the release with
name string Release title, or the link's name
ref string create only: branch, tag or commit to tag as tag_name when that tag doesn't exist yet
released_at string ISO 8601 time; a future one makes an upcoming release
url string http(s) URL of the link

Ideas

list_idea_boards read

List your idea boards (Trello-style boards of ideas and tasks, separate from project issues): your personal boards, including your Inbox, plus boards shared with you directly or through an organization. Each board has your role on it (viewer, editor or admin) and its open columns with how many ideas each holds. Use a board's id with get_idea_board (columns, labels, members, custom fields), list_ideas, get_idea, create_idea and update_idea.

Argument Type Notes
archived boolean List archived boards instead. Default false

get_idea_board read

Read an idea board with what you need to work on it: its settings and your role, columns (ids, done flag, WIP limit, archived), the labels its ideas can use (the board's and its workspace's), members, custom fields with their dropdown options, automations (rules, buttons and schedules; only the enabled buttons unless you can edit it) and export URLs. Board admins also get how many webhooks and Slack subscriptions it has (get_idea_board_integrations lists them). Its email address and your private calendar feed URLs come from manage_idea_board_integrations action get.

Argument Type Notes
board_id * integer Board id, from list_idea_boards

get_idea_board_integrations read

Read an idea board's connections to the outside (board admins only): its webhooks and Slack subscriptions. manage_idea_board_integrations changes them, and its action get also gives the board's email address.

Argument Type Notes
board_id * integer Board id, from list_idea_boards

manage_idea_board write

Create or change an idea board. create makes a board with the default columns (Ideas, Next, Doing, Done) in your personal workspace, or an organization's with organization_id; parent_board_id nests it under a board of the same workspace. Board admins may update its settings (name, description, color like "#2563eb", visibility private/workspace/public, voting off/members/everyone, aging off/regular/pirate, is_template), archive it (read-only until restored), restore, delete (confirm: true; everything on it goes) or set_template (is_template, default true, so others can start boards from it). copy makes a new board with its columns, labels and custom fields (keep_ideas: true brings the open ideas): admins may copy any board, anyone who can see a template board may copy that. star and unstar pin it in your sidebar. Returns the board.

Argument Type Notes
action * string One of: create, update, archive, restore, delete, copy, star, unstar, set_template
aging string One of: off, regular, pirate
board_id integer Board id, from list_idea_boards
color string or null Hex color like "#2563eb"
confirm boolean Must be true to delete; deleting can't be undone
copy_name string Name of the copy
description string or null
is_template boolean
keep_ideas boolean copy: bring the open ideas
name string
organization_id integer or null Organization whose workspace gets the board (create, copy); for copy, null means your personal workspace (the default when you can't create boards in the source's organization)
parent_board_id integer or null Board to nest it under; null un-nests it
visibility string One of: private, workspace, public
voting string One of: off, members, everyone

manage_idea_column write

Add, change, archive, restore, delete or reorder an idea board's columns (you need editor access). create adds a column at the end; done: true makes it a done column, where ideas are completed on entering and reopened on leaving; wip_limit caps how many ideas it should hold (null clears it). delete only works on an empty column (archive keeps its ideas). move puts the column at index position (0 is first) of all the board's columns, as get_idea_board lists them. Returns the board's columns.

Argument Type Notes
action * string One of: create, update, archive, restore, delete, move
board_id * integer Board id, from list_idea_boards
column_id integer Column id, from get_idea_board or list_ideas
done boolean
name string
position string or integer move: where among the board's columns: "top", "bottom" (default) or an index from 0
wip_limit integer or null Range 1–

manage_idea_label write

Create, rename/recolor or delete idea labels. A label belongs to one board (board editors manage it) or, with workspace: true, to the workspace of board_id, shared by all its boards (your personal workspace, which you manage, or an organization's, which its developers and up manage). update and delete take a label_id from get_idea_board, which lists both kinds. Deleting a label takes it off every idea. Returns the labels board_id can use.

Argument Type Notes
action * string One of: create, update, delete
board_id * integer Board id, from list_idea_boards
color string Hex color like "#dc2626"
label_id integer
name string
workspace boolean create: make it a workspace label instead of a board label. Default false

manage_idea_member write

Add, re-role or remove a board member, by username or user_id (board admins only; anyone may remove themselves to leave a board). Roles: viewer (read and comment), editor (add and change ideas, columns and labels), admin (also settings, members and deleting the board). Organization members may see a workspace board without being members. Returns the board's members.

Argument Type Notes
action * string One of: add, update, remove
board_id * integer Board id, from list_idea_boards
role string add (default editor) and update. One of: admin, editor, viewer
user_id integer
username string

manage_idea_custom_field write

Define a board's custom fields (board admins) or set one on an idea (editors). create takes a name and a kind (text, number, date, checkbox or dropdown, fixed once made), dropdown options as a list of names and show_on_card; update renames it or changes options (an option you leave out is cleared from ideas) or show_on_card; delete removes it with its values. set_value sets field_id on idea number: text, a number, a YYYY-MM-DD date, true/false for a checkbox, an option's name or id for a dropdown; null clears it. Returns the board's fields, or the idea for set_value.

Argument Type Notes
action * string One of: create, update, delete, set_value
board_id * integer Board id, from list_idea_boards
field_id integer
kind string One of: text, number, date, checkbox, dropdown
name string
number integer The idea's number on its board (#12 is 12)
options array of string Dropdown option names, in order
show_on_card boolean
value string or number or boolean or null

list_ideas read

List the open (non-archived) top-level ideas on an idea board in board order, with the board's columns so you can tell where each idea sits (column_id). state is "closed" for completed ideas; each idea carries its open sub-ideas and its comment, attachment and checklist item counts. Filters combine. Read one idea in full with get_idea.

Argument Type Notes
board_id * integer Board id, from list_idea_boards
assignee_ids array or string Ideas assigned to any of these user ids, or "me"
completed string One of: include, exclude. Default "include"
due string One of: overdue, today, week, none
label_ids array of integer Ideas with any of these labels
limit integer Range 1–200. Default 100
priority integer 1 is the most urgent, 4 means no priority. Range 1–4
repository_id integer Ideas linked to this project
search string Text in the title or description
templates boolean Include template ideas. Default false

search_ideas read

Find open ideas across all your idea boards with a Todoist-style filter query, such as "today & p1 | overdue", "@bug & #Roadmap" or "assigned to: me, no date". Operators: & (and), | (or), ! (not), parentheses; a comma separates queries, each returned as its own section. Terms: today, tomorrow, overdue, no date, next 7 days, date before: <date>, date after: <date>, a date like fri or jan 5, no time, recurring, deadline before: <date>, no deadline, created: today, p1-p4, #Board, ##Board (with sub-boards), /Column, @label, @label* (prefix), no labels, assigned to: me|others|<username>, assigned, no assignee, shared, search: <text>, view all. Ideas are ordered by due date. Read one in full with get_idea (board_id and number).

Argument Type Notes
filter * string The filter query
limit integer Most ideas per section. Range 1–200. Default 50

get_idea read

Read one idea by board id and number: its description, column, parent, priority, dates, assignees, labels, custom fields, votes, watchers, linked project and issue, the boards it is mirrored on, checklists with their items (ids for manage_idea_checklist), sub-ideas, attachments, your reminders, the board's card buttons (editors run them with manage_idea_automation) and the 20 most recent comments (list_idea_timeline has the rest, with system activity).

Argument Type Notes
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)

create_idea write

Add an idea to an idea board (you need editor access), all in one step: a failure adds nothing (but labels made by create_labels). It goes at the bottom of column_id, by default the first open column; with parent_number it becomes a sub-idea of that idea. Set people by username (assignees), labels by name (labels; create_labels: true adds missing ones to the board), a checklist, custom fields by name, and a project (repository) or a free-form project_name. from_template_number starts from a template idea of the board (its description, labels, checklists and custom fields; your arguments override them). Or pass quick_add, one line in the Todoist-style quick add syntax instead of the fields, e.g. "Call the bank #Errands /Next @money +alice p1 tomorrow 5pm for 30m every friday !1h" (#board, /column, @label, +assignee, p1-p4, dates and times, "for <duration>", "{<deadline>}", "every ..." repeats, "!<time>" reminders); without board_id it goes to the #board named or your Inbox. Returns the new idea with its number.

Argument Type Notes
assignees array of string Usernames of people who can see the board, or "me"
board_id integer Board id, from list_idea_boards
checklist object A checklist to add: {"name": "Steps", "items": ["Draft", "Review"]}
column_id integer Column id, from get_idea_board or list_ideas
create_labels boolean Add labels that don't exist yet to the board. Default false
custom_fields object Field name or id => value: text, a number, a YYYY-MM-DD date, true for a checkbox or an option's name for a dropdown
deadline string YYYY-MM-DD
description string Markdown
due_date string YYYY-MM-DD
due_time string HH:MM, needs a due_date
duration_minutes integer or null How long it takes, in minutes; null clears it. Range 1–1440
from_template_number integer Number of a template idea on this board to start from
labels array of string Label names (board or workspace labels, any case)
parent_id integer Id (not number) of the parent idea, instead of parent_number
parent_number integer Number of the idea on this board to nest it under
priority integer 1 is the most urgent; 4 (default) means no priority. Range 1–4
project_name string Free-form project name
quick_add string One line of quick add syntax, instead of the other fields
recurrence string or null Repeat phrase such as "every weekday at 9am", "every 2 weeks", "every 15th", "every! 3 days" (counted from completion) or "every day until dec 31"; null stops it. Completing a repeating idea moves it to its next due date instead.
repository integer or string or null Project to link: id or full path such as "group/repo"; null unlinks
repository_id integer Project id to link
start_date string YYYY-MM-DD
title string

update_idea write

Change an idea (you need editor access). Only the arguments you pass change, all in one step: a failure changes nothing (but labels made by create_labels). assignees (usernames) or assignee_ids and labels (names; create_labels: true adds missing ones to the board first) or label_ids replace the current ones (pass [] to clear). repository links a project by id or path (null unlinks). column_id moves the idea to the bottom of that column (move_idea places it precisely or on another board); state_event "close" completes it (moving it to the done column, or a repeating idea to its next due date) and "reopen" reopens it. custom_fields sets the board's custom fields by id or name (see get_idea; null clears one).

Argument Type Notes
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
assignee_ids array of integer User ids who can see the board
assignees array of string Usernames of people who can see the board, or "me"
column_id integer Column id, from list_ideas
create_labels boolean Add labels that don't exist yet to the board. Default false
custom_fields object Field id or name => value: text, a number, a YYYY-MM-DD date, true/false for a checkbox or an option's name for a dropdown; null clears it
deadline string or null YYYY-MM-DD, or null to clear
description string or null Markdown
due_date string or null YYYY-MM-DD, or null to clear
due_time string or null HH:MM, needs a due_date
duration_minutes integer or null How long it takes, in minutes; null clears it. Range 1–1440
label_ids array of integer Ids of labels available on the board
labels array of string Label names (board or workspace labels, any case)
priority integer Range 1–4
project_name string or null Free-form project name
recurrence string or null Repeat phrase such as "every weekday at 9am", "every 2 weeks", "every 15th", "every! 3 days" (counted from completion) or "every day until dec 31"; null stops it. Completing a repeating idea moves it to its next due date instead.
repository integer or string or null Project to link: id or full path such as "group/repo"; null unlinks
repository_id integer or null Project id to link
start_date string or null YYYY-MM-DD, or null to clear
state_event string One of: close, reopen
title string

move_idea write

Move an idea (you need editor access). On its board: to column_id (default its own column) at position "top", "bottom" (default) or an index among the column's cards, as list_ideas orders them. Entering a done column completes the idea (a repeating one moves to its next due date instead) and leaving one reopens it. A sub-idea is reordered among its siblings instead. With target_board_id it moves, with its sub-ideas, to the bottom of target_column_id (default the first open column) on that board, where it gets a new number; you need editor access there too. Returns the idea.

Argument Type Notes
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
column_id integer Column id, from get_idea_board or list_ideas
position string or integer Where in the column: "top", "bottom" (default) or an index from 0
target_board_id integer Board to move it to
target_column_id integer Column of the target board

transition_idea write

One-step actions on an idea. complete (with its open sub-ideas, moving it to the board's done column; a repeating idea moves to its next due date instead) and reopen; archive (hidden with its sub-ideas until restored) and restore; delete (confirm: true, with its sub-ideas, can't be undone). copy duplicates it (content, checklists, labels, custom fields; not sub-ideas or comments) to target_board_id (default its own board) and target_column_id, optionally retitled: copying a template idea is how you create an idea from a template. convert_to_issue opens an issue from it in repository (id or path; default its linked project) and completes it, returning the issue too. vote/unvote when the board has voting on. watch/unwatch to be notified of its activity. mirror shows the same idea on another board (target_board_id, target_column_id) and unmirror takes it off target_board_id again. Editor access needed except for vote, watch and copy's source. Returns the idea (the copy, for copy).

Argument Type Notes
action * string One of: complete, reopen, archive, restore, delete, copy, convert_to_issue, vote, unvote, watch, unwatch, mirror, unmirror
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
confirm boolean Must be true to delete; deleting can't be undone
repository integer or string convert_to_issue: project id or path such as "group/repo"
target_board_id integer copy, mirror, unmirror
target_column_id integer copy, mirror: column of the target board
title string copy: title of the copy

manage_idea_checklist write

Change an idea's checklists (you need editor access); get_idea lists them with their ids. create_checklist (name), rename_checklist and delete_checklist take checklist_id. add_item adds text (optionally due_date YYYY-MM-DD and an assignee username) at the bottom of checklist_id; update_item changes an item's text, due_date or assignee (null clears them); toggle_item ticks or unticks it (pass done to set it either way); delete_item removes it; move_item puts it at position in checklist_id (default its own checklist); convert_item turns it into a sub-idea. Returns the idea.

Argument Type Notes
action * string One of: create_checklist, rename_checklist, delete_checklist, add_item, update_item, toggle_item, delete_item, move_item, convert_item
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
assignee string or null Username of someone who can see the board, or "me"
checklist_id integer
done boolean toggle_item: the state to set
due_date string or null YYYY-MM-DD
item_id integer
name string Checklist name
position string or integer move_item: where in the checklist: "top", "bottom" (default) or an index from 0
text string Item text

add_idea_comment write

Comment on an idea (anyone who can view its board may). Markdown is supported, and @username mentions notify people who can see the board. Watchers are notified.

Argument Type Notes
board_id * integer Board id, from list_idea_boards
body * string Markdown
number * integer The idea's number on its board (#12 is 12)

manage_idea_comment write

Change a comment on an idea, by note_id from get_idea or list_idea_timeline (add one with add_idea_comment). update replaces your own comment's body; delete removes your own comment (board admins may delete anyone's); react and unreact add or take back your emoji reaction (one of 👍 ❤️ 🎉 😄 👀 🚀) on any note. Returns the note (or that it was deleted).

Argument Type Notes
action * string One of: update, delete, react, unreact
board_id * integer Board id, from list_idea_boards
note_id * integer
number * integer The idea's number on its board (#12 is 12)
body string update: Markdown
emoji string react, unreact: one emoji

list_idea_timeline read

Read an idea's timeline, oldest first: comments (with reactions) and system activity such as moves, completions, assignments and label changes (system: true, with the action). limit keeps the most recent notes.

Argument Type Notes
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
limit integer Range 1–500. Default 100

add_idea_attachment write

Attach a link (an http or https url, with an optional title) to an idea, or with action delete remove one of its attachments (attachment_id from get_idea; files uploaded in the web UI included). You need editor access. Returns the idea.

Argument Type Notes
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
action string One of: add, delete. Default "add"
attachment_id integer delete
title string
url string

list_idea_reminders read

List your own reminders on an idea: when each fires (minutes_before its due date and time, or remind_at), on which channels and when it was last sent. manage_idea_reminder adds and deletes them.

Argument Type Notes
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)

manage_idea_reminder write

Add or delete your own reminders on an idea (anyone who can see the board may; list_idea_reminders lists them). A reminder fires either minutes_before the idea's due date and time (9:00 when it has no time; it follows the due date when that changes, so 0 means "when it's due" and 1440 "a day before"), or once at a set moment: date (YYYY-MM-DD) and time (HH:MM) in your time zone, or remind_at, an ISO 8601 datetime such as 2026-10-15T09:00:00Z. It goes out on channels (in_app, email, slack; default your usual reminder channels). Returns your reminders on the idea.

Argument Type Notes
action * string One of: add, delete
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
channels array of string Any of: in_app, email, slack
date string YYYY-MM-DD, with time
minutes_before integer Range 0–10080
remind_at string ISO 8601 datetime
reminder_id integer delete
time string HH:MM in your time zone, with date

list_idea_filters read

List your saved idea filters (named Todoist-style queries; search_ideas runs one, manage_idea_filter saves, changes and deletes them).

manage_idea_filter write

Save, change or delete your saved idea filters (list_idea_filters lists them): named Todoist-style queries such as "today & p1 | overdue" (see search_ideas for the syntax, which also runs a query without saving it). favorite: true lists a filter in the Ideas sidebar. Returns your filters.

Argument Type Notes
action * string One of: create, update, delete
color string or null Hex color like "#16a34a"
favorite boolean
filter_id integer update, delete
name string
query string

list_idea_templates read

List what you can start from: template boards you can see (start a board from one with manage_idea_board action copy) and the template ideas on your boards (create an idea from one with create_idea from_template_number on its board, or transition_idea action copy onto another board).

run_idea_ai write

Put AI to work on an idea with your own AI provider key (you need editor access). run_agent starts a freeform AI agent job on the idea's linked project (repository links one first; you need developer access there) with prompt, by default the idea's title, description, checklists and sub-ideas; if the agent changes code it opens a merge request, and the outcome is noted on the idea. Follow the job with get_ai_job. break_down asks the model for up to 10 sub-ideas, added to the idea in the background. provider, model and effort default to your last-used selection.

Argument Type Notes
action * string One of: run_agent, break_down
board_id * integer Board id, from list_idea_boards
number * integer The idea's number on its board (#12 is 12)
background boolean run_agent: run in the background (default) or live. Default true
effort string One of: low, medium, high, xhigh, max
model string Model id; required except for Anthropic
prompt string run_agent: what the agent should do
provider string Slug of one of your AI provider keys, e.g. "anthropic"
repository integer or string run_agent: project id or path to link the idea to first

list_idea_automations read

Read automations (board editors and admins; anyone else who can see the board gets only its enabled buttons from list): list the board's automations, get one by automation_id, or its recent runs (what each did, newest first). vocabulary (no board needed) lists every kind, scope, trigger, condition and action type with its params, for building automations with manage_idea_automation.

Argument Type Notes
action * string One of: list, get, runs, vocabulary
automation_id integer get, runs
board_id integer Board id, from list_idea_boards
limit integer Range 1–100. Default 20

manage_idea_automation write

Butler-style automation on an idea board. Kinds: rule (a trigger, optional conditions, then actions), card_button (actions run on one idea from its card; every idea has it, and it refuses one that fails its conditions), board_button (actions run over a scope of ideas) and schedule (a scope run on a 5-field cron schedule in the board owner's time zone, or for an organization's board the automation creator's: "0 9 * * *" daily, "0 9 * * 1-5" weekdays, "0 9 * * 1" Mondays, "0 9 1 * *" monthly; runs at least 5 minutes apart). A board holds at most 50 automations; a run over many ideas stops after 2,000 actions or 5,000 ideas scanned (a board button's also after 4 minutes) and goes on from there next time. Call list_idea_automations action vocabulary first for every trigger, condition and action type and its params (that tool also lists automations and their runs). Each is {"type": ..., params}: e.g. trigger {"type": "idea_moved", "to_column_id": 12}, conditions [{"type": "has_label", "label_id": 3}], actions [{"type": "set_priority", "priority": 1}, {"type": "assign", "user_id": "actor"}]; scope {"type": "all" | "column" (with column_id) | "completed" | "overdue" | "none"}. create, update, delete and toggle (on/off) need board admin; run presses a button as an editor: a card button runs now on the idea of `number`, a board button is queued ({"status": "queued"}, or "already_queued" while your run of it is pending or running, refused while you have 5 other button runs queued; its run shows in list_idea_automations runs once done). Automations act as whoever created or last changed them.

Argument Type Notes
action * string One of: create, update, delete, toggle, run
board_id * integer Board id, from list_idea_boards
actions array of object
automation_id integer
conditions array of object
enabled boolean
kind string One of: rule, card_button, board_button, schedule
name string
number integer The idea's number on its board (#12 is 12)
schedule string or null schedule: cron
scope object or null board_button, schedule: which ideas
trigger object or null rule: the trigger

manage_idea_board_integrations write

An idea board's connections to the outside. get returns your private calendar feed URLs (all your dated ideas, and this board's; subscribe to them in a calendar app; created on first use) and, for board admins, its email address (nil while email to board is off) and what get_idea_board_integrations lists: webhooks and Slack subscriptions. Board admins can: enable_email (editors then email ideas to the address; [#12] in the subject comments on idea 12), disable_email or regenerate_email (a new address; the old one stops working); add_webhook (url, events, optional secret: sent as X-Gitlab-Token and used to sign the body as X-Hub-Signature-256), delete_webhook or ping_webhook (a test delivery) by webhook_id; add_slack (channel name, features) or remove_slack by subscription_id. Events and features: idea_created, idea_updated, idea_moved, idea_completed, idea_reopened, idea_archived, idea_restored, idea_deleted, comment_added; a webhook gets all of them by default, a Slack channel all but idea_updated.

Argument Type Notes
action * string One of: get, enable_email, disable_email, regenerate_email, add_webhook, delete_webhook, ping_webhook, add_slack, remove_slack
board_id * integer Board id, from list_idea_boards
channel string add_slack: e.g. "#roadmap"
events array of string add_webhook: events to send. Any of: idea_created, idea_updated, idea_moved, idea_completed, idea_reopened, idea_archived, idea_restored, idea_deleted, comment_added
features array of string add_slack: events to post. Any of: idea_created, idea_updated, idea_moved, idea_completed, idea_reopened, idea_archived, idea_restored, idea_deleted, comment_added
secret string add_webhook: secret token
subscription_id integer
url string add_webhook: an http(s) URL
webhook_id integer

export_idea_board read

Export a whole idea board, archived ideas included: json (the board, columns, labels, custom fields and every idea with its checklists, values and comments) or csv (one row per idea). Boards over 500 KB come back as a download URL of the REST API instead, to fetch with your token.

Argument Type Notes
board_id * integer Board id, from list_idea_boards
format string One of: json, csv. Default "json"

import_ideas write

Import into your personal workspace, or organization_id's (you need developer access there), in the background: you are notified when it is done. trello: trello_json is the text of a Trello board's JSON export (Menu, Print, export and share, Export as JSON; at most 8 MB, the request size limit); it becomes a new board with its lists, cards, labels, checklists, comments and due dates. todoist: todoist_token is a Todoist API token (Settings, Integrations, Developer); every project becomes a board with its open tasks. One import at a time.

Argument Type Notes
source * string One of: trello, todoist
organization_id integer
todoist_token string
trello_json string

Search

search read

Search the projects, issues and merge requests (by title and description) or code (files on default branches that match) you can see. Pass project to search one project.

Argument Type Notes
query * string
scope * string One of: code, issues, merge_requests, projects
limit integer Range 1–50. Default 20
project integer or string Project id or full path, e.g. 42 or "group/repo"

Mirrors

sync_github_mirrors write

Manage GitHub pull mirrors for every repository of a group (organization). action add_mirrors gives each repo a GitHub pull mirror that tracks GitHub every 15 minutes, including issues and pull requests, and never deletes branches created in GitBlixt; repos with no recorded GitHub source get <github_owner>/<repo name> recorded as one; repos that already have a mirror are skipped. action refresh queues a sync of all the group's GitHub pull mirrors now. Needs group owner access and your GitHub account connected.

Argument Type Notes
action * string One of: add_mirrors, refresh
group * string Group slug, e.g. "my-org"
github_owner string add_mirrors only: GitHub user or org owning the repos that have no recorded GitHub source

Admin

get_server_logs admin, read

Admin only: read GitBlixt's own server logs (its Docker container/service output), oldest to newest, optionally filtered by a case-insensitive substring. Covers the most recent 5000 lines.

Argument Type Notes
limit integer Range 1–1000. Default 200
query string Case-insensitive substring to match

list_backups admin, read

Admin only: list GitBlixt backups, newest first: status, storage, contents (with each app volume copied), size, timing and any error or warnings.

Argument Type Notes
limit integer Range 1–100. Default 20

start_backup admin, write

Admin only: start a backup of the database, git repositories, uploads and/or app environment volumes. Runs asynchronously; follow it with list_backups.

Argument Type Notes
includes array of string What to back up; defaults to everything. Any of: database, repos, uploads, volumes

get_instance_limits admin, read

Admin only: read the instance limits of Admin → Limits (feature flag defaults, user and organization quota defaults, app log retention, CI/AI/service container CPU and memory, build and deploy concurrency, CI workspace and cache caps, app volume and managed database caps, package file cap, egress controls) and the AI concurrency caps. Sections with a config default (container limits, build concurrency, CI workspaces, app volumes, app databases, packages) say whether the value is an override. Change them with manage_instance_limits.

Argument Type Notes
section string Return only this section; defaults to all. One of: feature_defaults, quota_defaults, org_quota_defaults, log_retention, container_limits, build_concurrency, ci_workspaces, app_volumes, app_databases, packages, egress, ai_concurrency

manage_instance_limits admin, write

Admin only: set or reset an instance limit section (see get_instance_limits). `set` changes the fields given in `values`: feature_defaults {<feature key>: bool}; quota_defaults {storage_bytes, repo_count, ci_minutes_per_month, ai_calls_per_hour}; org_quota_defaults {storage_bytes, repo_count, ci_minutes_per_month} (quota fields: positive integer; 0 or null = unlimited); log_retention {days}; container_limits {kind: job|ai|service, cpus, memory}, e.g. 0.5 and 512m; build_concurrency {queue: ci_builds|deploys, limit >= 1}; ci_workspaces {max_age_hours >= 1, build_cache_max_gb >= 0, toolchains_max_gb >= 0}, all three; app_volumes {max_gb >= 0, 0 = unlimited}; app_databases {max_gb >= 0, 0 = unlimited}; packages {max_file_mb >= 1}; egress {allow_private: bool, allowlist_hosts: [hostname]}; ai_concurrency {max_concurrent_jobs, max_concurrent_per_repo}, 1 to 100. `reset` restores the config default of container_limits (values.kind), build_concurrency (values.queue), ci_workspaces, app_volumes, app_databases or packages. Returns the section's new values.

Argument Type Notes
action * string One of: set, reset
section * string One of: feature_defaults, quota_defaults, org_quota_defaults, log_retention, container_limits, build_concurrency, ci_workspaces, app_volumes, app_databases, packages, egress, ai_concurrency
values object Fields to set (required for set), or the kind/queue to reset for container_limits and build_concurrency

* required

Databases

describe_database and query_database give the same access to an environment's database as the browser DB editor, and need the same setup:

  • An admin turns on the DB editor for environments under Admin → Settings → DB editor.
  • Your account has the db_admin:environments admin permission, and you have write access to the project.

Queries are read-only unless allow_write is set, which needs an api token. Reads can't write files, cancel or terminate other connections, or take session locks. With allow_write, only INSERT, REPLACE, MERGE, and UPDATE/DELETE with a WHERE run; schema changes and everything else go through the browser editor. Every query is recorded in the DB editor's audit log. Database credentials are never returned.

Environments and variables

create_environment takes the New environment page's settings. With managed_db it also creates the environment's Postgres database straight away and sets DATABASE_URL; provision_database does the same for an existing environment, and is the retry if creating the database failed.

Environment variable values never appear in a response. set_env_var takes a literal value, which passes through the agent's transcript, or one of two ways to keep a secret out of it: generate makes random bytes on the server and encodes them (base64, base64url or hex), and copy_from copies another environment's value on the server, e.g. production's POOL_SIZE into staging. Changes reach the app on its next deploy.

AI jobs

Every AI job gets this server automatically, with nothing to configure. Its token is created when the agent starts and deleted when it finishes. It is read-only and restricted to the job's repository, so the agent can read issues, merge request threads, CI logs and app logs but can't change anything, read CI variables or webhooks, use admin, database, snippet or email-credential tools, or reach other projects.

Agent containers connect to https://git.vianet.us/mcp. If they can't reach GitBlixt's public address, for example in a local Docker Compose setup, set Admin → Settings → AI Settings → Agent base URL to an address they can reach, such as http://gitblixt:4000. The GITBLIXT_AGENT_BASE_URL environment variable is the fallback for fresh installs.

Limits and troubleshooting

  • The endpoint allows 120 requests a minute. gitlab_api calls also count toward the REST API's own limit.
  • 401 Unauthorized: the token is missing, mistyped, revoked or expired.
  • A tool is missing from the list: the token lacks the scope for it, it's an admin tool and the account isn't an admin, or it's an AI job token and the tool isn't bound to one project.
  • "Deployment is not enabled for this project": the app tools only work for projects with deployments turned on in their settings.
  • "You need at least developer access to this project": the tool needs a higher project role than the token's user has.
  • "This token is restricted to project N": an AI job token was used outside its own repository.