Organization

Limits

ToolDescriptionPermission
create_limitCreate a spend (token_cost), requests, or tokens limit for any supported interval.llmLimit:create
get_limitsRetrieve all limits, optionally filtered by entity type and/or entity ID.llmLimit:read
update_limitUpdate mutable fields on an existing limit.llmLimit:update
delete_limitDelete an existing limit by ID.llmLimit:delete
get_agent_token_usageGet the total token usage (input and output) for a specific agent.llmLimit:read
get_llm_proxy_token_usageGet the total token usage (input and output) for the LLM Proxy.llmLimit:read

create_limit

Required RBAC permission: llmLimit:create

Input

ParameterTypeRequiredDescription
entity_type"organization" | "team" | "agent" | "user" | "virtual_key" | "environment" | "llm_oauth_client"YesThe type of entity to apply the limit to.
entity_idstringYesThe ID of the entity (organization, team, agent, user, virtual_key, environment, or llm_oauth_client).
limit_type"token_cost" | "requests" | "tokens" | "requests_per_minute" | "tokens_per_minute" | "mcp_server_calls" | "tool_calls"YesThe type of limit to apply.
limit_valuenumberYesThe limit value (tokens or count depending on limit type).
modelstring[] | nullNoArray of model names. Omit for all models.
cleanup_interval"minute" | "1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"NoMinute recovers continuously. Other intervals reset on their rolling or calendar schedule. Omit for calendar month; legacy per-minute types imply minute.
mcp_server_namestringNoMCP server name. Required for mcp_server_calls and tool_calls limits.
tool_namestringNoTool name. Required for tool_calls limits.
behavior"hard" | "soft"NoHard blocks exhausted requests; soft continues and records Prometheus observations. Only for token_cost, tokens and requests limits. Defaults to hard.
reasonstring | nullNoOptional note on why the limit was set, shown with custom per-user limits. Null clears it.

Output

FieldTypeRequiredDescription
limitobjectYes
limit.throughputUsageobjectNo
limit.throughputUsage.currentUsagenumberYes
limit.throughputUsage.resetsAtstringYes
limit.idstringYesThe limit ID.
limit.entityType"organization" | "team" | "agent" | "user" | "virtual_key" | "environment" | "llm_oauth_client"YesThe limited entity type.
limit.entityIdstringYesThe limited entity ID.
limit.limitType"token_cost" | "requests" | "tokens" | "requests_per_minute" | "tokens_per_minute" | "mcp_server_calls" | "tool_calls"YesThe kind of limit.
limit.limitValuenumberYesThe configured limit value.
limit.behavior"hard" | "soft"Yes
limit.reasonstring | nullNoWhy the limit was set, if a reason was given.
limit.cleanupInterval"minute" | "1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"YesHow often this limit resets.
limit.modelstring[] | nullNoModels targeted by a cost or throughput limit. Null or empty array means all models.
limit.mcpServerNamestring | nullNoMCP server name for MCP-specific limits, if any.
limit.toolNamestring | nullNoTool name for tool-specific limits, if any.

get_limits

Required RBAC permission: llmLimit:read

Input

ParameterTypeRequiredDescription
entity_type"organization" | "team" | "agent" | "user" | "virtual_key" | "environment" | "llm_oauth_client"NoOptional filter by entity type.
entity_idstringNoOptional filter by entity ID.
limit_type"token_cost" | "requests" | "tokens" | "requests_per_minute" | "tokens_per_minute" | "mcp_server_calls" | "tool_calls"NoOptional filter by limit type.

Output

