Skip to main content

Configure MCP servers

Configure Model Context Protocol (MCP) servers to extend Otto's capabilities with external integrations and services.

Otto is compatible with any MCP server, including Slack, GitHub, Grafana, and PagerDuty.

Organization​

The mcp.yaml configuration must be located within a dedicated otto directory in your Ascend Project:

folder

Basic configuration​

Configure MCP servers in your mcp.yaml file:

otto/mcp.yaml
mcpServers:
server_name:
command: npx
args:
- --cache
- /tmp/npm-cache
- -y
- "@modelcontextprotocol/server-<your-tool>"
env:
API_TOKEN: ${vaults.environment.API_TOKEN}
CONFIG_VALUE: <YOUR_CONFIG_VALUE>

Multiple MCP servers can be configured in the same mcp.yaml file by adding them as separate server entries under the mcpServers section.

Command execution:

  • command: npx - Runs MCP servers without requiring global installation
  • Supports other commands like python, node, or direct executable paths

NPX configuration:

  • --cache /tmp/npm-cache - Uses a temporary directory for npm cache to improve performance
  • -y - Automatically accepts installation prompts for unattended execution
  • @modelcontextprotocol/server-<tool-name> - Replace <tool-name> with the specific service (e.g., slack)

Environment variables:

  • Use ${vaults.environment.VARIABLE_NAME} for secure credential management
  • Reference Environment Vault secrets for sensitive data
  • Set configuration values directly for non-sensitive Parameters
danger

Be cautious when configuring MCP servers with external services. Always store sensitive credentials like API tokens and keys in Environment Vaults rather than hardcoding them. Verify that external MCP servers are from trusted sources before installation, as they will have access to your configured credentials and can interact with external services on your behalf.

Environment variable patterns​

MCP servers commonly use these environment variable patterns:

env:
# API credentials
API_TOKEN: ${vaults.environment.API_TOKEN}
API_KEY: ${vaults.environment.API_KEY}

# Service identifiers
WORKSPACE_ID: <YOUR_WORKSPACE_ID>
TEAM_ID: <YOUR_TEAM_ID>

# Configuration options
CHANNEL_IDS: <COMMA_SEPARATED_IDS>
BASE_URL: <SERVICE_BASE_URL>

Example​

Here's a complete configuration for the Slack MCP server:

otto/mcp.yaml
mcpServers:
slack:
command: npx
args:
- --cache
- /tmp/npm-cache
- -y
- "@modelcontextprotocol/server-slack"
env:
SLACK_BOT_TOKEN: ${vaults.environment.SLACK_APP_TOKEN}
SLACK_TEAM_ID: <YOUR_SLACK_TEAM_ID>
SLACK_CHANNEL_IDS: <YOUR_SLACK_CHANNEL_ID>

Configuration details:

  • @modelcontextprotocol/server-slack - The npm package providing Slack MCP functionality
  • SLACK_APP_TOKEN - Your Slack app's authentication token (stored in the Environment Vault)
  • SLACK_TEAM_ID - Your Slack workspace identifier
  • SLACK_CHANNEL_IDS - Comma-separated list of channel IDs where Otto can post

Next steps​

After configuring MCP servers:

  • Configure Otto for Agent setup
  • Build custom agents that access MCP servers
  • Set up specific integrations like Slack
  • Test by instructing Otto to use your MCP integration in an Agent markdown file or an Automation prompt