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.jsonc

  • JSON mcp.json

  • JavaScript mcp.js

  • TypeScript 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, number

  • mcpServers - required, array of MCP server definitions

The following properties are common to all server types:

  • name - required, unique identifier for the server

  • type - required, the transport type: stdio, streamableHttp, or sse

  • disabled - optional, boolean, the server is skipped when true

  • autoApproveTools - optional, array of tool names (as defined by the server) that are auto-approved without asking for confirmation

  • disabledTools - 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 process

  • args - optional, array of command-line arguments passed to the process

  • env - optional, object of environment variables passed to the process

StreamableHttp servers

  • url - required, URL of the remote MCP server

  • headers - optional, object of HTTP headers sent with each request

  • auth - optional, object used for OAuth authentication. Omit for dynamic client registration, or provide clientId (and optionally clientSecret) for a pre-registered client.

SSE servers

  • url - required, URL of the remote MCP server

  • headers - optional, object of HTTP headers sent with each request

  • auth - optional, object used for OAuth authentication. Omit for dynamic client registration, or provide clientId (and optionally clientSecret) 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 headers property (e.g. "Authorization": "Bearer ${MY_API_KEY}").

    • With an Authorization header (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 auth property:

    • 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}"
            }
        }
    ]
}