Skip to main content
Every client uses the same URL:
Web clients sign in with OAuth — no key. Editor and CLI clients need an nj_sk_ key from Developers → Keys. MCP calls are billable, so a key marked read-only is rejected — mint a full-access key.
Settings → Connectors → Add custom connector. Name it NinjaChat, paste the URL, sign in when prompted. No API key.
Settings → Connectors → Advanced → enable developer mode. Then Create a connector, name it NinjaChat, paste the URL, and approve the OAuth sign-in. Enable it in the composer.
~/.cursor/mcp.json
Cursor Settings → MCP should show ninjachat with a green dot. If not, reload the window.
Verify with /mcp. Add --scope user to use it in every project.
Listed as failed? Use --transport http (not sse) and keep the whole "Authorization: Bearer …" string as one shell argument.
~/.codex/config.toml
Restart the session — config loads at launch.
TOML is picky: [mcp_servers.ninjachat] with an underscore, and http_headers as an inline table.
.vscode/mcp.json
Click the Start code lens above the entry, then use it in Copilot Chat’s agent mode.
~/.hermes/config.yaml
Start a new session — the dashboard’s MCP panel shows the connection.
Restart the gateway to load it.
Review or disconnect OAuth agents anytime in Developers → Agents.

Building your own OAuth client

NinjaChat is a full OAuth 2.1 authorization server, so any MCP client that speaks the standard flow connects without an API key:
  • Discovery. An unauthenticated request to the endpoint returns 401 with a WWW-Authenticate challenge pointing at https://www.ninjachat.ai/.well-known/oauth-protected-resource/api/mcp; the authorization-server metadata is at https://www.ninjachat.ai/.well-known/oauth-authorization-server.
  • Registration. Open Dynamic Client Registration at https://www.ninjachat.ai/api/oauth/register. Clients are public — there is no client secret — and the redirect_uri you authorize with must be one you registered. A client unused for 90 days is garbage-collected.
  • Authorization. https://www.ninjachat.ai/oauth/authorize with code_challenge_method=S256. PKCE is mandatory and plain is rejected; authorization codes expire after 60 seconds. The only scope is mcp.
  • Tokens. https://www.ninjachat.ai/api/oauth/token supports authorization_code and refresh_token. Access tokens (nj_at_…) last 1 hour; refresh tokens (nj_rt_…) last 30 days and rotate on every use — replaying a rotated refresh token revokes the whole token family. Revoke either token at https://www.ninjachat.ai/api/oauth/revoke.

Test it

Free, and proves auth end to end:
Then make something:
Treat nj_sk_ keys like passwords — prefer user-level config over committed files, and revoke anything that leaks.