MCP Gateway
This tutorial walks you through setting up the MCP Gateway, which exposes Solace Agent Mesh agents as a Model Context Protocol (MCP) server. This allows any MCP-compatible client (such as Claude Desktop, MCP Inspector, or custom applications) to interact with Solace Agent Mesh agents through a standardized interface.
Read about Gateways before you start this tutorial.
Overview
The MCP Gateway adapter:
- Dynamically discovers agents from the Solace Agent Mesh agent registry
- Creates MCP tools automatically based on agent skills
- Streams responses in real-time back to MCP clients
- Handles files intelligently by returning inline content or resource links based on size
- Maintains session isolation ensuring secure multi-client access
Setting Up the Environment
First, you need to install Agent Mesh and the Agent Mesh CLI, and then create a new Agent Mesh project.
Adding the MCP Gateway Plugin
Once you have your project set up, add the MCP Gateway plugin:
sam plugin add my-mcp-gateway --plugin sam-mcp-server-gateway-adapter
You can use any name for your gateway. In this tutorial we use my-mcp-gateway.
This command:
- Installs the
sam-mcp-server-gateway-adapterplugin - Creates a new gateway configuration named
my-mcp-gatewayin yourconfigs/gateways/directory
Configuration
You can customize the gateway by editing the configs/gateways/my-mcp-gateway.yaml file.
Key Configuration Options
adapter_config:
# Server identity
mcp_server_name: "Solace Agent Mesh MCP Gateway"
mcp_server_description: "Access to Solace Agent Mesh agents via MCP"
# Transport: "http" or "stdio"
transport: http
# HTTP settings (when transport = "http")
host: "0.0.0.0"
port: 8090
# Authentication
default_user_identity: "mcp_user"
# Streaming
stream_responses: true
# Task timeout (in seconds)
task_timeout_seconds: 300 # 5 minutes default
# File size thresholds for inline content
inline_image_max_bytes: 5242880 # 5MB
inline_audio_max_bytes: 10485760 # 10MB
inline_text_max_bytes: 1048576 # 1MB
inline_binary_max_bytes: 524288 # 512KB
# Tool filtering (optional)
include_tools: [] # Include only these tools (empty = all)
exclude_tools: [] # Exclude these tools
The host and port settings defined above needs to be exposed in your deployment environment (e.g., Docker, Kubernetes) so that MCP clients can connect.
The path /mcp should point to the gateway service address.
MCP Server Gateway with Authentication
If you have authentication enabled in your gateway, you'd need to expose and map the following routes to your gateway service address:
/oauth/authorize/oauth/callback/oauth/token/oauth/register/.well-known/oauth-authorization-server
Example for Kubernetes Service and Ingress configuration:
apiVersion: v1
kind: Service
metadata:
name: solace-agent-mesh-mcp-service
spec:
selector:
app: solace-agent-mesh
type: ClusterIP
ports:
- name: http
protocol: TCP
targetPort: http-mcp
port: 8090
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: solace-agent-mesh-ingress
labels:
app: solace-agent-mesh-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /mcp
pathType: Prefix
backend:
service:
name: solace-agent-mesh-mcp-service
port:
number: 8090
- path: /oauth/authorize
pathType: Prefix
backend:
service:
name: solace-agent-mesh-mcp-service
port:
number: 8090
- path: /oauth/callback
pathType: Prefix
backend:
service:
name: solace-agent-mesh-mcp-service
port:
number: 8090
- path: /oauth/token
pathType: Prefix
backend:
service:
name: solace-agent-mesh-mcp-service
port:
number: 8090
- path: /oauth/register
pathType: Prefix
backend:
service:
name: solace-agent-mesh-mcp-service
port:
number: 8090
- path: /.well-known/oauth-authorization-server
pathType: Prefix
backend:
service:
name: solace-agent-mesh-mcp-service
port:
number: 8090
Running the MCP Gateway
To run the MCP Gateway, use the following command:
sam run configs/gateways/my-mcp-gateway.yaml
The gateway starts and automatically:
- Queries the agent registry for available agents
- Creates MCP tools for each agent skill
- Starts listening for MCP client connections
Connecting MCP Clients
To connect to Solace Agent Mesh via MCP, configure your MCP client (e.g., Claude Desktop) to point to the gateway URL:
http://<gateway-host>:<gateway-port>/mcp
Make sure to select the appropriate transport (HTTP) and enable OAuth2.0 authentication if configured.
How It Works
Architecture
Tool Naming
Each agent skill becomes an MCP tool with the naming pattern:
{agent_name}_{skill_name}
For example:
- Agent:
WeatherAgent, Skill:Get Forecast→ Tool:weather_agent_get_forecast - Agent:
CodeAssistant, Skill:Review Code→ Tool:code_assistant_review_code
Tool names are automatically sanitized to be valid MCP identifiers (lowercase, alphanumeric with underscores).
Dynamic Agent Discovery
As agents join and leave the Solace Agent Mesh mesh:
-
Agent Joins: When a new agent publishes its AgentCard.
- The adapter detects the new agent
- Registers new MCP tools for the agent's skills
- FastMCP sends
tools/list_changednotification to connected clients - MCP clients automatically refresh their tool list
-
Agent Leaves: When an agent is removed.
- The adapter detects the removal
- Removes the agent's tools from the MCP server
- FastMCP notifies clients of the change
- Stale tools disappear from the client's tool list
Tool Filtering
The MCP adapter supports filtering which agent tools are exposed through the MCP server. This is useful for:
- Limiting tool visibility to specific agents or skills
- Hiding debug/internal tools from clients
- Creating specialized MCP servers with curated tool sets
Configuration
adapter_config:
# Include only data-related tools
include_tools:
- "data_.*" # Regex: any tool starting with "data_"
- "fetch_user_info" # Exact: specific tool name
# Exclude debug tools and test agents
exclude_tools:
- ".*_debug" # Regex: any tool ending with "_debug"
- "TestAgent" # Exact: specific agent name
How Filtering Works
What Gets Checked: Filters check against all three of:
- Original agent name (e.g.,
"DataAgent") - Original skill name (e.g.,
"Fetch User") - Final sanitized tool name (e.g.,
"data_agent_fetch_user")
Pattern Types: The adapter automatically detects pattern types:
- Regex patterns: Contain special characters like
.*+?[]{}()^$|\ - Exact matches: Plain strings without special characters
Priority Order (highest to lowest):
- Exclude exact match - If pattern matches exactly, tool is rejected
- Include exact match - If pattern matches exactly, tool is accepted
- Exclude regex match - If regex pattern matches, tool is rejected
- Include regex match - If regex pattern matches, tool is accepted
- Default - If
include_toolsis empty, accept; otherwise reject
Filter Examples
Example 1: Include only specific tools
include_tools:
- "weather_agent_.*" # All tools from weather_agent
- "code_assistant_review_code" # One specific tool
exclude_tools: []
Example 2: Exclude debug/internal tools
include_tools: [] # Empty = include all
exclude_tools:
- ".*_debug" # Exclude all debug tools
- ".*_internal" # Exclude all internal tools
- "TestAgent" # Exclude entire test agent
File Handling
The MCP gateway intelligently returns files based on their type and size:
Content Type Strategy
Images (image/* MIME types):
- Small (< 5MB): Returned inline as
ImageContentwith base64 encoding - Large (≥ 5MB): Returned as
ResourceLinkfor separate download
Audio (audio/* MIME types):
- Small (< 10MB): Returned inline as
AudioContentwith base64 encoding - Large (≥ 10MB): Returned as
ResourceLink
Text Files:
- Small (< 1MB): Returned as
EmbeddedResourcewithTextResourceContents - Large (≥ 1MB): Returned as
ResourceLink
Other Binary Files:
- Small (< 512KB): Returned as
EmbeddedResourcewithBlobResourceContents - Large (≥ 512KB): Returned as
ResourceLink
Mixed Content Responses
When a tool response includes both text and files, the MCP gateway returns a list of content blocks:
[
TextContent(type="text", text="Here is the result..."),
ImageContent(type="image", data="base64...", mimeType="image/png"),
ResourceLink(type="resource_link", uri="artifact://session/report.pdf", ...)
]
Troubleshooting
No tools appearing in MCP client
- Check that agents are registered in the agent registry
- Verify agents have skills defined in their AgentCard
- Check gateway logs for tool registration messages
- Review tool filter configuration if using
include_toolsorexclude_tools - If authentication is enabled, ensure RBAC permissions are set correctly.
Connection refused
- Verify the MCP server is running (check logs)
- Ensure the configured port is not in use
- Check firewall settings (for HTTP transport)
Files not appearing or timing out
- Check file size thresholds in configuration
- Verify artifact service is configured correctly
- Review session management in logs