Skip to content

Commit 3d97a00

Browse files
antonpk1claude
andcommitted
feat: export McpUiToolMeta type and add type annotations
- Export McpUiToolMeta and McpUiToolVisibility types from types.ts - Export corresponding Zod schemas (McpUiToolMetaSchema, McpUiToolVisibilitySchema) - Add `as McpUiToolMeta` type annotations to all example servers - Update docs/quickstart.md with proper typing Ensures type safety for `_meta.ui` tool metadata across the codebase. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 34324ba commit 3d97a00

File tree

11 files changed

+28
-21
lines changed

11 files changed

+28
-21
lines changed

docs/quickstart.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ Create `server.ts`:
9797
```typescript
9898
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9999
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
100-
import { RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps";
100+
import {
101+
RESOURCE_MIME_TYPE,
102+
type McpUiToolMeta,
103+
} from "@modelcontextprotocol/ext-apps";
101104
import cors from "cors";
102105
import express from "express";
103106
import fs from "node:fs/promises";
@@ -119,7 +122,7 @@ server.registerTool(
119122
description: "Returns the current server time.",
120123
inputSchema: {},
121124
outputSchema: { time: z.string() },
122-
_meta: { ui: { resourceUri } }, // Links tool to UI
125+
_meta: { ui: { resourceUri } as McpUiToolMeta }, // Links tool to UI
123126
},
124127
async () => {
125128
const time = new Date().toISOString();

examples/basic-server-react/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
33
import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
44
import fs from "node:fs/promises";
55
import path from "node:path";
6-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
6+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
77
import { startServer } from "../shared/server-utils.js";
88

99
const DIST_DIR = path.join(import.meta.dirname, "dist");
@@ -28,7 +28,7 @@ function createServer(): McpServer {
2828
title: "Get Time",
2929
description: "Returns the current server time as an ISO 8601 string.",
3030
inputSchema: {},
31-
_meta: { ui: { resourceUri: RESOURCE_URI } },
31+
_meta: { ui: { resourceUri: RESOURCE_URI } as McpUiToolMeta },
3232
},
3333
async (): Promise<CallToolResult> => {
3434
const time = new Date().toISOString();

examples/basic-server-vanillajs/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
33
import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
44
import fs from "node:fs/promises";
55
import path from "node:path";
6-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
6+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
77
import { startServer } from "../shared/server-utils.js";
88

99
const DIST_DIR = path.join(import.meta.dirname, "dist");
@@ -28,7 +28,7 @@ function createServer(): McpServer {
2828
title: "Get Time",
2929
description: "Returns the current server time as an ISO 8601 string.",
3030
inputSchema: {},
31-
_meta: { ui: { resourceUri: RESOURCE_URI } },
31+
_meta: { ui: { resourceUri: RESOURCE_URI } as McpUiToolMeta },
3232
},
3333
async (): Promise<CallToolResult> => {
3434
const time = new Date().toISOString();

examples/budget-allocator-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import type {
1313
import fs from "node:fs/promises";
1414
import path from "node:path";
1515
import { z } from "zod";
16-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
16+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
1717
import { startServer } from "../shared/server-utils.js";
1818

1919
const DIST_DIR = path.join(import.meta.dirname, "dist");
@@ -242,7 +242,7 @@ function createServer(): McpServer {
242242
description:
243243
"Returns budget configuration with 24 months of historical allocations and industry benchmarks by company stage",
244244
inputSchema: {},
245-
_meta: { ui: { resourceUri } },
245+
_meta: { ui: { resourceUri } as McpUiToolMeta },
246246
},
247247
async (): Promise<CallToolResult> => {
248248
const response: BudgetDataResponse = {

examples/cohort-heatmap-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
44
import fs from "node:fs/promises";
55
import path from "node:path";
66
import { z } from "zod";
7-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
7+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
88
import { startServer } from "../shared/server-utils.js";
99

1010
const DIST_DIR = path.join(import.meta.dirname, "dist");
@@ -163,7 +163,7 @@ function createServer(): McpServer {
163163
description:
164164
"Returns cohort retention heatmap data showing customer retention over time by signup month",
165165
inputSchema: GetCohortDataInputSchema.shape,
166-
_meta: { ui: { resourceUri } },
166+
_meta: { ui: { resourceUri } as McpUiToolMeta },
167167
},
168168
async ({ metric, periodType, cohortCount, maxPeriods }) => {
169169
const data = generateCohortData(

examples/customer-segmentation-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type {
77
import fs from "node:fs/promises";
88
import path from "node:path";
99
import { z } from "zod";
10-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
10+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
1111
import { startServer } from "../shared/server-utils.js";
1212
import {
1313
generateCustomers,
@@ -72,7 +72,7 @@ function createServer(): McpServer {
7272
description:
7373
"Returns customer data with segment information for visualization. Optionally filter by segment.",
7474
inputSchema: GetCustomerDataInputSchema.shape,
75-
_meta: { ui: { resourceUri } },
75+
_meta: { ui: { resourceUri } as McpUiToolMeta },
7676
},
7777
async ({ segment }): Promise<CallToolResult> => {
7878
const data = getCustomerData(segment);

examples/scenario-modeler-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type {
77
import fs from "node:fs/promises";
88
import path from "node:path";
99
import { z } from "zod";
10-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
10+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
1111
import { startServer } from "../shared/server-utils.js";
1212

1313
const DIST_DIR = path.join(import.meta.dirname, "dist");
@@ -263,7 +263,7 @@ function createServer(): McpServer {
263263
description:
264264
"Returns SaaS scenario templates and optionally computes custom projections for given inputs",
265265
inputSchema: GetScenarioDataInputSchema.shape,
266-
_meta: { ui: { resourceUri } },
266+
_meta: { ui: { resourceUri } as McpUiToolMeta },
267267
},
268268
async (args: {
269269
customInputs?: ScenarioInputs;

examples/system-monitor-server/server.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import os from "node:os";
99
import path from "node:path";
1010
import si from "systeminformation";
1111
import { z } from "zod";
12-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
12+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
1313
import { startServer } from "../shared/server-utils.js";
1414

1515
// Schemas - types are derived from these using z.infer
@@ -152,7 +152,7 @@ function createServer(): McpServer {
152152
ui: {
153153
resourceUri,
154154
visibility: ["model"],
155-
},
155+
} as McpUiToolMeta,
156156
},
157157
},
158158
getStats,
@@ -168,7 +168,7 @@ function createServer(): McpServer {
168168
_meta: {
169169
ui: {
170170
visibility: ["app"],
171-
},
171+
} as McpUiToolMeta,
172172
},
173173
},
174174
getStats,

examples/threejs-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
99
import fs from "node:fs/promises";
1010
import path from "node:path";
1111
import { z } from "zod";
12-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
12+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
1313
import { startServer } from "../shared/server-utils.js";
1414

1515
const DIST_DIR = path.join(import.meta.dirname, "dist");
@@ -160,7 +160,7 @@ function createServer(): McpServer {
160160
.default(400)
161161
.describe("Height in pixels"),
162162
},
163-
_meta: { ui: { resourceUri } },
163+
_meta: { ui: { resourceUri } as McpUiToolMeta },
164164
},
165165
async ({ code, height }) => {
166166
return {

examples/wiki-explorer-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as cheerio from "cheerio";
88
import fs from "node:fs/promises";
99
import path from "node:path";
1010
import { z } from "zod";
11-
import { RESOURCE_MIME_TYPE } from "../../dist/src/app";
11+
import { RESOURCE_MIME_TYPE, type McpUiToolMeta } from "../../dist/src/app";
1212
import { startServer } from "../shared/server-utils.js";
1313

1414
const DIST_DIR = path.join(import.meta.dirname, "dist");
@@ -89,7 +89,7 @@ function createServer(): McpServer {
8989
.default("https://en.wikipedia.org/wiki/Model_Context_Protocol")
9090
.describe("Wikipedia page URL"),
9191
}),
92-
_meta: { ui: { resourceUri } },
92+
_meta: { ui: { resourceUri } as McpUiToolMeta },
9393
},
9494
async ({ url }): Promise<CallToolResult> => {
9595
let title = url;

0 commit comments

Comments
 (0)