Other remote-MCP clients
Addhttps://openapi.enginy.ai/mcp and follow the client’s remote MCP instructions. If the client only speaks
stdio or SSE, place a bridge such as mcp-remote in front of Enginy MCP and let that bridge handle the remote
HTTP transport.
Advanced setup details
Everything below is mainly for people configuring clients in depth, debugging a connection, or building their own MCP experience.What a client needs in order to work with Enginy
An MCP client can integrate with Enginy if it supports:- remote Streamable HTTP MCP
- OAuth 2.0 Authorization Code + PKCE
- public-client token exchange with no client secret
- bearer access tokens and refresh tokens
Advanced: discovery model
Start from the hosted MCP URL:- the MCP host advertises protected-resource metadata
- the authorization server publishes OAuth authorization-server metadata
- the client can then follow the discovered authorization, token, revocation, and JWKS endpoints
Advanced: OAuth behavior
Enginy uses:- Authorization Code grant with PKCE (
S256) - bearer access tokens
- rotating refresh tokens
- no client secret for the hosted remote-client flow
- access tokens are short-lived
- refresh tokens rotate on every successful refresh
- reusing a refresh token after rotation returns
invalid_grant; an already-rotated active token chain is preserved - token refresh is checked against the current workspace policy, not only the original grant
Advanced: registration options
Enginy supports two useful patterns for public clients:1. Resource-server registration
Post to the hosted MCP server’s/register endpoint with:
2. Admin-managed registration
If your workspace pins trusted client IDs, an Enginy admin can pre-register the client from the Enginy side so the client ID is persisted in the workspace allowlist. Use this when you want a tighter production trust model than “any client ID is acceptable.”If your workspace leaves the allowed client-ID list empty, Enginy accepts any client ID that otherwise
passes the redirect-URI and scope checks. If you do pin client IDs, the client must match that allowlist
even when using dynamic registration.
Advanced: transport expectations
Enginy’s MCP transport is intentionally stateless:- no long-lived server-side MCP session is required
- requests are handled over Streamable HTTP with JSON responses enabled
- the same bearer token is forwarded into the matching OpenAPI route call
/mcp URL:
- 2026-07-28 and later: modern clients connect with
server/discoverand per-request_metaenvelopes - 2025-era revisions (up to 2025-11-25): legacy clients keep using the
initializehandshake, unchanged
server/discover (for example the official
TypeScript SDK v2 with versionNegotiation: { mode: 'auto' }) negotiate the modern era
automatically; every existing 2025-era client continues to work without changes.
For OpenAPI-derived tools, the input contract is normalized into these keys:
pathParamsquerybody
Advanced: tool-generation rules
This is important if you are building a client UX around tool discovery. Enginy generates tools from the public OpenAPI schema:- summaries become tool names when possible
- if names would collide, Enginy falls back to method-plus-path names
- only JSON request bodies are surfaced
- required scopes come from the OpenAPI route description metadata
Advanced: compatibility aliases
Some MCP clients assume shorthand OAuth paths. Enginy supports both the canonical and shorthand forms:- authorization: canonical
/api/v1/mcp/oauth/authorize, alias/authorize - token: canonical
/api/v1/mcp/oauth/token, alias/token - revocation: canonical
/api/v1/mcp/oauth/revoke, alias/revoke
Client support matrix
Find the dedicated setup page for Claude, Codex, Cursor, VS Code, Gemini CLI, Microsoft 365 Copilot, or
ChatGPT.
FAQ / known limitations
See the current constraints before you assume a client or workflow should work.