After recent release notes suggested that progress tokens are now supported for MCP servers, I’m testing progress monitoring with a local MCP server. I have a throwaway tool which reports progress in 3 phases.
Unfortunately, I can’t get any progress to show in the UI. Logs suggest that progress is being reported, but I guess I assumed there would be some handling of this in the actual agent UI.
Is this a misunderstanding on my part? Are there any other sanctioned strategies to handle long-running MCP tools?
Steps to Reproduce
Implement progress monitoring / handling for an MCP server
Have the cursor agent call one of those tools
Expected Behavior
Expected to see some UI representation of the progress being reported
Operating System
MacOS
Current Cursor Version (Menu → About Cursor → Copy)
Hey @condor, unfortunately I can’t disable privacy mode as I’m on a business plan.
Short of debugging my specific request, can you let me know if I’m misunderstanding the way progress tokens are meant to work in Cursor? Should there be a UI component when the agent calls an MCP tool that reports progress? I’m referencing these FastMCP docs for my implementation of progress reporting. Very possible there’s just an issue with my implementation.
Cursor supports progress notifications from MCP servers.
When your MCP tool is performing long-running operations, you can send progress updates that will be displayed in the Cursor UI.
What Users See
When an MCP tool is running in Cursor’s Chat, progress updates appear next to the tool name showing current / total (e.g., 25 / 100 or 10 / ? if total is unknown).
How to Implement in Your MCP Server
When handling a tool call request, check for the progressToken in the request’s _meta field. Use this token to send progress notifications back to Cursor:
// In your tool handler
const progressToken = request.params._meta?.progressToken;
// Send progress updates
if (progressToken) {
await server.notification({
method: "notifications/progress",
params: {
progressToken: progressToken,
progress: 25, // Current progress
total: 100 // Total (optional)
}
});
}