Where does the bug appear (feature/product)?
Cursor IDE
Describe the Bug
Environment: Cursor 3.9.16, macOS 15 (darwin 25.3.0)
MCP server: Atlassian plugin (cursor-public/atlassian), tool editJiraIssue (also reproduces content-independently)
Symptom
Calling an MCP tool with a large arguments object fails before reaching the server with:
“Failed to parse arguments string as JSON object: Unexpected non-whitespace character after JSON at position N”
The position N is always at/near the END of the args, i.e. valid JSON is parsed and then extra characters follow.
Key characteristics (point to client-side serialization, not the server)
- Size-thresholded: small args always succeed; large args always fail. Threshold MOVED between builds (~256 bytes on a prior build → ~2900 bytes on 3.9.16), so it was raised but not fixed.
- Content-independent: reproduces with plain filler text of sufficient size.
- A/B proof it is client-side: the IDENTICAL payload (same Atlassian MCP server, same cloudId, same issue, same JSON) SUCCEEDS from claude.ai’s Atlassian integration and FAILS from Cursor. Only the client differs.
Hypothesis (matches a known analysis)
Cumulative args_text_delta snapshots being concatenated rather than replaced, producing garbled JSON like {"a":1{"a":1,"b":2... that a streaming parser reads as valid-then-trailing-garbage. See third-party write-up/fix:
- Cursor MCP streaming drops the task tool's tasks array when the completion frame omits oversized params · Issue #2615 · can1357/oh-my-pi · GitHub
Related acknowledged Cursor forum reports: - Cursor agent interaction with custom MCP server (array serialization, “bug on our side”)
Repro
- Configure any MCP server with a tool that accepts a string field.
- Call it with a small string value → succeeds.
- Call it with a large string value (a few KB) → fails with the parse error at position ≈ end-of-args.
Impact
Any MCP tool call with a moderately large argument is unusable from Cursor (e.g. writing a full Jira description), forcing fallbacks like raw REST.
Suggested fix
Use “latest cumulative snapshot wins” (or a merge) instead of concatenating args_text_delta; and/or add a tolerant parse/repair step before strict JSON.parse().
Steps to Reproduce
- Connect an MCP server that has a tool accepting a string field (repro’d with the Atlassian plugin’s editJiraIssue, but it is content-independent).
- In Agent chat, invoke the MCP tool with a SMALL arguments object (e.g. a short description string) → succeeds.
- Invoke the same tool with a LARGE arguments object (a few KB, e.g. a full multi-section Jira description) → fails before reaching the server with:
“Failed to parse arguments string as JSON object: Unexpected non-whitespace character after JSON at position N”
where N is at/near the END of the arguments (valid JSON parsed, then trailing characters).
Notes that isolate it to Cursor (client-side), not the MCP server:
- Size-thresholded: small args always succeed, large always fail. The threshold MOVED across builds (~256 bytes previously → ~2900 bytes on 3.9.16), so it was raised but not eliminated.
- Content-independent: reproduces with plain filler text of sufficient length.
- A/B proof: the IDENTICAL payload (same Atlassian MCP server, same cloudId, same issue, same JSON) SUCCEEDS from claude.ai’s Atlassian integration and FAILS from Cursor. Only the client differs.
Expected Behavior
The MCP tool call should serialize the full arguments object as valid JSON and reach the MCP server, succeeding regardless of argument size (just as small arguments do, and just as the identical payload does from another MCP client). Large arguments should not be corrupted/truncated during the agent’s tool-call serialization.
Likely root cause (matches a known analysis): cumulative args_text_delta snapshots are concatenated instead of replaced, producing garbled JSON (valid object followed by trailing characters) that the parser rejects. A “latest cumulative snapshot wins”/merge strategy, and/or a tolerant parse-repair step before strict JSON.parse(), would fix it.
Operating System
MacOS
Version Information
IDE:
Version: 3.9.16
Commit:
Date:
Electron/Chromium/Node/V8:
OS: Darwin arm64 25.3.0
For AI issues: which model did you use?
Opus 4.8 Medium context
Additional Information
Severity/threshold detail: the failing position scales with argument size and lands at the END of the args (valid JSON parsed, then unexpected trailing characters) - classic symptom of cumulative arg snapshots being concatenated rather than replaced. The byte threshold increased between builds (~256B → ~2900B on 3.9.16) but the bug was not eliminated, so it will keep resurfacing as payloads grow.
Strongest evidence it is client-side (Cursor), not the MCP server or model:
- The IDENTICAL payload (same Atlassian MCP server, same cloudId, same Jira issue, same JSON) SUCCEEDS from claude.ai’s Atlassian integration and FAILS from Cursor. Only the client differs.
- Content-independent: reproduces with plain filler text of sufficient length.
- Small args always succeed; large always fail.
Does this stop you from using Cursor
Sometimes - I can sometimes use Cursor