FieldTypeRequiredDescription
limitsobject[]Yes
limits[].throughputUsageobjectNo
limits[].throughputUsage.currentUsagenumberYes
limits[].throughputUsage.resetsAtstringYes
limits[].idstringYesThe limit ID.
limits[].entityType"organization" | "team" | "agent" | "user" | "virtual_key" | "environment" | "llm_oauth_client"YesThe limited entity type.
limits[].entityIdstringYesThe limited entity ID.
limits[].limitType"token_cost" | "requests" | "tokens" | "requests_per_minute" | "tokens_per_minute" | "mcp_server_calls" | "tool_calls"YesThe kind of limit.
limits[].limitValuenumberYesThe configured limit value.
limits[].behavior"hard" | "soft"Yes
limits[].reasonstring | nullNoWhy the limit was set, if a reason was given.
limits[].cleanupInterval"minute" | "1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"YesHow often this limit resets.
limits[].modelstring[] | nullNoModels targeted by a cost or throughput limit. Null or empty array means all models.
limits[].mcpServerNamestring | nullNoMCP server name for MCP-specific limits, if any.
limits[].toolNamestring | nullNoTool name for tool-specific limits, if any.

update_limit

Required RBAC permission: llmLimit:update

Input

ParameterTypeRequiredDescription
idstringYesThe ID of the limit to update.
limit_valuenumberNoOptional new limit value.
limit_type"token_cost" | "requests" | "tokens" | "requests_per_minute" | "tokens_per_minute" | "mcp_server_calls" | "tool_calls"NoSame-unit legacy conversion only: requests_per_minute to requests, or tokens_per_minute to tokens.
modelstring[] | nullNoCanonical model names; null applies to all models.
cleanup_interval"minute" | "1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"NoOptional new cleanup interval for this limit.
behavior"hard" | "soft"NoHard blocks exhausted requests; soft continues and records Prometheus observations. Only for token_cost, tokens and requests limits. Defaults to hard.
reasonstring | nullNoOptional note on why the limit was set, shown with custom per-user limits. Null clears it.

Output

FieldTypeRequiredDescription
limitobjectYes
limit.throughputUsageobjectNo
limit.throughputUsage.currentUsagenumberYes
limit.throughputUsage.resetsAtstringYes
limit.idstringYesThe limit ID.
limit.entityType"organization" | "team" | "agent" | "user" | "virtual_key" | "environment" | "llm_oauth_client"YesThe limited entity type.
limit.entityIdstringYesThe limited entity ID.
limit.limitType"token_cost" | "requests" | "tokens" | "requests_per_minute" | "tokens_per_minute" | "mcp_server_calls" | "tool_calls"YesThe kind of limit.
limit.limitValuenumberYesThe configured limit value.
limit.behavior"hard" | "soft"Yes
limit.reasonstring | nullNoWhy the limit was set, if a reason was given.
limit.cleanupInterval"minute" | "1h" | "12h" | "24h" | "1w" | "1m" | "calendar_day" | "calendar_week_sunday" | "calendar_week_monday" | "calendar_month"YesHow often this limit resets.
limit.modelstring[] | nullNoModels targeted by a cost or throughput limit. Null or empty array means all models.
limit.mcpServerNamestring | nullNoMCP server name for MCP-specific limits, if any.
limit.toolNamestring | nullNoTool name for tool-specific limits, if any.

delete_limit

Required RBAC permission: llmLimit:delete

Input

ParameterTypeRequiredDescription
idstringYesThe ID of the limit to delete.

Output

FieldTypeRequiredDescription
successtrueYes
idstringYes

get_agent_token_usage

Required RBAC permission: llmLimit:read

Input

ParameterTypeRequiredDescription
idstringNoOptional agent ID. Defaults to the current agent.

Output

FieldTypeRequiredDescription
idstringYes
totalInputTokensnumberYes
totalOutputTokensnumberYes
totalTokensnumberYes

get_llm_proxy_token_usage

Required RBAC permission: llmLimit:read

This tool takes no arguments.

Output

FieldTypeRequiredDescription
idstringYes
totalInputTokensnumberYes
totalOutputTokensnumberYes
totalTokensnumberYes

Teams

