Skip to content

fix(sensor): attribute Copilot MCP tool calls to their server - #213

Open
rudycelekli wants to merge 1 commit into
uber:mainfrom
rudycelekli:fix/sensor-copilot-mcp-server-attribution
Open

rudycelekli wants to merge 1 commit into
uber:mainfrom
rudycelekli:fix/sensor-copilot-mcp-server-attribution

Conversation

@rudycelekli

@rudycelekli rudycelekli commented Oct 19, 2026 •

Copy link
Copy Markdown

What type of PR is this? (check all applicable)

  • Refactor
  • Feature
  • Bug Fix
  • Optimization
  • Documentation Update

Related issue: N/A (found by reading the code; reproduced on main at 6b33dff)

What changed?
When a toolRequest or tool.execution_start has a non-empty string mcpServerName, set tool_type "mcp_tool" and server_name to it; pass server_name through to ToolUsage. Tools without the field are unchanged.

Why?
Copilot's session event schema (github/copilot-sdk python/copilot/generated/session_events.py: AssistantMessageToolRequest and ToolExecutionStartData both have mcpServerName/mcpToolName) records which MCP server a tool belongs to. CopilotParser (Sensor/adr_sensor/parsers/copilot_parser.py:257-269, 284-293, 150-157) never reads it and never passes server_name to ToolUsage, so e.g. a github-mcp-server-get_issue call with mcpServerName: "github-mcp-server" is exported as tool_type "function", server_name None (every other parser in Sensor sets mcp_tool + server_name for MCP calls).

How did you test it?

  • Reproduction: new tests/test_parsers.py::TestCopilotParser::test_mcp_tools_are_attributed_to_their_server (one MCP toolRequest, one plain bash toolRequest, one orphan MCP tool.execution_start). main parser: FAILED (tool_type "function"); branch: passed.
  • Test suite: Sensor pytest tests/ -q (py3.14) 609 passed (main has 608); Python 3.9.6 parser test files 245 passed.
  • Not tested: real Copilot events.jsonl (none on this machine); field names come from the official SDK schema, and the existing test fixture's other keys (toolCallId, name, type, arguments) match that same schema.

Potential risks
The change only affects the input described above; other paths go through the same code as before, and the component's existing tests pass.

Copilot records mcpServerName on assistant.message toolRequests and on
tool.execution_start for MCP tools, but the parser never read it, so MCP
calls were exported as plain "function" tools with no server_name. Those
tools are now typed mcp_tool and carry the recorded server name; other
tools are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants