The MCP (Model Context Protocol) Services exposes about 208 tools (MCP Services 3.4, October 2026), grouped into the families below. Most platform-admin tools mirror the matching octo-cli command (snake_case names — e.g. CLI CreateTenant → MCP create_tenant); the aggregation and persisted-query tools mirror the asset-repository's GraphQL transient-query surface.
Start OAuth2 Device Authorization Flow — returns verification URL and user code
check_auth_status
Check whether the browser login has completed
auth_status
Show authentication status; optionally refresh an expired access token
whoami
Return the authenticated user (name, email, roles, tenants)
list_tenants
List every tenant the authenticated user has access to
switch_tenant
Switch the session's operating tenant without re-login (RFC 8693 token exchange; roles are re-resolved in the target tenant; falls back to device flow if cross-tenant access is not provisioned)
List identity providers in the tenant (clientSecret is always null — the tool also drops one an older identity service might return; clientSecretIsSet instead)
update_identity_provider
Update common fields on an existing identity provider. The client secret is write-only: omit clientSecret to keep it, pass a new value to rotate it
delete_identity_provider‡
Delete an identity provider
add_oauth_identity_provider
Create a Google, Microsoft, or Facebook OAuth identity provider
add_azure_entra_id_identity_provider
Create an Azure Entra ID identity provider
add_open_ldap_identity_provider
Create an OpenLDAP identity provider
add_active_directory_identity_provider
Create a Microsoft Active Directory identity provider
add_octo_tenant_identity_provider
Create an OctoTenant identity provider for cross-tenant auth
List the CK model catalog sources configured for the asset service
list_ck_catalog_models
List models available in catalogs, with optional filter
refresh_ck_catalogs
Refresh the CK model catalog caches
get_ck_library_status
Get the merged library status for a tenant with update flags
check_ck_dependencies
Resolve dependencies for a catalog model
check_ck_upgrade
Pre-flight check for upgrading/migrating an installed CK model
import_ck_from_catalog
Import a CK model from the catalog, including all dependencies
fix_all_ck_models‡
Find every installed CK model needing update/fix and enqueue imports
Service-managed CK models
import_ck_from_catalog silently no-ops for service-managed models (System.*, e.g. System.Communication, System.StreamData, System.Reporting). Use the matching enable_<feature> tool instead — see Troubleshooting.
Enable the communication controller for the tenant
disable_communication‡
Disable the communication controller; refused with a Conflict error while deployment sites or workloads of the tenant are still deployed — run undeploy_workload / undeploy_deployment_site first
Precondition chain
Undeploy every workload (undeploy_workload) and deployment site (undeploy_deployment_site) → disable_communication →
delete_tenant / detach_tenant. Each step refuses with a Conflict error naming what is still in the way;
pipelines and triggers need no separate step.
Execute a transient aggregation query over runtime entities
query_entities_grouping
Execute a transient grouped-aggregation query over runtime entities
query_stream_data_simple
Read raw time-series rows from an archive with column projection
query_stream_data_aggregation
Execute a transient aggregation query on a stream-data archive
query_stream_data_grouping
Execute a transient grouped-aggregation query on a stream-data archive
query_stream_data_downsampling
Execute a downsampling query returning time-bucketed aggregate rows
execute_runtime_query
Execute a persisted runtime query by RtId, with optional overrides
execute_stream_data_query
Execute a persisted stream-data query by RtId, with optional overrides
get_archive_storage_stats
Bulk-fetch per-archive storage stats (row count, disk size, health)
get_rollup_query_metadata
Return query-construction metadata for a rollup archive
get_archive_coverage
Return the measured coverage of an archive family (base archive and all rollups): bucket size, alignment, stored functions, available-from/-to per rung
resolve_series_query
Pick the archive or rollup to query for a time window, a target point count and an aggregation function (resolution-aware routing)
Aggregation function names are lowercase short forms — count, sum, avg, min, max — chosen because LLMs construct lowercase SQL-style strings more reliably than PascalCase enum names. The full set of filter operators is: Equals, NotEquals, Contains, StartsWith, EndsWith, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, Between, In, NotIn, IsNull, IsNotNull, Regex, Like, AnyEq, AnyLike.
Every tool that returns entities (query_entities, get_entity_by_id, navigate_associations, execute_runtime_query, …) shows value: null plus secretIsSet: true|false — never the value or the ciphertext.
create_entity / update_entity (medium risk) refuse a non-empty value for a Secret attribute. null, "" or an echoed { "isSet": … } leave the stored secret unchanged. update_entity takes clearSecretAttributes (camelCase or PascalCase names) to clear optional secrets.
set_entity_secrets (rtId, ckTypeId, secrets: [{ attributePath, value }], clearSecretAttributes, expectedVersion, tenantId) sets, rotates or clears secrets of an existing entity. Its secrets accept Secret attributes only (dot notation through records, e.g. Endpoints.Token) and refuse empty values. Any non-empty value — including one that looks like a placeholder (<…>, TODO_SET_*) — is stored as the secret.
create_entity_with_secrets (ckTypeId, entityData, secrets, tenantId) creates an entity together with its secrets in one insert. Use it for CK types with a required secret: the server refuses to create such an entity without a value, so create_entity followed by set_entity_secrets cannot create it. entityData follows the create_entity rules; secrets follows the set_entity_secrets rules.
These two high-risk tools are the only ones that write a secret value.
Filters on a secret support only IsNull / IsNotNull. Other filter operators, aggregations and group-by on a secret are refused with SecretAttributeNotQueryable; get_available_archive_paths never lists secrets.
Encryption status of a tenant (allTenants: true: every tenant) — environment status (key ring configured, active and known key ids, strict mode, verify cron, last verify), recent sweep runs with their dump state, the last report with counts per form and key id and the unreadable values to re-enter; never values
start_secret_sweep
Start a sweep job: mode = Verify (default), Encrypt, Reprotect or CleanupUnreadable; Encrypt, Reprotect and CleanupUnreadable need confirm: true (passed to the server); optional waitForCompletion. Decrypt is refused — high risk
get_secret_inventory
List the Secret attribute slots of a tenant (entity, attribute path, required, storage form) from the secrets overview; never values
restore_secret_sweep_dump‡
Restore the pre-sweep dump of a secret sweep run into its tenant (drops and replaces the tenant database) — high risk
Tools carry an [McpRisk(Low|Medium|High)] classification (a tool without an explicit attribute counts as Low) that wrapping clients (notably the OctoMesh AI Adapter) read at session start via get_tool_risk_metadata. It is informational metadata, not an authorisation mechanism (authorisation lives in the backend services via the propagated OAuth token).
Bulk deletes, dropping a CK type/attribute/enum value, production deploy, blueprint install/uninstall/apply-update, setting secrets (set_entity_secrets, create_entity_with_secrets, add_oauth_identity_provider, add_azure_entra_id_identity_provider, update_identity_provider, start_secret_sweep)
Pause and surface the proposed call for user approval
The classification is static per tool. That is why secret values are written only by dedicated high-risk tools, while the generic create_entity / update_entity stay medium risk and refuse secret values.
extraFilters is AND-combined with the persisted query's filter; the tool dispatches on the persisted query subtype (RtSimpleRtQuery / RtAggregationRtQuery / RtGroupingAggregationRtQuery) and projects the result accordingly.