ToolDescriptionPermission
create_teamCreate a new team in the organization, optionally nested under a parent team and with key-value labels.team:create
get_teamRetrieve a single team by its ID or name, including its current member count.team:read †
list_teamsList all teams in the organization, optionally filtered by a name substring.team:read †
edit_teamUpdate a team's name, description, parent, and/or labels.team:update
delete_teamDelete a team by ID.team:delete
list_team_membersList all members of a team along with their roles.team:read †
add_team_memberAdd an organization user to a team by user ID or email, optionally as an admin.team:read †
update_team_member_roleChange a team member's role between admin and member.team:read †
remove_team_memberRemove a member from a team.team:read †
list_team_external_groupsList the identity provider groups linked to a team for Team Sync, with the team role each grants.team:read
add_team_external_groupLink an identity provider group to a team for Team Sync: on each sign-in, people in the group join the team with the link's team role, and leave it once they leave the group.team:read
remove_team_external_groupUnlink an identity provider group from a team's Team Sync, by link ID or by group identifier.team:read

† This tool enforces an additional access requirement beyond its RBAC permission — see its details below.

create_team

Required RBAC permission: team:create

Input

ParameterTypeRequiredDescription
namestringYesThe name of the team.
descriptionstringNoOptional human-readable description of the team.
rolesstring[]NoOrganization role identifiers to assign to the team. Members of this team and its descendants inherit their permissions.
parent_idstring | nullNoOptional parent team ID. Omit or pass null for a root team.
labelsobject[]NoOptional key-value labels to assign to the team for organization and categorization (e.g. cost-center, environment).
labels[].keystringYes
labels[].valuestringYes

Output

FieldTypeRequiredDescription
teamobjectYes
team.idstringYesThe team ID.
team.namestringYesThe team name.
team.descriptionstring | nullYesThe team description, if any.
team.rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
team.parentIdstring | nullYesThe parent team ID, or null when this is a root team.
team.organizationIdstringYesThe organization the team belongs to.
team.createdBystring | nullYesThe ID of the user who created the team.
team.memberCountnumberYesThe number of members currently in the team.
team.labelsobject[]YesKey-value labels assigned to the team.
team.labels[].keystringYesThe label key.
team.labels[].valuestringYesThe label value.
team.createdAtstringYesISO timestamp when the team was created.
team.updatedAtstringYesISO timestamp when the team was last updated.

get_team

Required RBAC permission: team:read

Additional access requirement: Callers without organization-level team management (team:update) can only read teams they are a member of.

Input

ParameterTypeRequiredDescription
idstringNoThe ID of the team to fetch.
namestringNoThe name of the team to fetch (within the organization).

Output

FieldTypeRequiredDescription
teamobjectYes
team.idstringYesThe team ID.
team.namestringYesThe team name.
team.descriptionstring | nullYesThe team description, if any.
team.rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
team.parentIdstring | nullYesThe parent team ID, or null when this is a root team.
team.organizationIdstringYesThe organization the team belongs to.
team.createdBystring | nullYesThe ID of the user who created the team.
team.memberCountnumberYesThe number of members currently in the team.
team.labelsobject[]YesKey-value labels assigned to the team.
team.labels[].keystringYesThe label key.
team.labels[].valuestringYesThe label value.
team.createdAtstringYesISO timestamp when the team was created.
team.updatedAtstringYesISO timestamp when the team was last updated.

list_teams

Required RBAC permission: team:read

Additional access requirement: Callers without organization-level team management (team:update) only see teams they are a member of.

Input

ParameterTypeRequiredDescription
namestringNoOptional case-insensitive name substring to filter by.

Output

FieldTypeRequiredDescription
teamsobject[]Yes
teams[].idstringYesThe team ID.
teams[].namestringYesThe team name.
teams[].descriptionstring | nullYesThe team description, if any.
teams[].rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
teams[].parentIdstring | nullYesThe parent team ID, or null when this is a root team.
teams[].organizationIdstringYesThe organization the team belongs to.
teams[].createdBystring | nullYesThe ID of the user who created the team.
teams[].memberCountnumberYesThe number of members currently in the team.
teams[].labelsobject[]YesKey-value labels assigned to the team.
teams[].labels[].keystringYesThe label key.
teams[].labels[].valuestringYesThe label value.
teams[].createdAtstringYesISO timestamp when the team was created.
teams[].updatedAtstringYesISO timestamp when the team was last updated.

edit_team

Required RBAC permission: team:update

Input

ParameterTypeRequiredDescription
idstringYesThe ID of the team to update.
namestringNoOptional new team name.
descriptionstring | nullNoOptional new team description. Pass null to clear an existing description.
rolesstring[]NoReplace the team’s organization role identifiers. Members of this team and its descendants inherit their permissions. Pass [] to clear; omit to leave unchanged.
parent_idstring | nullNoMove the team under this parent. Pass null to move it to the root; omit to leave the hierarchy unchanged.
labelsobject[]NoReplace the team's labels with this set. Pass an empty array to remove all labels. Omit to leave labels unchanged.
labels[].keystringYes
labels[].valuestringYes

Output

FieldTypeRequiredDescription
teamobjectYes
team.idstringYesThe team ID.
team.namestringYesThe team name.
team.descriptionstring | nullYesThe team description, if any.
team.rolesstring[]YesOrganization role identifiers assigned to the team and inherited by members of this team and its descendants.
team.parentIdstring | nullYesThe parent team ID, or null when this is a root team.
team.organizationIdstringYesThe organization the team belongs to.
team.createdBystring | nullYesThe ID of the user who created the team.
team.memberCountnumberYesThe number of members currently in the team.
team.labelsobject[]YesKey-value labels assigned to the team.
team.labels[].keystringYesThe label key.
team.labels[].valuestringYesThe label value.
team.createdAtstringYesISO timestamp when the team was created.
team.updatedAtstringYesISO timestamp when the team was last updated.

delete_team

Required RBAC permission: team:delete

Input

ParameterTypeRequiredDescription
idstringYesThe ID of the team to delete.

Output

FieldTypeRequiredDescription
successtrueYes
idstringYes

list_team_members

Required RBAC permission: team:read

Additional access requirement: Callers without organization-level team management (team:update) can only read members of teams they are a member of.

Input

ParameterTypeRequiredDescription
team_idstringYesThe ID of the team whose members to list.

Output

FieldTypeRequiredDescription
membersobject[]Yes
members[].idstringYesThe team membership row ID.
members[].teamIdstringYesThe team the membership belongs to.
members[].userIdstringYesThe ID of the member user.
members[].role"admin" | "member"YesThe member's role within the team (admin or member).
members[].syncedFromSsobooleanYesWhether this membership is managed by SSO group sync.
members[].namestring | nullNoThe member's display name, when available.
members[].emailstringNoThe member's email, when available.
members[].createdAtstringYesISO timestamp when the membership was created.

add_team_member

Required RBAC permission: team:read

Additional access requirement: Beyond team:read, the caller must be an organization-level team manager (a role granting team:update) or an admin of the target team.

Input

ParameterTypeRequiredDescription
team_idstringYesThe ID of the team to add the member to.
userstringYesThe user to add, identified by their user ID or email address. The user must already belong to the organization.
role"admin" | "member"NoThe role to assign within the team. Defaults to 'member'.

Output

FieldTypeRequiredDescription
memberobjectYes
member.idstringYesThe team membership row ID.
member.teamIdstringYesThe team the membership belongs to.
member.userIdstringYesThe ID of the member user.
member.role"admin" | "member"YesThe member's role within the team (admin or member).
member.syncedFromSsobooleanYesWhether this membership is managed by SSO group sync.
member.namestring | nullNoThe member's display name, when available.
member.emailstringNoThe member's email, when available.
member.createdAtstringYesISO timestamp when the membership was created.

update_team_member_role

Required RBAC permission: team:read

Additional access requirement: Beyond team:read, the caller must be an organization-level team manager (a role granting team:update) or an admin of the target team.

Input

ParameterTypeRequiredDescription
team_idstringYesThe ID of the team.
user_idstringYesThe ID of the member user to update.
role"admin" | "member"YesThe new role for the member (admin or member).

Output

FieldTypeRequiredDescription
memberobjectYes
member.idstringYesThe team membership row ID.
member.teamIdstringYesThe team the membership belongs to.
member.userIdstringYesThe ID of the member user.
member.role"admin" | "member"YesThe member's role within the team (admin or member).
member.syncedFromSsobooleanYesWhether this membership is managed by SSO group sync.
member.namestring | nullNoThe member's display name, when available.
member.emailstringNoThe member's email, when available.
member.createdAtstringYesISO timestamp when the membership was created.

remove_team_member

Required RBAC permission: team:read

Additional access requirement: Beyond team:read, the caller must be an organization-level team manager (a role granting team:update) or an admin of the target team.

Input

ParameterTypeRequiredDescription
team_idstringYesThe ID of the team.
user_idstringYesThe ID of the member user to remove from the team.

Output

FieldTypeRequiredDescription
successtrueYes
teamIdstringYes
userIdstringYes

list_team_external_groups

Required RBAC permission: team:read

Input

ParameterTypeRequiredDescription
team_idstringYesThe ID of the team whose Team Sync group links to list.

Output

FieldTypeRequiredDescription
externalGroupsobject[]Yes
externalGroups[].idstringYesThe Team Sync group link ID.
externalGroups[].teamIdstringYesThe team the mapping belongs to.
externalGroups[].groupIdentifierstringYesThe external identity provider group identifier.
externalGroups[].identityProviderIdstring | nullYesThe identity provider the group is matched for, or null to match it from any provider.
externalGroups[].role"admin" | "member"YesThe team role members of this group receive.
externalGroups[].createdAtstringYesISO timestamp when the mapping was created.

add_team_external_group

Required RBAC permission: team:read

Input

ParameterTypeRequiredDescription
team_idstringYesThe ID of the team to link the group to.
group_identifierstringYesThe external identity provider group identifier. Format varies by provider: LDAP Distinguished Name (e.g. cn=admins,ou=groups,dc=example,dc=com), OAuth/OIDC group name from the groups claim, SAML group attribute value, or Azure AD group object ID (GUID). Matched case-insensitively.
identity_provider_idstringNoThe ID of the identity provider to match the group for. Omit to match the group from any provider.
role"admin" | "member"NoThe team role members of this group receive: member (default) or admin.

Output

FieldTypeRequiredDescription
externalGroupobjectYes
externalGroup.idstringYesThe Team Sync group link ID.
externalGroup.teamIdstringYesThe team the mapping belongs to.
externalGroup.groupIdentifierstringYesThe external identity provider group identifier.
externalGroup.identityProviderIdstring | nullYesThe identity provider the group is matched for, or null to match it from any provider.
externalGroup.role"admin" | "member"YesThe team role members of this group receive.
externalGroup.createdAtstringYesISO timestamp when the mapping was created.

remove_team_external_group

Required RBAC permission: team:read

Input

ParameterTypeRequiredDescription
team_idstringYesThe ID of the team.
group_idstringNoThe ID of the Team Sync group link to remove.
group_identifierstringNoThe external group identifier to remove, as an alternative to group_id. Matched case-insensitively.

Output

FieldTypeRequiredDescription
successtrueYes
teamIdstringYes

Plugins

