Service Tokens

Published on August 6th, 2026

Introduction

MCP servers and the REST API accept two kinds of credential: an interactive OAuth login, or a Service Token.

Service Tokens are for consumers that cannot complete a browser flow, such as CI jobs, background agents, scripts, and MCP clients running unattended. They are long-lived, individually revocable, and scoped, so each consumer can be given only the access it needs.

Manage them under Administration → Service Tokens.

img.png

Creating a token

A token has three things:

  • Name: how it appears in the token list and in Agent Sessions. Name it after the consumer rather than the person creating it.
  • Expiration: 30 days, 90 days, 1 year, 2 years, or no expiry. The default is 90 days.
  • Scopes: what it may do. See below.

The token value is shown once, at creation, and cannot be retrieved afterwards. The list only ever shows a masked version. Copy it before closing the dialog. If you lose it, rotate the token.

Using a token

Send it as a bearer token:

bash
curl -H "Authorization: Bearer <token>" \
  https://app-api.roadie.so/api/mcp/v1/explore

Requests made with a Service Token appear in Agent Sessions as Token: <name>. Giving each agent or job its own token is what makes that attribution useful.

Scopes

A scope is resource:action, optionally narrowed to a single instance with resource:action:target. A grant of the un-narrowed scope covers every target.

Verbs

VerbMeaning
getRead a single resource
queryA read that changes nothing, such as a search or a list
createCreate or modify a resource
deleteDelete a resource
dry-runSimulate without persisting
executeRun, apply, or restore an existing resource

Resources

ResourceVerbs available
capabilityget, query, create, delete
actionget, query, create, delete, execute
context-groupquery, create, delete, dry-run, execute
catalog-datastoreget, query, create, delete, execute
datasourcequery, create
relationshipget, query, create, delete
relationship-ruleget, query, create, delete, dry-run, execute
integrationget, query, create, delete, execute
catalog-workflowget, query, create, delete, dry-run, execute
secrets-settingsget, query, create, delete
aiget, create, execute
mcpquery
mcp-settingsquery, create
mcp-telemetrycreate

A resource lists only the verbs it enforces. A scope that gates nothing is not offered, so it cannot be granted by mistake.

Narrowing to specific targets

Some scopes can be pinned to a single instance, which is how you give an agent access to one Capability or one Action rather than all of them:

ScopeNarrowed form
capability:getcapability:get:<capability-slug>
capability:querycapability:query:<capability-slug>
action:queryaction:query:<action-slug>
action:executeaction:execute:<action-slug>
context-group:querycontext-group:query:<rule-slug>

catalog-datastore scopes cannot be narrowed per Data Source. Granting catalog-datastore:query grants search across the whole Data Store.

Scope suggestions

If a Capability's instructions reference other resources with @type:slug, such as @action:create-repository or @context-group:payments-team, the scope picker parses those references and suggests the scopes needed to follow that Capability end to end.

Starting from the Capability you intend an agent to run, and accepting the suggestions, is the shortest path to a correctly scoped token.

Rotating and revoking

  • Rotate issues a new token value and revokes the old one in the same step, keeping the name and scopes. Use it on a schedule, or immediately if a token may have leaked.
  • Edit changes a token's name and scopes without changing its value.
  • Revoke invalidates the token immediately.

Next steps