Skip to content

MCP Tool with nested string dictionary parameters aren't callable #2135

@peternoyes

Description

@peternoyes

Describe the bug

If I have an MCP tool written in C# using the official MCP library with something like:

McpServerTool, Description("Sample")
public static CallToolResult TestTool(Dictionary<string, Dictionary<string, string>> param1, string param2)
{
    var ctr = new CallToolResult()
    ctr.Content  = new List<ContentBlock>() { new TextContentBlock { Text = "true" } };
    return ctr;
}

Then when I try to call it using the GitHub Copilot CLI, it only sees param2 as part of the signature. param1 gets dropped somehow.

This is a recent regression, it worked in 1.0.4 of the CLI. It also works correctly in Claude.

Affected version

GitHub Copilot CLI 1.0.7.

Steps to reproduce the behavior

  1. Create a sample MCP server using C# and a tool as described above
  2. Configure it to be loaded by Copilot CLI
  3. Write a prompt to invoke it describing data for both parameters
  4. Note that it only sees the 2nd parameter and can't call the tool

Expected behavior

It should be able to call the tool with both param1 and param2

Additional context

Windows 11, x64

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions