Skip to content

Bridging 2 mcp servers with the same tool_name #77

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