ApiScope objects describe exactly which parts of the Rooms API a participant may call. They are carried inside the api grant of every ParticipantToken and are defined in meshagent.api.participant_token.ApiScope.
Built-in presets
MeshAgent ships three convenience constructors:ApiScope.agent_default()– enables Livekit, Queues, Messaging, Dataset, SQLite, Memory, Sync, Storage, Containers, Developer, Agents, LLM, and Services access. UseApiScope.agent_default(tunnels=True)to include the tunnels grant.ApiScope.user_default()– enables the same core room access asagent_default(), including SQLite, but omits the LLM grant and still excludes Admin and Tunnels.ApiScope.full()– everything inagent_default()plus the Admin and Tunnels grants. It does not add the roomsecretsgrant.
Scope fields
Each top-level field is a grant for one Room API surface. If a grant object is absent, that API surface is denied. When a grant object is present,None in an allowlist generally means unrestricted access within that grant. Tunnels are opt-in: when tunnels is absent, tunnel access is denied.
livekit
LivekitGrant contains an optional breakout_rooms list. When omitted, any breakout room may be joined. When provided, only the named breakout rooms can be joined.
queues
QueuesGrant exposes three controls:
send: list of queue names the participant may publish to (can_sendchecks membership;Nonemeans all queues).receive: list of queues the participant may consume from (can_receive).list: boolean flag gatingQueuesClient.listoperations (defaults toTrue).
messaging
MessagingGrant has simple booleans for broadcast, list, and send, all defaulting to True.
dataset
DatasetGrant manages table-level access:
tables: optional list ofTableGrantentries (name, and booleans forread,write,alter). When omitted the participant may access every table.list_tables: boolean (defaults toTrue).- Helper methods (
can_read,can_write,can_alter) enforce the per-table flags.
namespace. A grant with no namespace matches the table in any namespace; a grant with a namespace only matches requests for that namespace.
sqlite
SqliteGrant controls room-scoped SQLite databases:
create_database: boolean controlling database creation.list_databases: boolean controlling database discovery.databases: optional list ofSqliteDatabaseGrantentries. When omitted, the participant may use every SQLite database allowed by the grant.
name: database name.namespace: optional namespace restriction.create_table,drop,inspect,list_tables, andexecute: booleans for database-level operations.tables: optional list of table-specific grants. When omitted on a matching database grant, table read, write, and alter access applies to all tables in that database.
database, table, optional namespace, and booleans for read, write, and alter.
memory
MemoryGrant controls room-memory access:
list: boolean controlling whether the participant may list memories.memories: optional list ofMemoryEntryGrantobjects, each scoped bynameand optionalnamespace.- Each memory entry has its own
permissionsobject with booleans forcreate,drop,inspect,query,upsert,ingest,recall, andoptimize.
sync
SyncGrant accepts paths: a list of SyncPathGrant { path, read_only }. Paths may end with * to match prefixes. When no paths are supplied, read and write access is global. can_read and can_write verify the constraints.
storage
StorageGrant mirrors the sync semantics but checks filesystem-style prefixes (path.startswith(...)). A read_only flag prevents writes on matching paths.
containers
ContainersGrant controls container management features:
use_containers: overall switch for container operations (defaults toTrue).pull/run: optional allowlists of image tags; each entry can end with*to allow a prefix (can_pull/can_run).logs: booleans toggling log streaming support.registry: optionalContainerRegistryGrantfor repository-level registry operations.
ContainerRegistryGrant includes:
list: repositories the participant may list.pull: repositories the participant may pull from.run: repositories the participant may run images from.write: repositories the participant may write to.
*. If registry is absent, registry repository checks allow any repository; image pull and run checks are still controlled separately by the top-level pull and run image allowlists. If registry.list is absent but pull, run, or write are present, list access is inferred from those repository allowlists.
developer
DeveloperGrant currently exposes a single logs boolean, enabling developer log forwarding when True.
tunnels
TunnelsGrant controls port-forwarding into room containers.
ports: optional list of allowed container ports. If omitted or empty, all ports are allowed. If thetunnelsgrant is absent, port forwarding is denied.
agents
AgentsGrant exposes boolean switches for registering agents or toolkits (register_agent, register_public_toolkit, register_private_toolkit) and for invoking the Agents API (call, use_agents, use_tools). They default to True to match the typical agent workflow.
Use allowed_toolkits to restrict tool use to specific toolkit names. When allowed_toolkits is omitted, the participant may use any toolkit allowed by the rest of the grant.
llm
LLMGrant controls room-scoped LLM proxy access.
models: optional provider/model allowlist. When omitted, the participant may use any model allowed by the project policy. Entries can be exactprovider/modelnames or prefixes ending in*.
admin
AdminGrant currently exposes a single config boolean. When True, the participant may use the admin configuration surface.
secrets
The room API SecretsGrant enables room routes that require a participant-token secrets grant. It has no nested fields.
User and service-account secrets are managed through the account REST API. Proxy use is controlled by OAuth scopes such as secrets:proxy plus service-account permissions.
services
ServicesGrant currently exposes a list boolean for service-listing operations in the room.
Examples
api field when packaging a service to set the appropriate permissions for your service.