mcp-dashboards 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Creates a new MCP Dashboard server instance.
4
+ */
5
+ export declare function createServer(): McpServer;
6
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoGpE;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CA6ZxC"}
package/dist/server.js ADDED
@@ -0,0 +1,376 @@
1
+ import { registerAppResource, registerAppTool, RESOURCE_MIME_TYPE, } from "@modelcontextprotocol/ext-apps/server";
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import fs from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { z } from "zod";
7
+ // Works both from source (server.ts) and compiled (dist/server.js)
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+ const DIST_DIR = __filename.endsWith(".ts")
11
+ ? path.join(__dirname, "dist")
12
+ : __dirname;
13
+ const RESOURCE_URI = "ui://dashboard/mcp-app.html";
14
+ // -- Zod schemas --
15
+ const PieDataItem = z.object({
16
+ label: z.string(),
17
+ value: z.number(),
18
+ });
19
+ const ColorsOption = z.array(z.string()).optional().describe("Custom color palette as hex codes (e.g. ['#FF6384', '#36A2EB']). Uses default palette if omitted.");
20
+ const PieOptions = z.object({
21
+ donut: z.boolean().optional().describe("Render as donut chart (hollow center). Default: false"),
22
+ showLegend: z.boolean().optional().describe("Show legend. Default: true"),
23
+ colors: ColorsOption,
24
+ }).optional();
25
+ const DatasetSchema = z.object({
26
+ label: z.string().describe("Name of this data series"),
27
+ data: z.array(z.number()).describe("Array of numeric values"),
28
+ });
29
+ const BarOptions = z.object({
30
+ horizontal: z.boolean().optional().describe("Horizontal bars instead of vertical. Default: false"),
31
+ stacked: z.boolean().optional().describe("Stack datasets. Default: false"),
32
+ colors: ColorsOption,
33
+ }).optional();
34
+ const LineOptions = z.object({
35
+ fill: z.boolean().optional().describe("Fill area under the line. Default: true"),
36
+ smooth: z.boolean().optional().describe("Smooth curve interpolation. Default: true"),
37
+ showPoints: z.boolean().optional().describe("Show data points. Default: false"),
38
+ colors: ColorsOption,
39
+ }).optional();
40
+ const ScatterPointSchema = z.object({
41
+ x: z.number().describe("X coordinate"),
42
+ y: z.number().describe("Y coordinate"),
43
+ });
44
+ const ScatterDatasetSchema = z.object({
45
+ label: z.string().describe("Name of this data series"),
46
+ data: z.array(ScatterPointSchema).describe("Array of {x, y} coordinate pairs"),
47
+ });
48
+ const ScatterOptions = z.object({
49
+ xLabel: z.string().optional().describe("Label for x-axis"),
50
+ yLabel: z.string().optional().describe("Label for y-axis"),
51
+ showLine: z.boolean().optional().describe("Connect points with lines. Default: false"),
52
+ colors: ColorsOption,
53
+ }).optional();
54
+ const CandlestickPointSchema = z.object({
55
+ date: z.string().describe("Date string (ISO 8601 or any parseable format)"),
56
+ o: z.number().describe("Opening price"),
57
+ h: z.number().describe("High price"),
58
+ l: z.number().describe("Low price"),
59
+ c: z.number().describe("Closing price"),
60
+ v: z.number().optional().describe("Volume (optional)"),
61
+ });
62
+ const CandlestickOptions = z.object({
63
+ type: z.enum(["candlestick", "ohlc"]).optional().describe("Chart style: candlestick (default) or OHLC bars"),
64
+ showVolume: z.boolean().optional().describe("Show volume bars below chart. Default: false"),
65
+ }).optional();
66
+ const KpiSchema = z.object({
67
+ label: z.string().describe("KPI name"),
68
+ value: z.union([z.string(), z.number()]).describe("KPI value"),
69
+ change: z.number().optional().describe("Percentage change (positive = up, negative = down)"),
70
+ prefix: z.string().optional().describe("Prefix like $ or Rs."),
71
+ suffix: z.string().optional().describe("Suffix like % or units"),
72
+ });
73
+ const DashboardChart = z.object({
74
+ type: z.enum(["pie", "bar", "line"]).describe("Chart type"),
75
+ title: z.string().optional(),
76
+ data: z.any().describe("Chart data matching the chart type's data format"),
77
+ labels: z.array(z.string()).optional(),
78
+ datasets: z.array(DatasetSchema).optional(),
79
+ options: z.any().optional(),
80
+ });
81
+ /**
82
+ * Creates a new MCP Dashboard server instance.
83
+ */
84
+ export function createServer() {
85
+ const server = new McpServer({
86
+ name: "MCP Dashboard",
87
+ version: "1.0.0",
88
+ });
89
+ // -- Shared HTML resource --
90
+ registerAppResource(server, RESOURCE_URI, RESOURCE_URI, { mimeType: RESOURCE_MIME_TYPE }, async () => {
91
+ const html = await fs.readFile(path.join(DIST_DIR, "mcp-app.html"), "utf-8");
92
+ return {
93
+ contents: [{ uri: RESOURCE_URI, mimeType: RESOURCE_MIME_TYPE, text: html }],
94
+ };
95
+ });
96
+ // -- Tool: render_pie_chart --
97
+ registerAppTool(server, "render_pie_chart", {
98
+ title: "Pie Chart",
99
+ description: "Render an interactive pie or donut chart from key-value data. Provide an array of {label, value} pairs.",
100
+ inputSchema: {
101
+ title: z.string().describe("Chart title"),
102
+ data: z.array(PieDataItem).describe("Array of {label, value} pairs"),
103
+ options: PieOptions,
104
+ },
105
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
106
+ }, async (args) => {
107
+ const chartData = {
108
+ type: "pie",
109
+ title: args.title,
110
+ data: args.data,
111
+ options: args.options ?? {},
112
+ };
113
+ const total = args.data.reduce((s, d) => s + d.value, 0);
114
+ const summary = args.data
115
+ .map((d) => `${d.label}: ${d.value} (${((d.value / total) * 100).toFixed(1)}%)`)
116
+ .join(", ");
117
+ return {
118
+ content: [
119
+ { type: "text", text: `${args.title}: ${summary}` },
120
+ { type: "text", text: JSON.stringify(chartData) },
121
+ ],
122
+ structuredContent: chartData,
123
+ };
124
+ });
125
+ // -- Tool: render_bar_chart --
126
+ registerAppTool(server, "render_bar_chart", {
127
+ title: "Bar Chart",
128
+ description: "Render an interactive bar chart. Supports vertical/horizontal, stacked, and multi-series datasets.",
129
+ inputSchema: {
130
+ title: z.string().describe("Chart title"),
131
+ labels: z.array(z.string()).describe("Category labels for the x-axis"),
132
+ datasets: z.array(DatasetSchema).describe("One or more data series"),
133
+ options: BarOptions,
134
+ },
135
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
136
+ }, async (args) => {
137
+ const chartData = {
138
+ type: "bar",
139
+ title: args.title,
140
+ labels: args.labels,
141
+ datasets: args.datasets,
142
+ options: args.options ?? {},
143
+ };
144
+ const summary = args.datasets
145
+ .map((ds) => `${ds.label}: [${ds.data.join(", ")}]`)
146
+ .join("; ");
147
+ return {
148
+ content: [
149
+ { type: "text", text: `${args.title} - ${summary}` },
150
+ { type: "text", text: JSON.stringify(chartData) },
151
+ ],
152
+ structuredContent: chartData,
153
+ };
154
+ });
155
+ // -- Tool: render_line_chart --
156
+ registerAppTool(server, "render_line_chart", {
157
+ title: "Line Chart",
158
+ description: "Render an interactive line or area chart. Supports smooth curves, gradient fill, and multiple series.",
159
+ inputSchema: {
160
+ title: z.string().describe("Chart title"),
161
+ labels: z.array(z.string()).describe("X-axis labels (e.g. dates, categories)"),
162
+ datasets: z.array(DatasetSchema).describe("One or more data series"),
163
+ options: LineOptions,
164
+ },
165
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
166
+ }, async (args) => {
167
+ const chartData = {
168
+ type: "line",
169
+ title: args.title,
170
+ labels: args.labels,
171
+ datasets: args.datasets,
172
+ options: args.options ?? {},
173
+ };
174
+ const summary = args.datasets
175
+ .map((ds) => `${ds.label}: [${ds.data.join(", ")}]`)
176
+ .join("; ");
177
+ return {
178
+ content: [
179
+ { type: "text", text: `${args.title} - ${summary}` },
180
+ { type: "text", text: JSON.stringify(chartData) },
181
+ ],
182
+ structuredContent: chartData,
183
+ };
184
+ });
185
+ // -- Tool: render_dashboard --
186
+ registerAppTool(server, "render_dashboard", {
187
+ title: "Dashboard",
188
+ description: "Render a full dashboard with KPI cards and multiple charts in a responsive grid layout.",
189
+ inputSchema: {
190
+ title: z.string().describe("Dashboard title"),
191
+ kpis: z.array(KpiSchema).optional().describe("KPI metrics shown as cards at the top"),
192
+ charts: z.array(DashboardChart).describe("Array of charts to display in the grid"),
193
+ },
194
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
195
+ }, async (args) => {
196
+ const chartData = {
197
+ type: "dashboard",
198
+ title: args.title,
199
+ kpis: args.kpis ?? [],
200
+ charts: args.charts,
201
+ };
202
+ const parts = [`Dashboard: ${args.title}`];
203
+ if (args.kpis) {
204
+ parts.push(`KPIs: ${args.kpis.map((k) => `${k.label}=${k.prefix ?? ""}${k.value}${k.suffix ?? ""}`).join(", ")}`);
205
+ }
206
+ parts.push(`Charts: ${args.charts.length} widgets`);
207
+ return {
208
+ content: [
209
+ { type: "text", text: parts.join(" | ") },
210
+ { type: "text", text: JSON.stringify(chartData) },
211
+ ],
212
+ structuredContent: chartData,
213
+ };
214
+ });
215
+ // -- Tool: render_scatter_chart --
216
+ registerAppTool(server, "render_scatter_chart", {
217
+ title: "Scatter Chart",
218
+ description: "Render an interactive scatter plot with x/y coordinate data. Supports multiple series and optional connecting lines.",
219
+ inputSchema: {
220
+ title: z.string().describe("Chart title"),
221
+ datasets: z.array(ScatterDatasetSchema).describe("One or more data series with {x, y} points"),
222
+ options: ScatterOptions,
223
+ },
224
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
225
+ }, async (args) => {
226
+ const chartData = {
227
+ type: "scatter",
228
+ title: args.title,
229
+ datasets: args.datasets,
230
+ options: args.options ?? {},
231
+ };
232
+ const summary = args.datasets
233
+ .map((ds) => `${ds.label}: ${ds.data.length} points`)
234
+ .join("; ");
235
+ return {
236
+ content: [
237
+ { type: "text", text: `${args.title} - ${summary}` },
238
+ { type: "text", text: JSON.stringify(chartData) },
239
+ ],
240
+ structuredContent: chartData,
241
+ };
242
+ });
243
+ // -- Tool: render_candlestick_chart --
244
+ registerAppTool(server, "render_candlestick_chart", {
245
+ title: "Candlestick Chart",
246
+ description: "Render an interactive candlestick or OHLC financial chart. Provide date/OHLC data for stock prices, crypto, forex, or any time-series financial data.",
247
+ inputSchema: {
248
+ title: z.string().describe("Chart title"),
249
+ data: z.array(CandlestickPointSchema).describe("Array of {date, o, h, l, c} OHLC data points"),
250
+ options: CandlestickOptions,
251
+ },
252
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
253
+ }, async (args) => {
254
+ const chartData = {
255
+ type: "candlestick",
256
+ title: args.title,
257
+ data: args.data,
258
+ options: args.options ?? {},
259
+ };
260
+ const first = args.data[0];
261
+ const last = args.data[args.data.length - 1];
262
+ const change = last ? ((last.c - first.o) / first.o * 100).toFixed(2) : "0";
263
+ return {
264
+ content: [
265
+ { type: "text", text: `${args.title}: ${args.data.length} bars, ${first?.date ?? "?"} to ${last?.date ?? "?"}, change: ${change}%` },
266
+ { type: "text", text: JSON.stringify(chartData) },
267
+ ],
268
+ structuredContent: chartData,
269
+ };
270
+ });
271
+ // -- Tool: render_table --
272
+ registerAppTool(server, "render_table", {
273
+ title: "Data Table",
274
+ description: "Render a sortable, interactive data table. Click column headers to sort.",
275
+ inputSchema: {
276
+ title: z.string().describe("Table title"),
277
+ columns: z.array(z.string()).describe("Column names in display order"),
278
+ rows: z.array(z.record(z.string(), z.union([z.string(), z.number()]))).describe("Array of row objects. Keys must match column names."),
279
+ options: z.object({
280
+ sortable: z.boolean().optional().describe("Enable column sorting. Default: true"),
281
+ striped: z.boolean().optional().describe("Alternating row colors. Default: false"),
282
+ }).optional(),
283
+ },
284
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
285
+ }, async (args) => {
286
+ const chartData = {
287
+ type: "table",
288
+ title: args.title,
289
+ columns: args.columns,
290
+ rows: args.rows,
291
+ options: args.options ?? {},
292
+ };
293
+ return {
294
+ content: [
295
+ { type: "text", text: `${args.title}: ${args.rows.length} rows, ${args.columns.length} columns` },
296
+ { type: "text", text: JSON.stringify(chartData) },
297
+ ],
298
+ structuredContent: chartData,
299
+ };
300
+ });
301
+ // -- Tool: render_from_json --
302
+ registerAppTool(server, "render_from_json", {
303
+ title: "Auto Chart",
304
+ description: "Automatically detect the best chart type for arbitrary JSON data. Pass any JSON - arrays, objects, nested structures - and get the most appropriate visualization.",
305
+ inputSchema: {
306
+ title: z.string().describe("Chart title"),
307
+ data: z.any().describe("Any JSON data - arrays, objects, key-value pairs, nested structures"),
308
+ options: z.object({
309
+ preferredType: z.enum(["pie", "bar", "line", "scatter", "table"]).optional().describe("Force a specific chart type instead of auto-detecting"),
310
+ }).optional(),
311
+ },
312
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
313
+ }, async (args) => {
314
+ const chartData = {
315
+ type: "auto",
316
+ title: args.title,
317
+ data: args.data,
318
+ options: args.options ?? {},
319
+ };
320
+ return {
321
+ content: [
322
+ { type: "text", text: `Auto-visualizing: ${args.title}` },
323
+ { type: "text", text: JSON.stringify(chartData) },
324
+ ],
325
+ structuredContent: chartData,
326
+ };
327
+ });
328
+ // -- Tool: render_from_url --
329
+ registerAppTool(server, "render_from_url", {
330
+ title: "Chart from URL",
331
+ description: "Fetch JSON data from a URL and automatically visualize it. The server fetches the data, detects the best chart type, and renders it interactively.",
332
+ inputSchema: {
333
+ title: z.string().describe("Chart title"),
334
+ url: z.string().url().describe("URL that returns JSON data"),
335
+ options: z.object({
336
+ preferredType: z.enum(["pie", "bar", "line", "scatter", "table"]).optional().describe("Force a specific chart type instead of auto-detecting"),
337
+ }).optional(),
338
+ },
339
+ _meta: { ui: { resourceUri: RESOURCE_URI } },
340
+ }, async (args) => {
341
+ try {
342
+ const response = await fetch(args.url, {
343
+ headers: { "Accept": "application/json", "User-Agent": "MCP-Dashboard/1.0" },
344
+ signal: AbortSignal.timeout(15000),
345
+ });
346
+ if (!response.ok) {
347
+ return {
348
+ content: [{ type: "text", text: `Failed to fetch ${args.url}: ${response.status} ${response.statusText}` }],
349
+ isError: true,
350
+ };
351
+ }
352
+ const data = await response.json();
353
+ const chartData = {
354
+ type: "auto",
355
+ title: args.title,
356
+ data,
357
+ options: args.options ?? {},
358
+ };
359
+ return {
360
+ content: [
361
+ { type: "text", text: `Fetched and visualizing: ${args.title} (from ${args.url})` },
362
+ { type: "text", text: JSON.stringify(chartData) },
363
+ ],
364
+ structuredContent: chartData,
365
+ };
366
+ }
367
+ catch (err) {
368
+ return {
369
+ content: [{ type: "text", text: `Error fetching ${args.url}: ${err.message}` }],
370
+ isError: true,
371
+ };
372
+ }
373
+ });
374
+ return server;
375
+ }
376
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "mcp-dashboards",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Turn your data into interactive dashboards inside any AI client",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/KyuRish/mcp-dashboard"
9
+ },
10
+ "author": "Rishabh Dogra <contact@kyuish.com>",
11
+ "license": "MIT",
12
+ "engines": {
13
+ "node": ">=18.0.0"
14
+ },
15
+ "main": "dist/server.js",
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build:ui": "cross-env INPUT=mcp-app.html vite build",
21
+ "build:server": "tsc -p tsconfig.server.json",
22
+ "build": "npm run build:ui && npm run build:server",
23
+ "watch:ui": "cross-env INPUT=mcp-app.html vite build --watch",
24
+ "serve": "node dist/index.js",
25
+ "start": "npm run build && npm run serve",
26
+ "dev": "cross-env NODE_ENV=development concurrently \"npm run watch:ui\" \"node --watch dist/index.js\"",
27
+ "prepublishOnly": "npm run build"
28
+ },
29
+ "dependencies": {
30
+ "@modelcontextprotocol/ext-apps": "^1.0.0",
31
+ "@modelcontextprotocol/sdk": "^1.24.0",
32
+ "cors": "^2.8.5",
33
+ "express": "^5.1.0",
34
+ "zod": "^4.1.13"
35
+ },
36
+ "devDependencies": {
37
+ "@types/cors": "^2.8.19",
38
+ "@types/express": "^5.0.0",
39
+ "@types/luxon": "^3.7.1",
40
+ "@types/node": "^22.10.0",
41
+ "chart.js": "^4.4.0",
42
+ "chartjs-adapter-luxon": "^1.3.1",
43
+ "chartjs-chart-financial": "^0.2.1",
44
+ "concurrently": "^9.2.1",
45
+ "cross-env": "^10.1.0",
46
+ "luxon": "^3.7.2",
47
+ "typescript": "^5.9.3",
48
+ "vite": "^6.0.0",
49
+ "vite-plugin-singlefile": "^2.3.0"
50
+ },
51
+ "types": "dist/server.d.ts",
52
+ "exports": {
53
+ ".": {
54
+ "types": "./dist/server.d.ts",
55
+ "default": "./dist/server.js"
56
+ }
57
+ },
58
+ "bin": {
59
+ "mcp-dashboard": "dist/index.js"
60
+ },
61
+ "keywords": [
62
+ "mcp",
63
+ "mcp-server",
64
+ "mcp-apps",
65
+ "dashboard",
66
+ "data-visualization",
67
+ "charts",
68
+ "chart.js",
69
+ "interactive",
70
+ "ai",
71
+ "claude",
72
+ "model-context-protocol",
73
+ "candlestick",
74
+ "financial",
75
+ "ohlc",
76
+ "bidirectional"
77
+ ]
78
+ }