// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. /** * Marks a class or constructor function as an MCP result type that should be serialized * as structured content. * * When a function returns an instance of a type decorated with this marker, * the result will be serialized as both text content (for backwards compatibility) * and structured content (for clients that support it). * * Without the marker, a plain object is serialized as text-only (JSON stringified). * Use `McpToolResponse` if you need explicit control over structuredContent without a class. * * **Programmatic usage** (works without `experimentalDecorators`): * ```typescript * class ImageMetadata { * constructor(public imageId: string, public format: string) {} * } * McpContent(ImageMetadata); // marks the class * * app.mcpTool('GetImage', { * toolName: 'GetImage', * description: 'Returns image info', * handler: async () => new ImageMetadata('logo', 'png') * }); * ``` * * **Decorator usage** (requires `experimentalDecorators: true` in tsconfig): * ```typescript * @McpContent * class ImageMetadata { ... } * ``` * * Supported forms: * - `@McpContent` * - `@McpContent()` * - `McpContent(MyClass)` * * @param target - Optional class or constructor function to mark for structured content. * @returns The target class/function unchanged or a class decorator. * * @see {@link McpToolResponse} - For explicit content blocks + structuredContent * @see {@link McpTextContent} - For returning single content blocks */ export function McpContent(target: T): T; export function McpContent(): (target: T) => T; /** * Checks if an object's type/class is marked with the @McpContent decorator. * * @param obj - The object or class constructor to check. * @returns True if the class was marked with `McpContent`; otherwise, false. * @internal */ export function hasMcpContentMarker(obj: unknown): boolean; /** * Returns true only when `obj` is an instance of a class explicitly marked with * `McpContent` and is not a primitive, array, or built-in type. * * This follows the marker/decorator pattern used by MCP SDKs: * - Marked class instances → true → text + structuredContent emitted * - Plain objects / literals → false → text only * * @param obj - The value to evaluate. * @returns True if structured content should be emitted for this value. * @internal */ export function shouldCreateStructuredContentMarker(obj: unknown): boolean;