> For the complete documentation index, see [llms.txt](https://burp-ai-agent.six2dez.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://burp-ai-agent.six2dez.com/mcp-server/external-servers.md).

# External MCP Servers

Beyond Burp's built-in MCP tools, Custom AI Agent can connect to **external or custom MCP servers** over **SSE** (HTTP) or **stdio** (local process) transports. Their tools appear alongside the built-in Burp tools in the agent's tool preamble, namespaced `ext:<server>:<tool>`. Introduced in v0.9.0 (closes #41).

## Setup

1. Open **Settings > MCP > External Servers**.
2. Click **Add** and choose a transport:
   * **SSE** — enter the server's SSE URL (e.g. `http://127.0.0.1:3000/sse`) and, if required, a bearer token.
   * **stdio** — enter the executable command (e.g. `/usr/local/bin/my-mcp-server`). stdio is **off by default** (it launches a local process) — enable it explicitly and confirm the local-process warning first.
3. Click **Connect**. The Status column shows `Connected (N tools)`, and the server's tools become callable as `ext:<server>:<tool>` and listed in the agent's tool preamble.

## Transport Types

| Transport | Use when                                | Example                        |
| --------- | --------------------------------------- | ------------------------------ |
| **SSE**   | Remote or local HTTP-based MCP server   | `http://127.0.0.1:3000/sse`    |
| **stdio** | Local process launched by the extension | `/usr/local/bin/my-mcp-server` |

## Security Model

{% hint style="warning" %}
External MCP servers are **untrusted by default**. Their output is wrapped in an explicit trust-boundary marker before it ever enters the AI prompt, so a compromised or malicious server cannot smuggle instructions into the agent.
{% endhint %}

* **Encrypted auth tokens.** SSE bearer tokens are stored encrypted at rest (AES-256-GCM, `ENC1:`-prefixed) — the same path as every other API key — masked in the UI behind a show/hide toggle, and never logged.
* **Trust-boundary wrapping.** Every external tool result is wrapped as `[EXTERNAL-TOOL-RESULT:<server>]…[/EXTERNAL-TOOL-RESULT]` (with close-marker escaping), marking it as untrusted data rather than agent instructions — a prompt-injection guard.
* **SSRF guard.** Configuring an external URL that resolves to a non-loopback private/link-local address triggers the same soft SSRF warning used for backend URLs — non-blocking, so deliberate internal use is still possible.
* **Audit logging.** Every external tool invocation is recorded in the [audit log](/privacy-and-logging/audit-logging.md) (when enabled) with the server name, tool name, and a result summary.

## Related Pages

* [MCP Overview](/mcp-server/overview.md)
* [Security Model](/mcp-server/security-model.md)
* [Tools Reference](/mcp-server/tools-reference.md)
* [Audit Logging](/privacy-and-logging/audit-logging.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://burp-ai-agent.six2dez.com/mcp-server/external-servers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
