Hosted MCP client guide
Connect once. Recover safely.
Compatible native clients can connect to Stele with OAuth dynamic client registration and S256 PKCE. Authorization happens in the browser with the user’s wallet; the hosted MCP server never receives a wallet key.
Public MCP resource
Use this exact endpoint
https://stele.monolythium.com/mcpFirst connection
- Request the endpoint without a token and follow the Bearer challenge’s
resource_metadataURL only when it equalshttps://stele.monolythium.com/.well-known/oauth-protected-resource/mcpexactly. A client that starts from the resource identifier can construct that well-known URL directly. - Fetch that protected-resource metadata and require its
resourcevalue to equalhttps://stele.monolythium.com/mcpexactly. Requireauthorization_serversto contain exactly one value, and require that selected value to equalhttps://stele.monolythium.comexactly. Do not use the metadata if any check fails. - Discover that selected authorization server. Require its returned
issuerto equal both that selected value andhttps://stele.monolythium.comexactly, and requirecode_challenge_methods_supportedto advertiseS256. Use only the endpoints from that validated document. - Allocate an ephemeral port and bind an HTTP listener only to a literal loopback IP,
127.0.0.1or[::1]. Start it before registration, then dynamically register that exact callback URI—including port and path—as a native public client. Stele issues no client secret. Do not send HTTP Basic client authentication. If registration fails, close the listener and stop. - Start Authorization Code flow with a fresh state value, PKCE verifier, and S256 challenge. Send
https://stele.monolythium.com/mcpon both the authorization and token requests. - Open the authorization URL in the browser. The user signs in with their browser wallet, reviews the named client and scopes, and approves or denies the request. Use a bounded response timeout; on browser-launch failure, abandonment, or timeout, close the listener and stop.
- Accept at most one callback on the registered loopback listener. As soon as the authorization response arrives, stop accepting new connections. Before parsing response parameters, require the scheme, loopback host, port, path, and any pre-registered query to match the callback exactly, then verify state. On denial, an OAuth error, or callback or state failure, close the listener and stop. For a valid code, close the listener before token exchange, then redeem the one-time code with the original verifier.
If Stele returns invalid_client
A cached public registration may be missing, expired, or revoked. Treat those cases identically and recover with one clean attempt:
- Close any old callback listener. Discard the cached client registration and its tokens for this exact issuer, resource, and redirect URI.
- Repeat protected-resource and authorization-server discovery, including every exact resource, issuer, and S256 validation above.
- Allocate and start a new loopback listener, then dynamically register once with its exact callback URI.
- Restart the complete browser authorization flow with a new state, verifier, and S256 challenge. Never reuse a state value, verifier, authorization code, or token.
- If that fresh registration, browser authorization, callback validation, or token exchange fails or times out, close the listener, stop, and surface the error. The listener must already be closed before token exchange. Do not create a registration loop.
Keep the client boundary narrow
Authoritative tool inventory
The authenticated tools/list response is authoritative. Treat a tool as unavailable unless that response includes its exact name.
stele_search_servicesreads the public catalog.- When listed,
stele_get_servicereads one finalized published listing, verifies its commitment, and returns its exact public Stele URL. It cannot access a private or unpublished draft. stele_create_booking_draftcan prepare a non-economic draft for explicit review in Stele.- When listed,
stele_create_provider_listing_draftcan create only a private, wallet-owned, unpublished listing draft and return its Provider Studio preview. It cannot list, read, update, delete, or publish existing drafts, and it cannot sign, submit, or settle a transaction. - The wallet owner can review and revoke connected clients in Stele.
Not available
- The hosted MCP cannot hold or export a wallet key.
- It cannot sign, submit, or settle a transaction.
- Economic actions, private rooms, connectors, and mainnet remain disabled.