StudioX MCP Simulators

Every way an MCP server can authenticate, live, with working credentials on this page. Point a client at it and each endpoint tells you what it saw.

https://mcp-simulators.studiox-ai.com
Nothing here is real, so you can get it wrong as often as you like โ€” and the errors are written to tell you which thing was wrong: a header name versus a key value, a scope versus a secret, an expired token versus a forged one.

Start here

No credential at all โ€” prove you can reach the server.

๐Ÿ”“

No authentication

no identity

Nothing to configure. Start here โ€” if this fails, the problem is the network or the server URL, not a credential.

Configure
Auth mode
None
Call
https://mcp-simulators.studiox-ai.com/api/open
Expect

200 with a server timestamp.

Credentials you paste

A fixed value you hold. Everyone using the server sends the same one.

๐Ÿ”‘

API key โ€” custom header

no identity

A static key in a header of the API's choosing. The most common enterprise mode after bearer.

Configure
Auth mode
I have an API key or token
Header name
X-API-Key
Value
sim-api-key-4d9e21
Call
https://mcp-simulators.studiox-ai.com/api/apikey
Expect

200, and authenticated_as is null โ€” a key identifies the application, not a person.

Watch for

Send the right key under the wrong header name. The 401 names the header it wanted and the credential-looking headers that arrived, so you can tell a naming mistake from a wrong key.

๐Ÿ”—

API key โ€” query string

no identity

The same key, in the URL instead of a header. Older APIs, and it behaves differently.

Configure
Auth mode
None โ€” put the key in the tool URL
URL
https://mcp-simulators.studiox-ai.com/api/querykey?api_key=sim-api-key-4d9e21
Call
https://mcp-simulators.studiox-ai.com/api/querykey?api_key=sim-api-key-4d9e21
Expect

200.

Watch for

The key ends up in access logs, browser history and any Referer sent onward. That is the trade-off of this mode, not a defect โ€” worth seeing once before choosing it.

๐ŸŽŸ๏ธ

Static bearer token

shared identity

A token you paste, sent as Authorization: Bearer on every call. No refresh, ever.

