{"id":569116,"recorded_at":"2026-10-27T22:13:50.574784Z","observed_at":"2026-10-27T22:13:50.574629Z","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-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":"eb9ccb534911f49eccbe7232f89700a9f2b0ca1e95beb0732ec4827e9dd29fae","prev_id":null,"leaf":"0x339bdb358ea6864c96356c4d4394c734fd4085ba46ce95e6e79ec6cee1b9686b","leaf_text":"{\"body\":\"eb9ccb534911f49eccbe7232f89700a9f2b0ca1e95beb0732ec4827e9dd29fae\",\"id\":569116,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793139230574629,\"prev\":null,\"subject\":\"33eea7d3-5ebb-4400-9691-010c24e8483e\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-27","leaves":273461,"root":"0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795","chained":"0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4","anchor_chain":"eip155:5042002","anchor_tx":"0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4","anchor_block":69414147},"proof":["0x339bf0ff4efd800fcb944f405e4d56d5df2c1bde493d2221bbb56c4953a630eb","0x9fd81d6a7e0c6418702f6f27bc8fab3b3396743b1e7f7c4a662cb64dcc1a0f40","0x42a03d97589cd781b5a8e92074aa9ba2d6df452384ff966fe21af7a423c29559","0x5a0f8ba1edcea6b43a856f3b583c0ab0ccf2acb90e4807ea27e228688632c0e9","0xe0aeded570c1af9d29e23484d371fbedcc88344139a01346a6d9bdd60a3ee464","0xdae94c325632f1f0cb77904409b8b9ad94987609aeef6d5274d8744c5a34dcc9","0xc9450f46558e3812fc667307de64e170056853375134224d8ee9eac38becffd5","0xf54d2f19c6b5ef7af9e6c23af2ce71958eb8ce823dd28a6622a1186a040ed62a","0x890d368e159dfaf98a372b7a60ff48efad3aa1dcaa72bebc2d79d35b1a121c62","0xd3d883096cdd7470c18531d6293de9f98b9dba0495d9526f5561d7be24a87926","0xcb89a70f40d4a54e11019bbf6ca92907e89dd0bd1af2c3499464c58d9b463f5a","0x7c26e7a3f70416cc7cabc8e770eba81b50b410fc94aaae40ac450b47b34edecc","0x5a83a2d5b2abb340c16172caf3ef83b831e168d2e94e4154a4ad72adcac5cad2","0x595de2dea3b8fa56dbd6142dd78ae79f3e7169c631e41a844b100613abb3e430","0x8360ee1105e4d9f9312067cbbfd47c69c5948665ae582b9684a580c8f4e199e1","0x52efa60e0c3d8525486d2310eb3b6b566c9677c64fd1f819edb072cf101bcbdb","0x22c1fb9487ee0b9732fa017a0cc321eb27a60c08450d112f755089796e12cb1c","0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585","0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699"]}