One config entry that exposes every tool of the five servers. It starts the time tracker, price tracker, spreadsheet, invoice and expense tracker as child processes and exposes every tool, resource and prompt under one server, with one license pair.
One entry under the servers key, one trust prompt to answer, and every tool arrives as one group in the tools picker, which is easier to switch on and off per chat than five separate ones.
| You say | Tool |
|---|---|
| Start a timer for Acme. | timer_start |
| Now invoice Acme for this week's hours and the rebillable expenses, 23% VAT, due in 14 days, PDF. | six calls, entry_list through invoice_pdf |
| What did I spend this month and what is still unbilled? | expense_list and entry_list |
Its startup line reads: proxying [time-tracker, price-tracker, spreadsheet, invoice, expense-tracker], 49 tools. Those three sentences are consecutive turns of one audited conversation that scored 12 out of 12.
The file is .vscode/mcp.json, and the key inside it is servers.
| Scope | Path |
|---|---|
| This workspace | <workspace>/.vscode/mcp.json |
| Every workspace | the user profile mcp.json, opened by the MCP: Open User Configuration command |
// .vscode/mcp.json (the key is "servers")
{
"servers": {
"office-suite": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-office-suite"]
}
}
}
Or from a terminal:
code --add-mcp '{"name":"office-suite","command":"npx","args":["-y","@theluckystrike/mcp-office-suite"]}'
VS Code asks you to confirm you trust the server and its capabilities before it starts. Nothing runs until you answer.
The npm publish of @theluckystrike/mcp-office-suite is pending; until then use the .mcpb bundle or a clone and build from the latest release.
The suite starts five child processes, so it has no hosted form. Each of the five is served at https://mcp.zovo.one/mcp/<name> over MCP streamable HTTP instead: mint a free token with curl https://mcp.zovo.one/mcp/token, or use a Pro key as the bearer.
The top-level key is "servers", not "mcpServers". A config pasted from a Claude Desktop or Cursor README parses cleanly, contributes no servers, and gives you no error to read, which makes it the most expensive one-word mistake here. Alongside it an "inputs" array holds secrets. The newer Agent Host reads a workspace .mcp.json instead.
Free: each child keeps its own free tier. Pro is $39 once, verified offline.
The key is servers, not mcpServers. A config copied from a Claude Desktop README parses cleanly and contributes nothing. Rename it. On the newer Agent Host, use a workspace .mcp.json instead.
No. code --add-mcp takes the server object on the command line, and MCP: Add Server in the palette asks whether the target is Workspace or Global.
In Chat, behind the tools picker, once the server has started. Adding or changing one raises a prompt asking you to confirm you trust it; if the picker is empty, that prompt is usually still waiting.
The same server in Cursor and Windsurf · Every server in VS Code · Guides · VS Code docs