---
title: "Claude Desktop: stdio or an OAuth connector"
summary: "A shipped integration with two routes, and which one is right depends on who is installing it. A developer with the engine checked out runs it over local stdio, where the client launches the process itself, so there is no listener and no credential because there is no second party. Everybody else installs it as a remote connector over OAuth, which takes one piece of setup on our side and a single-use install ticket on yours. Read the discovery gap in the limits below before you plan an install around the connector."
canonical_url: https://entitybind.com/integrations/claude-desktop
last_updated: 2026-10-12
copy: full
---

# Claude Desktop: stdio or an OAuth connector

> A shipped integration with two routes, and which one is right depends on who is installing it. A developer with the engine checked out runs it over local stdio, where the client launches the process itself, so there is no listener and no credential because there is no second party. Everybody else installs it as a remote connector over OAuth, which takes one piece of setup on our side and a single-use install ticket on yours. Read the discovery gap in the limits below before you plan an install around the connector.

Canonical page: https://entitybind.com/integrations/claude-desktop
Last updated: 2026-10-12

## Entity Bind and Claude Desktop

Shipped integration

A shipped integration with two routes, and which one is right depends on who is installing it. A developer with the engine checked out runs it over local stdio, where the client launches the process itself, so there is no listener and no credential because there is no second party. Everybody else installs it as a remote connector over OAuth, which takes one piece of setup on our side and a single-use install ticket on yours. Read the discovery gap in the limits below before you plan an install around the connector.

- What this is: A shipped integration
- Steps to working: 4 below
- Limits: 4 below
- Written back to your systems: Nothing
- To install: A JSON object

