Connect your client
Every client needs the same two things: the endpoint and your API key sent as a bearer token.
URL: https://appatools.com/mcp-studio/api/headless/mcp
Header: Authorization: Bearer msk_live_your_key
Create the key in Account > API Keys. It is shown once, so copy it before you close the dialog. Keep it out of files you commit; where a client can read the key from an environment variable, the examples below do that.
Claude Code
claude mcp add --transport http headless-context \
https://appatools.com/mcp-studio/api/headless/mcp \
--header "Authorization: Bearer msk_live_your_key"
Run /mcp in a session to check that headless-context is connected.
Claude Desktop
Claude Desktop's connector settings support OAuth but not a custom header, so
connect through mcp-remote, which
runs locally and forwards the header. Open Settings > Developer >
Edit Config and add:
{
"mcpServers": {
"headless-context": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://appatools.com/mcp-studio/api/headless/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer msk_live_your_key"
}
}
}
}
The header value goes in env because some systems split arguments at the space
in Bearer msk_live_.... Restart Claude Desktop afterwards. This needs Node.js
installed.
Cursor
Add the server to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:
{
"mcpServers": {
"headless-context": {
"url": "https://appatools.com/mcp-studio/api/headless/mcp",
"headers": {
"Authorization": "Bearer ${env:MCP_STUDIO_API_KEY}"
}
}
}
}
Set MCP_STUDIO_API_KEY in the environment Cursor starts from, or replace the
placeholder with the key itself in a file you do not commit.
Codex
The Codex CLI, the Codex IDE extension, and the ChatGPT desktop app share
~/.codex/config.toml:
[mcp_servers.headless-context]
url = "https://appatools.com/mcp-studio/api/headless/mcp"
bearer_token_env_var = "MCP_STUDIO_API_KEY"
Then set the variable in the shell Codex starts from:
export MCP_STUDIO_API_KEY="msk_live_your_key"
bearer_token_env_var takes the name of an environment variable, not the
key. If you put the key there, Codex looks for a variable with that name, finds
none, and skips the server. The ChatGPT desktop app may not see variables from a
terminal profile; in that case send the header directly:
[mcp_servers.headless-context]
url = "https://appatools.com/mcp-studio/api/headless/mcp"
http_headers = { "Authorization" = "Bearer msk_live_your_key" }
Open a new session after adding it, then type /mcp to see the tools.
VS Code
Add the server to .vscode/mcp.json. VS Code prompts for the key the first
time and stores it for you:
{
"inputs": [
{
"type": "promptString",
"id": "mcp-studio-api-key",
"description": "MCP Studio API key (msk_live_...)",
"password": true
}
],
"servers": {
"headless-context": {
"type": "http",
"url": "https://appatools.com/mcp-studio/api/headless/mcp",
"headers": {
"Authorization": "Bearer ${input:mcp-studio-api-key}"
}
}
}
}
Other clients
Any client that supports streamable HTTP and custom headers works. Use the URL and header at the top of this page. A client that can only connect with OAuth or with no authentication, such as ChatGPT on the web, cannot send an API key and cannot connect.
To check the connection without a client:
curl -s https://appatools.com/mcp-studio/api/headless/mcp \
-H "Authorization: Bearer msk_live_your_key" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_servers","arguments":{}}}'
If it does not connect
| What you see | What it means |
|---|---|
HTTP 401, "needs an MCP Studio API key" | No msk_live_ key reached the server. Check the header name and the Bearer prefix. A server access token (mcps_live_) is not accepted here. |
HTTP 401, "That MCP Studio API key is not valid" | The key was mistyped or has been revoked. Create a new one. |
HTTP 429 | More than 120 requests in a minute. Wait for the time in Retry-After. |
| Connected, but no tools | Check your client's own log first. In Codex, the usual cause is a key placed in bearer_token_env_var. |