make registerAppTool more interchangeable w/ server.registerTool (#219)

This commit is contained in:
Olivier Chafik 2026-01-09 01:22:39 +00:00 • committed by GitHub
commit 2730f796f7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -11,7 +11,9 @@ import {
McpUiToolMeta, McpUiToolMeta,
} from "../app.js"; } from "../app.js";
import type { import type {
BaseToolCallback,
McpServer, McpServer,
RegisteredTool,
ResourceMetadata, ResourceMetadata,
ToolCallback, ToolCallback,
ReadResourceCallback, ReadResourceCallback,
@ -33,6 +35,7 @@ export interface ToolConfig {
title?: string; title?: string;
description?: string; description?: string;
inputSchema?: ZodRawShapeCompat | AnySchema; inputSchema?: ZodRawShapeCompat | AnySchema;
outputSchema?: ZodRawShapeCompat | AnySchema;
annotations?: ToolAnnotations; annotations?: ToolAnnotations;
_meta?: Record<string, unknown>; _meta?: Record<string, unknown>;
} }
@ -100,15 +103,17 @@ export interface McpUiAppResourceConfig extends ResourceMetadata {
* ``` * ```
*/ */
export function registerAppTool< export function registerAppTool<
TInputSchema extends ZodRawShapeCompat | AnySchema | undefined = undefined, OutputArgs extends ZodRawShapeCompat | AnySchema,
InputArgs extends undefined | ZodRawShapeCompat | AnySchema = undefined,
>( >(
server: Pick<McpServer, "registerTool">, server: Pick<McpServer, "registerTool">,
name: string, name: string,
config: Omit<McpUiAppToolConfig, "inputSchema"> & { config: McpUiAppToolConfig & {
inputSchema?: TInputSchema; inputSchema?: InputArgs;
outputSchema?: OutputArgs;
}, },
handler: ToolCallback<TInputSchema>, cb: ToolCallback<InputArgs>,
): void { ): RegisteredTool {
// Normalize metadata for backward compatibility: // Normalize metadata for backward compatibility:
// - If _meta.ui.resourceUri is set, also set the legacy flat key // - If _meta.ui.resourceUri is set, also set the legacy flat key
// - If the legacy flat key is set, also set _meta.ui.resourceUri // - If the legacy flat key is set, also set _meta.ui.resourceUri
@ -125,7 +130,7 @@ export function registerAppTool<
normalizedMeta = { ...meta, ui: { ...uiMeta, resourceUri: legacyUri } }; normalizedMeta = { ...meta, ui: { ...uiMeta, resourceUri: legacyUri } };
} }
server.registerTool(name, { ...config, _meta: normalizedMeta }, handler); return server.registerTool(name, { ...config, _meta: normalizedMeta }, cb);
} }
/** /**