{"version":1,"tools":[{"module":"billing","operation":"plans","name":"billing_plans","description":"Read the three event cloud plans, monthly prices and service-wide ingestion, storage and VM resource limits. Does not buy a plan.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"billing","action":"read"},"http":{"method":"GET","path":"/api/billing/plans","response":"raw"}},{"module":"billing","operation":"state","name":"billing_state","description":"Read event cloud subscriptions, payment coverage, VM and event service readiness for the current workspace.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"billing","action":"read"},"http":{"method":"GET","path":"/api/billing/state","response":"raw"}},{"module":"eventDestinations","operation":"list","name":"events_destination_list","description":"List event storage destinations in the current workspace, including Docker on a saved server, Oblien cloud and custom services. Returns state, version and public ingestion URLs without stored secrets.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"read"},"http":{"method":"GET","path":"/api/events/destinations"}},{"module":"eventDestinations","operation":"get","name":"events_destination_read","description":"Read an event destination identity, deployment kind, linked server or cloud connection, state, version and public ingestion URL. Does not return private configuration or stored secrets.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"read"},"http":{"method":"GET","path":"/api/events/destinations/:id"}},{"module":"eventDestinations","operation":"create","name":"events_destination_create","description":"Configure an event destination using an existing saved server for Docker, a cloud connection for Oblien, or a compatible custom service. Creating a draft does not provision workloads. Secrets are write-only and sealed; use existing saved connections and never invent credentials. Requires workspace settings write permission.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","kind"],"properties":{"name":{"minLength":1,"maxLength":100,"pattern":"\\S","type":"string"},"kind":{"anyOf":[{"const":"docker","type":"string"},{"const":"oblien","type":"string"},{"const":"custom","type":"string"}]},"serverId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"cloudConnectionId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"ingestUrl":{"anyOf":[{"minLength":1,"maxLength":2048,"type":"string"},{"type":"null"}]},"config":{"additionalProperties":false,"type":"object","properties":{"deployment":{"const":"image","type":"string"},"dataUrl":{"minLength":1,"maxLength":2048,"type":"string"},"policyUrl":{"minLength":1,"maxLength":2048,"type":"string"},"allowPlaintextLoopback":{"type":"boolean"},"eventsImage":{"minLength":1,"maxLength":512,"type":"string"},"clickhouseImage":{"minLength":1,"maxLength":512,"type":"string"},"natsImage":{"minLength":1,"maxLength":512,"type":"string"},"ingestPort":{"minimum":1,"maximum":65535,"type":"integer"},"privatePort":{"minimum":1,"maximum":65535,"type":"integer"},"stateDir":{"minLength":1,"maxLength":1024,"type":"string"},"clickhouseNativeUrl":{"minLength":1,"maxLength":2048,"type":"string"},"clickhouseHttpUrl":{"minLength":1,"maxLength":2048,"type":"string"},"clickhouseUser":{"minLength":1,"maxLength":128,"type":"string"},"clickhouseDatabase":{"minLength":1,"maxLength":128,"type":"string"},"natsConfiguration":{"pattern":"^[a-f0-9]{64}$","type":"string"},"releases":{"additionalProperties":false,"type":"object","required":["events","nats"],"properties":{"events":{"additionalProperties":false,"type":"object","required":["url","sha256"],"properties":{"url":{"minLength":1,"maxLength":2048,"type":"string"},"sha256":{"pattern":"^[a-fA-F0-9]{64}$","type":"string"}}},"nats":{"additionalProperties":false,"type":"object","required":["url","sha256"],"properties":{"url":{"minLength":1,"maxLength":2048,"type":"string"},"sha256":{"pattern":"^[a-fA-F0-9]{64}$","type":"string"},"archiveMember":{"minLength":1,"maxLength":512,"type":"string"}}}}}}},"secrets":{"additionalProperties":false,"type":"object","properties":{"serviceToken":{"minLength":1,"maxLength":65536,"type":"string"},"clientCert":{"minLength":1,"maxLength":65536,"type":"string"},"clientKey":{"minLength":1,"maxLength":65536,"type":"string"},"ca":{"minLength":1,"maxLength":65536,"type":"string"},"serverCert":{"minLength":1,"maxLength":65536,"type":"string"},"serverKey":{"minLength":1,"maxLength":65536,"type":"string"},"natsToken":{"minLength":1,"maxLength":65536,"type":"string"},"clickhousePassword":{"minLength":1,"maxLength":65536,"type":"string"},"providerToken":{"minLength":1,"maxLength":65536,"type":"string"}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"write"},"http":{"method":"POST","path":"/api/events/destinations","status":201}},{"module":"eventDestinations","operation":"update","name":"events_destination_update","description":"Rename an event destination without interrupting its workload, or update an unused destination ingestion URL, operator configuration or write-only credentials using its current version. Connection changes return it to draft; destinations with linked datasets cannot be reconfigured. Requires workspace settings write permission.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","version"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"},"version":{"minimum":1,"type":"integer"},"name":{"minLength":1,"maxLength":100,"pattern":"\\S","type":"string"},"ingestUrl":{"anyOf":[{"minLength":1,"maxLength":2048,"type":"string"},{"type":"null"}]},"config":{"additionalProperties":false,"type":"object","properties":{"deployment":{"const":"image","type":"string"},"dataUrl":{"minLength":1,"maxLength":2048,"type":"string"},"policyUrl":{"minLength":1,"maxLength":2048,"type":"string"},"allowPlaintextLoopback":{"type":"boolean"},"eventsImage":{"minLength":1,"maxLength":512,"type":"string"},"clickhouseImage":{"minLength":1,"maxLength":512,"type":"string"},"natsImage":{"minLength":1,"maxLength":512,"type":"string"},"ingestPort":{"minimum":1,"maximum":65535,"type":"integer"},"privatePort":{"minimum":1,"maximum":65535,"type":"integer"},"stateDir":{"minLength":1,"maxLength":1024,"type":"string"},"clickhouseNativeUrl":{"minLength":1,"maxLength":2048,"type":"string"},"clickhouseHttpUrl":{"minLength":1,"maxLength":2048,"type":"string"},"clickhouseUser":{"minLength":1,"maxLength":128,"type":"string"},"clickhouseDatabase":{"minLength":1,"maxLength":128,"type":"string"},"natsConfiguration":{"pattern":"^[a-f0-9]{64}$","type":"string"},"releases":{"additionalProperties":false,"type":"object","required":["events","nats"],"properties":{"events":{"additionalProperties":false,"type":"object","required":["url","sha256"],"properties":{"url":{"minLength":1,"maxLength":2048,"type":"string"},"sha256":{"pattern":"^[a-fA-F0-9]{64}$","type":"string"}}},"nats":{"additionalProperties":false,"type":"object","required":["url","sha256"],"properties":{"url":{"minLength":1,"maxLength":2048,"type":"string"},"sha256":{"pattern":"^[a-fA-F0-9]{64}$","type":"string"},"archiveMember":{"minLength":1,"maxLength":512,"type":"string"}}}}}}},"secrets":{"additionalProperties":false,"type":"object","properties":{"serviceToken":{"minLength":1,"maxLength":65536,"type":"string"},"clientCert":{"minLength":1,"maxLength":65536,"type":"string"},"clientKey":{"minLength":1,"maxLength":65536,"type":"string"},"ca":{"minLength":1,"maxLength":65536,"type":"string"},"serverCert":{"minLength":1,"maxLength":65536,"type":"string"},"serverKey":{"minLength":1,"maxLength":65536,"type":"string"},"natsToken":{"minLength":1,"maxLength":65536,"type":"string"},"clickhousePassword":{"minLength":1,"maxLength":65536,"type":"string"},"providerToken":{"minLength":1,"maxLength":65536,"type":"string"}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"write"},"http":{"method":"PATCH","path":"/api/events/destinations/:id"}},{"module":"eventDestinations","operation":"provision","name":"events_destination_provision","description":"Provision the configured event service, queue and ClickHouse workloads for a Docker or Oblien destination, or verify a custom destination. Use the current version and an existing configured destination. Requires workspace settings write permission; infrastructure may be created.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","version"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"},"version":{"minimum":1,"type":"integer"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"write"},"http":{"method":"POST","path":"/api/events/destinations/:id/provision"}},{"module":"eventDestinations","operation":"status","name":"events_destination_status_read","description":"Refresh an event destination workload status and connection health. Returns the latest readiness, version, checked time and error code without stored secrets; does not start or provision workloads.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"read"},"http":{"method":"POST","path":"/api/events/destinations/:id/status"}},{"module":"eventDestinations","operation":"start","name":"events_destination_start","description":"Start an existing event destination workload using its current version and verify ingestion and query connectivity. Requires workspace settings write permission.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","version"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"},"version":{"minimum":1,"type":"integer"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"write"},"http":{"method":"POST","path":"/api/events/destinations/:id/start"}},{"module":"eventDestinations","operation":"stop","name":"events_destination_stop","description":"Stop an event destination workload using its current version. Datasets linked to it cannot ingest or query until it is started again. Requires workspace settings write permission.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","version"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"},"version":{"minimum":1,"type":"integer"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"settings","action":"write"},"http":{"method":"POST","path":"/api/events/destinations/:id/stop"}},{"module":"eventDestinations","operation":"remove","name":"events_destination_delete","description":"Delete an unused event destination and remove its managed Docker or Oblien workloads. Linked datasets must be removed or moved first. Requires the current version and workspace settings administration permission; removes managed infrastructure and stored destination credentials.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","version"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"},"version":{"minimum":1,"type":"integer"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"settings","action":"admin"},"http":{"method":"DELETE","path":"/api/events/destinations/:id"}},{"module":"events","operation":"capabilities","name":"events_capabilities_read","description":"Read event storage readiness, the public ingestion URL, and dataset and retention limits. Supply a dataset ID to check its configured destination using your dataset read permission.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/events/capabilities"}},{"module":"events","operation":"list","name":"events_dataset_list","description":"List readable event datasets and managed source IDs. Query these sources using the shared source/query/chart tools. Namespace and group are event fields; conditions filter data before aggregation.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"read","list":true},"http":{"method":"GET","path":"/api/events/datasets"}},{"module":"events","operation":"create","name":"events_dataset_create","description":"Create an event dataset in a project with an optional destination, retention, masking policy and user-defined typed dimensions. Its managed source is registered automatically for queries, Views and dashboards. Retention is fixed at creation; ingestion credentials are created by the user in Events.","inputSchema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"minLength":1,"maxLength":100,"pattern":"\\S","type":"string"},"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"destinationId":{"anyOf":[{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},{"type":"null"}]},"retentionDays":{"minimum":1,"maximum":365,"type":"integer"},"policy":{"additionalProperties":false,"type":"object","properties":{"redactKeys":{"maxItems":64,"type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},"redactPaths":{"maxItems":64,"type":"array","items":{"minItems":1,"maxItems":16,"type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}}}}},"dimensions":{"maxItems":64,"type":"array","items":{"additionalProperties":false,"type":"object","required":["name","type"],"properties":{"name":{"pattern":"^[A-Za-z_][A-Za-z0-9_]{0,63}$","type":"string"},"type":{"anyOf":[{"const":"string","type":"string"},{"const":"number","type":"string"},{"const":"boolean","type":"string"},{"const":"datetime","type":"string"}]}}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"write","project":"projectId"},"http":{"method":"POST","path":"/api/events/datasets","status":201}},{"module":"events","operation":"update","name":"events_dataset_update","description":"Update an event dataset name, destination, masking policy or typed dimensions using its current version. Read the latest dataset list before updating; retention cannot be changed.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","version"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"version":{"minimum":1,"type":"integer"},"destinationId":{"anyOf":[{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"maxLength":100,"pattern":"\\S","type":"string"},"policy":{"additionalProperties":false,"type":"object","properties":{"redactKeys":{"maxItems":64,"type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}},"redactPaths":{"maxItems":64,"type":"array","items":{"minItems":1,"maxItems":16,"type":"array","items":{"minLength":1,"maxLength":128,"type":"string"}}}}},"dimensions":{"maxItems":64,"type":"array","items":{"additionalProperties":false,"type":"object","required":["name","type"],"properties":{"name":{"pattern":"^[A-Za-z_][A-Za-z0-9_]{0,63}$","type":"string"},"type":{"anyOf":[{"const":"string","type":"string"},{"const":"number","type":"string"},{"const":"boolean","type":"string"},{"const":"datetime","type":"string"}]}}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/events/datasets/:id"}},{"module":"events","operation":"remove","name":"events_dataset_delete","description":"Delete an event dataset and its managed source and revoke all its ingestion keys. Stored events are removed through the destination cleanup process. Requires dataset administration permission.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"dataset","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/events/datasets/:id"}},{"module":"events","operation":"listCredentials","name":"events_credentials_list","description":"List an event dataset ingestion key metadata: ID, name, token prefix, expiry and revocation state. Returns no bearer tokens or reusable secrets. Requires dataset administration permission.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"dataset","action":"admin","id":"id"},"http":{"method":"GET","path":"/api/events/datasets/:id/credentials"}},{"module":"events","operation":"revokeCredential","name":"events_credential_revoke","description":"Revoke an existing event ingestion key by credential ID. Its applications can no longer ingest using that token. Requires dataset administration permission; does not create or return credentials.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","credentialId"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"credentialId":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"dataset","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/events/datasets/:id/credentials/:credentialId"}},{"module":"events","operation":"search","name":"events_search","description":"Read a dataset event stream with namespace, group, type, text search and typed dimension conditions. Omit both time bounds for the latest retained data or supply both from and to; use the returned next cursor when hasMore is true. Raw event details are retrieved separately by events_inspect.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["id"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"namespace":{"maxLength":128,"type":"string"},"group":{"maxLength":128,"type":"string"},"type":{"maxLength":128,"type":"string"},"search":{"maxLength":256,"type":"string"},"conditions":{"maxItems":20,"type":"array","items":{"additionalProperties":false,"type":"object","required":["field","op","value"],"properties":{"field":{"maxLength":256,"pattern":"^(namespace|group|type|id|dimensions\\.[A-Za-z_][A-Za-z0-9_]{0,63})$","type":"string"},"op":{"anyOf":[{"const":"=","type":"string"},{"const":"!=","type":"string"},{"const":">","type":"string"},{"const":">=","type":"string"},{"const":"<","type":"string"},{"const":"<=","type":"string"},{"const":"contains","type":"string"},{"const":"is-null","type":"string"},{"const":"is-not-null","type":"string"}]},"value":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}},"limit":{"minimum":1,"maximum":1000,"type":"integer"},"before":{"additionalProperties":false,"type":"object","required":["timestamp","namespace","group","eventId"],"properties":{"timestamp":{"maxLength":35,"type":"string"},"namespace":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"group":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"eventId":{"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"}}},"from":{"not":{}},"to":{"not":{}}}},{"additionalProperties":false,"type":"object","required":["id","from","to"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"namespace":{"maxLength":128,"type":"string"},"group":{"maxLength":128,"type":"string"},"type":{"maxLength":128,"type":"string"},"search":{"maxLength":256,"type":"string"},"conditions":{"maxItems":20,"type":"array","items":{"additionalProperties":false,"type":"object","required":["field","op","value"],"properties":{"field":{"maxLength":256,"pattern":"^(namespace|group|type|id|dimensions\\.[A-Za-z_][A-Za-z0-9_]{0,63})$","type":"string"},"op":{"anyOf":[{"const":"=","type":"string"},{"const":"!=","type":"string"},{"const":">","type":"string"},{"const":">=","type":"string"},{"const":"<","type":"string"},{"const":"<=","type":"string"},{"const":"contains","type":"string"},{"const":"is-null","type":"string"},{"const":"is-not-null","type":"string"}]},"value":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}},"limit":{"minimum":1,"maximum":1000,"type":"integer"},"before":{"additionalProperties":false,"type":"object","required":["timestamp","namespace","group","eventId"],"properties":{"timestamp":{"maxLength":35,"type":"string"},"namespace":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"group":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"eventId":{"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"}}},"from":{"maxLength":35,"type":"string"},"to":{"maxLength":35,"type":"string"}}}]},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"read","id":"id"},"http":{"method":"POST","path":"/api/events/datasets/:id/search"}},{"module":"events","operation":"trace","name":"events_trace_read","description":"Read up to 1000 retained spans for one exact trace ID in an authorized dataset, ordered by start time. Requires declared trace_id and span_id text dimensions and a duration_ms number dimension. Optional parent_span_id, span_name, service_name and span_status describe the tree. Uses event timestamp as span start; duration is milliseconds. Surface truncated and missing parents: returned spans do not prove a complete trace. Inspect original payloads separately with events_inspect. Does not search other datasets.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","traceId"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"traceId":{"minLength":1,"maxLength":1024,"pattern":"\\S","type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"read","id":"id"},"http":{"method":"POST","path":"/api/events/datasets/:id/trace"}},{"module":"events","operation":"inspect","name":"events_inspect","description":"Inspect one stored event, including its full data payload, using the event ID, namespace and group from events_search. Dataset read permission and masking policy apply.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","eventId","namespace","group"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"eventId":{"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"namespace":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"group":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"read","id":"id"},"http":{"method":"POST","path":"/api/events/datasets/:id/inspect"}},{"module":"events","operation":"ingest","name":"events_ingest","description":"Append a bounded batch of events to a dataset using your existing dataset ingestion permission. Each event has an ID, timestamp, namespace, group, type, optional declared dimensions and data. The destination validates and masks the batch before accepting it; this does not create an ingestion credential.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","batch"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"batch":{"additionalProperties":false,"type":"object","required":["version","batchId","events"],"properties":{"version":{"const":1,"type":"number"},"batchId":{"pattern":"^[a-f0-9-]{36}$","type":"string"},"events":{"minItems":1,"maxItems":1000,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","namespace","group","type","timestamp","schemaVersion","data"],"properties":{"id":{"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"namespace":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"group":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"type":{"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$","type":"string"},"timestamp":{"minLength":20,"maxLength":35,"type":"string"},"schemaVersion":{"minimum":1,"maximum":2147483647,"type":"integer"},"dimensions":{"maxProperties":64,"type":"object","patternProperties":{"^[A-Za-z_][A-Za-z0-9_]{0,63}$":{"anyOf":[{"type":"null"},{"maxLength":1024,"type":"string"},{"type":"boolean"},{"minimum":-9007199254740991,"maximum":9007199254740991,"type":"number"}]}}},"data":{"type":"object","patternProperties":{"^(.*)$":{"$id":"T0","anyOf":[{"type":"null"},{"type":"boolean"},{"type":"string"},{"minimum":-9007199254740991,"maximum":9007199254740991,"type":"number"},{"type":"array","items":{"$ref":"T0"}},{"type":"object","patternProperties":{"^(.*)$":{"$ref":"T0"}}}]}}}}}}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"ingest","id":"id"},"http":{"method":"POST","path":"/api/events/datasets/:id/ingest","status":202}},{"module":"events","operation":"groups","name":"events_groups_read","description":"Count dataset events grouped by up to four namespace, group, type, ID or declared dimension fields. Apply conditions before aggregation. Omit both time bounds for all retained data or supply both from and to. Surface total and truncated when presenting results; use the managed source query tools for chart and dashboard analytics.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["id","groupBy"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"namespace":{"maxLength":128,"type":"string"},"group":{"maxLength":128,"type":"string"},"type":{"maxLength":128,"type":"string"},"search":{"maxLength":256,"type":"string"},"conditions":{"maxItems":20,"type":"array","items":{"additionalProperties":false,"type":"object","required":["field","op","value"],"properties":{"field":{"maxLength":256,"pattern":"^(namespace|group|type|id|dimensions\\.[A-Za-z_][A-Za-z0-9_]{0,63})$","type":"string"},"op":{"anyOf":[{"const":"=","type":"string"},{"const":"!=","type":"string"},{"const":">","type":"string"},{"const":">=","type":"string"},{"const":"<","type":"string"},{"const":"<=","type":"string"},{"const":"contains","type":"string"},{"const":"is-null","type":"string"},{"const":"is-not-null","type":"string"}]},"value":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}},"groupBy":{"minItems":1,"maxItems":4,"uniqueItems":true,"type":"array","items":{"maxLength":256,"pattern":"^(namespace|group|type|id|dimensions\\.[A-Za-z_][A-Za-z0-9_]{0,63})$","type":"string"}},"from":{"not":{}},"to":{"not":{}}}},{"additionalProperties":false,"type":"object","required":["id","groupBy","from","to"],"properties":{"id":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","type":"string"},"namespace":{"maxLength":128,"type":"string"},"group":{"maxLength":128,"type":"string"},"type":{"maxLength":128,"type":"string"},"search":{"maxLength":256,"type":"string"},"conditions":{"maxItems":20,"type":"array","items":{"additionalProperties":false,"type":"object","required":["field","op","value"],"properties":{"field":{"maxLength":256,"pattern":"^(namespace|group|type|id|dimensions\\.[A-Za-z_][A-Za-z0-9_]{0,63})$","type":"string"},"op":{"anyOf":[{"const":"=","type":"string"},{"const":"!=","type":"string"},{"const":">","type":"string"},{"const":">=","type":"string"},{"const":"<","type":"string"},{"const":"<=","type":"string"},{"const":"contains","type":"string"},{"const":"is-null","type":"string"},{"const":"is-not-null","type":"string"}]},"value":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}},"groupBy":{"minItems":1,"maxItems":4,"uniqueItems":true,"type":"array","items":{"maxLength":256,"pattern":"^(namespace|group|type|id|dimensions\\.[A-Za-z_][A-Za-z0-9_]{0,63})$","type":"string"}},"from":{"maxLength":35,"type":"string"},"to":{"maxLength":35,"type":"string"}}}]},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dataset","action":"read","id":"id"},"http":{"method":"POST","path":"/api/events/datasets/:id/groups"}},{"module":"projects","operation":"list","name":"project_list","description":"List accessible projects and counts of dashboards, folders, queries, charts, actions and panels. Project grants apply to their saved items; individually shared items remain accessible without a project grant. Counts include only accessible items.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/projects","response":"raw"}},{"module":"projects","operation":"create","name":"project_create","description":"Create a project for related dashboards, folders, queries, charts, actions and panels. Does not create an organization, duplicate resources or execute data.","inputSchema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"\\S","type":"string"},"description":{"maxLength":500,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"project","action":"write"},"http":{"method":"POST","path":"/api/projects","response":"raw"}},{"module":"projects","operation":"update","name":"project_update","description":"Rename a project or update its description.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","id"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"\\S","type":"string"},"description":{"maxLength":500,"type":"string"},"id":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"project","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/projects/:id","response":"raw"}},{"module":"projects","operation":"remove","name":"project_delete","description":"Remove a project container. Its dashboards, folders, queries, charts, actions and panels become unassigned; definitions and references are retained. Project-inherited access ends; direct item grants remain.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"project","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/projects/:id","response":"raw"}},{"module":"projects","operation":"assign","name":"project_assign","description":"Move existing dashboards, folders, queries, charts, actions or panels into a project, or null for Unassigned. Moving a folder includes all its dashboards and their component views, retaining folder membership. Requires Write on each resource and the affected projects; folders also require dashboard folder management. Atomic; IDs, definitions, publications and dashboard bindings remain unchanged.","inputSchema":{"type":"object","additionalProperties":false,"required":["projectId","resources"],"properties":{"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"resources":{"minItems":1,"maxItems":256,"uniqueItems":true,"type":"array","items":{"additionalProperties":false,"type":"object","required":["type","id"],"properties":{"type":{"anyOf":[{"const":"query","type":"string"},{"const":"chart","type":"string"},{"const":"action","type":"string"},{"const":"panel","type":"string"},{"const":"dashboard","type":"string"},{"const":"folder","type":"string"},{"const":"dataset","type":"string"}]},"id":{"minLength":1,"maxLength":64,"type":"string"}}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"project","action":"read","list":true},"http":{"method":"POST","path":"/api/projects/assign","response":"raw"}},{"module":"audit","operation":"list","name":"audit_list","description":"List workspace activity with actor, operation, resource, outcome and correlation ID. Requires audit read access. No credentials, SQL or result data are logged.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"eventType":{"minLength":1,"maxLength":512,"type":"string"},"actorUserId":{"minLength":1,"maxLength":512,"type":"string"},"resourceType":{"minLength":1,"maxLength":512,"type":"string"},"resourceId":{"minLength":1,"maxLength":512,"type":"string"},"source":{"minLength":1,"maxLength":512,"type":"string"},"outcome":{"anyOf":[{"const":"success","type":"string"},{"const":"denied","type":"string"},{"const":"error","type":"string"},{"const":"cancelled","type":"string"}]},"from":{"minLength":1,"maxLength":512,"type":"string"},"to":{"minLength":1,"maxLength":512,"type":"string"},"cursor":{"maxLength":2048,"type":"string"},"limit":{"minimum":1,"maximum":200,"type":"integer"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"audit","action":"read"},"http":{"method":"GET","path":"/api/audit"}},{"module":"audit","operation":"getSettings","name":"audit_settings_read","description":"Read the current workspace audit status and retention policy. Requires audit read access; does not change logging or retention.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"audit","action":"read"},"http":{"method":"GET","path":"/api/audit/settings"}},{"module":"permissions","operation":"listWorkspaces","name":"workspace_list","description":"List workspaces available to the verified caller. A bound API key only sees its workspace.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"identity","permission":null,"http":{"method":"GET","path":"/api/permissions/workspaces"}},{"module":"permissions","operation":"orgMeta","name":"workspace_metadata_read","description":"Read the current workspace name, type and member count under the verified caller context. Does not switch workspaces or change access.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/permissions/org-meta"}},{"module":"permissions","operation":"listResources","name":"workspace_resources_list","description":"List resources of one type with the caller’s effective permissions. Returns only accessible resource labels and granted actions; does not grant access.","inputSchema":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"anyOf":[{"const":"project","type":"string"},{"const":"workspace","type":"string"},{"const":"server","type":"string"},{"const":"source","type":"string"},{"const":"dataset","type":"string"},{"const":"dashboard","type":"string"},{"const":"query","type":"string"},{"const":"chart","type":"string"},{"const":"action","type":"string"},{"const":"panel","type":"string"},{"const":"data","type":"string"},{"const":"model","type":"string"},{"const":"billing","type":"string"},{"const":"audit","type":"string"},{"const":"settings","type":"string"},{"const":"members","type":"string"},{"const":"mcp","type":"string"}]}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/permissions/resources"}},{"module":"sources","operation":"capturePromotionSchema","name":"source_promotion_schema_capture","description":"Explicitly read bounded PostgreSQL/MySQL/MariaDB catalog metadata and save fresh promotion compatibility evidence. Does not read application rows, accept SQL or accept caller-supplied schema. Read purpose follows the configured read replica; write purpose checks the primary and additionally requires data Write. Requires source Read and SQL Run, current versioned credentials, a supported bounded adapter, and finishes or cancels within ten seconds. Returns observation counts and fingerprint only.","inputSchema":{"type":"object","additionalProperties":false,"required":["purpose","id"],"properties":{"purpose":{"anyOf":[{"const":"read","type":"string"},{"const":"write","type":"string"}]},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"access":"workspace","permission":{"resourceType":"sql","action":"run","id":"id"},"http":{"method":"POST","path":"/api/sources/:id/promotion-schema","response":"raw"}},{"module":"sources","operation":"refreshDatabases","name":"source_databases_refresh","description":"Refresh database names, connection readiness and setup choices for an unexpired connectionToken from source_databases_browse. Reuses the authenticated connection draft; does not create a database login or save a source.","inputSchema":{"type":"object","additionalProperties":false,"required":["connectionToken"],"properties":{"connectionToken":{"minLength":1,"maxLength":128,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"write"},"http":{"method":"POST","path":"/api/sources/databases/refresh","response":"raw","status":200}},{"module":"sources","operation":"createDatabaseLogin","name":"source_database_login_create","description":"Explicitly create a read-only database login and grant it access to the selected discovered databases, optionally including future tables. Requires the setup connectionToken and administrative access through a saved server. Changes database access; generated credentials stay sealed and are not returned.","inputSchema":{"type":"object","additionalProperties":false,"required":["connectionToken","databases","username","futureTables"],"properties":{"connectionToken":{"minLength":1,"maxLength":128,"type":"string"},"databases":{"minItems":1,"maxItems":50,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":512,"type":"string"}},"username":{"minLength":3,"maxLength":63,"pattern":"^[a-z_][a-z0-9_]{2,62}$","type":"string"},"futureTables":{"type":"boolean"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"write"},"http":{"method":"POST","path":"/api/sources/databases/login","response":"raw","status":200}},{"module":"sources","operation":"browseDatabases","name":"source_databases_browse","description":"Test a draft database connection and list its accessible databases before saving sources. Use source_kinds_list for connection fields; a saved server may supply the existing connection. Returns an expiring connectionToken for refresh, reader setup and source creation. Does not create a login or save a source.","inputSchema":{"type":"object","additionalProperties":false,"required":["kind"],"properties":{"kind":{"minLength":1,"maxLength":64,"type":"string"},"values":{"type":"object","patternProperties":{"^(.*)$":{"maxLength":4096,"type":"string"}}},"fromContainer":{"minLength":12,"maxLength":64,"type":"string"},"serverId":{"minLength":1,"maxLength":128,"type":"string"},"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"},"tunnel":{"additionalProperties":false,"type":"object","required":["transport","host","port","user","dbHost","dbPort","keyRef"],"properties":{"transport":{"const":"ssh","type":"string"},"host":{"minLength":1,"maxLength":253,"type":"string"},"port":{"minimum":1,"maximum":65535,"type":"integer"},"user":{"minLength":1,"maxLength":64,"type":"string"},"hostKey":{"minLength":1,"maxLength":1024,"type":"string"},"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"},"replicaTarget":{"additionalProperties":false,"description":"Replica endpoint as reached from the SSH server. Never reuses the primary forward.","type":"object","required":["dbHost","dbPort"],"properties":{"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"}}},"keyRef":{"minLength":1,"maxLength":512,"pattern":"^(vault:|env:)[^\\s]+$","description":"A reference of the form vault:<id> or env:NAME. A private key is refused here.","type":"string"}}},"serverAccess":{"additionalProperties":false,"type":"object","properties":{"containerId":{"pattern":"^[a-fA-F0-9]{12,64}$","type":"string"}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"write"},"http":{"method":"POST","path":"/api/sources/databases","response":"raw","status":200}},{"module":"sources","operation":"list","name":"source_list","description":"List the data sources connected to this workspace.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"read","list":true},"http":{"method":"GET","path":"/api/sources","response":"raw","status":200}},{"module":"sources","operation":"kinds","name":"source_kinds_list","description":"List the data source kinds this build can connect, and the connection fields each one needs. Call this before POST /api/sources: the `fields` array gives the exact keys to send as `values`, which are required, their defaults, and which one is the secret. Kinds with `ready: false` have no driver in this build. `tunnel.transports` lists the tunnel transports this deployment permits; when it is empty, do not send a `tunnel` object — it will be refused.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"read","list":true},"http":{"method":"GET","path":"/api/sources/kinds","response":"raw","status":200}},{"module":"sources","operation":"create","name":"source_write","description":"Connect a data source. Call GET /api/sources/kinds first to learn which kinds this build implements and what fields each needs, then pass those as `values`. The connection is opened and verified before anything is stored, so a failure means nothing was written. Passwords are sealed in the secret store; a literal connection string is refused.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","kind"],"properties":{"name":{"minLength":1,"maxLength":100,"type":"string"},"connectionToken":{"minLength":1,"maxLength":128,"type":"string"},"database":{"minLength":1,"maxLength":512,"type":"string"},"serverAccess":{"additionalProperties":false,"type":"object","properties":{"containerId":{"pattern":"^[a-fA-F0-9]{12,64}$","type":"string"}}},"kind":{"minLength":1,"maxLength":64,"type":"string"},"values":{"type":"object","patternProperties":{"^(.*)$":{"maxLength":4096,"type":"string"}}},"secretRef":{"minLength":1,"maxLength":512,"type":"string"},"fromContainer":{"minLength":12,"maxLength":64,"type":"string"},"replicaValues":{"type":"object","patternProperties":{"^(.*)$":{"maxLength":4096,"type":"string"}}},"replicaSecretRef":{"minLength":1,"maxLength":512,"type":"string"},"tunnel":{"additionalProperties":false,"type":"object","required":["transport","host","port","user","dbHost","dbPort","keyRef"],"properties":{"transport":{"const":"ssh","type":"string"},"host":{"minLength":1,"maxLength":253,"type":"string"},"port":{"minimum":1,"maximum":65535,"type":"integer"},"user":{"minLength":1,"maxLength":64,"type":"string"},"hostKey":{"minLength":1,"maxLength":1024,"type":"string"},"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"},"replicaTarget":{"additionalProperties":false,"description":"Replica endpoint as reached from the SSH server. Never reuses the primary forward.","type":"object","required":["dbHost","dbPort"],"properties":{"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"}}},"keyRef":{"minLength":1,"maxLength":512,"pattern":"^(vault:|env:)[^\\s]+$","description":"A reference of the form vault:<id> or env:NAME. A private key is refused here.","type":"string"}}},"serverId":{"minLength":1,"maxLength":128,"type":"string"},"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"},"replicaTarget":{"additionalProperties":false,"description":"Replica endpoint as reached from the SSH server. Never reuses the primary forward.","type":"object","required":["dbHost","dbPort"],"properties":{"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"}}},"statementTimeoutMs":{"minimum":1000,"maximum":300000,"type":"integer"},"maxRows":{"minimum":1,"maximum":1000000,"type":"integer"},"maxBytes":{"minimum":1024,"maximum":1073741824,"type":"integer"},"concurrency":{"minimum":1,"maximum":32,"type":"integer"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"write"},"http":{"method":"POST","path":"/api/sources","response":"raw","status":201}},{"module":"sources","operation":"get","name":"source_read","description":"Read a saved data source, its public connection fields, limits and saved server association. Does not reveal passwords, private keys or secret values.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"read","id":"id"},"http":{"method":"GET","path":"/api/sources/:id","response":"raw","status":200}},{"module":"sources","operation":"update","name":"source_update","description":"Edit a saved source name, connection fields, limits, replica reference or server/tunnel association. Omitted fields retain their stored values and secrets. New connection settings are checked by the normal source service; does not mutate source database records.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"name":{"minLength":1,"maxLength":100,"type":"string"},"values":{"type":"object","patternProperties":{"^(.*)$":{"maxLength":4096,"type":"string"}}},"replicaValues":{"anyOf":[{"type":"object","patternProperties":{"^(.*)$":{"maxLength":4096,"type":"string"}}},{"type":"null"}]},"replicaSecretRef":{"anyOf":[{"minLength":1,"maxLength":512,"type":"string"},{"type":"null"}]},"replicaTarget":{"anyOf":[{"additionalProperties":false,"description":"Replica endpoint as reached from the SSH server. Never reuses the primary forward.","type":"object","required":["dbHost","dbPort"],"properties":{"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"}}},{"type":"null"}]},"tunnel":{"anyOf":[{"additionalProperties":false,"type":"object","required":["transport","host","port","user","dbHost","dbPort"],"properties":{"transport":{"const":"ssh","type":"string"},"host":{"minLength":1,"maxLength":253,"type":"string"},"port":{"minimum":1,"maximum":65535,"type":"integer"},"user":{"minLength":1,"maxLength":64,"type":"string"},"hostKey":{"minLength":1,"maxLength":1024,"type":"string"},"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"},"replicaTarget":{"additionalProperties":false,"description":"Replica endpoint as reached from the SSH server. Never reuses the primary forward.","type":"object","required":["dbHost","dbPort"],"properties":{"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"}}},"keyRef":{"minLength":1,"maxLength":512,"pattern":"^(vault:|env:)[^\\s]+$","description":"A reference of the form vault:<id> or env:NAME. A private key is refused here.","type":"string"}}},{"type":"null"}]},"serverId":{"anyOf":[{"minLength":1,"maxLength":128,"type":"string"},{"type":"null"}]},"dbHost":{"minLength":1,"maxLength":253,"type":"string"},"dbPort":{"minimum":1,"maximum":65535,"type":"integer"},"statementTimeoutMs":{"minimum":1000,"maximum":300000,"type":"integer"},"maxRows":{"minimum":1,"maximum":1000000,"type":"integer"},"maxBytes":{"minimum":1024,"maximum":1073741824,"type":"integer"},"concurrency":{"minimum":1,"maximum":32,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/sources/:id","response":"raw","status":200}},{"module":"sources","operation":"remove","name":"source_remove","description":"Remove a saved data source connection from BytesMap and close its connection pool. Requires source Admin; managed dataset sources are removed through their dataset instead. Does not drop the external database or delete its records.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"source","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/sources/:id","response":"raw","status":200}},{"module":"sources","operation":"schema","name":"source_schema_read","description":"Read a source's tables, columns and relationships.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"schema","action":"read","id":"id"},"http":{"method":"GET","path":"/api/sources/:id/schema","response":"raw","status":200}},{"module":"sources","operation":"stats","name":"source_stats_read","description":"Read a source's live health and resource metrics: size, connections, cache hit rate, uptime.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"read","id":"id"},"http":{"method":"GET","path":"/api/sources/:id/stats","response":"raw","status":200}},{"module":"sources","operation":"run","name":"source_sql_run","description":"Run a query against a source and get rows back. Example input: {id:\"SOURCE_ID\", query:{kind:\"native\", sourceKind:\"postgres\", statement:\"select id, name from customers limit 10\"}}. query is an object, never a raw SQL string. Takes either the portable IR — {kind:'growth'|'row-count'|'top-values'|'histogram'|'chart'|'rows', …}, which this translates to whatever language the source speaks — or {kind:\"native\"} with a statement in the driver's own language. Results carry honesty flags: `estimated`, A chart or rows query may read a table, or a joined relation {base, joins}; joined fields use alias.column. `sampled` and `truncated` in `meta` must be surfaced, not dropped. `meta.page` says which slice you got; `meta.totalRows` is present only if you passed `count:true`, so absent means unknown rather than zero. Pass `explain:true` for `meta.plan` — the query as this engine received it, which is how you check what the IR compiled to. Pass chart:{title,spec} to display the result using the same encoding as chart_create. Channels refer to result column names. ClickHouse uses sourceKind:\"clickhouse\"; managed dataset sources expose only their scoped events relation.","inputSchema":{"type":"object","additionalProperties":false,"required":["query","id"],"properties":{"chart":{"additionalProperties":false,"description":"Display returned data as a chart. Channels use result column names. Uses the chart_create encoding without saving a query or chart.","type":"object","required":["title","spec"],"properties":{"title":{"minLength":1,"maxLength":120,"type":"string"},"spec":{"additionalProperties":false,"type":"object","required":["mark"],"properties":{"colors":{"maxProperties":200,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"const":"s1","type":"string"},{"const":"s2","type":"string"},{"const":"s3","type":"string"},{"const":"s4","type":"string"},{"const":"s5","type":"string"},{"const":"brand","type":"string"},{"const":"good","type":"string"},{"const":"warning","type":"string"},{"const":"critical","type":"string"},{"const":"ink-4","type":"string"}]}}},"mark":{"description":"Horizontal bars (bar, grouped-bar, stacked-bar, stacked-bar-100) use x for the quantitative measure and y for category labels. Columns, line and area use x for the category/time and y for the quantitative measure. Scatter uses two quantitative channels.","anyOf":[{"const":"line","type":"string"},{"const":"area","type":"string"},{"const":"stacked-area","type":"string"},{"const":"stacked-area-100","type":"string"},{"const":"column","type":"string"},{"const":"stacked-column","type":"string"},{"const":"stacked-column-100","type":"string"},{"const":"combo","type":"string"},{"const":"bar","type":"string"},{"const":"stacked-bar","type":"string"},{"const":"stacked-bar-100","type":"string"},{"const":"grouped-bar","type":"string"},{"const":"number","type":"string"},{"const":"trend","type":"string"},{"const":"gauge","type":"string"},{"const":"histogram","type":"string"},{"const":"scatter","type":"string"},{"const":"heatmap","type":"string"},{"const":"box","type":"string"},{"const":"waterfall","type":"string"},{"const":"table","type":"string"},{"const":"pivot","type":"string"},{"const":"pie","type":"string"}]},"x":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"y":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"color":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"series":{"maxItems":8,"type":"array","items":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}}},"target":{"type":"number"},"waterfall":{"additionalProperties":false,"type":"object","properties":{"start":{"type":"number"},"totals":{"maxItems":200,"type":"array","items":{"maxLength":256,"type":"string"}}}},"order":{"anyOf":[{"const":"result","type":"string"},{"const":"value","type":"string"},{"const":"label","type":"string"}]},"topN":{"minimum":1,"maximum":200,"type":"integer"},"gaps":{"description":"What an empty time bucket means. \"zero\" for counts and sums, where a missing month is genuinely none; \"break\" (the default) for averages and extremes, where it is unknown and a zero would draw a crash that did not happen; \"connect\" to join across it, which is the old behaviour and reads five empty months as one straight trend.","anyOf":[{"const":"zero","type":"string"},{"const":"break","type":"string"},{"const":"connect","type":"string"}]},"tooltip":{"maxItems":12,"type":"array","items":{"maxLength":128,"type":"string"}}}}}},"query":{"description":"A bytesmap query. Either the portable IR — {kind:\"growth\"|\"row-count\"|\"top-values\"|\"histogram\"|\"column-stats\"|\"orphans\"|\"chart\"|\"rows\", …} — or the escape hatch {kind:\"native\", sourceKind:\"<this source's kind>\", statement:\"…\"}. A native statement is in the driver's own language: SQL for SQL engines, a JSON aggregation pipeline for MongoDB. It is refused if written for a different engine, if it writes, and is still subject to the row cap and statement timeout. For {kind:\"chart\"}: `dimensions[].role` is \"group\" (an axis, at most two) or \"series\" (a breakdown, at most one) — and when you use a series, set `seriesLimit` rather than relying on `limit`, because `limit` cuts ROWS of the joint group-by and can leave a series with only some of its buckets. `measures[].filter` is a per-measure WHERE, so sum(total) where status='paid' sits beside sum(total) in one query; `having` filters the aggregates and its leaves name measure aliases (m0, m1) rather than columns; `offset` pages; `totals` is \"none\"|\"with\"|\"only\" and \"with\" adds meta.totals, the same query ungrouped. `from` is a table ref or a derived relation {isDerived:true, statement, sourceKind, aggregated, columns} — your own SELECT as the FROM, which the rest of the query then groups, filters and pages normally. `expression` on a measure or dimension is a raw fragment in this engine's dialect; it is read-only-checked and makes the query non-portable to other engines."},"maxRows":{"minimum":1,"maximum":1000000,"type":"integer"},"count":{"description":"Also return meta.totalRows: how many rows the query would return in total. Costs a second pass that scans everything the query touches, so ask for it only when the exact number is the point — meta.truncated already tells you whether more rows exist.","type":"boolean"},"explain":{"description":"Also return meta.plan: the query as this engine received it — {form:\"sql\", sql, params} for a SQL source, {form:\"mongo\", collection, pipeline} for MongoDB. Costs nothing; the compiled artefact already exists. Placeholders are NOT substituted — `params` is listed separately, in order, because a statement with values spliced in is the one form this system never sends.","type":"boolean"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"sql","action":"run","id":"id"},"http":{"method":"POST","path":"/api/sources/:id/query","response":"raw","status":200}},{"module":"sources","operation":"scanKeys","name":"source_keys_scan","description":"Scan a key/value source. Continue with the returned cursor until it is \"0\", including after an empty page. count is a scan hint.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"cursor":{"pattern":"^\\d{1,20}$","default":"0","type":"string"},"match":{"maxLength":1024,"default":"*","type":"string"},"count":{"minimum":1,"maximum":200,"default":100,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"sql","action":"run","id":"id"},"http":{"method":"POST","path":"/api/sources/:id/keys/scan","response":"raw","status":200}},{"module":"sources","operation":"readKey","name":"source_key_read","description":"Read a bounded key/value preview by the opaque key id from source_keys_scan. Includes key type, expiry, size, and whether the preview was truncated.","inputSchema":{"type":"object","additionalProperties":false,"required":["key","id"],"properties":{"key":{"maxLength":5464,"description":"The opaque base64 key id returned by the key scan.","type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"sql","action":"run","id":"id"},"http":{"method":"POST","path":"/api/sources/:id/keys/read","response":"raw","status":200}},{"module":"servers","operation":"cloudCapabilities","name":"server_cloud_capabilities","description":"Read managed server connection readiness, acquisition availability, default resources and any unavailability reason for this workspace. Does not provision a server or reveal cloud credentials.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"server","action":"read","list":true},"http":{"method":"GET","path":"/api/servers/cloud/capabilities","response":"raw"}},{"module":"servers","operation":"cloudOwned","name":"server_cloud_owned","description":"List managed cloud servers owned by the connected account and available to link into BytesMap. Does not create, modify or purchase infrastructure.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"server","action":"read","list":true},"http":{"method":"GET","path":"/api/servers/cloud/owned","response":"raw"}},{"module":"servers","operation":"cloudAcquire","name":"server_cloud_acquire","description":"Explicitly acquire a managed cloud server with a name and idempotencyKey. May provision paid infrastructure and requires workspace billing Admin. Use server_cloud_capabilities first; existing account and provisioning checks remain in force.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","idempotencyKey"],"properties":{"name":{"minLength":1,"maxLength":100,"pattern":"\\S","type":"string"},"idempotencyKey":{"pattern":"^[A-Za-z0-9_-]{16,64}$","type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"billing","action":"admin"},"http":{"method":"POST","path":"/api/servers/cloud/acquire","response":"raw","status":201}},{"module":"servers","operation":"cloudLink","name":"server_cloud_link","description":"Link an existing owned managed cloud server into this workspace. Use server_cloud_owned to select it. Reuses its managed connection without exposing credentials or provisioning another server.","inputSchema":{"type":"object","additionalProperties":false,"required":["remoteServerId"],"properties":{"remoteServerId":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"server","action":"write"},"http":{"method":"POST","path":"/api/servers/cloud/link","response":"raw","status":201}},{"module":"servers","operation":"list","name":"server_list","description":"List saved servers that this user can access. Returns connection metadata and source counts, never SSH credentials.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"server","action":"read","list":true},"http":{"method":"GET","path":"/api/servers","response":"raw","status":200}},{"module":"servers","operation":"get","name":"server_read","description":"Read a saved server and its connection status under the current workspace permissions. Does not return credentials or open an arbitrary shell.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"server","action":"read","id":"id"},"http":{"method":"GET","path":"/api/servers/:id","response":"raw","status":200}},{"module":"queries","operation":"list","name":"query_list","description":"List the saved queries in this workspace. Each carries the source it reads and whether it is portable (the bytesmap IR) or native to one engine.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"read","list":true},"http":{"method":"GET","path":"/api/queries","response":"raw","status":200}},{"module":"queries","operation":"create","name":"query_create","description":"Save a query without executing it. For editable visual nodes use the saved-flow format returned by flow_catalog and validate with flow_validate. Portable IR and {kind:\"native\"} queries are also supported for advanced SQL. Read actual source schemas first; never invent columns or infer their meaning.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","sourceId","query"],"properties":{"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"name":{"minLength":1,"maxLength":120,"type":"string"},"sourceId":{"minLength":1,"maxLength":64,"type":"string"},"query":{"description":"A bytesmap query. Portable: {kind:\"growth\"|\"row-count\"|\"top-values\"|\"histogram\"|\"chart\"|\"rows\", …}. Or native: {kind:\"native\", sourceKind:\"<the source's kind>\", statement:\"…\"} in the driver's own language — SQL for SQL engines, a JSON aggregation pipeline for MongoDB. For {kind:\"chart\"}: `dimensions[].role` is \"group\" (an axis, at most two) or \"series\" (a breakdown, at most one), and a series needs `seriesLimit` rather than `limit` — `limit` cuts rows of the joint group-by and can leave a series holding only some of its buckets. `measures[].filter` is a per-measure WHERE; `having` filters the aggregates and its leaves name measure aliases (m0, m1); `offset` pages; `totals` is \"none\"|\"with\"|\"only\". `from` is a table ref or a derived relation {isDerived:true, statement, sourceKind, aggregated, columns} — your own SELECT used as the FROM, which the rest of the query then groups, filters and pages. `expression` on a measure or dimension is a raw fragment in the source's dialect: read-only-checked, and it makes the saved query non-portable."},"params":{"type":"object","patternProperties":{"^(.*)$":{"additionalProperties":false,"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"timestamp","type":"string"},{"const":"date","type":"string"},{"const":"number","type":"string"},{"const":"string","type":"string"},{"const":"bool","type":"string"}]},"default":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"number"},{"type":"boolean"}]},"options":{"maxItems":64,"type":"array","items":{"maxLength":128,"type":"string"}},"required":{"type":"boolean"},"description":{"maxLength":500,"type":"string"},"dependsOn":{"maxItems":100,"type":"array","items":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}},"picker":{"additionalProperties":false,"type":"object","required":["viewId","valueKey"],"properties":{"viewId":{"minLength":1,"maxLength":128,"type":"string"},"valueKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"labelKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"allowManual":{"type":"boolean"},"params":{"type":"object","patternProperties":{"^[A-Za-z_]\\w*$":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}}}}},"min":{"type":"number"},"max":{"type":"number"},"label":{"maxLength":64,"type":"string"},"timeZone":{"minLength":1,"maxLength":128,"description":"IANA timezone used to resolve relative calendar dates. Defaults to UTC.","type":"string"}}}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"write","project":"projectId"},"http":{"method":"POST","path":"/api/queries","response":"raw","status":201}},{"module":"queries","operation":"get","name":"query_read","description":"Read one saved query's definition and parameters.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"read","id":"id"},"http":{"method":"GET","path":"/api/queries/:id","response":"raw","status":200}},{"module":"queries","operation":"update","name":"query_update","description":"Update a saved query, including its flow graph nodes, connections, or native statement. Read query_read first and preserve fields you are not changing. Saving does not run the query.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"sourceId":{"minLength":1,"maxLength":64,"type":"string"},"name":{"minLength":1,"maxLength":120,"type":"string"},"query":{},"params":{"type":"object","patternProperties":{"^(.*)$":{"additionalProperties":false,"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"timestamp","type":"string"},{"const":"date","type":"string"},{"const":"number","type":"string"},{"const":"string","type":"string"},{"const":"bool","type":"string"}]},"default":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"number"},{"type":"boolean"}]},"options":{"maxItems":64,"type":"array","items":{"maxLength":128,"type":"string"}},"required":{"type":"boolean"},"description":{"maxLength":500,"type":"string"},"dependsOn":{"maxItems":100,"type":"array","items":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}},"picker":{"additionalProperties":false,"type":"object","required":["viewId","valueKey"],"properties":{"viewId":{"minLength":1,"maxLength":128,"type":"string"},"valueKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"labelKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"allowManual":{"type":"boolean"},"params":{"type":"object","patternProperties":{"^[A-Za-z_]\\w*$":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}}}}},"min":{"type":"number"},"max":{"type":"number"},"label":{"maxLength":64,"type":"string"},"timeZone":{"minLength":1,"maxLength":128,"description":"IANA timezone used to resolve relative calendar dates. Defaults to UTC.","type":"string"}}}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/queries/:id","response":"raw","status":200}},{"module":"queries","operation":"remove","name":"query_delete","description":"Delete a saved query definition. Check charts that depend on it before deleting. This does not delete data from its source.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"query","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/queries/:id","response":"raw","status":200}},{"module":"queries","operation":"run","name":"query_run","description":"Run a saved query and get rows back. Pass `params` to override its defaults — a timestamp param accepts a relative offset like \"-7d\". The result carries `estimated`, `sampled` and `truncated` flags in `meta` that must be surfaced, not dropped. Saved flows return a FlowChartResults bundle with each chart output and shared execution stats. For flows, params bind declared document.parameters in conditions and named SQL values. Configure paging and limits in the nodes; request paging, counts and explain are not supported.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"maxRows":{"minimum":1,"maximum":1000000,"type":"integer"},"page":{"additionalProperties":false,"type":"object","properties":{"offset":{"minimum":0,"maximum":10000000,"type":"integer"},"limit":{"minimum":1,"maximum":1000000,"type":"integer"}}},"count":{"type":"boolean"},"explain":{"type":"boolean"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"run","id":"id"},"http":{"method":"POST","path":"/api/queries/:id/run","response":"raw","status":200}},{"module":"queries","operation":"estimate","name":"query_cost","description":"Estimate a saved query’s PostgreSQL planner cost without executing it. Includes bounded source reads and extra totals passes. Cost units are not milliseconds or money.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"maxRows":{"minimum":1,"maximum":1000000,"type":"integer"},"page":{"additionalProperties":false,"type":"object","properties":{"offset":{"minimum":0,"maximum":10000000,"type":"integer"},"limit":{"minimum":1,"maximum":1000000,"type":"integer"}}},"count":{"type":"boolean"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"run","id":"id"},"http":{"method":"POST","path":"/api/queries/:id/cost","response":"raw","status":200}},{"module":"queries","operation":"suggestChart","name":"chart_suggest","description":"Ask bytesmap which chart fits a saved query, by running it with a tiny row cap and reading the result types. Returns a ready-to-save chart spec. A result that is genuinely a table comes back as {mark:\"table\"} rather than being forced into a chart.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"run","id":"id"},"http":{"method":"POST","path":"/api/queries/:id/suggest","response":"raw","status":200}},{"module":"charts","operation":"list","name":"chart_list","description":"List the saved charts, each with its encoding (mark, x, y, colour) and the id of the query it draws. Use chart_create to add one.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"chart","action":"read","list":true},"http":{"method":"GET","path":"/api/charts","response":"raw","status":200}},{"module":"charts","operation":"create","name":"chart_create","description":"Save a chart without running its query. For a visual flow, set queryId and spec.flowOutput to its chart node ID; read flow_catalog for the live contract. Otherwise set an encoding (mark, x, y, colour) whose fields are the query RESULT aliases, not assumed table columns. Derive them from the query definition or declared result schema; execute only if requested.","inputSchema":{"type":"object","additionalProperties":false,"required":["title","queryId","spec"],"properties":{"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"title":{"minLength":1,"maxLength":120,"type":"string"},"queryId":{"minLength":1,"maxLength":64,"type":"string"},"spec":{"additionalProperties":false,"type":"object","required":["mark"],"properties":{"flowOutput":{"minLength":1,"maxLength":128,"type":"string"},"colors":{"maxProperties":200,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"const":"s1","type":"string"},{"const":"s2","type":"string"},{"const":"s3","type":"string"},{"const":"s4","type":"string"},{"const":"s5","type":"string"},{"const":"brand","type":"string"},{"const":"good","type":"string"},{"const":"warning","type":"string"},{"const":"critical","type":"string"},{"const":"ink-4","type":"string"}]}}},"mark":{"description":"Horizontal bars (bar, grouped-bar, stacked-bar, stacked-bar-100) use x for the quantitative measure and y for category labels. Columns, line and area use x for the category/time and y for the quantitative measure. Scatter uses two quantitative channels.","anyOf":[{"const":"line","type":"string"},{"const":"area","type":"string"},{"const":"stacked-area","type":"string"},{"const":"stacked-area-100","type":"string"},{"const":"column","type":"string"},{"const":"stacked-column","type":"string"},{"const":"stacked-column-100","type":"string"},{"const":"combo","type":"string"},{"const":"bar","type":"string"},{"const":"stacked-bar","type":"string"},{"const":"stacked-bar-100","type":"string"},{"const":"grouped-bar","type":"string"},{"const":"number","type":"string"},{"const":"trend","type":"string"},{"const":"gauge","type":"string"},{"const":"histogram","type":"string"},{"const":"scatter","type":"string"},{"const":"heatmap","type":"string"},{"const":"box","type":"string"},{"const":"waterfall","type":"string"},{"const":"table","type":"string"},{"const":"pivot","type":"string"},{"const":"pie","type":"string"}]},"x":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"y":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"color":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"series":{"maxItems":8,"type":"array","items":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}}},"target":{"type":"number"},"waterfall":{"additionalProperties":false,"type":"object","properties":{"start":{"type":"number"},"totals":{"maxItems":200,"type":"array","items":{"maxLength":256,"type":"string"}}}},"order":{"anyOf":[{"const":"result","type":"string"},{"const":"value","type":"string"},{"const":"label","type":"string"}]},"topN":{"minimum":1,"maximum":200,"type":"integer"},"gaps":{"description":"What an empty time bucket means. \"zero\" for counts and sums, where a missing month is genuinely none; \"break\" (the default) for averages and extremes, where it is unknown and a zero would draw a crash that did not happen; \"connect\" to join across it, which is the old behaviour and reads five empty months as one straight trend.","anyOf":[{"const":"zero","type":"string"},{"const":"break","type":"string"},{"const":"connect","type":"string"}]},"tooltip":{"maxItems":12,"type":"array","items":{"maxLength":128,"type":"string"}}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"chart","action":"write","project":"projectId","projectFrom":{"resourceType":"query","id":"queryId"}},"http":{"method":"POST","path":"/api/charts","response":"raw","status":201}},{"module":"charts","operation":"get","name":"chart_read","description":"Read a saved chart, its query reference, and its renderer or flow output settings without executing the query.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"chart","action":"read","id":"id"},"http":{"method":"GET","path":"/api/charts/:id","response":"raw","status":200}},{"module":"charts","operation":"update","name":"chart_update","description":"Update a chart title, encoding, or saved flow output reference. Use chart_read first. The same chart validation as the app applies; this does not run its query.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"title":{"minLength":1,"maxLength":120,"type":"string"},"spec":{"additionalProperties":false,"type":"object","required":["mark"],"properties":{"flowOutput":{"minLength":1,"maxLength":128,"type":"string"},"colors":{"maxProperties":200,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"const":"s1","type":"string"},{"const":"s2","type":"string"},{"const":"s3","type":"string"},{"const":"s4","type":"string"},{"const":"s5","type":"string"},{"const":"brand","type":"string"},{"const":"good","type":"string"},{"const":"warning","type":"string"},{"const":"critical","type":"string"},{"const":"ink-4","type":"string"}]}}},"mark":{"description":"Horizontal bars (bar, grouped-bar, stacked-bar, stacked-bar-100) use x for the quantitative measure and y for category labels. Columns, line and area use x for the category/time and y for the quantitative measure. Scatter uses two quantitative channels.","anyOf":[{"const":"line","type":"string"},{"const":"area","type":"string"},{"const":"stacked-area","type":"string"},{"const":"stacked-area-100","type":"string"},{"const":"column","type":"string"},{"const":"stacked-column","type":"string"},{"const":"stacked-column-100","type":"string"},{"const":"combo","type":"string"},{"const":"bar","type":"string"},{"const":"stacked-bar","type":"string"},{"const":"stacked-bar-100","type":"string"},{"const":"grouped-bar","type":"string"},{"const":"number","type":"string"},{"const":"trend","type":"string"},{"const":"gauge","type":"string"},{"const":"histogram","type":"string"},{"const":"scatter","type":"string"},{"const":"heatmap","type":"string"},{"const":"box","type":"string"},{"const":"waterfall","type":"string"},{"const":"table","type":"string"},{"const":"pivot","type":"string"},{"const":"pie","type":"string"}]},"x":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"y":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"color":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}},"series":{"maxItems":8,"type":"array","items":{"additionalProperties":false,"type":"object","required":["field","type"],"properties":{"field":{"minLength":1,"maxLength":128,"type":"string"},"type":{"anyOf":[{"const":"temporal","type":"string"},{"const":"quantitative","type":"string"},{"const":"nominal","type":"string"},{"const":"ordinal","type":"string"}]},"label":{"maxLength":64,"type":"string"},"format":{"maxLength":32,"type":"string"},"zero":{"type":"boolean"},"timeZone":{"anyOf":[{"const":"local","type":"string"},{"const":"utc","type":"string"}]},"grain":{"anyOf":[{"const":"minute","type":"string"},{"const":"hour","type":"string"},{"const":"day","type":"string"},{"const":"week","type":"string"},{"const":"month","type":"string"},{"const":"quarter","type":"string"},{"const":"year","type":"string"}]}}}},"target":{"type":"number"},"waterfall":{"additionalProperties":false,"type":"object","properties":{"start":{"type":"number"},"totals":{"maxItems":200,"type":"array","items":{"maxLength":256,"type":"string"}}}},"order":{"anyOf":[{"const":"result","type":"string"},{"const":"value","type":"string"},{"const":"label","type":"string"}]},"topN":{"minimum":1,"maximum":200,"type":"integer"},"gaps":{"description":"What an empty time bucket means. \"zero\" for counts and sums, where a missing month is genuinely none; \"break\" (the default) for averages and extremes, where it is unknown and a zero would draw a crash that did not happen; \"connect\" to join across it, which is the old behaviour and reads five empty months as one straight trend.","anyOf":[{"const":"zero","type":"string"},{"const":"break","type":"string"},{"const":"connect","type":"string"}]},"tooltip":{"maxItems":12,"type":"array","items":{"maxLength":128,"type":"string"}}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"chart","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/charts/:id","response":"raw","status":200}},{"module":"charts","operation":"remove","name":"chart_delete","description":"Delete a saved chart. Check dashboards that contain it before deleting. Its source data remains unchanged.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"chart","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/charts/:id","response":"raw","status":200}},{"module":"dashboards","operation":"runtime","name":"dashboard_runtime","description":"Read a dynamic dashboard and its permitted component destinations, draft/publication state and access. Resolves existing dashboard URLs. Does not execute queries or actions.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"list","list":true},"http":{"method":"GET","path":"/api/dashboards/:id/runtime","response":"raw"}},{"module":"dashboards","operation":"list","name":"dashboard_list","description":"List accessible dynamic dashboards and folders, with each dashboard's folderId, home layout, parameters and runtime access. Call dashboard_runtime for component destinations and publication, or dashboard_read for the home layout and charts.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"read","list":true},"http":{"method":"GET","path":"/api/dashboards","response":"raw","status":200}},{"module":"dashboards","operation":"createFolder","name":"dashboard_folder_create","description":"Create a folder for organizing dashboards. Use dashboard_move to place existing dashboards in it, or folderId when creating a dashboard.","inputSchema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"name":{"minLength":1,"maxLength":80,"pattern":"\\S","type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"folder","action":"write","project":"projectId"},"http":{"method":"POST","path":"/api/dashboards/folders","response":"raw","status":201}},{"module":"dashboards","operation":"renameFolder","name":"dashboard_folder_rename","description":"Rename a dashboard folder. Dashboard contents and access remain unchanged.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","folderId"],"properties":{"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"name":{"minLength":1,"maxLength":80,"pattern":"\\S","type":"string"},"folderId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"folder","action":"write","id":"folderId"},"http":{"method":"PATCH","path":"/api/dashboards/folders/:folderId","response":"raw","status":200}},{"module":"dashboards","operation":"removeFolder","name":"dashboard_folder_remove","description":"Remove a folder and return its dashboards to the root library. Does not delete dashboards, charts or queries.","inputSchema":{"type":"object","additionalProperties":false,"required":["folderId"],"properties":{"folderId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"folder","action":"admin","id":"folderId"},"http":{"method":"DELETE","path":"/api/dashboards/folders/:folderId","response":"raw","status":200}},{"module":"dashboards","operation":"move","name":"dashboard_move","description":"Move dashboards into a folder, or pass folderId: null to return them to the root library. Requires write access to every selected dashboard. Moves the whole selection together without changing chart layouts.","inputSchema":{"type":"object","additionalProperties":false,"required":["ids","folderId"],"properties":{"ids":{"minItems":1,"maxItems":500,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":64,"type":"string"}},"folderId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","ids":"ids"},"http":{"method":"POST","path":"/api/dashboards/move","response":"raw","status":200}},{"module":"dashboards","operation":"create","name":"dashboard_create","description":"Create a dynamic dashboard with an empty home or a layout of saved charts and interactive panels on a 12-column grid ({chart, w, h} or {app, w, h}). Params declared here bind into every chart on the page, so one date control filters all of them. Optionally set folderId to organize it in a folder.","inputSchema":{"type":"object","additionalProperties":false,"required":["title"],"properties":{"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"title":{"minLength":1,"maxLength":120,"type":"string"},"folderId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"description":{"maxLength":400,"type":"string"},"layout":{"maxItems":64,"type":"array","items":{"anyOf":[{"additionalProperties":false,"type":"object","required":["app","w","h"],"properties":{"app":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"},"placement":{"description":"Explicit placement on this dashboard. Defaults to body. Header supports a single compact action; other view content remains in the body.","anyOf":[{"const":"body","type":"string"},{"const":"header","type":"string"}]},"componentLayout":{"maxItems":128,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","width"],"properties":{"id":{"minLength":1,"maxLength":128,"type":"string"},"width":{"minimum":1,"maximum":12,"type":"integer"},"height":{"minimum":80,"maximum":1600,"type":"integer"}}}},"heightMode":{"description":"Views fit their content by default, with page scrolling and paginated records. Use fixed only for an intentionally bounded tile; h is then its height in 72px units, not pixels.","anyOf":[{"const":"content","type":"string"},{"const":"fixed","type":"string"}]}}},{"additionalProperties":false,"type":"object","required":["chart","w","h"],"properties":{"chart":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["metric","source","w","h"],"properties":{"metric":{"minLength":1,"maxLength":64,"type":"string"},"source":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}}]}},"params":{"type":"object","patternProperties":{"^(.*)$":{"additionalProperties":false,"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"timestamp","type":"string"},{"const":"date","type":"string"},{"const":"number","type":"string"},{"const":"string","type":"string"},{"const":"bool","type":"string"}]},"default":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"number"},{"type":"boolean"}]},"options":{"maxItems":64,"type":"array","items":{"maxLength":128,"type":"string"}},"required":{"type":"boolean"},"description":{"maxLength":500,"type":"string"},"dependsOn":{"maxItems":100,"type":"array","items":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}},"picker":{"additionalProperties":false,"type":"object","required":["viewId","valueKey"],"properties":{"viewId":{"minLength":1,"maxLength":128,"type":"string"},"valueKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"labelKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"allowManual":{"type":"boolean"},"params":{"type":"object","patternProperties":{"^[A-Za-z_]\\w*$":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}}}}},"min":{"type":"number"},"max":{"type":"number"},"label":{"maxLength":64,"type":"string"},"timeZone":{"minLength":1,"maxLength":128,"description":"IANA timezone used to resolve relative calendar dates. Defaults to UTC.","type":"string"}}}}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","project":"projectId","projectFrom":{"resourceType":"folder","id":"folderId"}},"http":{"method":"POST","path":"/api/dashboards","response":"raw","status":201}},{"module":"dashboards","operation":"home","name":"dashboard_home_read","description":"Read this workspace's home overview, or the selected project's overview, with its layout, charts and queries resolved. Returns `dashboard: null` if nobody has set one up yet; call dashboard_home_ensure to create it.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"read","list":true},"http":{"method":"GET","path":"/api/dashboards/home","response":"raw","status":200}},{"module":"dashboards","operation":"ensureHome","name":"dashboard_home_ensure","description":"Create this workspace's home overview, or the selected project's overview, if it does not exist yet. Safe to call repeatedly. Then use dashboard_update with the returned id to place charts on it.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","project":"projectId"},"http":{"method":"POST","path":"/api/dashboards/home","response":"raw","status":200}},{"module":"dashboards","operation":"get","name":"dashboard_read","description":"Read a dashboard with its layout, its charts and the query behind each one — everything needed to render it, in one call.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"read","id":"id"},"http":{"method":"GET","path":"/api/dashboards/:id","response":"raw","status":200}},{"module":"dashboards","operation":"estimate","name":"dashboard_cost","description":"Estimate database work for one dashboard refresh without running its queries. Shared saved queries are counted once; costs are grouped by source. PostgreSQL only; unsupported queries remain explicitly unestimated.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"read","id":"id"},"http":{"method":"POST","path":"/api/dashboards/:id/cost","response":"raw","status":200}},{"module":"dashboards","operation":"update","name":"dashboard_update","description":"Rename a dashboard or change its layout. Send the whole `layout` array — it replaces the stored one, so read the dashboard first if you are adding to it. Set folderId to move it; null returns it to the root library.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"title":{"minLength":1,"maxLength":120,"type":"string"},"folderId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"description":{"maxLength":400,"type":"string"},"layout":{"maxItems":64,"type":"array","items":{"anyOf":[{"additionalProperties":false,"type":"object","required":["app","w","h"],"properties":{"app":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"},"placement":{"description":"Explicit placement on this dashboard. Defaults to body. Header supports a single compact action; other view content remains in the body.","anyOf":[{"const":"body","type":"string"},{"const":"header","type":"string"}]},"componentLayout":{"maxItems":128,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","width"],"properties":{"id":{"minLength":1,"maxLength":128,"type":"string"},"width":{"minimum":1,"maximum":12,"type":"integer"},"height":{"minimum":80,"maximum":1600,"type":"integer"}}}},"heightMode":{"description":"Views fit their content by default, with page scrolling and paginated records. Use fixed only for an intentionally bounded tile; h is then its height in 72px units, not pixels.","anyOf":[{"const":"content","type":"string"},{"const":"fixed","type":"string"}]}}},{"additionalProperties":false,"type":"object","required":["chart","w","h"],"properties":{"chart":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["metric","source","w","h"],"properties":{"metric":{"minLength":1,"maxLength":64,"type":"string"},"source":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}}]}},"params":{"type":"object","patternProperties":{"^(.*)$":{"additionalProperties":false,"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"timestamp","type":"string"},{"const":"date","type":"string"},{"const":"number","type":"string"},{"const":"string","type":"string"},{"const":"bool","type":"string"}]},"default":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"number"},{"type":"boolean"}]},"options":{"maxItems":64,"type":"array","items":{"maxLength":128,"type":"string"}},"required":{"type":"boolean"},"description":{"maxLength":500,"type":"string"},"dependsOn":{"maxItems":100,"type":"array","items":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}},"picker":{"additionalProperties":false,"type":"object","required":["viewId","valueKey"],"properties":{"viewId":{"minLength":1,"maxLength":128,"type":"string"},"valueKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"labelKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"allowManual":{"type":"boolean"},"params":{"type":"object","patternProperties":{"^[A-Za-z_]\\w*$":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}}}}},"min":{"type":"number"},"max":{"type":"number"},"label":{"maxLength":64,"type":"string"},"timeZone":{"minLength":1,"maxLength":128,"description":"IANA timezone used to resolve relative calendar dates. Defaults to UTC.","type":"string"}}}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/dashboards/:id","response":"raw","status":200}},{"module":"dashboards","operation":"remove","name":"dashboard_delete","description":"Delete a dashboard and its layout. Requires dashboard Admin. Read the dashboard and its runtime references first; separately saved charts, queries and source records are retained.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"dashboard","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/dashboards/:id","response":"raw","status":200}},{"module":"flows","operation":"catalog","name":"flow_catalog","description":"Read the live node registry, templates, ports, aggregations, condition operators, chart types and saved-flow format used by the visual editor. Use this before creating or editing nodes; never invent node types or infer column meanings. This reads no source data.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"read","list":true},"http":{"method":"GET","path":"/api/flows/catalog"}},{"module":"flows","operation":"validate","name":"flow_validate","description":"Validate and normalize a saved flow query using the exact parser used by the canvas and execution engine. Input query is {kind:\"flow\",version:1,document:{version:3,title,nodes,edges},querySchemas:[]}. This does not execute SQL or fetch source rows; incomplete drafts can be structurally valid.","inputSchema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"query","action":"read","list":true},"http":{"method":"POST","path":"/api/flows/validate"}},{"module":"flows","operation":"preview","name":"flow_preview","description":"Explicitly execute a draft flow graph and return its bounded outputs. id is the SOURCE ID, not a node, query or graph ID. Get node shapes from flow_catalog. Requires query execution access to every referenced source. Only call when the user requests a run or preview; saving nodes does not require execution.","inputSchema":{"type":"object","additionalProperties":false,"required":["graph","id"],"properties":{"graph":{"additionalProperties":false,"type":"object","required":["nodes","edges"],"properties":{"nodes":{"maxItems":500,"type":"array","items":{}},"edges":{"maxItems":1000,"type":"array","items":{}}}},"querySchemas":{"maxItems":500,"type":"array","items":{}},"params":{"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"sql","action":"run","id":"id"},"http":{"method":"POST","path":"/api/sources/:id/flow-preview","response":"raw","status":200}},{"module":"reports","operation":"list","name":"report_list","description":"List a dashboard's scheduled reports, saved delivery channels and delivery readiness. Requires dashboard Write. Does not execute queries or send a report.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"id"},"http":{"method":"GET","path":"/api/dashboards/:id/reports","response":"raw","status":200}},{"module":"reports","operation":"create","name":"report_create","description":"Create a dashboard report schedule with explicit channels, recurrence, format, parameters and optional component IDs. Setting enabled=true authorizes future scheduled query execution and delivery; saving does not send an immediate report.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","channelIds","format","params","enabled","recurrence","id"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"^[^\\r\\n]+$","type":"string"},"channelIds":{"minItems":1,"maxItems":20,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":200,"type":"string"}},"format":{"anyOf":[{"const":"summary","type":"string"},{"anyOf":[{"const":"pdf","type":"string"},{"const":"csv","type":"string"}]}]},"panelIds":{"minItems":1,"maxItems":100,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":1200,"type":"string"}},"params":{"maxProperties":50,"type":"object","patternProperties":{"^(.*)$":{"maxLength":2000,"type":"string"}}},"enabled":{"type":"boolean"},"recurrence":{"additionalProperties":false,"type":"object","required":["frequency","time","timezone","weekday","monthDay"],"properties":{"frequency":{"anyOf":[{"const":"interval","type":"string"},{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"}]},"intervalMinutes":{"minimum":1,"maximum":43200,"type":"integer"},"time":{"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$","type":"string"},"timezone":{"minLength":1,"maxLength":100,"type":"string"},"weekday":{"minimum":0,"maximum":6,"type":"integer"},"monthDay":{"minimum":1,"maximum":28,"type":"integer"}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"id"},"http":{"method":"POST","path":"/api/dashboards/:id/reports","response":"raw","status":201}},{"module":"reports","operation":"update","name":"report_update","description":"Change a saved dashboard report schedule, delivery channels, recurrence, format or parameters, or disable it with enabled=false. Enabling a schedule authorizes future scheduled execution and delivery. Does not send an immediate report.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["name","channelIds","format","params","enabled","recurrence","id","reportId"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"^[^\\r\\n]+$","type":"string"},"channelIds":{"minItems":1,"maxItems":20,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":200,"type":"string"}},"format":{"anyOf":[{"const":"summary","type":"string"},{"anyOf":[{"const":"pdf","type":"string"},{"const":"csv","type":"string"}]}]},"panelIds":{"minItems":1,"maxItems":100,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":1200,"type":"string"}},"params":{"maxProperties":50,"type":"object","patternProperties":{"^(.*)$":{"maxLength":2000,"type":"string"}}},"enabled":{"type":"boolean"},"recurrence":{"additionalProperties":false,"type":"object","required":["frequency","time","timezone","weekday","monthDay"],"properties":{"frequency":{"anyOf":[{"const":"interval","type":"string"},{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"}]},"intervalMinutes":{"minimum":1,"maximum":43200,"type":"integer"},"time":{"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$","type":"string"},"timezone":{"minLength":1,"maxLength":100,"type":"string"},"weekday":{"minimum":0,"maximum":6,"type":"integer"},"monthDay":{"minimum":1,"maximum":28,"type":"integer"}}},"id":{"minLength":1,"maxLength":512,"type":"string"},"reportId":{"minLength":1,"maxLength":512,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["enabled","id","reportId"],"properties":{"enabled":{"const":false,"type":"boolean"},"id":{"minLength":1,"maxLength":512,"type":"string"},"reportId":{"minLength":1,"maxLength":512,"type":"string"}}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/dashboards/:id/reports/:reportId","response":"raw","status":200}},{"module":"reports","operation":"remove","name":"report_remove","description":"Remove a dashboard report schedule and stop its future deliveries. Does not remove the dashboard or alter source database records.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","reportId"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"},"reportId":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"id"},"http":{"method":"DELETE","path":"/api/dashboards/:id/reports/:reportId","response":"raw","status":200}},{"module":"reports","operation":"runs","name":"report_runs","description":"Read recent delivery runs and outcomes for a dashboard report schedule. Requires dashboard Write. Does not execute queries or send another report.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","reportId"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"},"reportId":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"id"},"http":{"method":"GET","path":"/api/dashboards/:id/reports/:reportId/runs","response":"raw","status":200}},{"module":"reports","operation":"send","name":"report_send","description":"Explicitly queue an immediate run of a saved dashboard report using its configured channels, format and parameters. Executes its queries and sends the result externally; requires dashboard Write and normal report dependency checks.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","reportId"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"},"reportId":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"id"},"http":{"method":"POST","path":"/api/dashboards/:id/reports/:reportId/send","response":"raw","status":202}},{"module":"reports","operation":"export","name":"report_export","description":"Explicitly render a dashboard report as a PDF or CSV file using supplied parameters and optional component IDs. Executes the authorized dashboard queries and returns the report file; does not send a notification or create a schedule.","inputSchema":{"type":"object","additionalProperties":false,"required":["format","params","id"],"properties":{"format":{"anyOf":[{"const":"pdf","type":"string"},{"const":"csv","type":"string"}]},"params":{"maxProperties":50,"type":"object","patternProperties":{"^(.*)$":{"maxLength":2000,"type":"string"}}},"panelIds":{"minItems":1,"maxItems":100,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":1200,"type":"string"}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"read","id":"id"},"http":{"method":"POST","path":"/api/dashboards/:id/report-export","response":"file","status":200}},{"module":"schedules","operation":"monitor","name":"schedule_monitor","description":"Read safe schedule status and workspace scheduling pause state for readable targets. Pages contain up to 50 candidates; follow next even when schedules is empty. Cursor expires after one hour and is bound to your account, credential and project filter. No definitions, inputs, channels, raw errors or execution.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"},"cursor":{"minLength":1,"maxLength":2048,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/schedules/monitor","response":"raw"}},{"module":"schedules","operation":"monitorRuns","name":"schedule_monitor_runs","description":"Read the most recent 25 safe schedule outcomes for an authorized target. Status and timing only; no raw error messages, workflow results, inputs or mutation authority.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/schedules/:id/monitor","response":"raw"}},{"module":"schedules","operation":"list","name":"schedule_list","description":"List authorized workflow and dashboard schedules, available targets, and notification destinations. Project filtering uses stored target ownership. No execution.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/schedules","response":"raw"}},{"module":"schedules","operation":"get","name":"schedule_get","description":"Read one authorized schedule and its last outcome.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/schedules/:id","response":"raw"}},{"module":"schedules","operation":"create","name":"schedule_create","description":"Configure a published workflow trigger with explicit inputs and a pinned revision, or a dashboard delivery. Optional condition references a saved query and output: run when its result becomes nonempty (enter), when a previously nonempty result becomes empty (exit), or on each nonempty check (while). An initially empty result does not fire exit. Query filters own thresholds; its definition is snapshotted when saved. Recurrence is the check cadence. Requires target Write and execution permissions, including the condition query and sources. Saving never executes now. Enabled triggers authorize future runs; every check revalidates the creator and credential.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["kind","actionId","definition","enabled"],"properties":{"kind":{"const":"workflow","type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"definition":{"additionalProperties":false,"type":"object","required":["name","recurrence","revision","inputs"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"\\S","type":"string"},"recurrence":{"additionalProperties":false,"type":"object","required":["frequency","time","timezone","weekday","monthDay"],"properties":{"frequency":{"anyOf":[{"const":"interval","type":"string"},{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"}]},"intervalMinutes":{"minimum":1,"maximum":43200,"type":"integer"},"time":{"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$","type":"string"},"timezone":{"minLength":1,"maxLength":100,"type":"string"},"weekday":{"minimum":0,"maximum":6,"type":"integer"},"monthDay":{"minimum":1,"maximum":28,"type":"integer"}}},"revision":{"minimum":1,"type":"integer"},"inputs":{"maxProperties":100,"type":"object","patternProperties":{"^(.*)$":{}}},"condition":{"additionalProperties":false,"type":"object","required":["queryId","params","mode"],"properties":{"queryId":{"minLength":1,"maxLength":512,"type":"string"},"outputNodeId":{"minLength":1,"maxLength":512,"type":"string"},"params":{"maxProperties":100,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"mode":{"anyOf":[{"const":"enter","type":"string"},{"const":"exit","type":"string"},{"const":"while","type":"string"}]}}}}},"enabled":{"type":"boolean"}}},{"additionalProperties":false,"type":"object","required":["kind","dashboardId","definition","enabled"],"properties":{"kind":{"const":"dashboard","type":"string"},"dashboardId":{"minLength":1,"maxLength":512,"type":"string"},"definition":{"additionalProperties":false,"type":"object","required":["name","channelIds","format","params","recurrence"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"^[^\\r\\n]+$","type":"string"},"channelIds":{"minItems":1,"maxItems":20,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":200,"type":"string"}},"format":{"anyOf":[{"const":"summary","type":"string"},{"anyOf":[{"const":"pdf","type":"string"},{"const":"csv","type":"string"}]}]},"panelIds":{"minItems":1,"maxItems":100,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":1200,"type":"string"}},"params":{"maxProperties":50,"type":"object","patternProperties":{"^(.*)$":{"maxLength":2000,"type":"string"}}},"recurrence":{"additionalProperties":false,"type":"object","required":["frequency","time","timezone","weekday","monthDay"],"properties":{"frequency":{"anyOf":[{"const":"interval","type":"string"},{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"}]},"intervalMinutes":{"minimum":1,"maximum":43200,"type":"integer"},"time":{"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$","type":"string"},"timezone":{"minLength":1,"maxLength":100,"type":"string"},"weekday":{"minimum":0,"maximum":6,"type":"integer"},"monthDay":{"minimum":1,"maximum":28,"type":"integer"}}}}},"enabled":{"type":"boolean"}}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"POST","path":"/api/schedules","response":"raw"}},{"module":"schedules","operation":"update","name":"schedule_update","description":"Edit a schedule or pause it with enabled:false. Editing requires target Write. Resuming revalidates all inputs, permissions and destinations. Never executes immediately.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["definition","enabled","id"],"properties":{"definition":{"anyOf":[{"additionalProperties":false,"type":"object","required":["name","recurrence","revision","inputs"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"\\S","type":"string"},"recurrence":{"additionalProperties":false,"type":"object","required":["frequency","time","timezone","weekday","monthDay"],"properties":{"frequency":{"anyOf":[{"const":"interval","type":"string"},{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"}]},"intervalMinutes":{"minimum":1,"maximum":43200,"type":"integer"},"time":{"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$","type":"string"},"timezone":{"minLength":1,"maxLength":100,"type":"string"},"weekday":{"minimum":0,"maximum":6,"type":"integer"},"monthDay":{"minimum":1,"maximum":28,"type":"integer"}}},"revision":{"minimum":1,"type":"integer"},"inputs":{"maxProperties":100,"type":"object","patternProperties":{"^(.*)$":{}}},"condition":{"additionalProperties":false,"type":"object","required":["queryId","params","mode"],"properties":{"queryId":{"minLength":1,"maxLength":512,"type":"string"},"outputNodeId":{"minLength":1,"maxLength":512,"type":"string"},"params":{"maxProperties":100,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"mode":{"anyOf":[{"const":"enter","type":"string"},{"const":"exit","type":"string"},{"const":"while","type":"string"}]}}}}},{"additionalProperties":false,"type":"object","required":["name","channelIds","format","params","recurrence"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"^[^\\r\\n]+$","type":"string"},"channelIds":{"minItems":1,"maxItems":20,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":200,"type":"string"}},"format":{"anyOf":[{"const":"summary","type":"string"},{"anyOf":[{"const":"pdf","type":"string"},{"const":"csv","type":"string"}]}]},"panelIds":{"minItems":1,"maxItems":100,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":1200,"type":"string"}},"params":{"maxProperties":50,"type":"object","patternProperties":{"^(.*)$":{"maxLength":2000,"type":"string"}}},"recurrence":{"additionalProperties":false,"type":"object","required":["frequency","time","timezone","weekday","monthDay"],"properties":{"frequency":{"anyOf":[{"const":"interval","type":"string"},{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"}]},"intervalMinutes":{"minimum":1,"maximum":43200,"type":"integer"},"time":{"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$","type":"string"},"timezone":{"minLength":1,"maxLength":100,"type":"string"},"weekday":{"minimum":0,"maximum":6,"type":"integer"},"monthDay":{"minimum":1,"maximum":28,"type":"integer"}}}}}]},"enabled":{"type":"boolean"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["enabled","id"],"properties":{"enabled":{"const":false,"type":"boolean"},"id":{"minLength":1,"maxLength":512,"type":"string"}}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"PATCH","path":"/api/schedules/:id","response":"raw"}},{"module":"schedules","operation":"remove","name":"schedule_remove","description":"Remove an idle schedule and its scheduling history. The workflow or dashboard is retained.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":null,"http":{"method":"DELETE","path":"/api/schedules/:id","response":"raw"}},{"module":"schedules","operation":"run","name":"schedule_run","description":"Explicitly queue one run now. Runs as the current user and credential, using the saved definition. Can call APIs, send notifications, or change records according to the published workflow. Does not change the next automatic run time.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"POST","path":"/api/schedules/:id/run","response":"raw","status":202}},{"module":"schedules","operation":"runs","name":"schedule_runs","description":"Read recent schedule outcomes and linked workflow run IDs. Does not return input values or database results.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":null,"http":{"method":"GET","path":"/api/schedules/:id/runs","response":"raw"}},{"module":"actions","operation":"destinations","name":"action_destinations","description":"List saved notification channel names and readiness for workflow notification steps. Does not reveal credentials or send anything.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"read","list":true},"http":{"method":"GET","path":"/api/actions/destinations","response":"raw"}},{"module":"actions","operation":"storeHttpCredential","name":"action_store_http_credential","description":"Encrypt HTTP authentication headers for one saved action and one exact URL origin. Returns a credentialId for the HTTP step; never returns the saved secret or calls the endpoint.","inputSchema":{"type":"object","additionalProperties":false,"required":["origin","headers","id"],"properties":{"origin":{"minLength":1,"maxLength":4096,"type":"string"},"headers":{"minProperties":1,"maxProperties":10,"type":"object","patternProperties":{"^(.*)$":{"minLength":1,"maxLength":8192,"type":"string"}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"write","id":"id"},"http":{"method":"POST","path":"/api/actions/:id/http-credentials","response":"raw"}},{"module":"actions","operation":"catalog","name":"action_catalog","description":"Read composable workflow nodes, ports and effects: saved queries, parameterized SQL/native queries, HTTP requests, record filtering, rules, mapping, notifications and native insert/update operations. No effects run while editing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"read","list":true},"http":{"method":"GET","path":"/api/actions/catalog","response":"raw"}},{"module":"actions","operation":"list","name":"action_list","description":"List authorized action definitions and their published revisions.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"read","list":true},"http":{"method":"GET","path":"/api/actions","response":"raw"}},{"module":"actions","operation":"get","name":"action_get","description":"Read an action draft and validation issues. Draft editing never executes data operations.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"read","id":"id"},"http":{"method":"GET","path":"/api/actions/:id","response":"raw"}},{"module":"actions","operation":"describe","name":"action_inputs","description":"Read the input contract and current revision of a published action. No execution.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"revision":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"run","id":"id"},"http":{"method":"GET","path":"/api/actions/:id/inputs","response":"raw"}},{"module":"actions","operation":"create","name":"action_create","description":"Save an action draft using the action catalog and explicit field bindings. Does not publish or execute it.","inputSchema":{"type":"object","additionalProperties":false,"required":["definition"],"properties":{"definition":{},"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"write","project":"projectId"},"http":{"method":"POST","path":"/api/actions","response":"raw"}},{"module":"actions","operation":"update","name":"action_update","description":"Save a draft at its current version. Published behavior stays unchanged until published again.","inputSchema":{"type":"object","additionalProperties":false,"required":["definition","version","id"],"properties":{"definition":{},"version":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/actions/:id","response":"raw"}},{"module":"actions","operation":"publish","name":"action_publish","description":"Validate and publish a reviewed action revision, snapshotting its referenced queries. Checks source and record-write permissions and table metadata; does not execute the action.","inputSchema":{"type":"object","additionalProperties":false,"required":["version","id"],"properties":{"version":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"action","action":"admin","id":"id"},"http":{"method":"POST","path":"/api/actions/:id/publish","response":"raw"}},{"module":"actions","operation":"remove","name":"action_remove","description":"Remove an action definition. Its audit run records are retained.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"action","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/actions/:id","response":"raw"}},{"module":"actions","operation":"target","name":"action_target","description":"Inspect writable columns, defaults, generated fields and primary key of an actual database table. This reads metadata only; PostgreSQL currently supports transactional actions.","inputSchema":{"type":"object","additionalProperties":false,"required":["sourceId","schema","table"],"properties":{"sourceId":{"minLength":1,"maxLength":512,"type":"string"},"schema":{"maxLength":512,"type":"string"},"table":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"source","action":"read","id":"sourceId"},"http":{"method":"POST","path":"/api/actions/target","response":"raw"}},{"module":"actions","operation":"run","name":"action_run","description":"Explicitly execute a published workflow. Database-only flows use one transaction; flows with HTTP or notification steps commit each database step separately. Supply its revision and a unique requestKey; reuse that key after a transport interruption without repeating effects. Requires action Run and access to every referenced source/query; writes require data Write. Automatic execution belongs to an explicitly enabled schedule, never mount, reconnect or refresh.","inputSchema":{"type":"object","additionalProperties":false,"required":["revision","requestKey","inputs","id"],"properties":{"revision":{"minimum":1,"type":"integer"},"requestKey":{"minLength":8,"maxLength":128,"type":"string"},"inputs":{"type":"object","patternProperties":{"^(.*)$":{}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"run","id":"id"},"http":{"method":"POST","path":"/api/actions/:id/run","response":"raw"}},{"module":"actions","operation":"runs","name":"action_runs","description":"Read recent action outcomes and step timings. Includes no input values or returned database records.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"action","action":"read","id":"id"},"http":{"method":"GET","path":"/api/actions/:id/runs","response":"raw"}},{"module":"views","operation":"catalog","name":"view_catalog","description":"Read this before authoring views. Returns the shared component and field factories, complete examples, chart schema and types, binding examples, and sizing guidance used by the visual builder. Compose charts, tables, lists, metrics, details, forms and published-workflow triggers. Use fieldDefaults for form inputs and view_validate before saving.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"read","list":true},"http":{"method":"GET","path":"/api/views/catalog","response":"raw"}},{"module":"views","operation":"validate","name":"view_validate","description":"Validate a draft before saving it. Uses the ordinary view parser, binding analyzer and authorized query/view/workflow reference checks. Optionally pass datasets with real columns and up to 100 sample records per dataset to catch missing fields and nonnumeric chart measures. Returns valid, normalized definition, issues with component IDs and paths, and warnings. Does not save, query databases or submit workflows. Use view_catalog for templates.","inputSchema":{"type":"object","additionalProperties":false,"required":["definition"],"properties":{"definition":{"description":"Complete version-1 definition from view_catalog, including datasets and components. Returns precise issues and a normalized definition without saving."},"datasets":{"description":"Optional results keyed by dataset ID: columns and up to 100 sample records from view_data or query_run. Checks chart measures and displayed fields against actual results. Samples are used only for validation and are not saved.","type":"object","patternProperties":{"^(.*)$":{"type":"object","required":["columns"],"properties":{"columns":{"maxItems":1000,"type":"array","items":{"type":"object","required":["name","type"],"properties":{"name":{"type":"string"},"type":{"type":"string"}}}},"records":{"maxItems":100,"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}}}}}},"id":{"minLength":1,"maxLength":512,"description":"Existing view ID when validating an update; checks for recursive embedding.","type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"read","list":true},"http":{"method":"POST","path":"/api/views/validate","response":"raw"}},{"module":"views","operation":"list","name":"view_list","description":"List reusable interactive views and folders visible to this workspace user, with permitted view counts and available organization actions. Folders organize views without granting access to their contents.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"read","list":true},"http":{"method":"GET","path":"/api/views","response":"raw"}},{"module":"views","operation":"createFolder","name":"view_folder_create","description":"Create a folder for reusable views in a workspace or project. Use view_move for existing views, or folderId in view_create. Folders do not grant access to their contents.","inputSchema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"\\S","type":"string"},"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"viewFolder","action":"write","project":"projectId"},"http":{"method":"POST","path":"/api/views/folders","response":"raw","status":201}},{"module":"views","operation":"renameFolder","name":"view_folder_rename","description":"Rename a reusable-view folder without changing any view definitions, dashboards or permissions.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","folderId"],"properties":{"name":{"minLength":1,"maxLength":120,"pattern":"\\S","type":"string"},"folderId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"viewFolder","action":"write","id":"folderId"},"http":{"method":"PATCH","path":"/api/views/folders/:folderId","response":"raw"}},{"module":"views","operation":"removeFolder","name":"view_folder_remove","description":"Delete a reusable-view folder and return its views to the root library. Preserves the views, their saved definitions and all dashboard references.","inputSchema":{"type":"object","additionalProperties":false,"required":["folderId"],"properties":{"folderId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"viewFolder","action":"admin","id":"folderId"},"http":{"method":"DELETE","path":"/api/views/folders/:folderId","response":"raw"}},{"module":"views","operation":"move","name":"view_move","description":"Move reusable views together into a folder within the same project, or pass folderId: null to return them to the root library. Requires write access to all views and the destination folder. Preserves view definitions, execution and dashboard references.","inputSchema":{"type":"object","additionalProperties":false,"required":["ids","folderId"],"properties":{"ids":{"minItems":1,"maxItems":100,"uniqueItems":true,"type":"array","items":{"minLength":1,"maxLength":512,"type":"string"}},"folderId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"write","ids":"ids"},"http":{"method":"POST","path":"/api/views/move","response":"raw"}},{"module":"views","operation":"get","name":"view_get","description":"Read a reusable view and its dataflow, component and event bindings. Does not execute queries or workflows.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"read","id":"id"},"http":{"method":"GET","path":"/api/views/:id","response":"raw"}},{"module":"views","operation":"create","name":"view_create","description":"Save one reusable section with its end-to-end data, calculation and interaction flow using view_catalog defaults. Keep related metrics sharing a query and controls depending on local state together. Place independent sections separately in dashboard.layout; compose panel destinations with type:view components and explicit params. Call view_validate first; read each dataset with view_data after saving to verify actual fields and parameter bindings. Attach with {app: viewId, w: 12, h: 4, heightMode: \"content\"}. Saving does not run queries or workflows.","inputSchema":{"type":"object","additionalProperties":false,"required":["definition"],"properties":{"definition":{},"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"folderId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"write","project":"projectId","projectFrom":{"resourceType":"folder","id":"folderId"}},"http":{"method":"POST","path":"/api/views","response":"raw"}},{"module":"views","operation":"update","name":"view_update","description":"Edit a reusable view at its current version. Saving or previewing never submits workflow events.","inputSchema":{"type":"object","additionalProperties":false,"required":["definition","version","id"],"properties":{"definition":{},"version":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/views/:id","response":"raw"}},{"module":"views","operation":"remove","name":"view_remove","description":"Remove a reusable view. Does not modify source database records.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"panel","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/views/:id","response":"raw"}},{"module":"views","operation":"estimate","name":"view_cost","description":"Inspect the source plans and recorded execution measurements for a view or component, with its current inputs, state and dataset controls. Includes embedded views, excludes unopened destinations and workflow actions. Does not execute data queries.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"viewPath":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["viewId","componentId","state","results"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"navigation":{"minimum":0,"type":"integer"}}}},"viewParams":{"type":"object","patternProperties":{"^(.*)$":{}}},"version":{"minimum":1,"type":"integer"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"componentId":{"minLength":1,"maxLength":128,"type":"string"},"controls":{"type":"object","patternProperties":{"^(.*)$":{"additionalProperties":false,"type":"object","properties":{"search":{"maxLength":500,"type":"string"},"offset":{"minimum":0,"maximum":10000000,"type":"integer"}}}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"read","id":"id"},"http":{"method":"POST","path":"/api/views/:id/cost","response":"raw"}},{"module":"views","operation":"data","name":"view_data","description":"Explicitly read a view dataset with its declared component bindings. Inline dataflows and reusable saved queries share the ordinary query executor and database run permissions. Never executes form or button workflows.","inputSchema":{"type":"object","additionalProperties":false,"required":["datasetId","id"],"properties":{"datasetId":{"minLength":1,"type":"string"},"controls":{"additionalProperties":false,"type":"object","properties":{"search":{"maxLength":500,"type":"string"},"offset":{"minimum":0,"maximum":10000000,"type":"integer"}}},"viewId":{"minLength":1,"maxLength":512,"type":"string"},"viewPath":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["viewId","componentId","state","results"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"navigation":{"minimum":0,"type":"integer"}}}},"viewParams":{"type":"object","patternProperties":{"^(.*)$":{}}},"version":{"minimum":1,"type":"integer"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"read","id":"id"},"http":{"method":"POST","path":"/api/views/:id/data","response":"raw"}},{"module":"views","operation":"submit","name":"view_submit","description":"Explicitly submit a configured component workflow. For a named selection action supply actionId; otherwise use the primary action. Resolves saved bindings in the authenticated user context and calls the authorized published workflow executor. Supply the current view version and reuse requestKey only for the same intent; never invoke on mount or refresh.","inputSchema":{"type":"object","additionalProperties":false,"required":["componentId","version","requestKey","state","results","id"],"properties":{"componentId":{"minLength":1,"type":"string"},"viewId":{"minLength":1,"maxLength":512,"type":"string"},"viewPath":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["viewId","componentId","state","results"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"navigation":{"minimum":0,"type":"integer"}}}},"viewParams":{"type":"object","patternProperties":{"^(.*)$":{}}},"actionId":{"minLength":1,"maxLength":128,"type":"string"},"version":{"minimum":1,"type":"integer"},"requestKey":{"minLength":8,"maxLength":128,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"panel","action":"read","id":"id"},"http":{"method":"POST","path":"/api/views/:id/submit","response":"raw"}},{"module":"workspaces","operation":"promotionReview","name":"dashboard_promotion_review","description":"Review copying a dashboard and all captured dependencies into an existing writable local project in the same organization. Explicitly map every source, event dataset and notification channel. Reads saved metadata and previously captured schema evidence only; never queries data, publishes, copies credentials or activates schedules. Returns blockers and a fingerprint for a subsequent explicit draft copy. Native SQL, HTTP effects and unresolved parameter pickers currently block copying.","inputSchema":{"type":"object","additionalProperties":false,"required":["version","destinationProjectId","mappings","id"],"properties":{"version":{"minimum":1,"type":"integer"},"destinationProjectId":{"minLength":1,"maxLength":512,"type":"string"},"mappings":{"additionalProperties":false,"type":"object","required":["sources","eventDatasets","channels","httpOrigins"],"properties":{"sources":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}},"eventDatasets":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}},"channels":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}},"httpOrigins":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}}}},"expectedFingerprint":{"pattern":"^[a-f0-9]{64}$","type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"admin","id":"id"},"http":{"method":"POST","path":"/api/workspaces/:id/promotion/review","response":"raw"}},{"module":"workspaces","operation":"promotionApply","name":"dashboard_promotion_apply","description":"Explicitly copy a reviewed dashboard dependency graph into new unpublished drafts. Requires the exact review fingerprint, explicit mappings and a unique requestKey for this intent; reuse it after an uncertain transport retry. Atomically rechecks current authority, revisions, target connections and schema evidence. Never copies credentials, mutates source databases, runs workflows, publishes or starts schedules. Returns new draft IDs; copied workflows require separate review and publication.","inputSchema":{"type":"object","additionalProperties":false,"required":["version","destinationProjectId","mappings","expectedFingerprint","requestKey","id"],"properties":{"version":{"minimum":1,"type":"integer"},"destinationProjectId":{"minLength":1,"maxLength":512,"type":"string"},"mappings":{"additionalProperties":false,"type":"object","required":["sources","eventDatasets","channels","httpOrigins"],"properties":{"sources":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}},"eventDatasets":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}},"channels":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}},"httpOrigins":{"maxProperties":256,"additionalProperties":false,"type":"object","patternProperties":{"^(?!__proto__$|constructor$|prototype$).{1,512}$":{"minLength":1,"maxLength":512,"type":"string"}}}}},"expectedFingerprint":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requestKey":{"pattern":"^[a-zA-Z0-9_.-]{8,128}$","type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"admin","id":"id"},"http":{"method":"POST","path":"/api/workspaces/:id/promotion/apply","response":"raw"}},{"module":"workspaces","operation":"list","name":"app_workspace_list","description":"List dynamic dashboard containers (compatibility workspace namespace), filtered by member and token access. The product library is dashboard_list.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"projectId":{"minLength":1,"maxLength":64,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"list","list":true},"http":{"method":"GET","path":"/api/workspaces","response":"raw"}},{"module":"workspaces","operation":"get","name":"app_workspace_get","description":"Read the workspace home, accessible component destinations, tags, collection and publication status. Views are opened by components, not automatic navigation tabs. Does not run queries or actions.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"list","id":"id"},"http":{"method":"GET","path":"/api/workspaces/:id","response":"raw"}},{"module":"workspaces","operation":"create","name":"app_workspace_create","description":"Create an operational workspace inside the current organization. Optionally name a firstPage to create its empty dashboard in the same transaction. Existing dashboards are attached explicitly. Does not create a new team.","inputSchema":{"type":"object","additionalProperties":false,"required":["definition"],"properties":{"definition":{},"projectId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"firstPage":{"minLength":1,"maxLength":200,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"write","project":"projectId"},"http":{"method":"POST","path":"/api/workspaces","response":"raw"}},{"module":"workspaces","operation":"update","name":"app_workspace_update","description":"Save workspace navigation, tags, collection and page interaction bindings with optimistic version checks. Live operators keep using the published version until Publish.","inputSchema":{"type":"object","additionalProperties":false,"required":["definition","version","id"],"properties":{"definition":{},"version":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"write","id":"id"},"http":{"method":"PATCH","path":"/api/workspaces/:id","response":"raw"}},{"module":"workspaces","operation":"remove","name":"app_workspace_remove","description":"Remove a workspace and stop its published runtime. Its dashboards remain in the dashboard library.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"workspace","action":"admin","id":"id"},"http":{"method":"DELETE","path":"/api/workspaces/:id","response":"raw"}},{"module":"workspaces","operation":"publish","name":"app_workspace_publish","description":"Validate and publish the workspace pages with immutable query, chart, panel and action bindings. Requires authority over every approved dependency. Publication itself never runs a database query or action.","inputSchema":{"type":"object","additionalProperties":false,"required":["version","id"],"properties":{"version":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"workspace","action":"admin","id":"id"},"http":{"method":"POST","path":"/api/workspaces/:id/publish","response":"raw"}},{"module":"workspaces","operation":"unpublish","name":"app_workspace_unpublish","description":"Stop the published workspace runtime while preserving its draft and dashboard pages.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"workspace","action":"admin","id":"id"},"http":{"method":"POST","path":"/api/workspaces/:id/unpublish","response":"raw"}},{"module":"workspaces","operation":"createPage","name":"app_workspace_page_create","description":"Create an empty dashboard-backed view in a workspace. Bind its pageId to a button, record selection or chart interaction. The first view becomes home. Supply a stable requestKey for retry safety: the same actor, workspace and title recover the original destination even with an older version; a different title conflicts. A removed destination is never recreated by replay. Version still guards a first creation.","inputSchema":{"type":"object","additionalProperties":false,"required":["title","version","id"],"properties":{"title":{"minLength":1,"maxLength":200,"type":"string"},"version":{"minimum":1,"type":"integer"},"requestKey":{"pattern":"^[a-zA-Z0-9_.-]{8,128}$","type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"write","id":"id"},"http":{"method":"POST","path":"/api/workspaces/:id/pages","response":"raw"}},{"module":"workspaces","operation":"pageCreation","name":"app_workspace_page_creation_get","description":"Check this actor’s page-creation request without creating a destination. Returns the current workspace and the original pageId, or null if no creation committed. Requires current workspace Write access; moved or removed results conflict. Use this to reconcile a lost creation response before saving newer parent edits.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","requestKey"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"},"requestKey":{"pattern":"^[a-zA-Z0-9_.-]{8,128}$","type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"workspace","action":"write","id":"id"},"http":{"method":"GET","path":"/api/workspaces/:id/page-creations/:requestKey","response":"raw"}},{"module":"workspaces","operation":"attachPage","name":"app_workspace_page_attach","description":"Place an existing dashboard under this workspace. Requires dashboard Admin. A dashboard has one workspace parent; its page permissions inherit from that parent.","inputSchema":{"type":"object","additionalProperties":false,"required":["dashboardId","version","id"],"properties":{"dashboardId":{"minLength":1,"maxLength":512,"type":"string"},"version":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"workspace","action":"admin","id":"id"},"http":{"method":"POST","path":"/api/workspaces/:id/attach-page","response":"raw"}},{"module":"workspaces","operation":"page","name":"app_workspace_page_get","description":"Open component configuration without executing data. Draft mode requires page Write. Preview mode returns previewVersion and uses the caller’s own dependency permissions for execution. Published mode returns publicationId and the approved bindings.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","pageId"],"properties":{"mode":{"anyOf":[{"const":"draft","type":"string"},{"const":"preview","type":"string"}]},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"read","id":"pageId"},"http":{"method":"GET","path":"/api/workspaces/:id/pages/:pageId","response":"raw"}},{"module":"workspaces","operation":"updatePage","name":"app_workspace_page_update","description":"Edit a workspace page with the normal dashboard layout, descriptions and parameters. Changes remain draft until the workspace is published.","inputSchema":{"type":"object","additionalProperties":false,"required":["id","pageId"],"properties":{"title":{"minLength":1,"maxLength":120,"type":"string"},"folderId":{"anyOf":[{"minLength":1,"maxLength":64,"type":"string"},{"type":"null"}]},"description":{"maxLength":400,"type":"string"},"layout":{"maxItems":64,"type":"array","items":{"anyOf":[{"additionalProperties":false,"type":"object","required":["app","w","h"],"properties":{"app":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"},"placement":{"description":"Explicit placement on this dashboard. Defaults to body. Header supports a single compact action; other view content remains in the body.","anyOf":[{"const":"body","type":"string"},{"const":"header","type":"string"}]},"componentLayout":{"maxItems":128,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","width"],"properties":{"id":{"minLength":1,"maxLength":128,"type":"string"},"width":{"minimum":1,"maximum":12,"type":"integer"},"height":{"minimum":80,"maximum":1600,"type":"integer"}}}},"heightMode":{"description":"Views fit their content by default, with page scrolling and paginated records. Use fixed only for an intentionally bounded tile; h is then its height in 72px units, not pixels.","anyOf":[{"const":"content","type":"string"},{"const":"fixed","type":"string"}]}}},{"additionalProperties":false,"type":"object","required":["chart","w","h"],"properties":{"chart":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["metric","source","w","h"],"properties":{"metric":{"minLength":1,"maxLength":64,"type":"string"},"source":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}}]}},"params":{"type":"object","patternProperties":{"^(.*)$":{"additionalProperties":false,"type":"object","required":["type"],"properties":{"type":{"anyOf":[{"const":"timestamp","type":"string"},{"const":"date","type":"string"},{"const":"number","type":"string"},{"const":"string","type":"string"},{"const":"bool","type":"string"}]},"default":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"number"},{"type":"boolean"}]},"options":{"maxItems":64,"type":"array","items":{"maxLength":128,"type":"string"}},"required":{"type":"boolean"},"description":{"maxLength":500,"type":"string"},"dependsOn":{"maxItems":100,"type":"array","items":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}},"picker":{"additionalProperties":false,"type":"object","required":["viewId","valueKey"],"properties":{"viewId":{"minLength":1,"maxLength":128,"type":"string"},"valueKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"labelKey":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"},"allowManual":{"type":"boolean"},"params":{"type":"object","patternProperties":{"^[A-Za-z_]\\w*$":{"pattern":"^[A-Za-z_]\\w*$","maxLength":64,"type":"string"}}}}},"min":{"type":"number"},"max":{"type":"number"},"label":{"maxLength":64,"type":"string"},"timeZone":{"minLength":1,"maxLength":128,"description":"IANA timezone used to resolve relative calendar dates. Defaults to UTC.","type":"string"}}}}},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"pageId"},"http":{"method":"PATCH","path":"/api/workspaces/:id/pages/:pageId","response":"raw"}},{"module":"workspaces","operation":"arrangePage","name":"app_workspace_page_arrange","description":"Move, resize, rename or remove existing cards while viewing a dashboard. Send the last acknowledged visible layout as base and its publicationId or previewVersion. Saves presentation immediately without publishing draft queries, forms or actions. Adding or rebinding components uses the draft editor. Never executes data.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["base","layout","publicationId","id","pageId"],"properties":{"base":{"maxItems":64,"type":"array","items":{"anyOf":[{"additionalProperties":false,"type":"object","required":["app","w","h"],"properties":{"app":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"},"placement":{"description":"Explicit placement on this dashboard. Defaults to body. Header supports a single compact action; other view content remains in the body.","anyOf":[{"const":"body","type":"string"},{"const":"header","type":"string"}]},"componentLayout":{"maxItems":128,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","width"],"properties":{"id":{"minLength":1,"maxLength":128,"type":"string"},"width":{"minimum":1,"maximum":12,"type":"integer"},"height":{"minimum":80,"maximum":1600,"type":"integer"}}}},"heightMode":{"description":"Views fit their content by default, with page scrolling and paginated records. Use fixed only for an intentionally bounded tile; h is then its height in 72px units, not pixels.","anyOf":[{"const":"content","type":"string"},{"const":"fixed","type":"string"}]}}},{"additionalProperties":false,"type":"object","required":["chart","w","h"],"properties":{"chart":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["metric","source","w","h"],"properties":{"metric":{"minLength":1,"maxLength":64,"type":"string"},"source":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}}]}},"layout":{"maxItems":64,"type":"array","items":{"anyOf":[{"additionalProperties":false,"type":"object","required":["app","w","h"],"properties":{"app":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"},"placement":{"description":"Explicit placement on this dashboard. Defaults to body. Header supports a single compact action; other view content remains in the body.","anyOf":[{"const":"body","type":"string"},{"const":"header","type":"string"}]},"componentLayout":{"maxItems":128,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","width"],"properties":{"id":{"minLength":1,"maxLength":128,"type":"string"},"width":{"minimum":1,"maximum":12,"type":"integer"},"height":{"minimum":80,"maximum":1600,"type":"integer"}}}},"heightMode":{"description":"Views fit their content by default, with page scrolling and paginated records. Use fixed only for an intentionally bounded tile; h is then its height in 72px units, not pixels.","anyOf":[{"const":"content","type":"string"},{"const":"fixed","type":"string"}]}}},{"additionalProperties":false,"type":"object","required":["chart","w","h"],"properties":{"chart":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["metric","source","w","h"],"properties":{"metric":{"minLength":1,"maxLength":64,"type":"string"},"source":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}}]}},"publicationId":{"minLength":1,"maxLength":512,"type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["base","layout","previewVersion","id","pageId"],"properties":{"base":{"maxItems":64,"type":"array","items":{"anyOf":[{"additionalProperties":false,"type":"object","required":["app","w","h"],"properties":{"app":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"},"placement":{"description":"Explicit placement on this dashboard. Defaults to body. Header supports a single compact action; other view content remains in the body.","anyOf":[{"const":"body","type":"string"},{"const":"header","type":"string"}]},"componentLayout":{"maxItems":128,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","width"],"properties":{"id":{"minLength":1,"maxLength":128,"type":"string"},"width":{"minimum":1,"maximum":12,"type":"integer"},"height":{"minimum":80,"maximum":1600,"type":"integer"}}}},"heightMode":{"description":"Views fit their content by default, with page scrolling and paginated records. Use fixed only for an intentionally bounded tile; h is then its height in 72px units, not pixels.","anyOf":[{"const":"content","type":"string"},{"const":"fixed","type":"string"}]}}},{"additionalProperties":false,"type":"object","required":["chart","w","h"],"properties":{"chart":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["metric","source","w","h"],"properties":{"metric":{"minLength":1,"maxLength":64,"type":"string"},"source":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}}]}},"layout":{"maxItems":64,"type":"array","items":{"anyOf":[{"additionalProperties":false,"type":"object","required":["app","w","h"],"properties":{"app":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"},"placement":{"description":"Explicit placement on this dashboard. Defaults to body. Header supports a single compact action; other view content remains in the body.","anyOf":[{"const":"body","type":"string"},{"const":"header","type":"string"}]},"componentLayout":{"maxItems":128,"type":"array","items":{"additionalProperties":false,"type":"object","required":["id","width"],"properties":{"id":{"minLength":1,"maxLength":128,"type":"string"},"width":{"minimum":1,"maximum":12,"type":"integer"},"height":{"minimum":80,"maximum":1600,"type":"integer"}}}},"heightMode":{"description":"Views fit their content by default, with page scrolling and paginated records. Use fixed only for an intentionally bounded tile; h is then its height in 72px units, not pixels.","anyOf":[{"const":"content","type":"string"},{"const":"fixed","type":"string"}]}}},{"additionalProperties":false,"type":"object","required":["chart","w","h"],"properties":{"chart":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["metric","source","w","h"],"properties":{"metric":{"minLength":1,"maxLength":64,"type":"string"},"source":{"minLength":1,"maxLength":64,"type":"string"},"w":{"minimum":1,"maximum":12,"type":"integer"},"h":{"minimum":1,"maximum":12,"type":"integer"},"title":{"maxLength":120,"type":"string"},"note":{"maxLength":240,"type":"string"}}}]}},"previewVersion":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"write","id":"pageId"},"http":{"method":"PATCH","path":"/api/workspaces/:id/pages/:pageId/layout","response":"raw"}},{"module":"workspaces","operation":"data","name":"app_workspace_page_data","description":"Read a chart query or panel dataset using declared page parameters. Pass publicationId for approved published data, or previewVersion for an unpublished preview under your own query/source permissions. No SQL text is accepted.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["kind","publicationId","id","pageId"],"properties":{"kind":{"anyOf":[{"const":"chart","type":"string"},{"const":"panel","type":"string"},{"const":"metrics","type":"string"}]},"queryId":{"minLength":1,"maxLength":512,"type":"string"},"panelId":{"minLength":1,"maxLength":512,"type":"string"},"viewPath":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["viewId","componentId","state","results"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"navigation":{"minimum":0,"type":"integer"}}}},"viewParams":{"type":"object","patternProperties":{"^(.*)$":{}}},"viewEntry":{"additionalProperties":false,"type":"object","required":["visualId","selection"],"properties":{"visualId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"selection":{"additionalProperties":false,"type":"object","required":["values"],"properties":{"values":{"maxProperties":1000,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}}},"navigation":{"minimum":0,"type":"integer"},"result":{}}},"datasetId":{"minLength":1,"maxLength":512,"type":"string"},"controls":{"additionalProperties":false,"type":"object","properties":{"search":{"maxLength":500,"type":"string"},"offset":{"minimum":0,"maximum":10000000,"type":"integer"}}},"sourceId":{"minLength":1,"maxLength":512,"type":"string"},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"offset":{"minimum":0,"type":"integer"},"count":{"type":"boolean"},"publicationId":{"minLength":1,"maxLength":512,"type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["kind","previewVersion","id","pageId"],"properties":{"kind":{"anyOf":[{"const":"chart","type":"string"},{"const":"panel","type":"string"},{"const":"metrics","type":"string"}]},"queryId":{"minLength":1,"maxLength":512,"type":"string"},"panelId":{"minLength":1,"maxLength":512,"type":"string"},"viewPath":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["viewId","componentId","state","results"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"navigation":{"minimum":0,"type":"integer"}}}},"viewParams":{"type":"object","patternProperties":{"^(.*)$":{}}},"viewEntry":{"additionalProperties":false,"type":"object","required":["visualId","selection"],"properties":{"visualId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"selection":{"additionalProperties":false,"type":"object","required":["values"],"properties":{"values":{"maxProperties":1000,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}}},"navigation":{"minimum":0,"type":"integer"},"result":{}}},"datasetId":{"minLength":1,"maxLength":512,"type":"string"},"controls":{"additionalProperties":false,"type":"object","properties":{"search":{"maxLength":500,"type":"string"},"offset":{"minimum":0,"maximum":10000000,"type":"integer"}}},"sourceId":{"minLength":1,"maxLength":512,"type":"string"},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"offset":{"minimum":0,"type":"integer"},"count":{"type":"boolean"},"previewVersion":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}}]},"annotations":{"readOnlyHint":true,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"read","id":"pageId"},"http":{"method":"POST","path":"/api/workspaces/:id/pages/:pageId/data","response":"raw"}},{"module":"workspaces","operation":"submit","name":"app_workspace_page_submit","description":"Explicitly submit a component workflow from a page form, button or table/list/chart selection. Supply actionId only for a named selection menu action. Pass publicationId for approved bindings, or previewVersion for your own current workflow/source/data permissions. Requires page Run; the server resolves saved bindings, verified actor and the reviewed workflow revision. Reuse requestKey only for the same intent. Never submit on load or refresh.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["panelId","componentId","requestKey","state","results","publicationId","id","pageId"],"properties":{"panelId":{"minLength":1,"maxLength":512,"type":"string"},"viewPath":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["viewId","componentId","state","results"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"navigation":{"minimum":0,"type":"integer"}}}},"viewParams":{"type":"object","patternProperties":{"^(.*)$":{}}},"viewEntry":{"additionalProperties":false,"type":"object","required":["visualId","selection"],"properties":{"visualId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"selection":{"additionalProperties":false,"type":"object","required":["values"],"properties":{"values":{"maxProperties":1000,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}}},"navigation":{"minimum":0,"type":"integer"},"result":{}}},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"requestKey":{"minLength":8,"maxLength":128,"type":"string"},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"publicationId":{"minLength":1,"maxLength":512,"type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["panelId","componentId","requestKey","state","results","previewVersion","id","pageId"],"properties":{"panelId":{"minLength":1,"maxLength":512,"type":"string"},"viewPath":{"type":"array","items":{"additionalProperties":false,"type":"object","required":["viewId","componentId","state","results"],"properties":{"viewId":{"minLength":1,"maxLength":512,"type":"string"},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"navigation":{"minimum":0,"type":"integer"}}}},"viewParams":{"type":"object","patternProperties":{"^(.*)$":{}}},"viewEntry":{"additionalProperties":false,"type":"object","required":["visualId","selection"],"properties":{"visualId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"selection":{"additionalProperties":false,"type":"object","required":["values"],"properties":{"values":{"maxProperties":1000,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}}},"navigation":{"minimum":0,"type":"integer"},"result":{}}},"componentId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"requestKey":{"minLength":8,"maxLength":128,"type":"string"},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"state":{"type":"object","patternProperties":{"^(.*)$":{}}},"results":{"type":"object","patternProperties":{"^(.*)$":{}}},"previewVersion":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"run","id":"pageId"},"http":{"method":"POST","path":"/api/workspaces/:id/pages/:pageId/submit","response":"raw"}},{"module":"workspaces","operation":"interact","name":"app_workspace_page_interact","description":"Explicitly run a chart or table selection workflow saved on a dashboard visual. Supply visualId, selected scalar values, requestKey, and publicationId or previewVersion; omit actionId for its primary action or choose a declared menu ID. The server resolves saved bindings, verified actor and the reviewed workflow revision. Browser input cannot select a different workflow or supply action configuration. Reusing requestKey after a transport interruption avoids duplicate effects. Never run on render, hover or refresh.","inputSchema":{"type":"object","anyOf":[{"additionalProperties":false,"type":"object","required":["visualId","selection","requestKey","publicationId","id","pageId"],"properties":{"visualId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"selection":{"additionalProperties":false,"type":"object","required":["values"],"properties":{"values":{"maxProperties":1000,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"requestKey":{"minLength":8,"maxLength":128,"type":"string"},"publicationId":{"minLength":1,"maxLength":512,"type":"string"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}},{"additionalProperties":false,"type":"object","required":["visualId","selection","requestKey","previewVersion","id","pageId"],"properties":{"visualId":{"minLength":1,"maxLength":512,"type":"string"},"actionId":{"minLength":1,"maxLength":512,"type":"string"},"selection":{"additionalProperties":false,"type":"object","required":["values"],"properties":{"values":{"maxProperties":1000,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}}}},"params":{"type":"object","patternProperties":{"^(.*)$":{}}},"requestKey":{"minLength":8,"maxLength":128,"type":"string"},"previewVersion":{"minimum":1,"type":"integer"},"id":{"minLength":1,"maxLength":512,"type":"string"},"pageId":{"minLength":1,"maxLength":512,"type":"string"}}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false},"access":"workspace","permission":{"resourceType":"dashboard","action":"run","id":"pageId"},"http":{"method":"POST","path":"/api/workspaces/:id/pages/:pageId/interact","response":"raw"}},{"module":"workspaces","operation":"members","name":"app_workspace_members_list","description":"Read members and page access for an authorized dynamic dashboard workspace. Requires workspace Admin; does not change roles or grants.","inputSchema":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"minLength":1,"maxLength":512,"type":"string"}}},"annotations":{"readOnlyHint":true,"destructiveHint":true},"access":"workspace","permission":{"resourceType":"workspace","action":"admin","id":"id"},"http":{"method":"GET","path":"/api/workspaces/:id/members","response":"raw"}}]}
