49 lines
1.7 KiB
JavaScript
49 lines
1.7 KiB
JavaScript
"use strict";
|
|
/**
|
|
* Example: Progress notifications over stdio.
|
|
*
|
|
* Demonstrates a tool that reports progress to the client while processing.
|
|
*
|
|
* Run:
|
|
* npx tsx src/examples/server/progressExample.ts
|
|
*
|
|
* Then connect a client with an `onprogress` callback (see docs/protocol.md).
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const mcp_js_1 = require("../../server/mcp.js");
|
|
const stdio_js_1 = require("../../server/stdio.js");
|
|
const zod_1 = require("zod");
|
|
const server = new mcp_js_1.McpServer({ name: 'progress-example', version: '1.0.0' }, { capabilities: { logging: {} } });
|
|
server.registerTool('count', {
|
|
description: 'Count to N with progress updates',
|
|
inputSchema: { n: zod_1.z.number().int().min(1).max(100) }
|
|
}, async ({ n }, extra) => {
|
|
for (let i = 1; i <= n; i++) {
|
|
if (extra.signal.aborted) {
|
|
return { content: [{ type: 'text', text: `Cancelled at ${i}` }], isError: true };
|
|
}
|
|
if (extra._meta?.progressToken !== undefined) {
|
|
await extra.sendNotification({
|
|
method: 'notifications/progress',
|
|
params: {
|
|
progressToken: extra._meta.progressToken,
|
|
progress: i,
|
|
total: n,
|
|
message: `Counting: ${i}/${n}`
|
|
}
|
|
});
|
|
}
|
|
// Simulate work
|
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
}
|
|
return { content: [{ type: 'text', text: `Counted to ${n}` }] };
|
|
});
|
|
async function main() {
|
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
await server.connect(transport);
|
|
}
|
|
main().catch(error => {
|
|
console.error('Server error:', error);
|
|
process.exit(1);
|
|
});
|
|
//# sourceMappingURL=progressExample.js.map
|