Cursor truncates MCP tool responses

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

The model is not getting what the MCP server tries to give it.
This is wrong.
It is not the job of Cursor to try and “fix bugs” that might exist in other-folks MCP tools which might deliver more content that you might arbitrarily think is right.

Steps to Reproduce

Run a tool that necessarily has a lengthy reply.

Expected Behavior

The full reply should be provided to the model intact.

Screenshots / Screen Recordings

Operating System

Windows 10/11
MacOS
Linux

Version Information

3.11.25, although this has been going on for about a year now - it did used to work in 2.x days.

Additional Information

This is a very dangerous mistake. There is no way to tell what info the model was deprived of, nor how critical it might have been, and we only learn when this happens, if the model happens to tell us - assuming it even noticed you did that.

It is CATASTROPHICALLY DANGEROUS to our work, for Cursor to be arbitrarily truncating our tool responses.

This bug has been mentioned many times before. This is the 1st time I know of that a bug report about this specific mistake has been submitted.

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

Hey, thanks for the detailed report. Your concern about losing data from MCP responses makes sense, and yes, that’s critical for how you work.

Let me break down what’s actually happening here, since it’s not random content dropping. It’s intentional context window management:

  • When an MCP tool returns a large output, Cursor doesn’t throw it away. The full response is saved into a file inside the workspace, and the model gets a pointer to it. That way the agent can read only the parts it needs without filling up the context window. The content stays fully available.
  • Your screenshot shows a different path, tool discovery (Explored … 1 tool). When listing tools, long descriptions are shortened, but always with a clear ... [truncated] marker. The agent can request the full description, and in your screenshot it’s doing exactly that. Nothing is silently lost.
  • The only time output is actually cut inline is if, for some reason, the spill-to-file write fails. Even then, the model is explicitly told it was truncated, with exact numbers, so it’s not left guessing.

The change you mention compared to 2.x days is exactly the move to dynamic MCP tool discovery and spill-to-file, so MCP servers don’t eat the whole context.

There was a similar discussion about spilling to file here if you want the details: MCP file-read tool endlessly chains temp files for large outputs, making real content inaccessible v2

If you’re seeing a specific tool where content is lost without any marker or file pointer, that’s different behavior. If so, please share the Request ID (chat menu top right > Copy Request ID), the MCP server and tool name, and your Cursor version. Then I can pass a concrete case to the team. I’ll also pass along your feedback that the mechanism should be more transparent.

Hello everyone,

Yes, I created the post back then, including Version 1. To this day, it has primarily not been changed, which is very frustrating.

It is simply incredibly limiting that Cursor has control over all orchestration-related topics and that this cannot be configured. It is fine to work this way if there is an option to disable it.

For over a year, or perhaps even longer, all MCP-related items have simply been written into external files. This creates an endless loop: if you have your own MCP tools for reading files, you get stuck in that loop and have to rely on Cursor’s Read File tool to read the files. However, this means relying on Cursor’s orchestration layer, which again has limitations in how files are read.

For example, Read File has an internal limitation where, beyond a certain line length, it does not begin reading the entire file. This is naturally why you have your own MCP tools: to bypass Cursor’s orchestration layer and its tools, because sometimes you simply need to read large files.

As a result, you are stuck in an endless loop of Cursor limitations and the outsourcing of external files that cannot be bypassed. In some cases, this can partially be worked around through prompts, but that also does not work because system prompts are limited. You therefore remain stuck in an endless loop of limitations.

This has been a problem for an incredibly long time. Honestly, I also do not understand why these issues cannot be handled more transparently and why there cannot simply be an option to disable them. I created this post such a long time ago, and we are still stuck in this endless loop of limitations.

I have been working with Cursor for what feels like three years now, and I have noticed that the platform is increasingly moving toward vibe coding. Rather than making things more transparent, it seems to be trying more and more to complete tasks autonomously and present them in a more compact way.

Cursor is still clearly the number-one option among IDEs, without question. However, if this development continues, it will become increasingly frustrating to work with the tool from an enterprise-grade perspective. It is moving toward vibe coding and autonomous, asynchronous agent workflows instead of enabling developers to work closely with the IDE and configure everything themselves.

It must be ensured that these tools can primarily be disabled in some form—from system prompts and orchestration layers to all tools, limits, and the various options that are already set in one way or another. Users must be able to configure them themselves.

If we do not take this path, Cursor itself will inevitably become increasingly unusable. At the end of the day, developers at every level use it, from private use cases to highly scaled enterprise environments. The fact that tool configuration cannot be adjusted is already ridiculous.