A Single Endpoint for Every Environment
A Flux API's MCP server can be reached two ways. Each API has its own address, https://{environment_key}.fxns.io/{api_prefix}/_mcp. The other is a single endpoint — one address that works for every environment and every API, because it reads both out of the API key rather than out of the URL.
https://mcp.foxnose.net/_mcp
Both addresses work.
Connecting
The key is the whole configuration.
curl -sS -i -X POST https://mcp.foxnose.net/_mcp \
-H "Content-Type: application/json" \
-H "Authorization: Simple $PUBLIC_KEY:$PRIVATE_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
No environment key. No API prefix. No X-Host.
Choosing the API
The URL does not name an API, so one has to be chosen. The rule is deliberately boring:
- The key can read exactly one API → that API is used, and you send nothing extra.
- The key can read several → say which, with the
x-foxnose-prefixheader.
There is no third case. When several APIs are readable and no header is sent, the endpoint refuses rather than guessing — guessing would silently expose a different set of collections than you expected.
curl -sS -X POST https://mcp.foxnose.net/_mcp \
-H "Content-Type: application/json" \
-H "Authorization: Simple $PUBLIC_KEY:$PRIVATE_KEY" \
-H "x-foxnose-prefix: blog" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
The refusal tells you what to pick, so an agent can correct itself in one turn:
{
"message": "This key can read more than one API. Choose one with the x-foxnose-prefix header.",
"error_code": "prefix_required",
"detail": {
"available_prefixes": ["blog", "shop"],
"header": "x-foxnose-prefix"
}
}
Every response carries x-foxnose-prefix back, so you can always see which API you reached.
"Readable" means the read action. A key granted only create and update reaches no API here and gets a 403, because the prefix is chosen from the APIs the key can read. A key that should use the write tools needs read as well.
Authentication
Simple and Bearer work exactly as they do on the tenant address.
Two differences, both deliberate.
Secure is not supported here. Its signature covers the request path, the body and the date — and on this endpoint every API shares the path /_mcp, while x-foxnose-prefix is not part of the signed material. A captured request could therefore be replayed against a different API the key can read. Use Simple or a bearer token here, or keep using Secure on your environment's own address, where the signed path names the API.
A credential is always required, including for APIs with is_auth_required: false. A public API accepts anonymous MCP calls on its own address; here there is no credential to resolve an environment from, so an anonymous request is a 401.
What the errors mean
- Name
401- Description
No credential, an unusable one, or one this endpoint cannot resolve. A revoked key, a key whose environment was deleted or disabled, and a key that has never been seen all return the same body — deliberately, so the endpoint cannot be used to probe which keys exist.
- Name
403- Description
Authenticated, but not permitted: the requested
x-foxnose-prefixnames an API this key cannot read, or the key can read none at all.
- Name
400 prefix_required- Description
The key can read more than one API and none was named.
detail.available_prefixeslists the ones it can read.
- Name
404- Description
The single endpoint is not enabled on this deployment, or MCP is switched off for the resolved API.
- Name
503- Description
Credential lookup is momentarily saturated. Retry;
Retry-Aftersays when. This is never an authentication verdict — a503does not mean your key is wrong.
Server card
curl -sS https://mcp.foxnose.net/.well-known/mcp/server-card.json
Unauthenticated, and always reflects the live tool registry, so it matches what tools/list returns.
It lists all seven tools, which is a superset of what any given caller receives: the two write tools appear in a real tools/list only when the key grants create/update on the selected API. The card's notes field says so.
Which address to use
| Situation | Address |
|---|---|
| A catalogue or marketplace listing | single |
| A hosted connector with one URL field | single |
Signing each request with Secure | tenant |
| Anonymous access to a public API | tenant |
| Anything else | either |
Both addresses are fully supported.