Skip to main content
Glama

MCP Task

by just-every
mcp-test-cancel.js•6.21 kB
#!/usr/bin/env node /** * MCP test - task cancellation */ import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; import { ListToolsResultSchema, CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js'; async function runTest() { console.log('=== MCP Task Cancellation Test ===\n'); const transport = new StdioClientTransport({ command: 'node', args: ['dist/serve.js'], }); const client = new Client( { name: 'test-client-cancel', version: '1.0.0', }, { capabilities: {}, } ); try { await client.connect(transport); console.log('āœ… Connected to MCP server\n'); // Create a long-running task console.log('šŸš€ Creating a long-running task...'); const request = { task: 'Write a comprehensive 10-page research paper on the history and future of artificial intelligence, including detailed timelines, key figures, breakthrough moments, current applications, and future predictions.', model: 'standard', context: 'This should be very detailed and comprehensive', output: 'A full research paper with citations', }; console.log('Request:', { tool: 'run_task', task: request.task.substring(0, 80) + '...', }); const createResult = await client.request({ method: 'tools/call', params: { name: 'run_task', arguments: request } }, CallToolResultSchema); const response = JSON.parse(createResult.content[0].text); const taskId = response.task_id; console.log('Response:', response); // Check status after 2 seconds console.log('\nā³ Waiting 2 seconds...'); await new Promise(resolve => setTimeout(resolve, 2000)); console.log('šŸ“Š Checking initial status...'); const status1 = await client.request({ method: 'tools/call', params: { name: 'check_task_status', arguments: { task_id: taskId, } } }, CallToolResultSchema); const statusData1 = JSON.parse(status1.content[0].text); console.log('Initial Status:', { status: statusData1.status, progress: statusData1.progress, messageCount: statusData1.messageCount, check_after: statusData1.check_after, }); // Cancel the task console.log('\nšŸ›‘ Cancelling the task...'); const cancelResult = await client.request({ method: 'tools/call', params: { name: 'cancel_task', arguments: { task_id: taskId, } } }, CallToolResultSchema); console.log('Cancel Response:', cancelResult.content[0].text); // Check status after cancellation console.log('\nšŸ“Š Checking status after cancellation...'); const status2 = await client.request({ method: 'tools/call', params: { name: 'check_task_status', arguments: { task_id: taskId, } } }, CallToolResultSchema); const statusData2 = JSON.parse(status2.content[0].text); console.log('Status After Cancel:', { status: statusData2.status, output: statusData2.output, }); // Try to cancel again (should fail gracefully) console.log('\nšŸ”„ Attempting to cancel already cancelled task...'); const cancelResult2 = await client.request({ method: 'tools/call', params: { name: 'cancel_task', arguments: { task_id: taskId, } } }, CallToolResultSchema); console.log('Second Cancel Response:', cancelResult2.content[0].text); // Create another task and let it complete console.log('\nšŸš€ Creating a quick task to complete normally...'); const quickTask = await client.request({ method: 'tools/call', params: { name: 'run_task', arguments: { task: 'Count to 5', model: 'mini', } } }, CallToolResultSchema); const quickTaskId = JSON.parse(quickTask.content[0].text).task_id; console.log('Quick task ID:', quickTaskId); // Wait for completion console.log('ā³ Waiting for quick task to complete...'); await new Promise(resolve => setTimeout(resolve, 5000)); // Try to cancel completed task console.log('\nšŸ”„ Attempting to cancel completed task...'); const cancelCompleted = await client.request({ method: 'tools/call', params: { name: 'cancel_task', arguments: { task_id: quickTaskId, } } }, CallToolResultSchema); console.log('Cancel Completed Task Response:', cancelCompleted.content[0].text); // List all tasks to see final states console.log('\nšŸ“‹ Final task list:'); const listResult = await client.request({ method: 'tools/call', params: { name: 'list_tasks', arguments: {} } }, CallToolResultSchema); const listData = JSON.parse(listResult.content[0].text); console.log('Stats:', listData.stats); console.log('\nTasks:'); listData.tasks.forEach((task) => { console.log(` - ${task.id.substring(0, 8)}... [${task.status}]: ${task.task.substring(0, 50)}...`); }); } catch (error) { console.error('āŒ Test failed:', error); } finally { await client.close(); console.log('\nšŸ‘‹ Connection closed'); } } runTest().catch(console.error);

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/just-every/mcp-task'

If you have feedback or need assistance with the MCP directory API, please join our Discord server