OpenAI’s connector form does not offer “API Key” or “Bearer token” as an authentication mode. As of early 2026 the choices are:
| Mode | What it means | Works with OwnSona? |
|---|---|---|
| No auth | ChatGPT sends no Authorization header. | Only with mitigation; see below. |
| OAuth | Full OAuth 2.1 + PKCE flow against the MCP server. | No — OwnSona v1 has no OAuth endpoints. |
| Mixed | Hybrid; behavior driven by the 401 WWW-Authenticate response. | Worth trying first. |
Four practical paths:
Use OwnSona only from the Responses API (see Responses API),
where you can attach Authorization: Bearer <token> directly.
Lowest-friction option that keeps the bearer-token security model
intact. Recommended until OAuth lands.
Pick Mixed in the connector form and save. OwnSona returns
401 Unauthorized with WWW-Authenticate: Bearer
realm="ownsona", which is the standard signal for “this resource
needs a bearer token.” Some ChatGPT versions follow that signal and
prompt for a token. Paste OWNSONA_API_TOKEN and it works.
If ChatGPT instead reports an OAuth discovery failure (no
/.well-known/oauth-authorization-server endpoint exists),
fall back to options C or D.
Unverified for any specific ChatGPT version — the UI evolves.
Pick No auth in the connector form, but include the bearer token
as a ?token= query parameter in the connector URL:
https://ownsona.example.com/mcp?token=<OWNSONA_API_TOKEN>
OwnSona’s authenticate() looks for the token in the
Authorization header and falls back to the token
query parameter, so this works alongside the API path without
breaking anything.
Security tradeoff. A token in a query string is logged by web
servers in places a header is not — by default Tomcat’s
AccessLogValve writes the full request line including the
query. OwnSona mitigates this by setting the AccessLogValve
pattern to "%m %U %H" (method, URI without query,
protocol) instead of "%r". Verify after deploy that
localhost_access_log.<today>.txt shows
POST /mcp HTTP/2.0 with no token= substring.
The remaining exposure is human factors: the connector URL is now a secret. Don’t paste it into Slack, screenshots, or shared docs.
Front OwnSona with an OAuth-capable proxy (Cloudflare Access,
oauth2-proxy, Pomerium). ChatGPT does the OAuth dance with the
proxy, the bearer token flows through to OwnSona transparently.
Spec-compliant but more infrastructure.