How to Connect Your Warehouse to Claude, Cowork and ChatGPT

Claude Desktop launches an MCP server on your machine. Cowork, claude.ai and ChatGPT connect inbound from the vendor's cloud. Which route you need is decided by one question.

Connect MCP server to Claude, Cowork and ChatGPT: a local server launched on your own machine, against an HTTPS endpoint dialled inbound from the vendor cloud
You launch one. The vendor's cloud dials the other. Everything else follows from that. Source: Agami original diagram.

You have a semantic model that works. You introspected the schema, corrected the grain and the custom fields, signed the definitions off, and checked that the breakdown ties to the total. Locally it's done: no server, no port, no URL, and the credentials, the schema, and the results never left your machine.

Then someone on your team asks for access, and a week disappears.

It disappears in a predictable way. Someone edits a JSON config file trying to connect the MCP server to claude.ai, and nothing happens, because no amount of editing that file will ever reach claude.ai. The config file and the URL aren't two ways of doing the same thing. They point in opposite directions.

One distinction decides everything that follows: who opens the connection. Every MCP client is on one side of it or the other, and the symptom when you pick wrong is always the same, which is that no tools appear and nothing tells you why.

The payoff for getting it right is that your team asks data questions in the assistant they already have open, so the answer arrives in the same conversation as the work that prompted it, rather than in a separate tool someone has to remember to go and open.

Two routes: a local stdio server reaches the desktop and terminal clients, while Cowork, claude.ai, and ChatGPT connect inbound from the vendor's cloud to an HTTPS endpoint

The config file and the URL aren't two ways of doing the same thing. They point in opposite directions.

Route 1: the config file, for the desktop app

A local server runs as a child process on your own machine, talking over stdin and stdout. There's no URL and no port. Ask for it:

/agami-serve

That detects the right interpreter, installs what it needs, and merges the entry into your config with a timestamped backup. To do it by hand, open Settings → Developer → Edit Config, which opens claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

mcpServers is a top-level key, a sibling of preferences rather than something nested inside it:

{
  "mcpServers": {
    "agami": {
      "command": "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3",
      "args": ["-m", "mcp_harness"],
      "env": { "AGAMI_PROFILE": "main" }
    }
  }
}

Then fully quit the app, Cmd+Q on macOS or quit from the system tray on Windows, and reopen it. Closing the window doesn't reload the config, and that alone accounts for a good share of "it didn't work".

The two failures that look identical

Two details in those four lines cause nearly every silent failure, and both present the same way: you reopen the app and no tools appear. Nothing in the interface distinguishes them, which is why people fix the wrong one first.

  1. The Python path must be absolute, and it must be the interpreter that has your database driver. Desktop apps launch child processes with a minimal PATH, so a bare python3 usually isn't found at all. Get the right path by running, in the environment where your model already works:
python3 -c 'import sys, psycopg2; print(sys.executable)'

If that import fails, you've found your problem before you started: the interpreter you were about to point at doesn't have the driver.

  1. agami-core must be installed into that same interpreter, because the server runs as a module rather than a script:
"/abs/path/python3" -m pip install "agami-core[model]"

Installing it into whatever pip happens to be first on your PATH is the single most common version of this mistake.

Verify by asking what datasources do you see? If it answers with your profiles, the wiring is good.

Route 2: an HTTPS endpoint, for Cowork, the web app, and ChatGPT

No amount of editing that JSON will reach Cowork, claude.ai or ChatGPT, and it's worth understanding why before you spend an afternoon on it.

Those clients can't launch a process on your laptop. When you add a connector to Claude, Claude reaches it from Anthropic's cloud rather than from your device, and that holds even when you're sitting in the desktop app or in Cowork. ChatGPT supports remote MCP servers only; its documentation describes no local transport at all. A local stdio server, which is the whole point of route 1, is therefore unreachable from any of them by construction.

What they need is a URL:

/agami-deploy

That writes a ready-to-run container bundle, automatic TLS included, and what comes out is an MCP endpoint at https://your-host/mcp with per-user sign-in and an admin console for deciding who gets in.

Point its datasource at a read-only database role. That role is the boundary that doesn't depend on anything in the application behaving correctly, which is the only kind of boundary worth relying on once other people can reach the thing.

Connecting it in Claude

Go to Customize → Connectors, click +, choose Add custom connector, and paste https://your-host/mcp. This works from web, desktop or Cowork, because in all three the connection originates in Anthropic's cloud rather than on your device.

On Team and Enterprise an owner adds it once for everyone under Organization settings → Connectors → Add → Custom → Web.

Because the connection arrives from Anthropic's infrastructure, the endpoint has to be reachable from the public internet. If it sits behind a firewall, allowlist their published IP ranges rather than opening it up.

Connecting it in ChatGPT

First switch on developer mode under Settings → Security and login, which is what unlocks full MCP connectors, then add the same https://your-host/mcp URL as a connector.

Two constraints worth knowing before you plan around it. Developer mode is web only: the ChatGPT desktop app isn't a supported surface for MCP connectors, so there's no ChatGPT equivalent of route 1 at any point. And it needs a paid plan, currently Pro, Plus, Business, Enterprise or Education.

OpenAI has relocated this toggle more than once. If it's not under Security and login, look under Apps or Connectors before concluding your account lacks it.

Which route you actually need

If your team works in You need What you're wiring
Claude Code Nothing It already works
Claude Desktop Route 1 A config entry, a local process
Cowork Route 2 A public HTTPS endpoint
claude.ai in a browser Route 2 A public HTTPS endpoint
ChatGPT Route 2 A public HTTPS endpoint, web only

The pattern worth internalising: a config file configures something already running on your machine. A URL is something the vendor's cloud dials. Every symptom on this page traces back to that one line.

Which route you need is decided by where your team sits, not by what you would prefer to configure. Pick from the table, not from preference.

What this unlocks next

A model only you can reach answers your questions. A model your team can reach answers theirs, and that's the point where the numbers stop being something people look up and start being something other systems can act on.

That's the next step in this series. The read stays governed and read-only, and the systems that already own each action take it: a renewal risk becomes a follow-up task on the deal, a month-end exception becomes an email to finance, an incident pattern becomes a post-incident review. Agami never needs write access to your CRM to make the CRM update happen, because the connector that owns that write does it.

Getting the connection right is the prerequisite. Everything after this assumes your team can already ask.

Build one against your own schema.

agami-core is source-available. Point it at your warehouse, review what it drafts, and check whether the breakdown ties to the total.

Get agami-core or bring us the metric two teams define differently →

Frequently asked questions

Why does the desktop app show no tools after I edit the config? Almost always one of two things: the Python path isn't absolute or isn't the interpreter holding your database driver, or agami-core is installed into a different interpreter than the one named in the config. Both look identical from the app. Check the interpreter first with python3 -c 'import sys, psycopg2; print(sys.executable)'. Also confirm you fully quit the app rather than closing the window, because closing doesn't reload the config.

Can I use a local server with claude.ai or ChatGPT? No, and not because of a setting. Those clients open the connection from the vendor's cloud, so a process on your laptop is unreachable by construction. You need a URL they can dial.

Does my endpoint have to be on the public internet? It has to be reachable from the vendor's infrastructure, which for most teams means public with authentication in front of it. If it sits behind a corporate firewall, allowlist the vendor's published IP ranges rather than exposing the host.

Is there a ChatGPT version of the config-file route? No. ChatGPT's MCP support is remote-only and web-only, so every ChatGPT deployment is route 2. There's no local path to fall back on.

References

  1. agami-core: the local MCP server and the desktop config file
  2. Anthropic: get started with custom connectors using remote MCP
  3. OpenAI: ChatGPT developer mode
  4. agami-core semantic model format specification
  5. agami-core on GitHub