Add MCP servers
MCP servers give Terere Harness extra tools, such as reading your GitHub issues, searching your company docs or querying a database. You add them in Settings; nothing needs restarting.
Last updated 30 September 2026
What an MCP server is
MCP (Model Context Protocol) is an open standard for connecting AI agents to other software. An MCP server is a small program, or a web address, that offers a set of tools. Once you add one, the model can call its tools the same way it calls Terere Harness’s own tools for reading files and running commands.
Each tool appears to the model as mcp__<server name>__<tool>. A server you name github that offers create_issue becomes mcp__github__create_issue. Two servers can both offer a tool called search without clashing, because the server name keeps them apart.
Servers you add apply to every session. Tool descriptions are sent to the model with every request, so a server with many tools uses more of the model’s context. Turn off servers you aren’t using.
Local or remote
- Local (command): Terere Harness starts a program on your computer and talks to it directly. Most servers published on npm or PyPI work this way. The server runs with your permissions, so only add servers you trust.
- Remote (URL): the server is already running somewhere, on your network or as a hosted service, and Terere Harness connects to its web address. Remote servers must support the Streamable HTTP transport. Servers that only offer the older SSE transport can’t be added.
The server’s own documentation says which kind it is and what to enter. If it gives you a command and args, it’s local. If it gives you a URL ending in something like /mcp, it’s remote.
Add a local server
This example adds GitHub’s server, which needs Node.js and a GitHub personal access token.
- Open Settings, then MCP servers, and choose Add server.
- Leave the switch on Local (command).
- Name:
github. Use letters, numbers,-and_, up to 32 characters. You can’t rename a server later, because saved sessions refer to its tools by this name; to change it, add the server again under the new name and delete the old one. - Command:
npx - Arguments, one per line:
-yand then@modelcontextprotocol/server-github - Under Environment variables, choose Add, type
GITHUB_PERSONAL_ACCESS_TOKENin Field name, and paste your token into Value. Secret is ticked for you because the name contains “token”. - Choose Save. The row shows the server’s name, a Local (command) tag, and its status: Starting, then Running — N tools.
Terere Harness starts the command, but it doesn’t install anything. The program the command names must already be on your computer: Node.js for npx, uv for uvx, or Docker for docker run. If you install one while Terere Harness is open, restart Terere Harness so it can find it.
Local servers don’t see the environment variables on your computer that look like keys or tokens. Add every variable a server needs on its row, even if it’s already set in Windows.
Add a remote server
- Choose Add server and switch to Remote (URL).
- Name: for example
docs. - URL: the address from the server’s documentation, starting with
https://(orhttp://on your own network). - If the server needs a key, add a header with Field name
Authorizationand ValueBearer, a space, and your key. Secret is ticked for you. - Choose Save.
Servers that ask you to sign in through a browser (OAuth) aren’t supported yet. If the service also offers an API key or personal access token, use that in the Authorization header instead.
Where your keys are kept
A value marked Secret is saved in %USERPROFILE%\.dsh\.credentials.yaml on your computer, and the settings file stores only its name. When you edit the server again, each secret row shows Set or Not set, never the value. To change a key, type the new one into the same row and save.
A server reads its keys when it starts. After changing a key, switch the server off and on again so it picks up the new one. Deleting a server also deletes the keys saved for it.
Untick Secret only for values that aren’t sensitive, such as a folder path. Those are saved in plain text in the settings file.
Import servers from another app
If you already use MCP servers in Claude Code, Claude Desktop, Cursor or VS Code, you can bring them across. Choose Import, then either pick the app’s configuration file or paste its contents and choose Read. The file is read inside Terere Harness; nothing is uploaded.
| App | File | Where to find it |
|---|---|---|
| Claude Code (one project) | .mcp.json | In the project folder. |
| Claude Code (all projects) | %USERPROFILE%\.claude.json | Only the servers listed at the top level are read. |
| Claude Desktop | %APPDATA%\Claude\claude_desktop_config.json | Settings, then Developer, then Edit Config opens it. |
| Cursor | .cursor\mcp.json | In the project folder, or in %USERPROFILE% for all projects. |
| VS Code | .vscode\mcp.json | In the project folder. |
The import shows every server it found. Tick the ones you want and choose Import selected; nothing is saved before that. While importing:
- Values whose names look like keys, tokens, secrets or passwords, and every
Authorizationheader, are saved as secrets. - A value written as
${NAME}or${env:NAME}isn’t copied. The server uses the key saved underNAMEinstead; if there isn’t one, the server shows Failed, with “credential NAME is not set” under it, until you add the value on its row. - A server that was switched off in the other app is imported switched off.
- A name that isn’t allowed is changed to one that is, with a note naming the original, and you can edit it before importing.
- A server whose name is already used by a server added in Settings, or repeats an earlier name in the same file, is marked Already exists. and left unticked until you give it another name.
- SSE servers are listed with SSE servers aren’t supported. and can’t be imported.
Server status
- Off: switched off. It isn’t running and the model doesn’t see its tools.
- Starting: Terere Harness is starting the program or connecting to the URL.
- Running — N tools: connected. The model can use its tools from the next message.
- Failed: it couldn’t start or connect. The message under the status says why; see below.
If a running server drops its connection, Terere Harness reconnects on its own, waiting a little longer each time, from half a second up to 30 seconds. After 10 failed attempts in a row it stops and removes the server’s tools. The row then shows Running — 0 tools; switch the server off and on to try again.
If something doesn’t work
“Connection closed” right after saving
The program in Command isn’t installed, Terere Harness can’t find it, or it exited straight away. A missing program usually shows Connection closed rather than “command not found”. Install it (Node.js for npx, uv for uvx), then restart Terere Harness. You can also enter the program’s full path, for example C:\Program Files\nodejs\npx.cmd.
“credential … is not set”
The server needs a secret that hasn’t been saved. Choose Edit, type the value into that row, save, and switch the server off and on.
Unauthorized (401) or forbidden (403)
The key is wrong, expired, or lacks the permissions the server needs. Create a new one, paste it into the row, save, and switch the server off and on. For a header, check that the value starts with Bearer and a space.
It stays on Starting, or fails with a timeout
The first run of an npx or uvx server downloads it, which can take a while on a slow connection. Wait, then switch the server off and on. For a remote server, open the URL in a browser to check it’s reachable from your computer.
“A server with this name already exists.” or “… are too similar; rename one.”
Another server added in Settings has the same name, or a name that differs only in case or punctuation or extends it with - or _, such as a and a-b; their saved keys would share a prefix. The page checks all servers added in Settings together before saving. Pick a clearly different name.
Failed with “serverName … is already in use”
The page doesn’t compare names with servers written by hand in the configuration file. When a server added in Settings has the same name as one of those, one of the two shows Failed with this message. Rename one of them.
The model doesn’t use the tools
Check the server shows Running with more than 0 tools. The model decides when a tool helps, so asking for it by name (“use the GitHub tools to list my open issues”) makes it more likely to use them. Models with weak tool calling may ignore them; see Connect a model.
Advanced: the configuration file
Servers can also be written by hand in %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml. The page lists servers written this way with the tag Configured in cordis.patch.yml, and they can only be changed in the file. A local server:
- insert:
- id: mcp-github
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: github
transport: stdio
command: npx
args: ['-y', '@modelcontextprotocol/server-github']
env:
GITHUB_PERSONAL_ACCESS_TOKEN: !!js process.env.GITHUB_PERSONAL_ACCESS_TOKENA remote server with a key read from a Windows environment variable:
- insert:
- id: mcp-docs
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: docs
transport: streamable-http
url: https://mcp.example.com/mcp
headers:
Authorization: !!js '`Bearer ${process.env.DOCS_MCP_TOKEN}`'Keep keys out of the file itself: !!js process.env.NAME reads them from a Windows environment variable. Each server needs its own id and serverName. Changes to the file are picked up without a restart.