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:
- Screenshot
- File tree

├── otto
│  ├── agents
│  │  ├── custom_agent.md
│  ├── mcp.yaml
│  ├── otto.yaml
│  └── rules
│  └── demo_welcome.yaml
│  └── git_commits.yaml
Basic configuration​
Configure MCP servers in your mcp.yaml
file:
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
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:
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 functionalitySLACK_APP_TOKEN
- Your Slack app's authentication token (stored in the Environment Vault)SLACK_TEAM_ID
- Your Slack workspace identifierSLACK_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