Claude connector for Nexus
Qry Nexus is an MCP server, so Claude can read the data products granted to each user, as that user. Google's Antigravity CLI (agy) connects the same way, from each user's computer, and needs nothing from an administrator beyond the products and grants (see Connect an assistant). This page is for the administrators who set it up: the Qry administrator and the owner of your Claude organization. What users do afterwards is in Connect an assistant.
Setting it up takes four steps:
- Make Qry reachable from Anthropic.
- Set Qry's Public URL.
- Add the connector to your Claude organization.
- Grant the data products.
How it works
User ── Claude (claude.ai, Desktop, Cowork, Code) ── Anthropic's cloud ── HTTPS ──► Qry /api/v1/mcp
│
Qry sign-in and consent page (password or SSO) ◄── browser ───┘
- The connector is called from Anthropic's cloud, not from the user's computer. That is true for claude.ai, Claude Desktop and Cowork, and for Claude Code when it uses the organization's connector.
- Qry is its own authorization server. Each user signs in to Qry as usual (password, Microsoft Entra ID or Google) and allows the connection once. No identity provider configuration is needed for this.
- The assistant is the user. It reads only the products granted to that person, with their row filters and masked columns. Every read is in the product's audit log under their name. It cannot chat, run queries or change anything else in Qry.
1. Make Qry reachable from Anthropic
Anthropic connects from 160.79.104.0/21 (Anthropic's published outbound range). Allow HTTPS (443) from that range to Qry. The connector, the sign-in metadata and the token endpoint all live under /api, so allowing /api/* is enough. The consent page itself is opened by the user's own browser.
There is no private-network option. Anthropic's documentation is explicit that a server on a corporate network, behind a VPN or behind a firewall that does not allow that range will not connect, even if it works from inside. If Qry cannot be exposed to that range, use Claude Code connected directly from each user's computer (see Connect an assistant): it reaches Qry wherever the computer does, VPN included.
Claude gives the sign-in endpoints 10 seconds to answer (30 for a token refresh). A WAF or proxy that holds responses can make connecting fail intermittently.
Ingress requirements
- Route
/apito the backend. Every endpoint Claude calls is under/api: the MCP server (/api/v1/mcp), its metadata (/api/v1/mcp/.well-known/oauth-protected-resource) and the authorization server (/api/oauth). - Do not answer
/.well-known/*at the root with a page. Claude first looks for the sign-in metadata athttps://<qry>/.well-known/oauth-authorization-server/api/oauth, and moves on to the/apiaddress only if that one answers with a 4xx. Qry's own frontend answers it 404. A rule of your own that serves a page there (an SPA fallback, a portal redirect) with a 200 breaks the connection. - Trust your proxy, for the audit log. For each read, the audit log records the address the call came from. Set
backend.env.TRUSTED_PROXY_CIDRS(Helm values) to the network your ingress pods or load balancer use, for example the cluster's pod network. Without it, Qry records the ingress's own address instead of Anthropic's or the user's. API clients with an IP allow-list need this too.
Check it
From outside your network:
# 401 that points Claude to the metadata
curl -si -X POST https://qry.your-company.com/api/v1/mcp \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | grep -i www-authenticate
# the metadata, as JSON
curl -s https://qry.your-company.com/api/v1/mcp/.well-known/oauth-protected-resource
curl -s https://qry.your-company.com/api/oauth/.well-known/openid-configuration
# 404, not a page
curl -s -o /dev/null -w '%{http_code}\n' \
https://qry.your-company.com/.well-known/oauth-authorization-server/api/oauth
The WWW-Authenticate header must carry resource_metadata="https://qry.your-company.com/api/v1/mcp/.well-known/oauth-protected-resource", and every URL in the metadata must start with your public address.
2. Set Qry's Public URL
In Admin → System Configuration → Application, set Public URL to the HTTPS address users and Anthropic use, for example https://qry.your-company.com. Qry builds every address it gives Claude from it: where to sign in, where to get tokens and where to download exports.
If it is not set, Qry falls back to the headers of each request and logs a warning. Behind a proxy that rewrites the host or the scheme, that gives Claude addresses it cannot use.
3. Add the connector to your Claude organization
On Claude's Team and Enterprise plans, only an Owner or Primary Owner can add a custom connector to the organization. On Enterprise, so can someone with a custom role that has Manage access to Libraries. On Pro and Max, each person adds it themselves.
- In Claude, go to Organization settings → Connectors and click Add.
- Name: for example Qry Nexus. Server URL:
https://qry.your-company.com/api/v1/mcp. - Authentication: Sign in when needed or Sign in now. Each person signs in to Qry for themselves.
- OAuth client: leave the default, Use Claude's published identity. Qry registers Claude automatically when it connects, so there is no client to create.
- Request headers: leave empty.
- Save.
Each member then finds the connector under Customize → Connectors, marked Custom, clicks Connect, signs in to Qry and clicks Allow on the consent page. The connector also appears in Claude Code for anyone signed in to Claude Code with the same Claude account.
What not to configure
- Do not put a Nexus access token in Request headers. A request header is the organization's credential: Claude sends the same one for every member. With a
qry_nx_token there, every person in your Claude organization would read Nexus as the person who created the token, with that person's grants, and the audit log would show only that person. - Do not choose No sign in. Qry refuses calls without a credential.
- Do not choose Use your own OAuth client. Qry does not ask you to create one.
- Managed authorization (Claude's organization-wide sign-in through Okta) is for connectors in Claude's directory and does not apply to Qry.
4. Grant the data products
The connector shows each person only what is granted to them. In Nexus, publish the products and grant them to the people, or better to a Qry group for them, with whatever row filter and column masks apply. See Granting access to a data product.
A person who signs in with Microsoft Entra ID or Google has a Qry account like anyone else. If you use AD group sync, granting a product to a synced group gives it to everyone in the Entra group.
Day to day
- Who is connected: each user sees their connections under Nexus → API Gateway → Connect an assistant → Connected assistants, and disconnecting one stops it at once.
- What they read: every call is in the product's Activity, under the person's name, with the tool that read it (
mcp:describe,mcp:query,mcp:export). - Tokens: a connection gets a one-hour access token that Claude renews by itself. Disconnecting, or deactivating the user in Qry, ends it.
- Registered clients: Claude registers a new client each time someone connects from scratch, so the list of registered clients grows over time. A client with no connection cannot read anything.
- Exports inside Claude: for Claude to download an export and analyse it in its own cloud environment (code execution), your Qry's domain must be allowed for code execution. An organization owner adds it in Claude's organization settings, under the code execution's allowed domains. Without it, Claude can still create the link, and the user downloads the file on their own computer.
Troubleshooting
Claude says it couldn't reach the MCP server.
Anthropic's range cannot reach Qry, or the 401 does not carry resource_metadata. Run the checks above from outside your network.
Claude reaches Qry but authorization fails.
The sign-in metadata is not where Claude looks: see the /.well-known rule under Ingress requirements. Or the Public URL is not the address Claude uses: every URL in the metadata must start with it.
The consent page says to open the connection in the same browser. The user opened the consent link in a different browser from the one Claude opened. They should start again from Claude.
The audit log shows an internal address for every call.
Set TRUSTED_PROXY_CIDRS, as described under Ingress requirements.
After upgrading Qry, the assistant still uses old options or misses new ones. Claude keeps the list of tools it read when the connector connected. Each user disconnects and connects the connector again (in Claude, Customize → Connectors) to pick up the new version.