How it works
The MCP server is a thin transport in front of the same service boundary the REST API uses. There is no MCP-specific business logic: the same permissions, rate limits, and usage logging apply to both surfaces. The server is stateless: no sessions, no SSE. Every request carries its own credential, which is why ephemeral environments (CI, cloud sandboxes) reconnect with zero setup.Set up your tool
Each client has a guided setup page in the product under Settings > Integrations > AI Integrations, and a matching guide here:Claude & Claude Desktop
Add a custom connector on claude.ai; no API key needed.
Claude Code
One CLI command, then authenticate in the browser.
Codex
CLI, IDE, and Codex Cloud via an API key.
ChatGPT
Custom connector with OAuth; no API key needed.
Cursor, Devin & other clients
One-click Cursor install, plus a generic config for any MCP client.
Two ways to authenticate
Both produce the same authenticated context; pick whichever your client supports.Connecting requires the
api_keys.manage permission and a Pro or
Enterprise team. It’s the same gate as creating an API key, because an
agent connection is the same kind of long-lived programmatic credential.What happens when you click Connect
Your tool discovers Gecko’s authorization server, registers itself, and opens the consent screen. There is no pre-registration step and no client secret; the flow is OAuth with PKCE, designed for public clients.The authorization screen, field by field
Access is capped by your role and stops the moment it changes. You can
disconnect any time from Settings > Integrations.
What the tools can do
All eight tools return typed, structured output, and reads are marked read-only for clients that surface that. Permissions map one-to-one onto the REST API’s catalog.
The server also ships packaged prompts (
triage_criticals,
security_review, and fix_finding) that appear as slash commands in
clients that support MCP prompts, with repository-name autocomplete.
How access is scoped
Scopes are Gecko role permissions: one vocabulary, no mapping table.
A connection’s granted scopes are a ceiling, not an entitlement. Every
request re-derives your current role’s permissions ∩ the scopes you
granted, so:
- Demote the granting user and every connection they approved narrows immediately, with no revocation bookkeeping.
- Remove them from the team and their connections stop working entirely.
- A read-only connection stays read-only even if the client later asks for more; scopes never widen after consent.
Manage connections
Connected tools are listed under Settings > Integrations > Agents, one row per tool and credential.- Disconnect revokes the credential first and removes the row second, so a disconnected tool can never keep a working token.
- Anyone can disconnect a tool running on their own credential.
Disconnecting a teammate’s requires
api_keys.manage. - Deleting an API key under Settings > API Keys also kills any tool connected with that key, immediately.
For your security team
- What can a connected tool access? Only the team chosen at consent, only within the granting user’s role, and only through eight typed tools. There is no raw data export, no code access, and no way to reach a second team through one grant.
- How are tokens protected? The OAuth flow is PKCE-only with no client secrets. Tokens are opaque random strings, stored only as SHA-256 hashes; refresh tokens rotate on every use, and authorization codes are one-time.
- Can an attacker register a fake “Claude”? Client names are self-reported, which is exactly why the consent screen brands apps only by their validated redirect URI and shows an Unverified badge otherwise. The screen tells users to approve only connections they started.
- What’s logged? Every MCP request lands in the same per-request usage log as the REST API, and every triage action taken by a tool records its reason like a dashboard action, visible in the audit log.
- How do we revoke access? Disconnect the tool in Settings > Integrations, delete the underlying API key, or change the granting user’s role. All three take effect on the next request.
- What are the rate limits? Shared with the REST API, per credential and plan tier. Malformed or unauthorized probes are billed against the limit too, so the endpoint can’t be fuzzed for free.
Troubleshooting
No team appears on the consent screen
No team appears on the consent screen
The team picker only offers teams where you hold the
api_keys.manage
permission and at least one requested scope. Ask a team admin to either
grant you that permission or connect the tool themselves.The tool connects but every call is denied
The tool connects but every call is denied
Your role lost the permissions behind the granted scopes; the connection
is a ceiling on your live role, not a stored copy of it. Check your
role, or reconnect after it’s restored.
My client says the server doesn't support sessions or SSE
My client says the server doesn't support sessions or SSE
That’s by design. The server is stateless Streamable HTTP:
GET and
DELETE return 405, and every request must carry its own credential.
Use a client that supports Streamable HTTP (all clients on the setup
pages do).Verify connectivity from the command line
Verify connectivity from the command line
result.supportedVersions array in the response means the endpoint,
your network, and your credential are all fine, and any remaining problem
is in the client’s configuration.FAQ
OAuth or API key: which should we standardize on?
OAuth or API key: which should we standardize on?
OAuth, wherever the client supports it. It never exposes a pasteable
secret, it can be narrowed per connection, and revoking it doesn’t
disturb anything else. Use API keys for clients that can only send a
static header (Codex, most CI), and treat each key like the credential it
is: named, rotated, and deleted when its tool is retired.
Is this the same OAuth as GitLab account linking?
Is this the same OAuth as GitLab account linking?
No. For agent connections Gecko is the authorization server: it
issues tokens to your AI tools. For
account linking Gecko is
the client, receiving a read-only token from your GitLab. The two
flows share nothing but the protocol.
What happens when the person who connected a tool leaves?
What happens when the person who connected a tool leaves?
Their connections die with their team membership: every request re-checks
the granting user’s role, and a removed user has none. For durable,
person-independent automation, use the REST API
with a named API key instead, and rotate it on your schedule.
Can a tool see our source code?
Can a tool see our source code?
No. The tools expose scan results and finding evidence, which includes
short code snippets in the proof of concept and patch diff for a finding,
but there is no tool that clones, lists, or reads repository contents.