Skip to content

RFC: Proxying individual MCP servers from the core MCP server #475

@wzxxing

Description

@wzxxing

Is this related to an existing feature request or issue?

No response

Summary

As of 2025/05/30 the awslabs/mcp repo contains 34 MCP servers and roughly 242 tools (by counting the occurrence of @mcp.tool), more RFCs of adding MCP servers from other services are in the issue

The user of these MCP servers need to understand the domain they are working on, configure the MCP servers then start their assistant such as Cursor or Amazon Q.

The current core MCP server is really limited, with just a prompt_understanding tool that returns a markdown content with all the possible MCP servers offered in this repository.

This RFC suggests adding a few extra tools to the current core MCP server

Use case

User can just load the core MCP server and start working with any projects. They can even suggest their LLM to load MCP servers

More and more AWS teams will want to contribute to the MCP servers and this tool will be helpful for MCP server discovery.

Use cases

  1. I start amazon Q cli with only core MCP server configured.
  2. Start asking a question about AWS EKS
  3. Amazon Q calls prompt_understanding then understands that awslabs.eks-mcp-server is available
  4. Amazon Q call tool require_server("awslabs.eks-mcp-server")
  5. The tools/resources/prompts in the new server is available to Amazon Q.
  6. Amazon Q calls list_k8s_resources tool from EKS server.

Proposal

Two new tools added to the awslabs.core-mcp-server MCP server.

1. require_server

This tool should use create a FastMCP proxy that launches individual servers from this repository.

@mcp.tool()
async def require_server(server_name: str) -> Literal['Success']:
    """Load the MCP server from awslabs.

    Args:
        server_name: the name of the server to be used. suggested by the tool `prompt_understanding`
    """
    proxy_server = FastMCP.as_proxy(
        MCPConfig(
            mcpServers={
                server_name: StdioMCPServer(
                    command='uvx',
                    args=[server_name],
                )
            }
        )
    )
    mcp.mount(prefix='required', server=proxy_server)
    return 'Success'

2. suggest_servers

Instead of returning a static string from markdown file like prompt_understanding, suggest_servers should suggest valid MCP server names to be required in the require_server tool. There can be many different implementations such as adding tags (AWS service names) to each MCP servers as metadata, or semantic search using a local faiss index.

Out of scope

loading arbitrary MCP servers.

exact implementation of the semantic search.

Potential challenges

  1. server conflict when the user already configured a server, then require_server tries to load the same server.
  2. different servers have different required environment variables (But luckily, most MCP servers require only AWS related environment variables).
  3. unify the command to launch MCP servers, not all servers should be launched with uvx. The core server can have configs about the command to launch each server.
  4. After "mounting" a proxy server, the client needs to either call list_tools again, or to handle notification from the server about tool changes.

Dependencies and Integrations

No response

Alternative solutions

Use other MCP servers as python modules in core MCP server. This locks the implementation of other MCP servers in Python.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions