ACP tool_call events for MCP tools contain no tool identity (title, rawInput empty)

, ,

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Summary: Custom ACP clients (voice interfaces, TUI wrappers, IDE integrations)
cannot display meaningful tool call information to users. Built-in tools
(Read, Shell, Grep, etc.) get proper titles and kinds, but MCP tools are
all shown as identical “MCP: tool” entries with no way to distinguish them.

Details:

When Cursor’s ACP agent invokes MCP server tools, the session/update
notifications for tool_call and tool_call_update contain no information
identifying which tool was called.
Observed behavior:
The tool_call event arrives as:
{
“sessionUpdate”: “tool_call”,
“toolCallId”: “call_4RpX0tBz…”,
“title”: “MCP: tool”,
“kind”: “other”,
“status”: “pending”,
“rawInput”: {}
}
Subsequent tool_call_update events contain only status changes and
rawOutput: {"success": true}. No update ever includes the tool name,
server name, input parameters, or any other identifying information.

Steps to Reproduce

  1. Start cursor-agent acp with an MCP server configured
  2. Create a session with mcpServers in session/new
  3. Send a prompt that triggers MCP tool calls
  4. Observe session/update notifications: tool_call has
    title: "MCP: tool", kind: "other", rawInput: {}

Expected Behavior

Per the ACP spec, rawInput should contain “the raw input parameters sent
to the tool” and title should be a “human-readable title describing what
the tool is doing.” For MCP tools, this should include:

  • title: the MCP tool name or title (e.g. “org: list_cherry_pick_candidates”)
  • rawInput: the actual parameters passed to tools/call
  • kind: mapped from MCP annotations.readOnlyHint (e.g. read vs other)
    The MCP tool definition includes name, title, description, and
    annotations fields. Cursor has access to all of these from the
    tools/list response. None of them are forwarded into ACP events.

Operating System

Windows 10/11

Version Information

  • Cursor CLI agent (latest as of 2026-03-25)
  • MCP SDK 1.27.1 with registerTool() using title and annotations
  • ACP protocolVersion 1
  • Windows 10, stdio transport

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hi @Lukas_Parsons,

Thanks for the detailed report. I’ve confirmed this is a server-side bug in the ACP agent, not a client-side rendering issue. The tool_call event is emitted before tool arguments are fully parsed, and a deduplication guard prevents it from being re-emitted once the full data is available. This affects all tool types, but MCP tools are worst-affected since their initial state is completely empty.

I reproduced this locally with a custom ACP client: even built-in tools show rawInput: {} despite completing successfully with actual parameters.

A related report exists at Cursor ACP raw input is missing. This is a known issue and our team is investigating.

may be this will help while we wait for the fix https://www.npmjs.com/package/cursor-acp-enriched

Hey @Lukas_Parsons,

The ACP tool_call events arriving with an empty rawInput and the generic "MCP: tool" title were fixed in a recent Cursor CLI update. MCP tool calls now get their real title (server and tool name), rawInput and locations as soon as the arguments are parsed, and the same applies to built-in tools.

The initial tool_call can still arrive with placeholder data, and the corrected title and rawInput follow in a tool_call_update for the same toolCallId, so clients should apply updates to existing call IDs. Mapping the ACP kind from MCP annotations isn’t part of this change.

Updating to the latest version of the CLI should resolve this. Thanks for the detailed report, and let me know if you still hit it after updating.

cc @antonbaton