{"id":770819,"recorded_at":"2026-10-28T11:25:10.002484Z","observed_at":"2026-10-28T11:25:10.002284Z","subject_kind":"endpoint","subject":"33eea7d3-5ebb-4400-9691-010c24e8483e","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":42,"tools":[{"description":"Add one of your customers to a multi-customer dashboard. The customerId must exactly match the value that identifies them in your own database, because it is what gets bound to :customer_id in every widget query. Adding a customer does not give anyone access; use add_customer_user for that. Subject to your plan's customer limit.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"customerId":{"description":"The identifier for this customer in your own data, for example the value in your orders.customer_id column. Must match exactly.","maxLength":200,"minLength":1,"type":"string"},"dashboardId":{"description":"A dashboard of type 'customer'.","minLength":1,"type":"string"},"name":{"description":"Display name for this customer, for your own reference.","maxLength":200,"minLength":1,"type":"string"}},"required":["dashboardId","name","customerId"],"type":"object"},"name":"add_customer"},{"description":"Create a login for one of your customers so they can sign in to the published dashboard and see their own data. If you do not supply a password a strong one is generated and returned once. Subject to your plan's users-per-customer limit.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"customerRecordId":{"description":"The customer's id from list_customers.","minLength":1,"type":"string"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"email":{"description":"The person's email address. Must be unique on this dashboard.","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","type":"string"},"password":{"description":"Leave empty to have a strong password generated.","maxLength":200,"minLength":4,"type":"string"}},"required":["dashboardId","customerRecordId","email"],"type":"object"},"name":"add_customer_user"},{"description":"Connect a new database or spreadsheet to your workspace. Test the settings with test_data_source_connection first: this tool saves them whether or not they work. Subject to your plan's data source limit.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"config":{"additionalProperties":{},"description":"Connection settings for this connector type, for example { host, port, database, username, password, ssl } for postgres. Credentials are stored encrypted at rest and are never returned by read tools.","propertyNames":{"type":"string"},"type":"object"},"name":{"description":"A name for this connection, shown in the dashboard editor.","maxLength":200,"minLength":1,"type":"string"},"type":{"description":"Connector type. Call list_supported_data_connectors for the settings each one expects.","enum":["postgres","mysql","mssql","oracle","aurora","redshift","bigquery","snowflake","googleSheets","api","custom"],"type":"string"}},"required":["name","type","config"],"type":"object"},"name":"add_data_source"},{"description":"Create a dashboard. Use type 'customer' for a multi-customer dashboard where each of your customers signs in and sees only their own rows, or 'internal' for a normal dashboard you view yourself or publish as one shared view. A 'Default' view is created automatically. Subject to your plan's dashboard limit.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"name":{"description":"Dashboard name.","maxLength":200,"minLength":1,"type":"string"},"type":{"description":"'customer' for a per-customer, login-gated dashboard; 'internal' for a single shared dashboard. Defaults to 'internal'. This cannot be changed later.","enum":["internal","customer"],"type":"string"}},"required":["name"],"type":"object"},"name":"create_dashboard"},{"description":"Add a view (tab) to a dashboard. New views are appended after the existing ones. Subject to your plan's view limit.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"name":{"description":"View name, shown on the tab.","maxLength":200,"minLength":1,"type":"string"}},"required":["dashboardId","name"],"type":"object"},"name":"create_view"},{"description":"Add a chart, table or KPI to a view. Call list_widget_types for the visualizationConfig each type needs, and run_query_preview first to confirm the query returns the columns you are about to reference. On a multi-customer dashboard the query must filter on :customer_id. Subject to your plan's widget limit.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"allowSharedAcrossAllCustomers":{"description":"Only for customer dashboards. Set true, after the user explicitly confirms, to allow a query with no per-customer filter so every customer sees identical rows.","type":"boolean"},"dataSourceId":{"description":"Data source the query runs against.","minLength":1,"type":"string"},"layout":{"description":"Position and size on the 12-column grid. Omit on create and a free slot is chosen for you.","properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":12,"minimum":1,"type":"integer"},"x":{"maximum":11,"minimum":0,"type":"integer"},"y":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["x","y","width","height"],"type":"object"},"query":{"description":"SQL, or an A1 range for Google Sheets. On a customer dashboard include :customer_id, for example \"WHERE customer_id = :customer_id\".","minLength":1,"type":"string"},"title":{"description":"Widget title.","maxLength":200,"minLength":1,"type":"string"},"viewId":{"description":"View id the widget belongs to.","minLength":1,"type":"string"},"visualizationConfig":{"additionalProperties":{},"description":"Field mappings and display options for this visualization type. Call list_widget_types for the keys each type expects.","propertyNames":{"type":"string"},"type":"object"},"visualizationType":{"enum":["table","number","lineChart","barChart","stackedBarChart","stackedLineChart","comboChart","scatterChart","histogram","pivotTable","pieChart"],"type":"string"}},"required":["viewId","dataSourceId","title","query","visualizationType"],"type":"object"},"name":"create_widget"},{"description":"Permanently remove a customer from a multi-customer dashboard, along with all of their logins. They lose access immediately. Calling this without confirm returns a preview. This cannot be undone.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"confirm":{"description":"Set to true only after the user has seen what will be deleted and explicitly agreed. Calling without it returns a preview instead of deleting.","type":"boolean"},"confirmName":{"description":"The exact current name of the item being deleted, copied from the preview. Required alongside confirm.","type":"string"},"customerRecordId":{"description":"The customer's id from list_customers.","minLength":1,"type":"string"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"}},"required":["dashboardId","customerRecordId"],"type":"object"},"name":"delete_customer"},{"description":"Permanently remove one login from a customer. They can no longer sign in. Calling this without confirm returns a preview. The customer itself and their data access rule remain.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"confirm":{"description":"Set to true only after the user has seen what will be deleted and explicitly agreed. Calling without it returns a preview instead of deleting.","type":"boolean"},"confirmName":{"description":"The exact current name of the item being deleted, copied from the preview. Required alongside confirm.","type":"string"},"customerRecordId":{"description":"The customer's id from list_customers.","minLength":1,"type":"string"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"userId":{"description":"The login's id.","minLength":1,"type":"string"}},"required":["dashboardId","customerRecordId","userId"],"type":"object"},"name":"delete_customer_user"},{"description":"Permanently delete a dashboard and everything on it. Calling this without confirm returns a preview of what would be removed; deleting for real needs confirm plus the dashboard's exact name. This cannot be undone.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"confirm":{"description":"Set to true only after the user has seen what will be deleted and explicitly agreed. Calling without it returns a preview instead of deleting.","type":"boolean"},"confirmName":{"description":"The exact current name of the item being deleted, copied from the preview. Required alongside confirm.","type":"string"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"}},"required":["dashboardId"],"type":"object"},"name":"delete_dashboard"},{"description":"Permanently delete a data source connection. This is refused while any widget still uses it. Calling this without confirm returns a preview. Your actual database is untouched; only the connection is removed.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"confirm":{"description":"Set to true only after the user has seen what will be deleted and explicitly agreed. Calling without it returns a preview instead of deleting.","type":"boolean"},"confirmName":{"description":"The exact current name of the item being deleted, copied from the preview. Required alongside confirm.","type":"string"},"dataSourceId":{"description":"Data source id.","minLength":1,"type":"string"}},"required":["dataSourceId"],"type":"object"},"name":"delete_data_source"},{"description":"Permanently delete a view and every widget on it. Calling this without confirm returns a preview. This cannot be undone.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"confirm":{"description":"Set to true only after the user has seen what will be deleted and explicitly agreed. Calling without it returns a preview instead of deleting.","type":"boolean"},"confirmName":{"description":"The exact current name of the item being deleted, copied from the preview. Required alongside confirm.","type":"string"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"viewId":{"description":"View id.","minLength":1,"type":"string"}},"required":["dashboardId","viewId"],"type":"object"},"name":"delete_view"},{"description":"Permanently delete a widget. Calling this without confirm returns a preview. This cannot be undone.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"confirm":{"description":"Set to true only after the user has seen what will be deleted and explicitly agreed. Calling without it returns a preview instead of deleting.","type":"boolean"},"confirmName":{"description":"The exact current name of the item being deleted, copied from the preview. Required alongside confirm.","type":"string"},"viewId":{"description":"View id.","minLength":1,"type":"string"},"widgetId":{"description":"Widget id.","minLength":1,"type":"string"}},"required":["viewId","widgetId"],"type":"object"},"name":"delete_widget"},{"description":"Explain exactly how to write widget queries so each customer only sees their own rows on a multi-customer dashboard. Call this before writing any query for a `customer` type dashboard. No sign-in required.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"explain_customer_filtering"},{"description":"Get the signed-in CustomerDashboard account: name, email, workspace, current plan, what the plan allows and how much of it is already used. Call this first in an authenticated session to learn the workspace you are working in.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"get_account"},{"description":"Get one dashboard in full: its settings, theme, publishing state, every view, and every widget on each view including the widget queries. This is the fastest way to understand an existing dashboard before changing it.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"includeWidgets":{"description":"Include every widget on every view. Defaults to true.","type":"boolean"}},"required":["dashboardId"],"type":"object"},"name":"get_dashboard"},{"description":"Get the public URL of a published dashboard, and who can open it. Returns nothing to share if the dashboard is still private.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"}},"required":["dashboardId"],"type":"object"},"name":"get_dashboard_share_url"},{"description":"Get one data source by id, including its non-secret connection settings. Credentials are never included.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dataSourceId":{"description":"Data source id.","minLength":1,"type":"string"}},"required":["dataSourceId"],"type":"object"},"name":"get_data_source"},{"description":"List the tables and columns available in a connected data source, so you can write correct widget queries. Supported for PostgreSQL, MySQL, SQL Server, Oracle, Aurora, Redshift and Google Sheets.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dataSourceId":{"description":"Data source id.","minLength":1,"type":"string"},"table":{"description":"Return only this table. Useful when a database has many tables.","type":"string"}},"required":["dataSourceId"],"type":"object"},"name":"get_data_source_schema"},{"description":"Explain what CustomerDashboard.io is, how multi-customer dashboards work, and how workspaces, dashboards, views, widgets and customers fit together. Call this first when you are unfamiliar with the product. No sign-in required.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"get_platform_overview"},{"description":"Explain how to sign up for the free trial and connect this MCP server to a CustomerDashboard account, plus the order of steps for building a first multi-customer dashboard. No sign-in required.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"get_started"},{"description":"List the customers on a multi-customer dashboard, each with the customerId their data is filtered by and how many logins they have.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"includeUsers":{"description":"Include each customer's login email addresses.","type":"boolean"}},"required":["dashboardId"],"type":"object"},"name":"list_customers"},{"description":"List every dashboard in your workspace, with its type, publishing state and share URL if published.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"list_dashboards"},{"description":"List every data source connected to your workspace. Connection credentials are never included.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"list_data_sources"},{"description":"List CustomerDashboard's subscription plans, their monthly price and the resource limits each one allows. Useful for explaining why a create operation was blocked. No sign-in required.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"list_plans_and_limits"},{"description":"List every data source type CustomerDashboard can connect to, the settings each one needs, whether widgets can query it, and whether its schema can be introspected. No sign-in required.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"list_supported_data_connectors"},{"description":"List the views (tabs) on a dashboard, in display order, with how many widgets each one holds.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"}},"required":["dashboardId"],"type":"object"},"name":"list_views"},{"description":"List every visualization a widget can use, with the visualizationConfig keys each type requires and accepts. Call this before creating widgets so the configuration is correct first time. No sign-in required.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"},"name":"list_widget_types"},{"description":"List the widgets on a view, including each widget's query and visualization configuration.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"viewId":{"description":"View id.","minLength":1,"type":"string"}},"required":["viewId"],"type":"object"},"name":"list_widgets"},{"description":"Publish a dashboard and return its share URL. A customer dashboard is always login-gated, so its customers sign in with the logins you created. An internal dashboard can be published as 'public' (anyone with the link) or 'protected' (one shared username and password).","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"access":{"description":"For internal dashboards: 'public' means anyone with the link, 'protected' requires a shared username and password. Ignored for customer dashboards, which always require a per-customer login. Defaults to 'protected'.","enum":["public","protected"],"type":"string"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"password":{"description":"Shared password, for 'protected' access. Leave empty to have one generated and returned once.","maxLength":200,"minLength":4,"type":"string"},"username":{"description":"Shared username, for 'protected' access.","maxLength":100,"minLength":1,"type":"string"}},"required":["dashboardId"],"type":"object"},"name":"publish_dashboard"},{"description":"Set the tab order of a dashboard's views. Pass every view id in the order you want them shown. This is also the order they rotate in on a wall display.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"viewIds":{"description":"Every view id on this dashboard, in the order you want.","items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["dashboardId","viewIds"],"type":"object"},"name":"reorder_views"},{"description":"Run a query against a connected data source and return the first few rows, so you can confirm it works before putting it on a widget. Results are capped at 100 rows. If the query contains :customer_id you must also say which customer to preview as, using customerId or dashboardId.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"customerId":{"description":"The id of a customer (from list_customers) to run the query as. Required when the query uses :customer_id, unless dashboardId is given.","type":"string"},"dashboardId":{"description":"A customer dashboard whose configured test customer should be used instead of a real customer. Only needed when the query uses :customer_id.","type":"string"},"dataSourceId":{"description":"Data source id.","minLength":1,"type":"string"},"limit":{"description":"Rows to return. Defaults to 25.","maximum":100,"minimum":1,"type":"integer"},"query":{"description":"The SQL to run, or an A1 range for Google Sheets. Use :customer_id where a customer's own identifier belongs.","minLength":1,"type":"string"}},"required":["dataSourceId","query"],"type":"object"},"name":"run_query_preview"},{"description":"Set the default locale and number, currency, percentage, duration, date and datetime formatting for a dashboard. Individual widgets can still override these.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"currency":{"additionalProperties":{},"description":"For example { \"currency\": \"USD\", \"decimals\": 2 }.","propertyNames":{"type":"string"},"type":"object"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"date":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"datetime":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"duration":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"locale":{"description":"BCP 47 locale such as en-US, en-GB or de-DE.","maxLength":20,"type":"string"},"nullDisplay":{"description":"What to show for an empty value, for example a dash.","maxLength":20,"type":"string"},"number":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"percentage":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"}},"required":["dashboardId"],"type":"object"},"name":"set_dashboard_formatting"},{"description":"Set the colour theme of a dashboard: page and surface backgrounds, text colours, brand colours and the chart series palette. All colours are hex values. Pass every field, since the theme is stored as one object.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"backgroundColor":{"description":"Page background.","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","type":"string"},"chartSeriesColors":{"description":"Explicit chart series palette. Leave empty to derive one from the brand colours.","items":{"pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","type":"string"},"maxItems":20,"type":"array"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"primaryBrandColor":{"description":"Main accent, used as the first chart series colour.","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","type":"string"},"primaryTextColor":{"description":"Main text.","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","type":"string"},"secondaryBrandColor":{"description":"Secondary accent, used for the second chart series.","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","type":"string"},"secondaryTextColor":{"description":"Muted and secondary text.","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","type":"string"},"surfaceColor":{"description":"Background of each widget card.","pattern":"^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$","type":"string"}},"required":["dashboardId","backgroundColor","surfaceColor","primaryTextColor","secondaryTextColor","primaryBrandColor"],"type":"object"},"name":"set_dashboard_theme"},{"description":"Reposition several widgets on a view at once, on the 12-column grid. Use this to lay out a whole view rather than moving widgets one at a time.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"layouts":{"description":"The widgets to move, with their new positions.","items":{"properties":{"layout":{"description":"Position and size on the 12-column grid. Omit on create and a free slot is chosen for you.","properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":12,"minimum":1,"type":"integer"},"x":{"maximum":11,"minimum":0,"type":"integer"},"y":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["x","y","width","height"],"type":"object"},"widgetId":{"minLength":1,"type":"string"}},"required":["widgetId","layout"],"type":"object"},"minItems":1,"type":"array"},"viewId":{"description":"View id.","minLength":1,"type":"string"}},"required":["viewId","layouts"],"type":"object"},"name":"set_widget_layout"},{"description":"Check whether a set of connection settings actually works, before saving them. Pass an existing dataSourceId to retest a saved connection, or a type and config to test new settings.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"config":{"additionalProperties":{},"description":"Connection settings for this connector type, for example { host, port, database, username, password, ssl } for postgres. Credentials are stored encrypted at rest and are never returned by read tools.","propertyNames":{"type":"string"},"type":"object"},"dataSourceId":{"description":"Test a saved data source. Omit to test new settings.","minLength":1,"type":"string"},"type":{"description":"Connector type. Call list_supported_data_connectors for the settings each one expects.","enum":["postgres","mysql","mssql","oracle","aurora","redshift","bigquery","snowflake","googleSheets","api","custom"],"type":"string"}},"type":"object"},"name":"test_data_source_connection"},{"description":"Make a dashboard private again. The existing share link stops working immediately, and any shared username and password are cleared. Widgets and data are untouched.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"}},"required":["dashboardId"],"type":"object"},"name":"unpublish_dashboard"},{"description":"Rename a customer or correct the customerId their data is filtered by. Changing customerId immediately changes which rows they see, so confirm the new value with the user first.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"customerId":{"description":"New identifier from your own data. This changes which rows this customer can see.","maxLength":200,"minLength":1,"type":"string"},"customerRecordId":{"description":"The customer's id from list_customers (not their customerId).","minLength":1,"type":"string"},"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"name":{"maxLength":200,"minLength":1,"type":"string"}},"required":["dashboardId","customerRecordId"],"type":"object"},"name":"update_customer"},{"description":"Rename a dashboard, set how long each view is shown when the dashboard auto-rotates on a screen, or set the test customer used to preview a customer dashboard. Use set_dashboard_theme for colours and publish_dashboard for sharing.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"name":{"maxLength":200,"minLength":1,"type":"string"},"testCustomerId":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"A customer identifier from your own data, used to preview a customer dashboard before real customers exist. This is bound to :customer_id during previews only."},"viewRotationSeconds":{"anyOf":[{"maximum":86400,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Seconds each view is shown before rotating to the next, for wall displays. 0 or null turns rotation off."}},"required":["dashboardId"],"type":"object"},"name":"update_dashboard"},{"description":"Rename a data source or replace its connection settings. The config you pass replaces the stored one entirely, so include every setting, not just the changed ones.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"config":{"additionalProperties":{},"description":"Connection settings for this connector type, for example { host, port, database, username, password, ssl } for postgres. Credentials are stored encrypted at rest and are never returned by read tools.","propertyNames":{"type":"string"},"type":"object"},"dataSourceId":{"description":"Data source id.","minLength":1,"type":"string"},"name":{"maxLength":200,"minLength":1,"type":"string"}},"required":["dataSourceId"],"type":"object"},"name":"update_data_source"},{"description":"Rename a view. Use reorder_views to change the tab order.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"},"name":{"description":"New view name.","maxLength":200,"minLength":1,"type":"string"},"viewId":{"description":"View id.","minLength":1,"type":"string"}},"required":["dashboardId","viewId","name"],"type":"object"},"name":"update_view"},{"description":"Change a widget's title, query, visualization type, configuration, data source or position. Only the fields you pass are changed.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"allowSharedAcrossAllCustomers":{"description":"Only for customer dashboards. Set true, after the user explicitly confirms, to allow a query with no per-customer filter.","type":"boolean"},"dataSourceId":{"minLength":1,"type":"string"},"layout":{"description":"Position and size on the 12-column grid. Omit on create and a free slot is chosen for you.","properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":12,"minimum":1,"type":"integer"},"x":{"maximum":11,"minimum":0,"type":"integer"},"y":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["x","y","width","height"],"type":"object"},"query":{"minLength":1,"type":"string"},"title":{"maxLength":200,"minLength":1,"type":"string"},"viewId":{"description":"View id the widget belongs to.","minLength":1,"type":"string"},"visualizationConfig":{"additionalProperties":{},"description":"Replaces the whole configuration object, so include every key you want to keep.","propertyNames":{"type":"string"},"type":"object"},"visualizationType":{"enum":["table","number","lineChart","barChart","stackedBarChart","stackedLineChart","comboChart","scatterChart","histogram","pivotTable","pieChart"],"type":"string"},"widgetId":{"description":"Widget id.","minLength":1,"type":"string"}},"required":["viewId","widgetId"],"type":"object"},"name":"update_widget"},{"description":"Audit a multi-customer dashboard and report any widget whose query would show the same rows to every customer. Run this before publishing a customer dashboard, and any time its queries change.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"dashboardId":{"description":"Dashboard id.","minLength":1,"type":"string"}},"required":["dashboardId"],"type":"object"},"name":"validate_customer_filtering"}]},"body_sha256":"8ac015286ae2d23a095e8c15e3a51fa41e057d8b6ffca279c3b9fa7a7aabc20e","prev_id":569116,"leaf":"0x90a21d74e12004e6d9c71f9d0d290f827fda1c75c50f4cfc6b3dddb7d51db87b","leaf_text":"{\"body\":\"8ac015286ae2d23a095e8c15e3a51fa41e057d8b6ffca279c3b9fa7a7aabc20e\",\"id\":770819,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793186710002284,\"prev\":569116,\"subject\":\"33eea7d3-5ebb-4400-9691-010c24e8483e\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-28","leaves":231336,"root":"0x2c19037464cc4c493624565f01775d6446fc78eaa118fc6865bfe2bfca9ff78e","chained":"0xd1d7dee8322ceff8f4c8d83aa1fe4a4466825c2af1c97dbde3d35db61234f7be","anchor_chain":"eip155:5042002","anchor_tx":"0x8bae2b1d097834c8b458513862d70d29ee807e98dc2e863b27250131c15b35ae","anchor_block":69584042},"proof":["0x90a27109c6e961683e1caa0e77134080071a244bb020a2879c18043e3a8c53c9","0x7907a45c75916cb96c0ecc687e7a1fe7c8f01b97681dba237b81112d3f5f3d06","0x6981f4be372acff5a0707fc62d8d5247888c1fb1ec16bac7592e94f3956afac8","0xfe56f4ce1e3e21f061ffef901402d5021f3848a9740220efb754deb6864074fa","0x90f0ed609e932329ff903a10903d8769f58e76c9e0c5e47ce27004d8cfbc272f","0xdde53de6a31e8716449d8ba8b8a08828957501a84a59cf18e9b9c9410fe2d0ea","0xa0c68011cc7b7483132009efdce40cde5af7b5a71f275ca93903fec01ec99df8","0x8bea3e48e90d89c111bf4acccea3ad46c0c1ef2fd4ad40e70bc7f86b54470d25","0xc5147191161a89158d2b7541579741ce7b492cb2c2da168a1410cc55ad45f518","0x3be6d3bf8ac8de369b52e18b602edd2c3ae6edd38e79ad8a2c95b0c3a169998b","0xa2130986109f7d6f254fe8168051d73759bbcf412451a788952e9a00b12f9cab","0x7b0c5cabdc5cb3b796f2c10fe1e0fe947814d67a034f0fa630e562156fb3e98c","0xdbb215681a11fa9a73d4086f7e02f913b35a590ef20bcbcc46a343cbef08a9da","0x115e196b75a0422533397227b51b9c807591ec2574919c03800bb0d253f110e8","0xe2f9c120d14f36fdddf9b4e605c5d0b8a13b835e2380472255dc22e14b93e84e","0x74cf00e07b52415c2184cf20be69d195ed2725497a6892c2f3e449497c17d0ec","0x7a743a0a09057bae687051274e1d45bf973bd36a1a4ba16a191b5d29e3bdfa2a","0xe027395fafb7fc41921c42ca0542524ea22204cbd5908b70b27f3d5fb26f5d0f"]}