Skip to content

Bridging 2 mcp servers with the same tool_name #77

Open
@zigelboim-misha

Description

@zigelboim-misha

If I connect 2 mcp servers with the same tool_names like this:

{
    "mcp_servers": 
      {
        "ben-github": {
            "url": "http://host.docker.internal:8001/sse"
        },
        "misha-github": {
            "url": "http://host.docker.internal:8002/sse"
        }
      }
}

For example using 2 GitHub mcp server - one per organization.

curl -X 'GET' \
  'http://localhost:8000/mcp/servers/ben-github/tools' \
  -H 'accept: application/json'

Response:

{
  "_meta": null,
  "nextCursor": null,
  "tools": [
    {
      "name": "get_me",
      "description": "Get details of the authenticated GitHub user. Use this when a request include \"me\", \"my\"...",
      "inputSchema": {
        "type": "object",
        "properties": {
          "reason": {
            "description": "Optional: reason the session was created",
            "type": "string"
          }
        }
      }
    }
  ]
}
curl -X 'GET' \
  'http://localhost:8000/mcp/servers/misha-github/tools' \
  -H 'accept: application/json'

Response:

{
  "_meta": null,
  "nextCursor": null,
  "tools": [
    {
      "name": "get_me",
      "description": "Get details of the authenticated GitHub user. Use this when a request include \"me\", \"my\"...",
      "inputSchema": {
        "type": "object",
        "properties": {
          "reason": {
            "description": "Optional: reason the session was created",
            "type": "string"
          }
        }
      }
    }
  ]
}

Or using the unified api:

curl -X 'GET' \
  'http://localhost:8000/mcp/tools' \
  -H 'accept: application/json'

Response:

{
  "ben-github": {
    "_meta": null,
    "nextCursor": null,
    "tools": [
      {
        "name": "get_me",
        "description": "Get details of the authenticated GitHub user. Use this when a request include \"me\", \"my\"...",
        "inputSchema": {
          "type": "object",
          "properties": {
            "reason": {
              "description": "Optional: reason the session was created",
              "type": "string"
            }
          }
        }
      }
    ]
  },
  "misha-github": {
    "_meta": null,
    "nextCursor": null,
    "tools": [
      {
        "name": "get_me",
        "description": "Get details of the authenticated GitHub user. Use this when a request include \"me\", \"my\"...",
        "inputSchema": {
          "type": "object",
          "properties": {
            "reason": {
              "description": "Optional: reason the session was created",
              "type": "string"
            }
          }
        }
      }
    ]
  }
}

Then I try to actually use the tools, and I cannot tell the service what server I want to run with:

curl -X 'POST' \
  'http://localhost:8000/mcp/tools/get_me/call' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{}'

It only uses the 2nd mcp server...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions