# MCP Servers

MCP (Model Context Protocol) servers extend the AI agent with external tool capabilities. Once an MCP server is registered in DuploCloud AI Suite, agents can call its tools from any ticket that includes the server's scope.

MCP servers are configured at the workspace level under **AI Admin → MCP Servers**. Two configuration methods are available: **HTTP/SSE** for standard remote MCP endpoints, and **Raw** for full control via a custom JSON config blob.

***

## Method 1: HTTP/SSE

### Step 1 — Add MCP Server

Navigate to **AI Admin → MCP Servers** and click **+ Add Server**. The **Add MCP Server** form opens. Fill in:

* **Name** — a display name for the server (e.g. `Linear`)
* **Description** — optional
* **Provider Type** — optional; links the server to a provider category for organizational purposes
* **Config Type** — select `HTTP/SSE`
* **API Endpoint** — the MCP server's HTTP endpoint URL (e.g. `https://mcp.linear.app/mcp`)
* **Transport** — `http` for standard HTTP or `sse` for Server-Sent Events

Click **Create**.

![](/files/cwAsS9z3OY7y47gTRgAB)

### Step 2 — Server Added

A success banner confirms the server was saved. The MCP Servers page shows the new server as a card with its endpoint URL. It is now available to be linked to any scope across all workspaces.

![](/files/ZBdfHum9UhDqMICRNckb)

### Step 3 — Navigate to Providers

To make the MCP server accessible to an agent you need a **Provider** with credentials and a **Scope** that links both. Navigate to **AI Admin → Providers** and select the relevant category tab (e.g. **Other** for tools like Linear).

![](/files/GQEnCgBP6Qwpb2F6wca9)

### Step 4 — Create Provider

Click **+ Add**. Fill in the **Add Provider** form:

* **Name** — a name for this provider (e.g. `Linear`)
* **Description** — optional
* **Type** — the provider category (e.g. `Other`)
* **Account ID** — an identifier for the provider account; can be any string if not required for routing

Click **Create Provider**.

![](/files/RhkXsM79GqXJUsOixR18)

### Step 5 — Provider Created

The provider detail page opens with the **Credentials** tab (empty) and **Scope** tab. The right panel confirms the category, type, and account ID.

![](/files/G0sv6YItB2KUD9GkmjnZ)

### Step 6 — Add Credential

Click **+ Add** on the Credentials tab. The **Add Credential** modal opens. Fill in:

* **Name** — the credential set name (e.g. `Linear-credentials`)
* **Credential Fields** — one or more key/value pairs for the secrets this provider requires:
  * **Key** — the field name (e.g. `LINEAR_API_KEY`)
  * **Value** — the actual secret value
  * **Type** — `String` for most secrets
  * **Sensitive** — toggle on to store the value encrypted and mask it in the UI

Click **Create**.

![](/files/y9nlMRLYP5DiGq6swZ9l)

### Step 7 — Add Scope

Click **+ Add** on the **Scope** tab. The **Add Scope** modal opens. Fill in:

* **Name** — the scope name used when creating tickets (e.g. `Linear-Test-MCP`)
* **Credential** — select the credential set created in the previous step
* **MCP Server** — select the MCP server to link (e.g. `Linear`)
* **Resource Map** — optional key/value pairs for additional context passed to the agent

Click **Create**.

![](/files/Q0rii30y6E797v3EoWzB)

### Step 8 — Agent Using the MCP Server

With the scope configured, create a ticket and select the scope (e.g. `Linear-Test-MCP`). The agent automatically has access to the Linear MCP tools. When prompted it calls the relevant tool — here `mcp__Linear__list_issues` — using the credentials bound to the scope.

![](/files/sf1hvgoXyg4bJrERFnyh)

### Step 9 — Agent Response

The agent returns structured data from the MCP tool. In this example it lists all 13 issues across the Linear workspace with their ID, title, status, priority, and team.

![](/files/vRicNkZZusuAdGaV4mla)

***

## Method 2: Raw JSON

The Raw config type gives full control over the MCP server configuration as a JSON blob. This method supports **credential placeholders** so secrets and per-environment values are resolved at runtime rather than being stored inline in the config. See [Credential Placeholders](/docs/armor/mcp-servers/credential-masking-for-mcp-servers.md) for the full reference.

### Step 1 — Add MCP Server with Raw Config

Navigate to **AI Admin → MCP Servers** and click **+ Add Server**. Fill in:

* **Name** — e.g. `Grafana`
* **Provider Type** — optional; select the relevant category (e.g. `OpenTelemetry`)
* **Config Type** — select `Raw`
* **Raw Config** — paste the full MCP server JSON. Use `${credential.<key>}` placeholders for any values that should be resolved from the scope's bound credentials at runtime.

For example:

```json
{
  "mcpServers": {
    "grafana": {
      "command": "uvx",
      "args": ["mcp-grafana"],
      "env": {
        "GRAFANA_URL": "${credential.url}",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "${credential.token}"
      }
    }
  }
}
```

Click **Create**.

![](/files/bPv4AdvIBY96UimordZS)

### Step 2 — Navigate to Providers

Navigate to **AI Admin → Providers** and select the category tab matching your server's provider type (e.g. **Observability** for Grafana).

![](/files/uxjGsmucU8GeKKIvJ1fb)

### Step 3 — Create Provider

Click **+ Add**. Fill in the **Add Provider** form:

* **Name** — e.g. `Grafana`
* **Type** — e.g. `OpenTelemetry`
* **Account ID** — an identifier for the account (e.g. `grafana.com`)

Click **Next** to proceed directly to the Credentials step, or **Create** to save and configure credentials separately.

![](/files/uOXY1IoFSb6kSIkuZw5G)

### Step 4 — Add Credentials

The **Credentials** step configures the secrets that will be injected into the Raw Config placeholders. Fill in:

* **Name** — the credential set name (e.g. `default`)
* **Credential Fields** — add one field per placeholder key used in the Raw Config. The field names must **exactly match** the placeholder keys — case-sensitive:
  * `token` → resolves `${credential.token}`
  * `url` → resolves `${credential.url}`

Mark sensitive fields (like tokens and passwords) as **Sensitive** to store them encrypted.

Click **Create** then **Next**.

![](/files/KWhE7bUIFojq9KEEo1i8)

### Step 5 — Create Scope

The **Scope** step links the credential set to the MCP server. Fill in:

* **Name** — e.g. `Grafana-MCP`
* **Credential** — pre-filled with the credential created in the previous step
* **MCP Server** — select the Raw MCP server (e.g. `Grafana`)
* **Resource Map** — optional

Click **Create**.

![](/files/7MzHRsYePX00TDnPxxRe)

### Step 6 — Provider Ready

The Providers list now shows the Grafana provider alongside other observability providers.

![](/files/WDxHI1VBOvvagEjqUIRV)

### Step 7 — Agent Using the MCP Server

Create a ticket with the `Grafana-MCP` scope. Before the session starts, the platform resolves all `${credential.*}` placeholders in the Raw Config using the bound credentials, then writes the resolved `.mcp.json` for the agent. The agent calls Grafana MCP tools transparently.

![](/files/qXPhVho09KUQdDLM5f3O)

### Step 8 — Agent Response

The agent returns live data from Grafana via the MCP tool. In this example it lists all 38 Grafana dashboards found in the workspace.

![](/files/jNKVQcxOfjmxT74v1pG6)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.duplocloud.com/docs/armor/mcp-servers.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
