Skip to content

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.

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:

ScopeFileApplies to
User~/.bwat/mcp.jsonEvery project on this machine
Project.bwat/mcp.jsonThis 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:

in chat
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.

~/.bwat/mcp.json
{
  "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
    }
  }
}
FieldApplies toMeaning
commandstdioSpawnable command, e.g. npx, uvx, or a binary path
argsstdioArguments passed to command
envstdioExtra environment variables for the server process
urlHTTPThe server's endpoint (http/https)
headersHTTPRequest headers: typically an Authorization: Bearer … for auth
enabledbothSet to false to keep the config but stop connecting
name / descriptionbothOptional 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: npx servers need Node; uvx servers 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.