Customize
Add your own MCP servers
Connect any local or remote Model Context Protocol server by asking Bwat in plain English or editing one JSON file.
On this page
What you get
Bwat speaks the Model Context Protocol (MCP), the open standard for connecting AI agents to tools. When a server is connected, its tools appear in Bwat's toolset namespaced as mcp__<name>__<tool>, and Bwat calls them like any built-in tool: reading your Notion, driving a browser with Playwright, querying Supabase, or whatever the server provides. Connected servers also show up in the # Connected apps section of Bwat's system prompt with live status, so you can ask “do you see my Blender?” and get a truthful answer.
You can use this alongside the servers the Bwat team ships (like the built-in Blender integration). Yours live in two plain JSON files:
| Scope | File | Applies to |
|---|---|---|
| User | ~/.bwat/mcp.json | Every project on this machine |
| Project | .bwat/mcp.json | This workspace only |
Both files are picked up fresh on every run. Edit them by hand and the change lands on Bwat's next message without a restart.
The fast way: just ask
In the CLI or the VS Code extension, tell Bwat what you want connected:
You: Add the Playwright MCP server so you can drive a browser.
Bwat: ManageMcpTool add
MCP server: playwright
Op: add · Scope: user
Transport: stdio
Command: npx
Args: -y @playwright/mcp@latest
[Approve] [Deny] [Deny and tell Bwat what to do instead]You get an approval card showing exactly what will be written: the command and arguments (or the URL and headers), the scope, and any environment variables. Approve, and Bwat writes the config, connects immediately, and its tools appear on the very next turn of the same conversation. If you don't know a server's connection details, ask Bwat to look them up first; don't let it guess a command.
That approval card is the security boundary, and it exists for a good reason: registering a server means Bwat will later run its command on your machine. Approve only servers you trust. There is deliberately no “don't ask again” for extension changes, not even in Auto mode.
Ask the same way to remove, disable, or re-enable: “remove the Playwright server”, “disable Notion for this project”. Bwat can also list what you've added.
The file format
Hand-editing works too. A stdio entry runs a local command; an HTTP entry calls a remote endpoint. An entry with command is stdio; one with url is HTTP.
{
"version": 1,
"mcpServers": {
"playwright": {
"description": "Browser automation",
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"],
"env": { "DEBUG": "1" }
},
"supabase": {
"url": "https://mcp.supabase.com/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
},
"notion": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"enabled": false
}
}
}| Field | Applies to | Meaning |
|---|---|---|
command | stdio | Spawnable command, e.g. npx, uvx, or a binary path |
args | stdio | Arguments passed to command |
env | stdio | Extra environment variables for the server process |
url | HTTP | The server's endpoint (http/https) |
headers | HTTP | Request headers: typically an Authorization: Bearer … for auth |
enabled | both | Set to false to keep the config but stop connecting |
name / description | both | Optional display name and summary |
Keep secrets in the user-scope file (~/.bwat/mcp.json), which is written with owner-only permissions (0600). Project-scope entries live under .bwat/, which is auto-gitignored, but the user file is the safer home for credentials.
Precedence
If the same name exists in both scopes, project wins. Your own servers cannot shadow the ones the Bwat team ships: if a name collides with an official server, the official one is used and yours is skipped. Tool calls on any server go through the normal approval flow.
Checking status and troubleshooting
Run /mcp in the CLI to see every official and custom server, its live connection status, and the file it came from. In VS Code, just ask Bwat, or read the # Connected apps block it sees. A server that fails to connect shows up as not reachable with the error; the usual culprits are:
- The command isn't installed:
npxservers need Node;uvxservers need uv. - A typo in the command or arguments. Test it in a terminal first.
- For HTTP servers: wrong URL (most remote MCP endpoints end in
/mcp), expired token, or a corporate proxy blocking the request.
Connected tools appear automatically when a task needs them. Pair an MCP server with a custom skill when your team has a repeatable workflow for using it.

