-
Notifications
You must be signed in to change notification settings - Fork 46
Open
Description
Sampling is a feature supported by both the MCP Protocol writ large and the modelcontextprotocol/typescript-sdk.
Currently, using methods like server.server.createMessage
result in a timeout. Please either add support for sampling, or return early in the mcp-api-handler that the tool is not supported. The Inspector never gets notified of a request for sampling.
Sampling and Elicitation are at the heart of the MCP server I am building, so support for these 2 features would be so greatly appreciated! Also happy to create a PR for this.
Steps to reproduce
import { createMcpHandler } from 'mcp-handler';
import z from 'zod';
const handler = createMcpHandler(
(server) => {
server.registerTool(
'summarize',
{
description: 'Summarize any text using an LLM',
inputSchema: {
text: z.string().describe('Text to summarize'),
},
},
async ({ text }) => {
// Call the LLM through MCP sampling
const response = await server.server.createMessage({
messages: [
{
role: 'user',
content: {
type: 'text',
text: `Please summarize the following text concisely:\n\n${text}`,
},
},
],
maxTokens: 500,
});
return {
content: [
{
type: 'text',
text:
response.content.type === 'text'
? response.content.text
: 'Unable to generate summary',
},
],
};
},
);
},
{
// Optional server options
},
{
// Optional redis config
redisUrl: process.env.REDIS_URL,
basePath: '/api', // this needs to match where the [transport] is located.
maxDuration: 60,
verboseLogs: true,
},
);
export { handler as GET, handler as POST };
Example video
Screen.Recording.2025-07-14.at.3.49.13.PM.mov
Metadata
Metadata
Assignees
Labels
No labels