CustomerDashboard
What this MCP does
Connects databases and spreadsheets to create charts, tables, and KPI dashboards, including customer-specific login-gated views and data filtering.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'name', 'customerId'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Display name for this customer, for your own reference.'}, 'customerId': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'The identifier for this customer in your own data, for example the value in your orders.customer_id column. Must match exactly.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': "A dashboard of type 'customer'."}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'customerRecordId', 'email'], 'properties': {'email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "The person's email address. Must be unique on this dashboard."}, 'password': {'type': 'string', 'maxLength': 200, 'minLength': 4, 'description': 'Leave empty to have a strong password generated.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'customerRecordId': {'type': 'string', 'minLength': 1, 'description': "The customer's id from list_customers."}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'type', 'config'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'A name for this connection, shown in the dashboard editor.'}, 'type': {'enum': ['postgres', 'mysql', 'mssql', 'oracle', 'aurora', 'redshift', 'bigquery', 'snowflake', 'googleSheets', 'api', 'custom'], 'type': 'string', 'description': 'Connector type. Call list_supported_data_connectors for the settings each one expects.'}, 'config': {'type': 'object', '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'}, 'additionalProperties': {}}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Dashboard name.'}, 'type': {'enum': ['internal', 'customer'], 'type': 'string', 'description': "'customer' for a per-customer, login-gated dashboard; 'internal' for a single shared dashboard. Defaults to 'internal'. This cannot be changed later."}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'View name, shown on the tab.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['viewId', 'dataSourceId', 'title', 'query', 'visualizationType'], 'properties': {'query': {'type': 'string', 'minLength': 1, 'description': 'SQL, or an A1 range for Google Sheets. On a customer dashboard include :customer_id, for example "WHERE customer_id = :customer_id".'}, 'title': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Widget title.'}, 'layout': {'type': 'object', 'required': ['x', 'y', 'width', 'height'], 'properties': {'x': {'type': 'integer', 'maximum': 11, 'minimum': 0}, 'y': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'integer', 'maximum': 12, 'minimum': 1}, 'height': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}}, 'description': 'Position and size on the 12-column grid. Omit on create and a free slot is chosen for you.'}, 'viewId': {'type': 'string', 'minLength': 1, 'description': 'View id the widget belongs to.'}, 'dataSourceId': {'type': 'string', 'minLength': 1, 'description': 'Data source the query runs against.'}, 'visualizationType': {'enum': ['table', 'number', 'lineChart', 'barChart', 'stackedBarChart', 'stackedLineChart', 'comboChart', 'scatterChart', 'histogram', 'pivotTable', 'pieChart'], 'type': 'string'}, 'visualizationConfig': {'type': 'object', 'description': 'Field mappings and display options for this visualization type. Call list_widget_types for the keys each type expects.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'allowSharedAcrossAllCustomers': {'type': 'boolean', '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.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'customerRecordId'], 'properties': {'confirm': {'type': 'boolean', '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.'}, 'confirmName': {'type': 'string', 'description': 'The exact current name of the item being deleted, copied from the preview. Required alongside confirm.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'customerRecordId': {'type': 'string', 'minLength': 1, 'description': "The customer's id from list_customers."}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'customerRecordId', 'userId'], 'properties': {'userId': {'type': 'string', 'minLength': 1, 'description': "The login's id."}, 'confirm': {'type': 'boolean', '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.'}, 'confirmName': {'type': 'string', 'description': 'The exact current name of the item being deleted, copied from the preview. Required alongside confirm.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'customerRecordId': {'type': 'string', 'minLength': 1, 'description': "The customer's id from list_customers."}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'confirm': {'type': 'boolean', '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.'}, 'confirmName': {'type': 'string', 'description': 'The exact current name of the item being deleted, copied from the preview. Required alongside confirm.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dataSourceId'], 'properties': {'confirm': {'type': 'boolean', '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.'}, 'confirmName': {'type': 'string', 'description': 'The exact current name of the item being deleted, copied from the preview. Required alongside confirm.'}, 'dataSourceId': {'type': 'string', 'minLength': 1, 'description': 'Data source id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'viewId'], 'properties': {'viewId': {'type': 'string', 'minLength': 1, 'description': 'View id.'}, 'confirm': {'type': 'boolean', '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.'}, 'confirmName': {'type': 'string', 'description': 'The exact current name of the item being deleted, copied from the preview. Required alongside confirm.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['viewId', 'widgetId'], 'properties': {'viewId': {'type': 'string', 'minLength': 1, 'description': 'View id.'}, 'confirm': {'type': 'boolean', '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.'}, 'widgetId': {'type': 'string', 'minLength': 1, 'description': 'Widget id.'}, 'confirmName': {'type': 'string', 'description': 'The exact current name of the item being deleted, copied from the preview. Required alongside confirm.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'includeWidgets': {'type': 'boolean', 'description': 'Include every widget on every view. Defaults to true.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dataSourceId'], 'properties': {'dataSourceId': {'type': 'string', 'minLength': 1, 'description': 'Data source id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dataSourceId'], 'properties': {'table': {'type': 'string', 'description': 'Return only this table. Useful when a database has many tables.'}, 'dataSourceId': {'type': 'string', 'minLength': 1, 'description': 'Data source id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'includeUsers': {'type': 'boolean', 'description': "Include each customer's login email addresses."}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['viewId'], 'properties': {'viewId': {'type': 'string', 'minLength': 1, 'description': 'View id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'access': {'enum': ['public', 'protected'], 'type': 'string', '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'."}, 'password': {'type': 'string', 'maxLength': 200, 'minLength': 4, 'description': "Shared password, for 'protected' access. Leave empty to have one generated and returned once."}, 'username': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': "Shared username, for 'protected' access."}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'viewIds'], 'properties': {'viewIds': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1, 'description': 'Every view id on this dashboard, in the order you want.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dataSourceId', 'query'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Rows to return. Defaults to 25.'}, 'query': {'type': 'string', 'minLength': 1, 'description': "The SQL to run, or an A1 range for Google Sheets. Use :customer_id where a customer's own identifier belongs."}, 'customerId': {'type': 'string', '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.'}, 'dashboardId': {'type': 'string', 'description': 'A customer dashboard whose configured test customer should be used instead of a real customer. Only needed when the query uses :customer_id.'}, 'dataSourceId': {'type': 'string', 'minLength': 1, 'description': 'Data source id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'date': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'locale': {'type': 'string', 'maxLength': 20, 'description': 'BCP 47 locale such as en-US, en-GB or de-DE.'}, 'number': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'currency': {'type': 'object', 'description': 'For example { "currency": "USD", "decimals": 2 }.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'datetime': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'duration': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'percentage': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'nullDisplay': {'type': 'string', 'maxLength': 20, 'description': 'What to show for an empty value, for example a dash.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'backgroundColor', 'surfaceColor', 'primaryTextColor', 'secondaryTextColor', 'primaryBrandColor'], 'properties': {'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'surfaceColor': {'type': 'string', 'pattern': '^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$', 'description': 'Background of each widget card.'}, 'backgroundColor': {'type': 'string', 'pattern': '^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$', 'description': 'Page background.'}, 'primaryTextColor': {'type': 'string', 'pattern': '^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$', 'description': 'Main text.'}, 'chartSeriesColors': {'type': 'array', 'items': {'type': 'string', 'pattern': '^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$'}, 'maxItems': 20, 'description': 'Explicit chart series palette. Leave empty to derive one from the brand colours.'}, 'primaryBrandColor': {'type': 'string', 'pattern': '^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$', 'description': 'Main accent, used as the first chart series colour.'}, 'secondaryTextColor': {'type': 'string', 'pattern': '^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$', 'description': 'Muted and secondary text.'}, 'secondaryBrandColor': {'type': 'string', 'pattern': '^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$', 'description': 'Secondary accent, used for the second chart series.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['viewId', 'layouts'], 'properties': {'viewId': {'type': 'string', 'minLength': 1, 'description': 'View id.'}, 'layouts': {'type': 'array', 'items': {'type': 'object', 'required': ['widgetId', 'layout'], 'properties': {'layout': {'type': 'object', 'required': ['x', 'y', 'width', 'height'], 'properties': {'x': {'type': 'integer', 'maximum': 11, 'minimum': 0}, 'y': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'integer', 'maximum': 12, 'minimum': 1}, 'height': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}}, 'description': 'Position and size on the 12-column grid. Omit on create and a free slot is chosen for you.'}, 'widgetId': {'type': 'string', 'minLength': 1}}}, 'minItems': 1, 'description': 'The widgets to move, with their new positions.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'type': {'enum': ['postgres', 'mysql', 'mssql', 'oracle', 'aurora', 'redshift', 'bigquery', 'snowflake', 'googleSheets', 'api', 'custom'], 'type': 'string', 'description': 'Connector type. Call list_supported_data_connectors for the settings each one expects.'}, 'config': {'type': 'object', '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'}, 'additionalProperties': {}}, 'dataSourceId': {'type': 'string', 'minLength': 1, 'description': 'Test a saved data source. Omit to test new settings.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'customerRecordId'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'customerId': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'New identifier from your own data. This changes which rows this customer can see.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'customerRecordId': {'type': 'string', 'minLength': 1, 'description': "The customer's id from list_customers (not their customerId)."}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}, 'testCustomerId': {'anyOf': [{'type': 'string', 'maxLength': 200, 'minLength': 1}, {'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': [{'type': 'integer', 'maximum': 86400, 'minimum': 0}, {'type': 'null'}], 'description': 'Seconds each view is shown before rotating to the next, for wall displays. 0 or null turns rotation off.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dataSourceId'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'config': {'type': 'object', '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'}, 'additionalProperties': {}}, 'dataSourceId': {'type': 'string', 'minLength': 1, 'description': 'Data source id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId', 'viewId', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'New view name.'}, 'viewId': {'type': 'string', 'minLength': 1, 'description': 'View id.'}, 'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['viewId', 'widgetId'], 'properties': {'query': {'type': 'string', 'minLength': 1}, 'title': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'layout': {'type': 'object', 'required': ['x', 'y', 'width', 'height'], 'properties': {'x': {'type': 'integer', 'maximum': 11, 'minimum': 0}, 'y': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'width': {'type': 'integer', 'maximum': 12, 'minimum': 1}, 'height': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}}, 'description': 'Position and size on the 12-column grid. Omit on create and a free slot is chosen for you.'}, 'viewId': {'type': 'string', 'minLength': 1, 'description': 'View id the widget belongs to.'}, 'widgetId': {'type': 'string', 'minLength': 1, 'description': 'Widget id.'}, 'dataSourceId': {'type': 'string', 'minLength': 1}, 'visualizationType': {'enum': ['table', 'number', 'lineChart', 'barChart', 'stackedBarChart', 'stackedLineChart', 'comboChart', 'scatterChart', 'histogram', 'pivotTable', 'pieChart'], 'type': 'string'}, 'visualizationConfig': {'type': 'object', 'description': 'Replaces the whole configuration object, so include every key you want to keep.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'allowSharedAcrossAllCustomers': {'type': 'boolean', 'description': 'Only for customer dashboards. Set true, after the user explicitly confirms, to allow a query with no per-customer filter.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dashboardId'], 'properties': {'dashboardId': {'type': 'string', 'minLength': 1, 'description': 'Dashboard id.'}}}
Recent tool changes
Similar MCP servers
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Stratalize Healthcare
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Governance
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Oracle
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Intelligence
Provides vendor, market, SaaS, workforce, government contract, public company, regulatory, competitive, and AI-brand intelligence…
Stratalize Real Estate
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…