update_visualization
Update an existing visualization by specifying its ID and optionally changing its type, name, description, or configuration options.
Instructions
Update an existing visualization
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| visualizationId | Yes | ID of the visualization to update | |
| type | No | Type of visualization. Available types depend on your Redash instance. | |
| name | No | Name of the visualization | |
| description | No | Description of the visualization | |
| options | No | Visualization-specific configuration. The structure depends on your Redash instance and visualization type. Use get_visualization to see the current configuration before updating. |
Implementation Reference
- src/redashClient.ts:65-70 (schema)TypeScript interface defining the request body shape for updating a visualization. All fields are optional since it's a partial update.
export interface UpdateVisualizationRequest { type?: string; name?: string; description?: string; options?: any; } - src/index.ts:556-581 (handler)Main handler function for the update_visualization MCP tool. Extracts visualizationId from params, delegates to redashClient.updateVisualization, and returns the result as JSON text content.
async function updateVisualization(params: z.infer<typeof updateVisualizationSchema>) { try { const { visualizationId, ...updateData } = params; const result = await redashClient.updateVisualization(visualizationId, updateData); return { content: [ { type: "text", text: JSON.stringify(result, null, 2) } ] }; } catch (error) { console.error(`Error updating visualization ${params.visualizationId}:`, error); return { isError: true, content: [ { type: "text", text: `Error updating visualization ${params.visualizationId}: ${error instanceof Error ? error.message : String(error)}` } ] }; } } - src/index.ts:548-554 (schema)Zod schema defining and validating the input parameters for the update_visualization tool. Requires visualizationId; type, name, description, and options are optional.
const updateVisualizationSchema = z.object({ visualizationId: z.coerce.number(), type: z.string().optional(), name: z.string().optional(), description: z.string().optional(), options: z.any().optional() }); - src/index.ts:1783-1797 (registration)Registration in the ListToolsRequestSchema handler, exposing the tool name, description, and input schema to MCP clients.
{ name: "update_visualization", description: "Update an existing visualization", inputSchema: { type: "object", properties: { visualizationId: { type: "number", description: "ID of the visualization to update" }, type: { type: "string", description: "Type of visualization. Available types depend on your Redash instance." }, name: { type: "string", description: "Name of the visualization" }, description: { type: "string", description: "Description of the visualization" }, options: { type: "object", description: "Visualization-specific configuration. The structure depends on your Redash instance and visualization type. Use get_visualization to see the current configuration before updating." } }, required: ["visualizationId"] } }, - src/redashClient.ts:681-689 (helper)API client helper method that sends a POST request to /api/visualizations/{id} with the update data.
async updateVisualization(visualizationId: number, data: UpdateVisualizationRequest): Promise<RedashVisualization> { try { const response = await this.client.post(`/api/visualizations/${visualizationId}`, data); return response.data; } catch (error) { console.error(`Error updating visualization ${visualizationId}:`, error); throw new Error(`Failed to update visualization ${visualizationId}`); } }