> ## Documentation Index
> Fetch the complete documentation index at: https://zenofirm.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Connecting a chat client

> Where the installer registered the server for each client, the manual route, and what to check when the tools don't appear

The server speaks MCP over stdio, so any client that does too can drive it. The installer offers to connect the four common ones — Claude Desktop, Claude Code, ChatGPT Desktop, and Codex — as its last step. This page is what that step wrote, how to write it yourself, and what to check when a client doesn't show the tools.

## What the installer registered

| Client                                 | Server name   | Where                                                                                      |
| -------------------------------------- | ------------- | ------------------------------------------------------------------------------------------ |
| Claude Desktop                         | `Zeno for QB` | `%APPDATA%\Claude\claude_desktop_config.json`                                              |
| Claude Desktop (Microsoft Store build) | `Zeno for QB` | `%LOCALAPPDATA%\Packages\Claude_<id>\LocalCache\Roaming\Claude\claude_desktop_config.json` |
| Claude Code                            | `zeno-for-qb` | User scope, via the `claude` CLI                                                           |
| ChatGPT Desktop                        | `zeno-for-qb` | `%USERPROFILE%\.codex\config.toml`                                                         |
| Codex                                  | `zeno-for-qb` | `%USERPROFILE%\.codex\config.toml`                                                         |

<Note>
  The two Claude Desktop builds do not share a config. The Store build is packaged, so what it writes to `%APPDATA%\Claude` actually lands under `LocalCache` — and on a machine with only that build, `%APPDATA%\Claude` doesn't exist at all. The installer registers with both builds when both are present.

  **Claude Desktop and Claude Code are also separate registries**, not two names for one. Tools showing up in Claude Code says nothing about whether Claude Desktop has them.
</Note>

Config files are merged, not overwritten: the installer reads what's there, adds or updates its own entry, and leaves every other server alone. Before its first change to a file it saves a copy next to it with a `.zeno-backup` extension.

A client that isn't installed is skipped without complaint. The installer's last page names each one it connected to, and each one it skipped — read it before closing the installer, because it's the quickest answer to "why doesn't my chat client see this".

Registration is a tick box on the installer's **Select Additional Tasks** page, which a firm that manages client configuration centrally can clear. Run it later, or again, with:

```powershell theme={null}
& "$env:LOCALAPPDATA\Programs\Zeno\qb-mcp\qb-mcp.exe" --register
```

Re-running is safe. It updates the existing entries rather than adding second ones.

## Restarting the client

Every client reads its server list at startup, so restart each one you use after installing or upgrading. A client that was open during the install shows no Zeno tools until it restarts, and this is the fix for most "the tools aren't there" reports.

<Warning>
  Closing Claude Desktop's window doesn't stop it. Quit it properly — right-click its icon in the notification area and choose **Quit** — then open it again. A copy still running in the background never re-reads its config, so the restart appears to change nothing.
</Warning>

In Claude Code, start a new session; an open one keeps the server list it started with.

## Registering by hand

If registration was declined, or configuration comes from a deployment tool, write the same entries yourself. The installed program is `%LOCALAPPDATA%\Programs\Zeno\qb-mcp\qb-mcp.exe`.

### Claude Desktop

Add to `mcpServers` in `%APPDATA%\Claude\claude_desktop_config.json`:

```json theme={null}
{
  "mcpServers": {
    "Zeno for QB": {
      "command": "C:\\Users\\<you>\\AppData\\Local\\Programs\\Zeno\\qb-mcp\\qb-mcp.exe",
      "args": []
    }
  }
}
```

### Claude Code

```powershell theme={null}
claude mcp add zeno-for-qb --scope user -- "$env:LOCALAPPDATA\Programs\Zeno\qb-mcp\qb-mcp.exe"
```

`--scope user` makes the server available in every project rather than only the current directory.

### ChatGPT Desktop and Codex

Both read `%USERPROFILE%\.codex\config.toml`. Add:

```toml theme={null}
# BEGIN Zeno for QuickBooks Desktop
[mcp_servers."zeno-for-qb"]
command = "C:\\Users\\<you>\\AppData\\Local\\Programs\\Zeno\\qb-mcp\\qb-mcp.exe"
startup_timeout_sec = 30
tool_timeout_sec = 600
default_tools_approval_mode = "writes"
# END Zeno for QuickBooks Desktop
```

The ten-minute tool timeout is deliberate: reports, mirror syncs, and large batches legitimately run past Codex's default. `default_tools_approval_mode = "writes"` lets reads run without a prompt while every write asks first. Keep the marker comments — the installer replaces only what sits between them when it upgrades the entry.

## ChatGPT on the web or on a phone

ChatGPT web and mobile can't use this, and no configuration changes that. QuickBooks Desktop exposes an in-process, 32-bit COM server, so this software runs as a local process on the QuickBooks workstation — and a browser tab or a phone can't launch one. Use the ChatGPT desktop app on the same Windows machine as QuickBooks, or Codex.

## The ChatGPT and Codex plugin

`zeno-quickbooks-desktop-plugin-<version>.zip` ships next to the installer. It adds four workflow skills — workstation setup, review-gated batches, financial analysis, and cross-session continuity — that hold ChatGPT and Codex to the discipline these docs describe: plans shown in full, approval before posting, work logged.

The plugin contains no server. It names the installed `zeno-for-qb` server as its dependency, so install the Windows product first, then the plugin, then restart ChatGPT Desktop or Codex. Without the server, the skills can only tell you to install it.

It's optional. Every tool works without it.

## Setup from any client

`qb_setup` walks a new workstation through [discovery and registration](/docs/quickbooks-desktop/companies), and it exists in three forms because clients disagree about what they surface: an MCP prompt, a tool with the same name, and the plugin's setup skill. Claude Desktop lists prompts behind its attachment menu, and some clients don't show prompts at all. If you can't find the prompt, ask for the `qb_setup` tool by name — the guidance is identical.

## When a client doesn't list the tools

Restart the client first. A client that was open during install hasn't read the new entry, and quitting Claude Desktop means quitting it from the notification area rather than closing its window.

**If a restart doesn't do it, ask a client that does work.** From 1.2.0-beta.6, `qb_doctor` reads the Claude Desktop configuration on the machine and reports what it finds there — no entry at all, an entry under a name the installer doesn't use, the same server listed twice, or a file it couldn't read — with the fix for each:

```
Run qb_doctor
```

This is worth doing from Claude Code when Claude Desktop is the one that's broken: the client that can't see the server is the one client that can't tell you why.

<Note>
  Registering under a name of your own works, but the installer adds its own entry beside it on the next upgrade rather than claiming a key it didn't write — leaving two entries serving identical tools. Use `Zeno for QB` for Claude Desktop and the tables above hold true through upgrades.
</Note>

Failing that, or on an earlier version, read `register-summary.txt` next to the program in `%LOCALAPPDATA%\Programs\Zeno\qb-mcp\`. It's the same list the installer's last page showed, and it says which clients were connected and which were skipped. Then check the registration itself:

* **Claude Desktop** — `%APPDATA%\Claude\claude_desktop_config.json` should have a `Zeno for QB` entry under `mcpServers`. **If that file doesn't exist, you're on the Store build**: look under `%LOCALAPPDATA%\Packages\Claude_<id>\LocalCache\Roaming\Claude\` instead. Paste this into PowerShell to find whichever you have:

  ```powershell theme={null}
  Get-ChildItem "$env:APPDATA\Claude\claude_desktop_config.json", `
    "$env:LOCALAPPDATA\Packages\*Claude*\LocalCache\Roaming\Claude\claude_desktop_config.json" -ErrorAction SilentlyContinue
  ```

* **Claude Code** — run `claude mcp list`. If the server is missing, add it with the command above. Being registered here says nothing about Claude Desktop; they're separate.

* **ChatGPT Desktop and Codex** — `%USERPROFILE%\.codex\config.toml` should contain the block between `# BEGIN Zeno for QuickBooks Desktop` and `# END Zeno for QuickBooks Desktop`.

One more signal for Claude Desktop: it writes a log per server it launches, at `logs\mcp-server-Zeno for QB.log` inside its config folder. If that file doesn't exist, Desktop never tried to start the server — which means the entry isn't in the config file Desktop actually reads, not that the server is broken.

If a config file was broken — by any tool, not just this one — the copy saved before this software's first change is next to it with a `.zeno-backup` extension.

Still stuck? [Contact support](https://zenofirm.com/support) with `register-summary.txt` and that log folder listing; those two answer most of it.

Everything past registration — the authorization prompt inside QuickBooks, "Request Processor not found" — is on the [install page](/docs/quickbooks-desktop/install#when-it-doesnt-connect).
