preset-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PRESET_API_TOKEN | Yes | Preset API token (required) | |
| PRESET_WORKSPACE | No | Auto-connect to this workspace | |
| PRESET_API_SECRET | Yes | Preset API secret (required) | |
| PRESET_MCP_LOG_LEVEL | No | Logging verbosity | INFO |
| PRESET_MCP_SQL_ROW_LIMIT | No | Max rows from SQL queries | 1000 |
| PRESET_MCP_SQL_SAMPLE_ROWS | No | Rows shown in standard mode | 5 |
| PRESET_MCP_TRUNCATION_TAIL | No | Tail rows kept when truncating | 5 |
| PRESET_MCP_TRUNCATION_THRESHOLD | No | Full-mode truncation cutoff | 50 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tasks | {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
} |
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_workspacesA | List all Preset workspaces you have access to. Call this FIRST to discover workspace titles, then pass one to use_workspace. |
| use_workspaceA | Switch to a different Preset workspace by its exact title. You must call this before any read/write tools if PRESET_WORKSPACE was not set at startup. Use list_workspaces to discover titles. Args: workspace_title: Exact workspace title (e.g. "Mysten Labs--General") |
| list_dashboardsA | List dashboards in the current workspace. Start here to discover dashboard IDs, then use get_dashboard for detail on a specific one. Args: response_mode: 'compact' (id+title), 'standard' (key fields), or 'full' (raw API response). Default: standard. name_contains: Case-insensitive substring filter on dashboard_title. |
| get_dashboardA | Get detail for a single dashboard. Use list_dashboards first to find valid IDs. Use response_mode to control verbosity — dashboards can contain large position_json and json_metadata blobs. Args: dashboard_id: Numeric dashboard ID response_mode: 'compact' (id+title), 'standard' (key fields, no position_json), or 'full' (raw API response). Default: full. |
| get_chartA | Get detail for a single chart including params and query context. Returns the chart's visualization type, parameters, query_context, datasource info, and other metadata. Use list_charts first to find valid IDs. Args: chart_id: Numeric chart ID response_mode: 'compact' (id+name+viz_type), 'standard' (key fields), or 'full' (raw API response). Default: full. |
| get_datasetA | Get detail for a single dataset including columns, metrics, and SQL. Use list_datasets first to find valid IDs. Set refresh_columns=True to query the source database for current column metadata (useful when the underlying table schema has changed). Args: dataset_id: Numeric dataset ID response_mode: 'compact' (id+name+schema), 'standard' (columns, metrics, sql), or 'full' (raw API response). Default: full. refresh_columns: If True, also fetch live column metadata from the source database and include as 'external_columns'. |
| get_databaseA | Get detail for a single database connection. Use list_databases first to find valid IDs. Args: database_id: Numeric database ID response_mode: 'compact' (id+name+backend), 'standard' (key fields), or 'full' (raw API response). Default: full. |
| list_chartsA | List charts in the current workspace. Use this to find chart IDs and see which viz types are in use. Args: response_mode: 'compact', 'standard', or 'full'. Default: standard. name_contains: Case-insensitive substring filter on slice_name. viz_type: Exact-match filter on viz_type (e.g. "echarts_timeseries_bar"). dataset_id: Filter to charts using this datasource_id. |
| list_datasetsA | List datasets (virtual tables) in the current workspace. Datasets are the data sources for charts. Use list_databases to find connection IDs needed for creating new datasets. Args: response_mode: 'compact', 'standard', or 'full'. Default: standard. name_contains: Case-insensitive substring filter on table_name. schema: Server-side exact-match filter on schema name. database_id: Server-side filter to datasets in this database. |
| list_databasesA | List database connections in the current workspace. Call this BEFORE run_sql or create_dataset to find a valid database_id. Args: response_mode: 'compact', 'standard', or 'full'. Default: standard. name_contains: Case-insensitive substring filter on database_name. |
| workspace_catalogA | Build a relationship-aware catalog of the current workspace. Returns databases, datasets, charts, and dashboards with their dependency links (dataset→database, chart→dataset). Use this to understand workspace topology BEFORE creating or updating resources. Much cheaper on tokens than snapshot_workspace — returns only the fields needed for navigation. |
| run_sqlA | Execute a read-only SQL query through a Preset database connection. This is a debugging/verification tool — use it to confirm a query works through Preset's connection before creating a dataset. For primary SQL exploration, prefer your Snowflake MCP (igloo-mcp). Only SELECT, SHOW, DESCRIBE, and EXPLAIN are permitted. Write operations and multi-statement queries are blocked. Args: sql: SQL query to execute (read-only, single statement) database_id: Database connection ID — use list_databases to find it schema: Optional schema name limit: Max rows to return (default 1000) response_mode: 'compact' (columns only), 'standard' (5 sample rows), or 'full' (all rows with smart truncation). Default: standard. |
| query_datasetA | Query a dataset using Superset's metric/dimension abstraction. This executes the same query path that charts use — aggregating metrics over dimension columns — without needing raw SQL. Use get_dataset to discover available metrics and columns first. For time-series queries, set time_column plus start/end (ISO-8601) and optionally granularity (e.g. "P1D", "P1W"). Args: dataset_id: ID of the dataset to query metrics: Metric names to aggregate (e.g. ["count", "revenue"]) columns: Dimension columns to group by time_column: Time column for time-filtered or time-series queries start: Start date/time in ISO-8601 format (e.g. "2025-01-01") end: End date/time in ISO-8601 format (e.g. "2025-06-01") granularity: Time grain (e.g. "P1D", "P1W", "P1M") where: SQL WHERE clause fragment for filtering having: SQL HAVING clause fragment for post-aggregation filtering order_by: Columns or metrics to order by order_desc: If True, sort descending (default: True) row_limit: Max rows to return (default: 10000) force: If True, bypass query cache response_mode: 'compact' (columns only), 'standard' (sample rows), or 'full' (all rows). Default: standard. |
| describe_dashboardA | Return a normalized dashboard summary in one call. Provides dashboard metadata, markdown blocks, chart inventory, unique dataset inventory, and optional source-table lineage — without requiring multiple follow-up tool calls. Args: dashboard_id: Numeric dashboard ID (or use get_dashboard to find it) include_lineage: Parse dataset SQL to extract upstream source tables include_sql: Include raw SQL for each virtual dataset response_mode: 'compact' (counts only), 'standard' (inventory), or 'full' (all detail + lineage + warnings). Default: standard. |
| validate_chartA | Run chart query validation and return render status. This validates the saved chart params against chart-data execution, returning actionable errors for missing metrics/columns/etc. Notes:
Args: chart_id: Chart ID to validate dashboard_id: Optional dashboard context for form_data lookup row_limit: Query row limit used for validation force: Whether to force recomputation (if supported by backend) response_mode: 'compact' (small summary), 'standard' (default), or 'full' (raw payload + metadata) |
| validate_dashboardB | Validate all charts on a dashboard and return aggregate statuses. |
| validate_chart_renderC | Validate chart rendering with a headless browser (frontend-level probe). |
| validate_dashboard_renderC | Validate frontend render status for all charts on a dashboard. |
| verify_chart_workflowC | Run end-to-end checks for chart query/render and optional dashboard context. |
| verify_dashboard_structureC | Validate dashboard layout graph integrity and chart reference health. |
| verify_dashboard_workflowC | Run structure + query + optional render verification for a dashboard. |
| capture_dashboard_templateC | Capture a reusable dashboard+chart template from an existing dashboard. |
| capture_golden_templatesC | Capture templates from one or more dashboards into a local folder. |
| create_dashboardA | Create a new, empty dashboard. After creating, use create_chart with the dashboards parameter to add charts, or use update_dashboard to change properties. Args: dashboard_title: Display title for the dashboard published: Whether the dashboard is published (default: False) dry_run: If True, validate inputs and return a preview without making any changes (default: False) |
| create_datasetA | Create a virtual (SQL-based) dataset for charting. This is the main entry point from analytics into visualization. Take a validated SQL query (e.g. from igloo-mcp) and register it as a Preset dataset. Use list_databases to find database_id. Write SQL (INSERT, DROP, etc.) is blocked — only SELECT-style queries are permitted as dataset definitions. Args: name: Display name for the dataset sql: SQL query defining the dataset database_id: Database connection ID schema: Optional schema name dry_run: If True, validate inputs and return a preview without making any changes (default: False) |
| create_chartA | Create a chart from an existing dataset. Recommended workflow: create_dataset → create_chart (with dashboards param to attach it). Use list_datasets to find dataset_id and list_dashboards to find dashboard IDs. Args: dataset_id: ID of the dataset to visualize title: Chart title viz_type: Visualization type (e.g. "echarts_timeseries_bar", "pie", "big_number_total", "table") metrics: Metric names or ad-hoc metric objects groupby: Columns to group by time_column: Time column for time-series charts template: Defaulting strategy for missing chart fields ('auto' or 'minimal') params_json: Optional JSON object to merge into chart params dashboards: Dashboard IDs to attach this chart to validate_after_create: Run chart-data validation after create repair_dashboard_refs: Attempt to repair stale dashboard chart references when dashboards are provided. Defaults to False so create_chart does not mutate dashboard layouts unless explicitly requested. dry_run: If True, validate inputs and return a preview without making any changes (default: False) |
| update_datasetA | Update an existing dataset's SQL, name, or description. Use list_datasets to find the dataset_id. After updating the SQL, any charts built on this dataset will reflect the new data on their next refresh. Args: dataset_id: ID of the dataset to update sql: New SQL query (replaces existing) name: New display name description: New description override_columns: If True, refresh column metadata from the new SQL (recommended when changing SQL) dry_run: If True, validate inputs, capture current state, and check dependencies without making any changes (default: False) |
| update_chartA | Update an existing chart's title, viz type, or parameters. Use list_charts to find the chart_id. Pass params_json as a JSON string to override visualization parameters (metrics, groupby, filters, etc.). params_json uses strict semantics: when provided, it is treated as a full chart params payload for validation. For viz types with required fields (for example pie/timeseries), include those fields in the payload instead of sending partial patches. Args: chart_id: ID of the chart to update title: New chart title viz_type: New visualization type params_json: JSON string of chart parameters (advanced — use get_chart to inspect existing chart params first). Strict semantics: provide a complete params payload compatible with the chart viz type. dashboards: Reassign chart to these dashboard IDs validate_after_update: Run chart-data validation after update dry_run: If True, validate inputs, capture current state, and return a preview without making any changes (default: False) |
| update_dashboardA | Update an existing dashboard's properties. Use list_dashboards to find the dashboard_id. Use get_dashboard to inspect the current position_json and json_metadata. Args: dashboard_id: ID of the dashboard to update dashboard_title: New dashboard title published: Set to True to publish, False to unpublish position_json: JSON object (or JSON string) defining the dashboard layout (chart containers, rows, grid). Use this to add, remove, or rearrange chart containers — e.g. after deleting charts whose containers remain as orphaned placeholders. json_metadata: JSON object (or JSON string) with dashboard metadata (cross-filter config, color schemes, label colors, refresh settings). Update this alongside position_json to keep chart references in sync. allow_empty_layout: If True, allow updates that remove all chart containers from the layout tree (default: False). dry_run: If True, validate inputs, capture current state, and return a preview without making any changes (default: False) |
| repair_dashboard_chart_refsA | Repair stale chart IDs in a dashboard's layout metadata. This tool syncs Args: dashboard_id: Dashboard ID to repair strategy: 'replace_by_name' (default) maps stale chart IDs to currently attached charts with matching names; or 'remove_orphans' to drop stale references only. dry_run: If True, preview detected changes without updating. |
| repair_dashboard_layout_duplicatesC | Remove duplicate chart placements from a dashboard layout. |
| snapshot_workspaceA | Capture a full inventory of the current workspace. Returns counts and complete lists of dashboards, charts, datasets, and databases. Heavier than workspace_catalog — use catalog for navigation, snapshot for full audit. |
| list_mutationsA | List recent local mutation-journal entries for incident debugging. |
| list_dashboard_snapshotsC | List locally saved dashboard snapshots captured before mutations. |
| restore_dashboard_snapshotC | Restore dashboard layout/settings from a local snapshot JSON file. |
| export_dashboardB | Export a dashboard ZIP bundle for backup or migration. |
| import_dashboardC | Import a dashboard ZIP bundle and report the affected dashboard IDs. |
| delete_dashboardC | Delete a dashboard after exporting a full backup. |
| list_saved_queriesA | List saved SQL queries in the current workspace. Saved queries are reusable SQL snippets stored in SQL Lab. Use this to discover query IDs, then pass one to get_saved_query for full detail. Args: response_mode: 'compact' (id+label), 'standard' (key fields), or 'full' (raw API response). Default: standard. name_contains: Case-insensitive substring filter on the query label. |
| get_saved_queryA | Get detail for a single saved query. Args: query_id: The saved query ID. response_mode: 'compact', 'standard', or 'full'. |
| create_saved_queryA | Create a new saved SQL query in SQL Lab. Saved queries persist reusable SQL snippets associated with a database. Args: label: Name / label for the saved query. sql: The SQL text to save. database_id: ID of the database this query targets. schema: Optional schema context (e.g. 'public'). description: Optional description of the query. dry_run: If True, preview the action without executing. |
| update_saved_queryB | Update an existing saved query. Args: query_id: The saved query ID to update. label: New label (name) for the query. sql: New SQL text. description: New description. schema: New schema context. dry_run: If True, preview the action without executing. |
| delete_saved_queryA | Delete a saved query. Args: query_id: The saved query ID to delete. dry_run: If True, preview the action without executing. |
| list_css_templatesA | List CSS templates in the current workspace. CSS templates define reusable dashboard styling. Use this to discover template IDs, then pass one to get_css_template for full detail. Args: response_mode: 'compact' (id+name), 'standard' (key fields), or 'full' (raw API response). Default: standard. name_contains: Case-insensitive substring filter on template_name. |
| get_css_templateA | Get detail for a single CSS template. Args: template_id: The CSS template ID. response_mode: 'compact', 'standard', or 'full'. |
| create_css_templateA | Create a new CSS template for dashboard styling. Args: template_name: Name for the CSS template. css: The CSS stylesheet text. dry_run: If True, preview the action without executing. |
| update_css_templateA | Update an existing CSS template. Args: template_id: The CSS template ID to update. template_name: New name for the template. css: New CSS stylesheet text. dry_run: If True, preview the action without executing. |
| delete_css_templateA | Delete a CSS template. Args: template_id: The CSS template ID to delete. dry_run: If True, preview the action without executing. |
| list_annotation_layersB | List annotation layers in the current workspace. Annotation layers let you overlay time-based markers on charts (e.g. deploys, incidents). Use this to discover layer IDs. Args: response_mode: 'compact' (id+name), 'standard' (key fields), or 'full' (raw API response). Default: standard. name_contains: Case-insensitive substring filter on layer name. |
| get_annotation_layerB | Get detail for a single annotation layer including its annotations. Args: layer_id: The annotation layer ID. response_mode: 'compact', 'standard', or 'full'. |
| create_annotation_layerA | Create a new annotation layer. Annotation layers group time-based annotations that can be overlaid on time-series charts. After creating a layer, use create_annotation to add individual annotations. Args: name: Name for the annotation layer. descr: Optional description. dry_run: If True, preview the action without executing. |
| update_annotation_layerB | Update an existing annotation layer. Args: layer_id: The annotation layer ID to update. name: New name for the layer. descr: New description. dry_run: If True, preview the action without executing. |
| delete_annotation_layerA | Delete an annotation layer and all its annotations. Args: layer_id: The annotation layer ID to delete. dry_run: If True, preview the action without executing. |
| create_annotationA | Add an annotation to an existing annotation layer. Annotations are time-based markers that overlay on time-series charts. Use list_annotation_layers or get_annotation_layer to find layer IDs. Args: layer_id: The annotation layer ID to add this annotation to. short_descr: Short description (label) shown on the chart overlay. start_dttm: Start datetime in ISO 8601 format (e.g. '2024-01-15T00:00:00'). end_dttm: End datetime in ISO 8601 format (e.g. '2024-01-16T00:00:00'). long_descr: Optional longer description with details. dry_run: If True, preview the action without executing. |
| delete_annotationA | Delete a specific annotation from an annotation layer. Args: layer_id: The annotation layer ID. annotation_id: The annotation ID to delete. dry_run: If True, preview the action without executing. |
| get_async_query_resultA | Fetch results of an async SQL query by its query ID (key). When SQL Lab runs a query asynchronously, it returns a query ID (also called a 'key'). Use this tool to poll for and retrieve the results once the query completes. Args: query_id: The query ID / key returned by an async SQL Lab query. |
| get_embedded_dashboardB | Get the embedded configuration for a dashboard. Returns the embedding UUID and allowed domains if embedding is enabled, or indicates that embedding is not configured. Args: dashboard_id: The dashboard ID. |
| enable_embedded_dashboardA | Enable embedding for a dashboard and return its embed UUID. The returned UUID is used to embed the dashboard in external applications via the Superset embedded SDK. Args: dashboard_id: The dashboard ID to enable embedding for. allowed_domains: List of domains allowed to embed (e.g. '["app.example.com"]'). Pass an empty list to allow all origins. dry_run: If True, preview the action without executing. |
| disable_embedded_dashboardA | Disable embedding for a dashboard. This revokes the embed UUID and prevents the dashboard from being embedded in external applications. Args: dashboard_id: The dashboard ID to disable embedding for. dry_run: If True, preview the action without executing. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Evan-Kim2028/preset-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server