ToolDescriptionPermission
list_pluginsList the plugins available to you in this organization — one line per plugin with its id, client, platforms, visibility, and file count.plugin:read
get_pluginRead one plugin, including every file's exact bytes and the plugin's current contentHash.plugin:read
create_pluginCreate a plugin from an explicit file set.plugin:create
update_pluginUpdate a plugin's metadata, visibility, or entire file set.plugin:update
edit_pluginMake a targeted edit to one file of a plugin without resending the whole file set.plugin:update
delete_pluginDelete a plugin.plugin:delete

list_plugins

Required RBAC permission: plugin:read

Input

ParameterTypeRequiredDescription
accessstring[]NoOnly return items the caller reaches in one of these ways: mine (created by the caller), shared (shared with the caller or one of their teams), org (shared with the whole organization), others (not shared with the caller; visible only through admin access). Omit for everything the caller can read. Use ["mine"] for "my plugins".
shared_withstring[]NoOnly return items whose own permissions grant read to one of these subjects: org (the whole organization), role:, team:, user:, serviceAccount:. Omit for no filtering.
owner_idsstring[]NoOnly return items created by one of these user IDs. Omit for no filtering.

get_plugin

Required RBAC permission: plugin:read

Input

ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.

create_plugin

Required RBAC permission: plugin:create

Input

ParameterTypeRequiredDescription
initialGrantsobject[]No
initialGrants[].subjectobjectYes
initialGrants[].subject.type"user" | "team" | "serviceAccount" | "role" | "organization"Yes
initialGrants[].subject.idstring | "*"Yes
initialGrants[].actionsstring[]Yes
displayNamestringYesHuman-readable plugin name.
descriptionstringNoWhat the plugin does.
clientType"claude-code" | "claude-desktop" | "copilot-cli" | "codex" | "cursor"YesThe client the payload targets: claude-code, claude-desktop, codex, copilot-cli, or cursor.
supportedPlatformsstring[]NoOperating systems the payload supports.
filesobject[]YesThe plugin's files as { path, content, encoding?, mode? }. Hook configuration bytes are stored verbatim — review them as code, they execute on developer machines.
files[].pathstringYes
files[].contentstringYes
files[].encoding"utf8" | "base64"No
files[].mode"100644" | "100755"No

update_plugin

Required RBAC permission: plugin:update

Input

ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.
displayNamestringNoHuman-readable plugin name.
descriptionstringNoWhat the plugin does.
enabledbooleanNoDisabled plugins are left out of future setup commands; already-installed copies are unaffected.
supportedPlatformsstring[]NoOperating systems the payload supports.
baseContentHashstringNoRequired when files is provided. Use the current contentHash from get_plugin; the replacement is rejected if newer bytes landed first.
filesobject[]NoWHEN PROVIDED, REPLACES THE PLUGIN'S ENTIRE file set. Omit it to edit only metadata/visibility. Manual plugins only — GitHub-sourced files are read-only. For a small change to one file, prefer edit_plugin over resending every file.
files[].pathstringYes
files[].contentstringYes
files[].encoding"utf8" | "base64"No
files[].mode"100644" | "100755"No

edit_plugin

Required RBAC permission: plugin:update

Input

ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.
baseContentHashstringYesThe plugin's current contentHash, as returned by get_plugin. The edit is rejected when the plugin's bytes have moved past it.
pathstringYesThe plugin file to edit, from the file list returned by get_plugin. Only text (utf8) files are editable — binary files are not.
editsobject[]Nostr_replace edits applied in order to the target file; the whole edit is atomic (any failure leaves the plugin unchanged). Pass either edits or replacementContent, never both.
edits[].old_strstringYesExact text to replace; must occur exactly once in the target (add surrounding context to disambiguate).
edits[].new_strstringYesReplacement text (may be empty to delete).
replacementContentstringNoThe complete new content of the target file, replacing it outright with no old_str matching. Pass either edits or replacementContent, never both.

delete_plugin

Required RBAC permission: plugin:delete

Input

ParameterTypeRequiredDescription
idstringYesThe plugin id, as listed by list_plugins.