# Connecting to the QuickHost MCP server Endpoint: https://api.quickhost.ing/mcp Transport: Streamable HTTP There is no anonymous access, and two ways to authenticate. Which one you use is decided by your client, not by you: 1. A static token. Send `Authorization: Bearer qh_...` on every request. This is what CLI-style clients do — Claude Code, Codex, Gemini CLI, Cursor, VS Code — because they let you set a header. 2. OAuth. Clients that take a URL and no header — the ChatGPT and Claude connector UIs — get pointed at the authorization server by the 401 this endpoint returns (RFC 9728, `WWW-Authenticate: Bearer resource_metadata`), register themselves, and send you through a normal sign-in. You paste the URL and approve; there is no token to copy. Advertised at https://api.quickhost.ing/.well-known/oauth-authorization-server: authorization_code + refresh_token, PKCE S256, dynamic client registration, public clients (`none`), scope `mcp`. ## Get a token first (for the header-based clients) Skip this if you are using a connector — ChatGPT or Claude Desktop will sign you in instead. Create one at https://app.quickhost.ing/settings under API tokens. It is shown once. It looks like `qh_` followed by random characters. Treat it like a password: it can publish, change visibility, and read your clients' comments. Below, TOKEN means that value. ## Tools (17) - publish - update - list_projects - list_folders - create_folder - update_folder - delete_folder - move_project - get_comments - resolve_comment - reply_comment - edit_comment - delete_comment - set_visibility - create_share_link - get_project_link - get_analytics ## Claude Code claude mcp add --transport http quickhost https://api.quickhost.ing/mcp \ --header "Authorization: Bearer TOKEN" Then `/mcp` in a session lists the tools. This is the shortest path and the one most likely to already work. ## Codex CLI (ChatGPT) Add to ~/.codex/config.toml: [mcp_servers.quickhost] url = "https://api.quickhost.ing/mcp" bearer_token_env_var = "QUICKHOST_TOKEN" Then export QUICKHOST_TOKEN=qh_... before starting Codex; it reads the variable at connect time and sends it as the Authorization header. `codex mcp add quickhost --url https://api.quickhost.ing/mcp` writes the url line for you, but not the token. If you would rather set the header outright: [mcp_servers.quickhost] url = "https://api.quickhost.ing/mcp" http_headers = { "Authorization" = "Bearer qh_..." } ## Gemini CLI Add to ~/.gemini/settings.json (or .gemini/settings.json in a project): { "mcpServers": { "quickhost": { "httpUrl": "https://api.quickhost.ing/mcp", "headers": { "Authorization": "Bearer qh_..." } } } } Use "httpUrl", not "url". "url" is the SSE transport and will not connect to this server. ## Cursor Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (one project): { "mcpServers": { "quickhost": { "url": "https://api.quickhost.ing/mcp", "headers": { "Authorization": "Bearer ${env:QUICKHOST_TOKEN}" } } } } ## VS Code (GitHub Copilot) Add to .vscode/mcp.json: { "servers": { "quickhost": { "type": "http", "url": "https://api.quickhost.ing/mcp", "headers": { "Authorization": "Bearer qh_..." } } } } Three traps, all of which fail quietly: - The root key is "servers", not "mcpServers". VS Code is alone in this. - "type": "http" is required. Without it VS Code assumes stdio and tries to run the URL as a command. - Put this in .vscode/mcp.json. A workspace .mcp.json has been reported to discard the headers block while appearing to load. ## Claude Desktop Add https://api.quickhost.ing/mcp as a custom connector and approve the sign-in — this server supports the OAuth flow its connector UI expects, so there is no token to paste. If you would rather authenticate with a static token (a shared machine, or a token scoped to one workspace), bridge it over stdio instead — in claude_desktop_config.json: { "mcpServers": { "quickhost": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.quickhost.ing/mcp", "--header", "Authorization: Bearer qh_..." ] } } } Restart Claude Desktop fully afterwards. Config lives at: macOS ~/Library/Application Support/Claude/claude_desktop_config.json Windows %APPDATA%\Claude\claude_desktop_config.json Linux ~/.config/Claude/claude_desktop_config.json ## Grok (xAI API) Remote MCP is an API feature, not something wired up in the Grok app. Pass the server in the tools array: { "tools": [ { "type": "mcp", "server_url": "https://api.quickhost.ing/mcp", "server_label": "quickhost", "authorization": "qh_..." } ] } Supported by the xAI SDK and the OpenAI-compatible Responses API. ## ChatGPT (the web app) Settings -> Apps -> Advanced -> Developer mode, then add https://api.quickhost.ing/mcp as a connector and approve the sign-in. ChatGPT will not present a static API key, so the `qh_` token is no use here — it runs OAuth instead, which is what the 401 above advertises. Nothing to configure beyond the URL: it registers itself dynamically and uses PKCE, both of which this authorization server supports. ## Check it worked Ask the agent to call `list_projects`. A connected client returns your projects (an empty list is a pass — it means the token authenticated). Failures: auth_required (401) token missing, malformed, revoked, or not sent — most often the header never reached us forbidden (403) token is valid but not allowed to do that ## If the tools do not appear - Confirm the client is on HTTP (streamable), not SSE and not stdio. - https://api.quickhost.ing/mcp answers 307 with Location: https://api.quickhost.ing/mcp/ — a trailing-slash redirect, not a failure. It is a 307, so method and body survive it, and it is same-origin, so the Authorization header does too; any client that follows redirects lands on the real endpoint. A client that does *not* follow them sees only the 307 and usually reports something unhelpful. Point that client at https://api.quickhost.ing/mcp/ (with the slash) and it will connect directly. - Check the token independently of the client: curl -sS -o /dev/null -w '%{http_code}\n' -X POST \ -H "Authorization: Bearer qh_..." \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \ https://api.quickhost.ing/mcp/ 401 — the token is wrong, revoked, or never arrived. 200 — the token is good and the server is reachable; the problem is on the client side (wrong transport, config not reloaded, wrong file). - Restart the client. Most read their config only at startup. ## More https://api.quickhost.ing/llms.txt short machine-readable overview https://api.quickhost.ing/docs.md full API reference https://api.quickhost.ing/.well-known/agent.md onboarding guide https://api.quickhost.ing/docs OpenAPI