Configure
Auth mode
I have an API key or token โ†’ Bearer
Token
any token minted by /oauth/token or /login/*
Call
https://mcp-simulators.studiox-ai.com/api/whoami
Expect

200 naming whoever the pasted token belongs to.

Watch for

A pasted token expires silently. When it does, every tool on the server starts failing at once with no change on your side.

๐Ÿชช

HTTP Basic

shared identity

Username and password on every request. It does carry an identity โ€” but a stored one, the same for everybody using the server.

Configure
Auth mode
Basic Auth
Username / password
alice / alice (or bob, carol)
Call
https://mcp-simulators.studiox-ai.com/api/basic
Expect

200 naming alice.

Watch for

Everyone who uses this server is alice, whoever they actually are. That is the distinction from per-user sign-in.

๐Ÿงพ

Custom headers

no identity

Two or more fixed headers โ€” a credential split across headers, or a key plus a tenant or account header.

Configure
Auth mode
Custom Headers
X-Client-Id
sim-client-42
X-Client-Secret
sim-secret-c7f1
Call
https://mcp-simulators.studiox-ai.com/api/headers
Expect

200 listing both headers as verified.

Watch for

Send only one. The error names which is missing rather than a bare 401.

๐Ÿท๏ธ

Bearer plus a token-type header

carries a person

The token alone is not enough โ€” a second header says what kind of token it is. This is the Snowflake SQL API shape.

Configure
Auth
any bearer from /oauth/token or /login/*
Extra header
X-Sim-Token-Type: OAUTH
Call
https://mcp-simulators.studiox-ai.com/api/token-type
Expect

200 echoing the token type.

Watch for

Omit the header. The 401 mentions the token, so the failure looks like a rejected credential โ€” which is exactly how this goes wrong in real templates that forget to bake the header in.

Credentials the server fetches

The server logs in for a token and refreshes it. Still one credential for everybody.

๐ŸŽซ

OAuth 2.0 โ€” client credentials

shared identity

The server fetches and refreshes its own token. One token, shared by everyone who uses the server.

Configure
Auth mode
The API logs me in for a token โ†’ OAuth
Token URL
https://mcp-simulators.studiox-ai.com/oauth/token
Client ID
studiox-sim-client
Client secret
sim-secret-8f2a
Grant
client_credentials
Call
https://mcp-simulators.studiox-ai.com/api/whoami
https://mcp-simulators.studiox-ai.com/api/orders
Expect

whoami returns "Shared Service Account" with is_shared_service_account true, and orders returns all 9 rows.

Watch for

Credentials work in either a Basic header or the request body. The response reports which arrived as sim_credentials_via โ€” use it to check what the client actually did rather than what the form says.

๐Ÿ“

OAuth โ€” scope enforcement

shared identity

Right client, right secret, wrong scope. The token is genuine and still refused.

Configure
Token URL
https://mcp-simulators.studiox-ai.com/oauth/token
Scope
orders.read
Call
https://mcp-simulators.studiox-ai.com/api/scoped
Expect

200 with the granted scopes listed.

Watch for

Ask for a token with no scope, or a different one. You get 403 โ€” not 401 โ€” and the body says the credentials were fine and only the scope was wrong. Without that distinction this failure reads as a bad secret.

๐Ÿ”

Log in for a token (not OAuth)

carries a person

Username and password to a login endpoint, a token back, bearer afterwards. Exensio-shaped, and common in enterprise estates.

Configure
Auth mode
The API logs me in for a token โ†’ Log in for a token
Login URL
https://mcp-simulators.studiox-ai.com/login/nested
Body fields
username=alice, password=alice
Token path
data.token
Call
https://mcp-simulators.studiox-ai.com/api/whoami
https://mcp-simulators.studiox-ai.com/api/orders
Expect

whoami names alice; orders returns 3 EMEA rows.

Watch for

Five response shapes at /login/{token, access_token, nested, session, xauth} carry the same token under different key names. Try nested even if your API is simpler โ€” a client that only reads top-level keys breaks there, and the symptom looks like bad credentials.

๐Ÿ“ฎ

Custom header, no prefix

carries a person

The token goes in X-Auth-Token, raw. Two separate fields differ from their defaults at once.

Configure
Login URL
https://mcp-simulators.studiox-ai.com/login/xauth
Token path
token
Header name
X-Auth-Token
Token prefix
(empty)
Call
https://mcp-simulators.studiox-ai.com/api/xauth
Expect

200 naming the user.

Watch for

Leave the prefix as "Bearer " and it fails on purpose, saying so. A client that hardcodes the prefix cannot talk to this class of API at all.

๐Ÿ”„

Expiry and refresh

shared identity

Rejects any token issued more than 15 seconds ago, so the refresh path runs on demand instead of once an hour.

Configure
Auth
OAuth client credentials, as above
Call
https://mcp-simulators.studiox-ai.com/api/short-lived
Expect

200 immediately after getting a token; 401 with token_age_seconds once it passes 15. A client that refreshes on 401 recovers by itself.

Watch for

A client that caches its token and never refreshes fails here permanently. That is the bug this endpoint exists to surface.

Credentials a person grants

Each user signs in. Calls run as them, with their permissions.

๐Ÿ‘ค

Per-user OAuth (each person signs in)

carries a person

Every user connects their own account. Calls run as them, with their permissions โ€” not as a shared credential.

Configure
Register as
External MCP server: https://mcp-simulators.studiox-ai.com/mcp
Auth mode
OAuth โ€” each user signs in
Sign-in URL
https://mcp-simulators.studiox-ai.com/oauth/authorize
Token URL
https://mcp-simulators.studiox-ai.com/oauth/token
Client ID / secret
studiox-sim-client / sim-secret-8f2a
Redirect URI
anything โ€” nothing needs registering here
Call
https://mcp-simulators.studiox-ai.com/mcp
Expect

Sign in as alice, call list_orders, get 3 rows. As bob, 3 different rows. As carol, all 9.

Watch for

9 rows while signed in as alice means the call fell back to the shared credential. It still returns 200 โ€” the row count is the only signal.

Identities

Three people who see different data, plus a shared service account. That difference is what makes per-user auth visible: ask for orders as alice and you get three rows, as the shared account you get nine. Same call, same 200 โ€” only the data tells you whose identity arrived.

UsernamePasswordEmailRoleSees
alicealicealice@simulator.testANALYSTEMEA โ€” 3 orders
bobbobbob@simulator.testANALYSTAMER โ€” 3 orders
carolcarolcarol@simulator.testADMINall regions โ€” 9 orders
any client_credentials tokenall regions โ€” 9 orders, as the shared service account

Credentials

WhatValue
OAuth client โ€” StudioX (default)studiox-sim-client / sim-secret-8f2a
OAuth client โ€” Second clientsecond-client / sim-secret-b41c
API keysim-api-key-4d9e21
Custom headersX-Client-Id: sim-client-42 ยท X-Client-Secret: sim-secret-c7f1
Token-type headerX-Sim-Token-Type: OAUTH (or KEYPAIR_JWT)
Scope for /api/scopedorders.read

Login response shapes

The same token under five different key names. This is what the Token Path field is for.

URLResponseToken path
/login/token{ "token": "โ€ฆ" }token
/login/access_token{ "access_token": "โ€ฆ" }access_token
/login/nested{ "data": { "token": "โ€ฆ" } }data.token
/login/session{ "result": { "session": { "id": "โ€ฆ" } } }result.session.id
/login/xauth{ "token": "โ€ฆ" }token, header X-Auth-Token, empty prefix

Extra fields are accepted and echoed back, so you can prove the client sent them:

curl -s -X POST https://mcp-simulators.studiox-ai.com/login/nested \
  -H 'content-type: application/json' \
  -d '{"username":"alice","password":"alice","dbname":"PROD","dbschema":"PUBLIC"}'

Sixty-second check

# Connectivity, no credentials
curl -s https://mcp-simulators.studiox-ai.com/api/open

# A shared token โ€” note "is_shared_service_account": true, and 9 orders
TOKEN=$(curl -s -X POST https://mcp-simulators.studiox-ai.com/oauth/token \
  -d grant_type=client_credentials \
  -d client_id=studiox-sim-client \
  -d client_secret=sim-secret-8f2a \
  | sed -n 's/.*"access_token":"\([^"]*\)".*/\1/p')
curl -s https://mcp-simulators.studiox-ai.com/api/whoami -H "Authorization: Bearer $TOKEN"
curl -s https://mcp-simulators.studiox-ai.com/api/orders -H "Authorization: Bearer $TOKEN"

# Now as a person โ€” 3 orders, not 9
ALICE=$(curl -s -X POST https://mcp-simulators.studiox-ai.com/login/nested \
  -H 'content-type: application/json' \
  -d '{"username":"alice","password":"alice"}' \
  | sed -n 's/.*"token":"\([^"]*\)".*/\1/p')
curl -s https://mcp-simulators.studiox-ai.com/api/orders -H "Authorization: Bearer $ALICE"
Fake data only. No real credentials, customers or systems are reachable from here.
0 calls

No calls yet. Make one from your MCP client, or run a curl from any card above, and it will appear here within a couple of seconds.