# Response Helpers Reference Complete reference for mcp-use response helpers. All helpers are imported from `mcp-use/server`: ```typescript import { text, object, markdown, html, image, audio, binary, error, mix, widget, resource, } from "mcp-use/server"; ``` ## Table of Contents - [Text Responses](#text-responses) - [JSON Responses](#json-responses) - [Markdown Responses](#markdown-responses) - [HTML Responses](#html-responses) - [Error Responses](#error-responses) - [Binary Responses](#binary-responses) - [Embedded Resources](#embedded-resources) - [Mixed Responses](#mixed-responses) - [Widget Responses](#widget-responses) - [Autocompletion](#autocompletion) ## Text Responses ```typescript import { text } from "mcp-use/server"; // Simple text return text("Hello, world!"); // Multi-line text return text(` Analysis complete. Found 15 items. Processing took 2.3 seconds. `); ``` ## JSON Responses ```typescript import { object } from "mcp-use/server"; // Object response return object({ status: "success", count: 42, items: ["a", "b", "c"], }); // Nested objects return object({ user: { id: 1, name: "John" }, metadata: { created: new Date().toISOString() }, }); ``` ## Markdown Responses ```typescript import { markdown } from "mcp-use/server"; return markdown(` # Report Title ## Summary - Item 1: **complete** - Item 2: *in progress* ## Details \`\`\`json { "score": 95 } \`\`\` `); ``` ## HTML Responses ```typescript import { html } from "mcp-use/server"; return html(`

Welcome

This is HTML content.

`); ``` ## Error Responses ```typescript import { error } from "mcp-use/server"; // Simple error return error("Something went wrong"); // With context return error(`User ${userId} not found`); // In try/catch try { const data = await fetchData(id); return object(data); } catch (err) { return error( `Failed to fetch: ${err instanceof Error ? err.message : "Unknown error"}`, ); } ``` The `error()` helper sets `isError: true` on the response, signaling to the model that the operation failed. ## Binary Responses ### Images ```typescript import { image } from "mcp-use/server"; // From base64 data return image(base64Data, "image/png"); // From buffer return image(imageBuffer, "image/jpeg"); // From file path (async) return await image("/path/to/image.png"); ``` ### Audio ```typescript import { audio } from "mcp-use/server"; // From base64 data return audio(base64Data, "audio/wav"); // From buffer return audio(audioBuffer, "audio/mp3"); // From file path (async) return await audio("/path/to/audio.mp3"); ``` ### Generic Binary ```typescript import { binary } from "mcp-use/server"; // PDF return binary(pdfBuffer, "application/pdf"); // ZIP return binary(zipBuffer, "application/zip"); // Any binary data return binary(data, "application/octet-stream"); ``` ## Embedded Resources Embed a resource reference inside a tool response: ```typescript import { resource, text } from "mcp-use/server"; // 2-arg: uri + helper result return resource("report://analysis-123", text("Full report content here...")); // 3-arg: uri + mimeType + raw text return resource("data://export", "application/json", '{"items": [1, 2, 3]}'); ``` ## Mixed Responses Combine multiple content types: ```typescript import { mix, text, object, markdown, resource } from "mcp-use/server"; // Multiple content items return mix( text("Analysis complete:"), object({ score: 95, status: "pass" }), markdown("## Recommendations\n- Optimize query\n- Add index"), ); // With embedded resource return mix( text("Report generated:"), resource("report://analysis-123", text("Full report content here...")), object({ id: "analysis-123", timestamp: Date.now() }), ); ``` ## Widget Responses Return interactive widgets from tools: ```typescript import { widget, text } from "mcp-use/server"; server.tool( { name: "show-data", schema: z.object({ query: z.string() }), widget: { name: "data-display", // Widget in resources/ invoking: "Loading...", invoked: "Data loaded", }, }, async ({ query }) => { const data = await fetchData(query); return widget({ // Props passed to widget (hidden from model) props: { items: data.items, query: query, total: data.total, }, // Output shown to model output: text(`Found ${data.total} results for "${query}"`), // Optional message message: `Displaying ${data.total} results`, }); }, ); ``` ### Widget Response Fields | Field | Type | Description | | --------- | -------------- | ------------------------------- | | `props` | object | Data passed to widget component | | `output` | ResponseHelper | Content shown to the AI model | | `message` | string | Optional text message | ### Widget Tool Configuration | Field | Description | | ----------------- | ----------------------------------- | | `widget.name` | Name of widget file in `resources/` | | `widget.invoking` | Text shown while tool executes | | `widget.invoked` | Text shown after completion | ## Autocompletion Add autocompletion to prompt arguments and resource template parameters: ```typescript import { completable } from "mcp-use/server"; // Static list server.prompt( { name: "code-review", schema: z.object({ language: completable(z.string(), [ "python", "typescript", "go", "rust", "java", ]), }), }, async ({ language }) => text(`Review this ${language} code.`), ); // Dynamic callback server.prompt( { name: "get-user", schema: z.object({ username: completable(z.string(), async (value) => { const users = await searchUsers(value); return users.map((u) => u.name); }), }), }, async ({ username }) => text(`Get info for ${username}`), ); ``` ## Quick Reference Table | Helper | Return Type | Use When | | --------------------------- | ----------- | ------------------------------------------------- | | `text(str)` | Plain text | Simple text responses | | `object(data)` | JSON | Structured data | | `markdown(str)` | Markdown | Formatted text with headings, lists, code | | `html(str)` | HTML | Rich HTML content | | `image(data, mime?)` | Image | Base64 or file path images | | `audio(data, mime?)` | Audio | Base64 or file path audio | | `binary(data, mime)` | Binary | PDFs, ZIPs, other binary | | `error(msg)` | Error | Operation failed | | `resource(uri, content)` | Resource | Embed a resource reference | | `mix(...results)` | Combined | Multiple content types in one response | | `widget({ props, output })` | Widget | Interactive UI with data for the widget component |