{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_rh2upbfue83q","handle":"customerdashboard","url":"https://wellknown.network/agents/customerdashboard","links":{"self":"https://wellknown.network/agents/customerdashboard/record.json","html":"https://wellknown.network/agents/customerdashboard","markdown":"https://wellknown.network/agents/customerdashboard/record.md","api":"https://wellknown.network/api/v1/agents/customerdashboard","status":"https://wellknown.network/api/v1/agents/customerdashboard/status","claim":"https://wellknown.network/agents/customerdashboard/claim","claimApi":"https://wellknown.network/api/v1/claims","badge":"https://wellknown.network/agents/customerdashboard/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:app.customerdashboard.io:server:customerdashboard","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"CustomerDashboard","summary":"Build dashboards on your own data, including multi-customer views with per-customer login.","description":"Build dashboards on your own data, including multi-customer views with per-customer login.","publisher":{"name":"io.customerdashboard","url":null},"homepage":"https://customerdashboard.io","repository":null,"version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://app.customerdashboard.io/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-03T22:08:23.889709Z","publishedAt":"2026-09-03T22:08:23.889709Z","registryName":"io.customerdashboard/customerdashboard"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"data.database","name":"Databases","confidence":1,"provenance":"derived"},{"slug":"analytics.reporting","name":"Reporting & Dashboards","confidence":1,"provenance":"derived"},{"slug":"documents.spreadsheets","name":"Spreadsheets","confidence":0.569,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":0.569,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["analytics","content","data","documents","security"]},"observed":{"status":"live","statusReason":"Responded 6h ago.","lastOkAt":"2026-09-06T02:27:41.532Z","lastProbedAt":"2026-09-06T02:27:41.532Z","statusComputedAt":"2026-09-06T02:28:29.176Z","reliability30d":{"probes":1,"successRate":1,"p50Ms":21},"latestObservations":[{"at":"2026-09-06T02:27:41.532Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":21,"error":null,"detail":{"tools":[{"name":"get_platform_overview","description":"Explain what CustomerDashboard.io is, how multi-customer dashboards work, and how workspaces, dashboards, views, widgets and customers fit together. Call this f"},{"name":"list_supported_data_connectors","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 introspec"},{"name":"list_widget_types","description":"List every visualization a widget can use, with the visualizationConfig keys each type requires and accepts. Call this before creating widgets so the configurat"},{"name":"list_plans_and_limits","description":"List CustomerDashboard's subscription plans, their monthly price and the resource limits each one allows. Useful for explaining why a create operation was block"},{"name":"explain_customer_filtering","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 `c"},{"name":"get_started","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-custome"},{"name":"get_account","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 a"},{"name":"list_data_sources","description":"List every data source connected to your workspace. Connection credentials are never included."},{"name":"get_data_source","description":"Get one data source by id, including its non-secret connection settings. Credentials are never included."},{"name":"test_data_source_connection","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 "},{"name":"add_data_source","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"},{"name":"update_data_source","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 on"},{"name":"get_data_source_schema","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, "},{"name":"run_query_preview","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 "},{"name":"list_dashboards","description":"List every dashboard in your workspace, with its type, publishing state and share URL if published."},{"name":"get_dashboard","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 wa"},{"name":"create_dashboard","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 n"},{"name":"update_dashboard","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. "},{"name":"list_views","description":"List the views (tabs) on a dashboard, in display order, with how many widgets each one holds."},{"name":"create_view","description":"Add a view (tab) to a dashboard. New views are appended after the existing ones. Subject to your plan's view limit."},{"name":"update_view","description":"Rename a view. Use reorder_views to change the tab order."},{"name":"reorder_views","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."},{"name":"list_widgets","description":"List the widgets on a view, including each widget's query and visualization configuration."},{"name":"create_widget","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 return"},{"name":"update_widget","description":"Change a widget's title, query, visualization type, configuration, data source or position. Only the fields you pass are changed."},{"name":"set_widget_layout","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."},{"name":"list_customers","description":"List the customers on a multi-customer dashboard, each with the customerId their data is filtered by and how many logins they have."},{"name":"add_customer","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 wh"},{"name":"update_customer","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 wit"},{"name":"add_customer_user","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 "},{"name":"validate_customer_filtering","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, "},{"name":"set_dashboard_theme","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 ev"},{"name":"set_dashboard_formatting","description":"Set the default locale and number, currency, percentage, duration, date and datetime formatting for a dashboard. Individual widgets can still override these."},{"name":"publish_dashboard","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 dash"},{"name":"unpublish_dashboard","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 untouc"},{"name":"get_dashboard_share_url","description":"Get the public URL of a published dashboard, and who can open it. Returns nothing to share if the dashboard is still private."},{"name":"delete_dashboard","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 pl"},{"name":"delete_view","description":"Permanently delete a view and every widget on it. Calling this without confirm returns a preview. This cannot be undone."},{"name":"delete_widget","description":"Permanently delete a widget. Calling this without confirm returns a preview. This cannot be undone."},{"name":"delete_data_source","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 databas"},{"name":"delete_customer","description":"Permanently remove a customer from a multi-customer dashboard, along with all of their logins. They lose access immediately. Calling this without confirm return"},{"name":"delete_customer_user","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 acc"}],"toolCount":42,"serverName":"customerdashboard","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_platform_overview","description":"Explain what CustomerDashboard.io is, how multi-customer dashboards work, and how workspaces, dashboards, views, widgets and customers fit together. Call this f"},{"name":"list_supported_data_connectors","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 introspec"},{"name":"list_widget_types","description":"List every visualization a widget can use, with the visualizationConfig keys each type requires and accepts. Call this before creating widgets so the configurat"},{"name":"list_plans_and_limits","description":"List CustomerDashboard's subscription plans, their monthly price and the resource limits each one allows. Useful for explaining why a create operation was block"},{"name":"explain_customer_filtering","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 `c"},{"name":"get_started","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-custome"},{"name":"get_account","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 a"},{"name":"list_data_sources","description":"List every data source connected to your workspace. Connection credentials are never included."},{"name":"get_data_source","description":"Get one data source by id, including its non-secret connection settings. Credentials are never included."},{"name":"test_data_source_connection","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 "},{"name":"add_data_source","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"},{"name":"update_data_source","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 on"},{"name":"get_data_source_schema","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, "},{"name":"run_query_preview","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 "},{"name":"list_dashboards","description":"List every dashboard in your workspace, with its type, publishing state and share URL if published."},{"name":"get_dashboard","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 wa"},{"name":"create_dashboard","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 n"},{"name":"update_dashboard","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. "},{"name":"list_views","description":"List the views (tabs) on a dashboard, in display order, with how many widgets each one holds."},{"name":"create_view","description":"Add a view (tab) to a dashboard. New views are appended after the existing ones. Subject to your plan's view limit."},{"name":"update_view","description":"Rename a view. Use reorder_views to change the tab order."},{"name":"reorder_views","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."},{"name":"list_widgets","description":"List the widgets on a view, including each widget's query and visualization configuration."},{"name":"create_widget","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 return"},{"name":"update_widget","description":"Change a widget's title, query, visualization type, configuration, data source or position. Only the fields you pass are changed."},{"name":"set_widget_layout","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."},{"name":"list_customers","description":"List the customers on a multi-customer dashboard, each with the customerId their data is filtered by and how many logins they have."},{"name":"add_customer","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 wh"},{"name":"update_customer","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 wit"},{"name":"add_customer_user","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 "},{"name":"validate_customer_filtering","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, "},{"name":"set_dashboard_theme","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 ev"},{"name":"set_dashboard_formatting","description":"Set the default locale and number, currency, percentage, duration, date and datetime formatting for a dashboard. Individual widgets can still override these."},{"name":"publish_dashboard","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 dash"},{"name":"unpublish_dashboard","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 untouc"},{"name":"get_dashboard_share_url","description":"Get the public URL of a published dashboard, and who can open it. Returns nothing to share if the dashboard is still private."},{"name":"delete_dashboard","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 pl"},{"name":"delete_view","description":"Permanently delete a view and every widget on it. Calling this without confirm returns a preview. This cannot be undone."},{"name":"delete_widget","description":"Permanently delete a widget. Calling this without confirm returns a preview. This cannot be undone."},{"name":"delete_data_source","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 databas"},{"name":"delete_customer","description":"Permanently remove a customer from a multi-customer dashboard, along with all of their logins. They lose access immediately. Calling this without confirm return"},{"name":"delete_customer_user","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 acc"}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.customerdashboard/customerdashboard","url":"https://registry.modelcontextprotocol.io/v0/servers/io.customerdashboard%2Fcustomerdashboard","firstSeenAt":"2026-09-06T00:20:36.798Z","fetchedAt":"2026-09-06T00:20:36.798Z","normalizedAt":"2026-09-06T00:20:36.798Z"}]},"firstSeenAt":"2026-09-06T00:20:36.798Z","updatedAt":"2026-09-06T02:28:36.591Z"}