MCP
The Model Context Protocol (MCP) is an open standard that lets AI agents discover and call third-party tools over a common interface. By registering an external MCP server, you extend the AI Assistant beyond its built-in tools. This allows it to interact directly with external services instead of relying on manually supplied context.
Connect an MCP server when you want the AI Assistant to work with the tools and services you already use in your workflow. Instead of manually searching through issue trackers, regression dashboards, source repositories, or documentation portals, you can ask the assistant to retrieve relevant information, correlate results across systems, and carry out supported operations directly through the connected tools.
Configuration
In the chat view, use the MCP Servers page to open and manage the MCP servers configuration. Once a server is connected, its tools become visible in the page along with their descriptions and parameters (on the hover tooltip).
External MCP servers are registered through a configuration file, with several formats being supported:
JSON with Comments
mcp.jsoncJSON
mcp.jsonJavaScript
mcp.jsTypeScript
mcp.ts
You may reference environment variables within your configuration, by using the ${ENV_VAR} syntax.
AI Assistant looks for the MCP servers configuration in these locations:
$DVT_HOME/config/ai/mcp.{json,jsonc,js,ts}
$DVT_AI_DIR/mcp.{json,jsonc,js,ts}
$HOME/.dvt/ai/mcp.{json,jsonc,js,ts}
<project>/.dvt/ai/mcp.{json,jsonc,js,ts}
In certain setups, it is preferred to have an officially approved configuration for all users, preventing any changes by them. This can be accomplished by adding a file named final within the $DVT_HOME/config/ai/ directory. This approach is effective only in read-only shared installations, typically those based on DVT distros, as users should not be able to modify the installation files.
Warning
This is not considered a security feature because users with adequate permissions can install DVT locally and apply their own configurations.
Each server supports one of three transport types:
Stdio - launches a local process and communicates over standard input/output
Streamable HTTP - connects to a remote server using the Streamable HTTP transport
SSE - connects to a remote server using the SSE (Server-Sent Events) transport
Configuration format
{
"version": 10,
"mcpServers": [
{
"name": "my-stdio-server",
"type": "stdio",
"command": "node",
"args": ["server.js"],
"env": {
"MY_ENV_VAR": "value"
},
"disabled": false,
"autoApproveTools": ["tool1"],
"disabledTools": ["tool2"]
}
]
}
{
"version": 10,
"mcpServers": [
{
"name": "my-http-server",
"type": "streamableHttp",
"url": "https://example.com/mcp",
"headers": {
"Authorization": "Bearer ${MY_API_KEY}"
},
"auth": {
"clientId": "${MY_CLIENT_ID}"
},
"disabled": false,
"autoApproveTools": ["tool1"],
"disabledTools": ["tool2"]
}
]
}
{
"version": 10,
"mcpServers": [
{
"name": "my-sse-server",
"type": "sse",
"url": "https://example.com/mcp",
"headers": {
"Authorization": "Bearer ${MY_API_KEY}"
},
"auth": {
"clientId": "${MY_CLIENT_ID}"
},
"disabled": false,
"autoApproveTools": ["tool1"],
"disabledTools": ["tool2"]
}
]
}
Regardless of the format you choose, the configuration has the following properties:
version- required, numbermcpServers- required, array of MCP server definitions
The following properties are common to all server types:
name- required, unique identifier for the servertype- required, the transport type:stdio,streamableHttp, orssedisabled- optional, boolean, the server is skipped whentrueautoApproveTools- optional, array of tool names (as defined by the server) that are auto-approved without asking for confirmationdisabledTools- optional, array of tool names (as defined by the server) that are hidden from the AI Assistant
In addition to the common properties, a server must specify the transport-specific settings that correspond to its type.
Stdio servers
command- required, command used to start the server processargs- optional, array of command-line arguments passed to the processenv- optional, object of environment variables passed to the process
StreamableHttp servers
url- required, URL of the remote MCP serverheaders- optional, object of HTTP headers sent with each requestauth- optional, object used for OAuth authentication. Omit for dynamic client registration, or provideclientId(and optionallyclientSecret) for a pre-registered client.
SSE servers
url- required, URL of the remote MCP serverheaders- optional, object of HTTP headers sent with each requestauth- optional, object used for OAuth authentication. Omit for dynamic client registration, or provideclientId(and optionallyclientSecret) for a pre-registered client.
Authentication
Remote MCP servers (streamableHttp and sse) may require authentication. AI Assistant supports the following:
No authentication - the server is publicly accessible and no additional properties are required.
{ "name": "my-http-server", "type": "streamableHttp", "url": "https://example.com/mcp" }API Key - for servers needing an API key or a simple bearer token, set the token through the
headersproperty (e.g."Authorization": "Bearer ${MY_API_KEY}").With an
Authorizationheader (bearer token):
{ "name": "my-http-server", "type": "streamableHttp", "url": "https://example.com/mcp", "headers": { "Authorization": "Bearer ${MY_API_KEY}" } }With a custom header (e.g. an API key):
{ "name": "my-http-server", "type": "streamableHttp", "url": "https://example.com/mcp", "headers": { "X-Custom-Header": "${MY_API_KEY}" } }Static OAuth - for servers where you have a pre-registered OAuth client, set the
authproperty:auth.clientId- required, the OAuth client identifier.auth.clientSecret- optional, the OAuth client secret.
{ "name": "my-http-server", "type": "streamableHttp", "url": "https://example.com/mcp", "auth": { "clientId": "${MY_CLIENT_ID}", "clientSecret": "${MY_CLIENT_SECRET}" } }Dynamic OAuth - for servers that support OAuth 2.0 dynamic client registration, omit
auth. AI Assistant will allow you to sign in.{ "name": "my-http-server", "type": "streamableHttp", "url": "https://example.com/mcp" }
Important
The OAuth redirect URI used by AI Assistant is http://127.0.0.1:8090/callback. When registering a client with the server’s OAuth provider, this is the local address where AI Assistant listens for the OAuth callback.
Configuring MCP Servers using JavaScript / TypeScript
export default {
version: 10,
mcpServers: [
{
name: "my-stdio-server",
type: "stdio",
command: "node",
args: ["server.js"],
env: {
MY_ENV_VAR: "value"
},
disabled: false,
autoApproveTools: ["tool1"],
disabledTools: ["tool2"]
},
{
name: "my-http-server",
type: "streamableHttp",
url: "https://example.com/mcp",
headers: {
Authorization: "Bearer ${MY_API_KEY}"
},
auth: {
clientId: "${MY_CLIENT_ID}"
},
disabled: false,
autoApproveTools: ["tool1"],
disabledTools: ["tool2"]
},
{
name: "my-sse-server",
type: "sse",
url: "https://example.com/mcp",
headers: {
Authorization: "Bearer ${MY_API_KEY}"
},
auth: {
clientId: "${MY_CLIENT_ID}"
},
disabled: false,
autoApproveTools: ["tool1"],
disabledTools: ["tool2"]
}
]
}
import { MCPServersConfig } from "./@api/v10"
export default {
version: 10,
mcpServers: [
{
name: "my-stdio-server",
type: "stdio",
command: "node",
args: ["server.js"],
env: {
MY_ENV_VAR: "value"
},
disabled: false,
autoApproveTools: ["tool1"],
disabledTools: ["tool2"]
},
{
name: "my-http-server",
type: "streamableHttp",
url: "https://example.com/mcp",
headers: {
Authorization: "Bearer ${MY_API_KEY}"
},
auth: {
clientId: "${MY_CLIENT_ID}"
},
disabled: false,
autoApproveTools: ["tool1"],
disabledTools: ["tool2"]
},
{
name: "my-sse-server",
type: "sse",
url: "https://example.com/mcp",
headers: {
Authorization: "Bearer ${MY_API_KEY}"
},
auth: {
clientId: "${MY_CLIENT_ID}"
},
disabled: false,
autoApproveTools: ["tool1"],
disabledTools: ["tool2"]
}
]
} satisfies MCPServersConfig
Examples
Below you will find some configuration examples for popular MCP servers.
{
"version": 10,
"mcpServers": [
{
"name": "github",
"type": "streamableHttp",
"url": "https://api.githubcopilot.com/mcp",
"auth": {
"clientId": "${GITHUB_CLIENT_ID}",
"clientSecret": "${GITHUB_CLIENT_SECRET}"
}
}
]
}
{
"version": 10,
"mcpServers": [
{
"name": "atlassian",
"type": "sse",
"url": "https://mcp.atlassian.com/v1/sse"
}
]
}
{
"version": 10,
"mcpServers": [
{
"name": "slack",
"type": "streamableHttp",
"url": "https://mcp.slack.com/mcp",
"auth": {
"clientId": "${SLACK_CLIENT_ID}",
"clientSecret": "${SLACK_CLIENT_SECRET}"
}
}
]
}