Skip to main content

Create a Team Access Binding

Tasks

Grant a team access to one or more MCP servers by creating an Access Binding. For the access model this configures, see Team Access.

Create a binding​

  1. Go to Setup → Settings → Access Bindings → New Access Binding.
  2. Fill in the binding. The editor has four sections:

    SectionFieldDescription
    NameA unique identifier for the binding, e.g. platform-team-k8s. You can't rename a binding after you create it
    Applies toSubjectsTeams, IdP groups, individual users, agents (trailing * glob allowed), or agent labels
    ModelsModelsOptional. The models the binding grants, from the models your upstreams advertise, or a pattern such as claude-* — see Grant LLM models
    MCP toolsPer serverAll tools, Selected tools, or None for each connected server, plus tool patterns — see Grant specific tools
    AdvancedDecision modeAllow, Audit, Warn, Hold, or Deny. Hold uses the existing require-approval wire value — see Decision mode mapping
    AdvancedToolsetsRead-only. The Toolsets the binding already references; their tools join the grant. Grant new tools under MCP tools
    AdvancedServers for conditions and scopesOptional. The servers where the binding's conditions and scopes apply. While the binding has no tool grant, each server listed also grants every tool. MCP tools doesn't change this list
    AdvancedScopesOptional. Narrows the allowed tool scopes for these subjects. Enforced at both token issuance and per tool call — a request whose scopes exceed the binding's allowed scopes is denied
    AdvancedConditionsOptional CEL expressions, each with its own denial message, evaluated in addition to the decision mode
    AdvancedInput / output conditionsOptional CEL over the request arguments and the tool's response — violations always deny; see Control MCP tool access
    AdvancedRate limitsOptional call-rate caps per user/agent/team — see Rate-limit MCP tools
  3. Save. The binding takes effect immediately — the next token request or tool call from a member of the named teams is evaluated against it.
note

Scope narrowing applies to scope-bearing requests — the caller must present a scoped identity (e.g. a Cross-App Access / ID-JAG token). A binding's scopes narrow what its teams may request for the bound servers: a request whose requested/granted scopes aren't a subset of the binding's allowed scopes is denied at token issuance (invalid_grant) and re-checked per tool call. A binding with no scopes set places no scope restriction.

Verify​

  1. Have a member of a named team connect and confirm their client requests a token for a bound server successfully.
  2. Have a member of a team that isn't named in any binding for that server attempt the same — confirm the request fails with invalid_grant.
  3. Check Security Events for the successful call and confirm it shows the binding's binding_name.

Remove or narrow access​

Edit a binding to add or remove teams and servers, or change its decision mode. Every edit is recorded in the binding's history, and you can restore an earlier revision. See Review and restore a binding change. The name is fixed after you create the binding. You can't delete a binding that a Workload Blueprint selects. Deleting a binding removes that grant — if no other binding covers a (team, server) pair afterward, the default of no access applies again immediately.

Troubleshooting​

SymptomCause
Developer still gets invalid_grant after being added to a binding's teamTeam membership is resolved from the identity token at issuance — the developer needs a fresh sign-in/token, not just updated IdP group membership, for the change to take effect
Binding has no visible effect on tool-level accessCheck decisionMode — Audit and Warn allow the call through and only affect logging/messaging, they don't restrict anything
Scopes don't seem to restrict which tools are callableConfirm the client presents a scoped identity (e.g. via XAA/ID-JAG) and that its requested/granted scopes are a subset of the binding's allowed scopes — narrowing only applies to scope-bearing requests. A binding with no scopes set applies no scope restriction

See also​