Skip to content

bug: get_me tool fails without parameters due to empty JSON object {} not being accepted as valid input #2587

@doheonlee

Description

@doheonlee

Description

The get_me tool is documented as requiring no parameters, but when called
without any arguments it returns an error in certain MCP clients. Passing a
dummy parameter (e.g. {"_": ""}) makes the call succeed.

This is inconsistent with the tool's own schema declaration and creates friction
for any client that strictly follows the declared schema.

Steps to Reproduce

  1. Start the GitHub MCP Server (local or remote).
  2. Call get_me with an empty argument object (as the schema says no parameters
    are required):
   {
     "jsonrpc": "2.0",
     "id": 1,
     "method": "tools/call",
     "params": {
       "name": "get_me",
       "arguments": {}
     }
   }
  1. Observe the error response.
  2. Retry with a dummy parameter:
   {
     "jsonrpc": "2.0",
     "id": 2,
     "method": "tools/call",
     "params": {
       "name": "get_me",
       "arguments": { "_": "" }
     }
   }
  1. Observe that this call succeeds.

Expected Behavior

get_me should succeed when called with an empty arguments object {}, since
the tool schema declares no required arguments.

Actual Behavior

get_me returns an error when called with {}. The call only succeeds if a
dummy/extra parameter is included.

Root Cause (Hypothesis)

Looking at pkg/github/context_tools.go, get_me is registered with
mcp.NewTool with no input schema properties. After the recent migration from
mark3labs/mcp-go to the official modelcontextprotocol/go-sdk, the SDK may
be rejecting a null or missing arguments field differently than an explicit
{}.

Two possible causes:

  1. SDK-level validation: The Go SDK may require arguments to be a
    non-null JSON object. If the client omits the field entirely (or sends
    null), it gets rejected before the handler is invoked.
  2. Handler-level parsing: The tool handler may attempt to parse
    request.Params.Arguments and fail on a nil/empty map before returning
    early for the no-param case.

Environment

  • GitHub MCP Server version: main (latest)
  • MCP SDK: modelcontextprotocol/go-sdk (post-migration)
  • Transport: stdio / streamable-http (reproduced on both)
  • Client: Claude Code with Local LLM

Suggested Fix

Ensure the get_me handler (and any other zero-parameter tool) gracefully
handles both a missing arguments field and an explicit empty object {}.
A guard like the following at the top of the handler should suffice:

// No parameters expected; nothing to parse.
// Handle both nil and empty arguments map to stay robust.

Alternatively, if this is an SDK-level issue, the tool registration could
explicitly set an empty-object schema ("properties": {}, "type": "object")
to signal that an empty object is valid input, which some validators require.

Additional Context

  • The README documents get_me as: "No parameters required"
  • Other zero-parameter tools (if any) may be affected by the same issue.
  • A workaround is to pass any dummy key, but this should not be necessary.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions