Skip to Content

Server Aggregation

Connect to external MCP servers and aggregate their tools.

Overview

The MCP Server Aggregator enables:

  1. Connect to multiple external MCP servers (STDIO, SSE, HTTP)
  2. Aggregate tools into a unified registry
  3. Apply skill-based classification
  4. Route tool calls to the appropriate backend
  5. Monitor health and connection lifecycle

Architecture

┌─────────────────────────────────────────────────────────────────┐ │ ISA MCP PLATFORM │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ AGGREGATOR SERVICE │ │ │ │ Server Registry │ Tool Aggregator │ Request Router │ │ │ │ Health Monitor │ Session Manager │ Skill Classifier │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ │ ┌───────────────────┼───────────────────┐ │ │ ▼ ▼ ▼ │ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │ │ GitHub MCP │ │ Slack MCP │ │ Custom MCP │ │ │ │ (STDIO) │ │ (SSE) │ │ (HTTP) │ │ │ └────────────────┘ └────────────────┘ └────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘

Adding External Servers

result = await client.call_tool("add_mcp_server", { "name": "github-mcp", "transport_type": "SSE", "connection_config": { "url": "https://github-mcp.example.com/sse" }, "auto_connect": True }) print(f"Server ID: {result['data']['id']}") print(f"Status: {result['data']['status']}")

Transport Types

TypeConfigUse Case
STDIOcommand, args, envLocal processes
SSEurl, headersServer-Sent Events
HTTPbase_url, headersREST API

Tool Namespacing

External tools are namespaced to avoid collisions:

Server: github-mcp Original Tool: create_issue Namespaced: github-mcp.create_issue

Tool Execution

# Call via namespaced name result = await client.call_tool("github-mcp.create_issue", { "repo": "owner/repo", "title": "Bug report" }) # Response includes routing metadata print(f"Routed to: {result['metadata']['routed_to']}") print(f"Routing time: {result['metadata']['routing_time_ms']}ms")

Health Monitoring

Server Status

StatusDescription
CONNECTEDHealthy
DEGRADEDElevated errors
DISCONNECTEDIntentionally offline
ERRORUnreachable
CONNECTINGIn progress

Check Health

result = await client.call_tool("get_server_status", { "server_id": "uuid-1234" }) print(f"Status: {result['data']['status']}")

Connection Management

# Connect await client.call_tool("connect_mcp_server", {"server_id": "uuid"}) # Disconnect await client.call_tool("disconnect_mcp_server", {"server_id": "uuid"}) # Remove await client.call_tool("remove_mcp_server", {"server_id": "uuid"})

API Endpoints

EndpointMethodDescription
/api/v1/aggregator/serversPOSTRegister server
/api/v1/aggregator/serversGETList servers
/api/v1/aggregator/servers/{id}GETGet server
/api/v1/aggregator/servers/{id}/connectPOSTConnect
/api/v1/aggregator/servers/{id}/disconnectPOSTDisconnect
/api/v1/aggregator/servers/{id}DELETERemove

Performance

OperationTarget
Server registration< 2s
Tool discovery< 5s per server
Routing overhead< 50ms

Next Steps