Before you build any of it: The answers land on your own rows before any code does, and looking costs no integration work. [Start free →](https://app.entitybind.com/app?signup=1)

By [James Rooney](https://entitybind.com/about), founder of Entity Bind · Last revised 12 October 2026

## How you get a key

Create your workspace online and verify your email, then create your own read or resolve API keys, each shown once and revocable. Free includes 300 credits and needs no card. Paid subscriptions are purchased through Stripe in Billing, with applicable VAT and no automatic usage or overage charges.

`host.example.com` is a placeholder everywhere below, and a client configured against it will not connect. The hosted base URL is https://app.entitybind.com. Replace the placeholder with that origin; registry checks follow your activated plan.

The full-pipeline evaluation is arranged separately and is not activated by signup. Request it for your workspace; we confirm availability, sources and the start date before activation. It starts with a conversation about your file.

Create your workspace online, verify your email and create your own API key. Free includes 300 credits and shallow matching with no card; choose a paid subscription in Billing when you need registry checks. [Start free →](https://app.entitybind.com/app?signup=1)

## Getting Claude Desktop answering

Every block below is the shipped server's own configuration. The identifiers a running process actually reads — module paths, environment variable names, header names — are exact; the values beside them are placeholders, and the key under mcpServers is a display name that nothing on either side of the wire reads.

### 01 Local stdio, for a developer evaluating

The client launches the process and talks to it over pipes. The config holds database credentials directly, so this route belongs on a machine whose operator already has them. It serves one configured tenant and nothing else, at the Scale plan, and every call is metered against the key id mcp_stdio, so an evaluation on a laptop never arrives in a usage export looking like customer traffic. The module path and the environment variable names below are the engine package's own, verbatim: the process reads exactly those strings, which is why they carry the engine's name rather than the product's.

```
{
  "mcpServers": {
    "entitybind": {
      "command": "uv",
      "args": ["run", "python", "-m", "resolvd.mcpserver"],
      "env": {
        "RESOLVD_DATABASE_URL": "postgresql+asyncpg://user@localhost/dbname",
        "RESOLVD_MCP_TENANT_ID": "ten_acme",
        "RESOLVD_ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}
```

### 02 Remote connector, for everybody else

Three actors in a fixed order. We register the connector once against your client's exact redirect URI — matched by exact string equality, so a trailing slash is a different URI and a wildcard is refused. Your tenant administrator then mints a single-use install ticket with an admin-scoped key; it appears in that response and nowhere else, works once, and expires in fifteen minutes. The person installing pastes the server URL into the client, the client runs the authorisation-code flow, and the consent page asks for the ticket.

```
# 2. A tenant administrator mints the single-use install ticket:
curl -sX POST "$BASE/v1/admin/oauth/install-tickets" \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"tenant_id":"ten_acme"}'

# 3. The person pastes the server URL into the client. PKCE is required and
#    S256 only; plain is refused permanently. Every client is public — there
#    is no client_secret and no field for one.
```

### 03 Know what the ticket authorises

A tenant, not a person. The OAuth flow carries no end-user identity — no users, no passwords, no sessions and no upstream identity provider behind the consent page — so there is nobody for the authorisation server to authenticate at the consent step. Anyone holding a ticket authorises as that tenant, and the audit trail records which admin key minted it rather than who used it. Design the install around that. It is also why a ticket works once and expires quickly.

### 04 Tell the agent what an abstention is

Put two things in the agent's own instructions before it calls anything. An abstention is a successful answer rather than an error: the tool returns a ranked shortlist, a typed reason, the column that would have decided, and a review id, and it costs nothing. And a confidence number is read against the recorded evidence behind that particular decision, not as a universal score. Confidence bounds depend on the recorded evidence population; there is no universal score for every match. Read match_confidence_basis and the evidence. A 0.99 filter can return some v8 adjudicated matches while excluding valid identifier matches, so validate its coverage cost on your own inputs.

If a step above fails against your own deployment, send us what the client reported rather than working around it. [Talk to us →](https://entitybind.com/contact)

## What this route gets you

Every surface runs the same pipeline: the same cascade, the same confidence floor, the same evidence and the same credit rule. These are the things this route adds on top of it.

- The same eleven tools, the same pipeline and the same credit rule as every other surface.
- On stdio: an evaluation with no listener, no credential and no proxy to arrange, metered separately so it never shows up in your usage figures as customer traffic.
- On the connector: an install a non-developer can complete, with the grant written against the tenant the ticket names and an access token that is presented exactly as an API key is — verified by the same code path, so there is one implementation of "is this credential valid" rather than two.

## What it will not do

4 properties to build around, rather than to meet later in a client's logs. Each one changes what an agent or a repository can safely do on this surface.

01. The OAuth discovery gap, and the one to read before you plan a connector install. An unauthenticated tool call comes back as an HTTP 200 tool error rather than a 401, because authentication happens per tool rather than in transport middleware. A client that waits for a 401 challenge to begin its OAuth flow will never begin it: it calls the tool, reads a tool error, and reports a broken server. OAuth works for clients you can point at the authorisation server, and for discovery-driven clients only where the MCP path and the API share an origin.
02. There is no dynamic client registration endpoint. We register your client by hand, once, against an exact redirect URI.
03. OAuth is resolve-only. Review authority — the credential that approves a merge — is never minted through a connector grant, because the credential that approves a merge should not be the credential that proposed it.
04. The stdio route is not a deployment. It holds database credentials in a config file and serves a tenant fixed at startup, so it belongs on an operator's own machine and nowhere else.

Check these integration limits before building. Create your Free workspace to inspect your own rows and keys; contact us if you need help choosing a supported integration shape. [Start free →](https://app.entitybind.com/app?signup=1)

## The other ways in

3 of the 6 are shipped integrations and 3 are patterns over the HTTP API. Every card says which kind it is, so you know what you are scoping before you open it.

- [Claude Code](https://entitybind.com/integrations/claude-code) (Shipped): 4 steps · 4 named limits
- [Cursor](https://entitybind.com/integrations/cursor) (Shipped): 4 steps · 3 named limits
- [Snowflake](https://entitybind.com/integrations/snowflake) (Pattern): 4 steps · 5 named limits
- [Salesforce](https://entitybind.com/integrations/salesforce) (Pattern): 4 steps · 5 named limits
- [Python](https://entitybind.com/integrations/python) (Pattern): 4 steps · 5 named limits

Claude Desktop sits with Claude Code and Cursor on the same shelf: configure and call. If you are weighing a shipped integration against a pattern, [the line between the two shelves](https://entitybind.com/integrations#the-line) is drawn on the hub.

Whichever surface you land on, the cheapest first move is the same: a few hundred of your own rows. [Start free →](https://app.entitybind.com/app?signup=1)

## What to read next

The work this surface is installed to do, the method behind the answers it returns, and the terms those answers use. Each card names its own shelf.

- [AI agents](https://entitybind.com/use-cases/ai-agents) (Use case): A counterparty check before the agent acts, and a receipt for what it acted on.
- [Entity resolution for AI agents](https://entitybind.com/guides/entity-resolution-for-ai-agents) (Guide): An agent about to pay or contract a counterparty needs a decision with a receipt, not a similarity score. Why abstention is the safe default for an autonomous caller, and what the MCP surface exposes.
- [MCP (Model Context Protocol)](https://entitybind.com/glossary/mcp) (Definition): The Model Context Protocol is an open standard for connecting AI assistants to external tools and data, so that a model can call a system's real operations instead of being told about them in a prompt.
- [Tool call](https://entitybind.com/glossary/tool-call) (Definition): A tool call is a single invocation of an exposed operation by a model or agent, with structured arguments and a structured result — the unit that is authenticated, metered and audited.
- [Abstention](https://entitybind.com/glossary/abstention) (Definition): An abstention is a first-class 'we do not know' returned instead of a match: the record comes back unresolved, with a ranked shortlist, a typed reason and the column that would have decided it.

## Start with a file, not an integration.

Create your workspace, verify your email and run your first company file. The Free plan needs no card. Create API keys in your workspace when you need an integration.

[Start free](https://app.entitybind.com/app?signup=1) · [Read the MCP docs](https://entitybind.com/mcp)

300 credits. No card.

For a guided review of your file, explore [the Merge Safety Sprint](https://entitybind.com/audit-pack).

## Questions about Claude Desktop

### Do I need OAuth to use the MCP server?

No. Try the static bearer path first: the rk_ key you create in your Entity Bind workspace is the whole credential, presented unchanged in an Authorization header on every request. A hosted MCP server is widely assumed to require OAuth, which makes a working bearer path read as broken unless somebody says otherwise. OAuth exists for the consumer-shaped install, where somebody pastes a URL into a client and will not paste an API key into a dialog. Both end up in the same place — an OAuth access token is verified by the same code path as an API key.

### How do I get a key?

Request access with your company or project, input fields and jurisdictions; a file is optional. Create your Entity Bind workspace online and verify your email — self-service signup is available — and you sign in and create your own keys there: read or resolve scope, each shown once, revocable. The workspace starts on the Free plan, a shallow integration tier, and the base URL comes with it; paid plans are available in workspace Billing and registry checks follow your active plan. The planned 1,000-credit evaluation includes full research depth. The full-pipeline evaluation is arranged separately and is not activated by signup. Request it for your workspace; we confirm availability, sources and the start date before activation. Usage is tracked without automatic overage charges. Paid subscriptions are available in workspace Billing through Stripe.

---

Internal fixtures only. The historical 2026-08-29 per-tier recording covers 317 GB companies with identifier-rich arrivals seeding the catalogue first; the context tier includes country and registered-town prose. Its legacy replay has no full-prompt-verified calls and cannot certify current calibration. The September 5 CI reports cover 1,176 labelled pairs and 705 records over 250 companies using offline stubs. These are not independent customer holdouts or live production validation; the 99% minimum-input product target remains unmet. Scope is company and organisation identity only — not people, vessels, bank-account ownership, sanctions or emissions. Results may not be used for eligibility decisions about individuals, including employment, credit and tenancy.

Entity Bind resolves companies and organisations only. It does not resolve people, vessels, bank-account ownership, sanctions exposure, emissions or geolocation, and its results may not be used for eligibility decisions about individuals, including employment, credit and tenancy.

This is the Markdown copy of https://entitybind.com/integrations/claude-desktop, assembled from the same data the page renders and carrying every sentence, table row, figure and question the page's main content carries. The HTML page is canonical; it adds the layout, the navigation and the interactive parts (the ask panel, the forms), which a copy can name but not run. Every page on the site, with a line on each: https://entitybind.com/llms.txt.
