Install in any client
The endpoint, the three config shapes agents use for a remote MCP server, and the field name each client expects.
There is one thing to install, and it is a URL:
https://mcp.wellworn.dev/mcpNo package, no local process, no account. The read tools answer without a key at 60 calls a day per IP, so you can point a client at the endpoint and ask a question before deciding whether Wellworn is worth an account.
Pick your client
| Client | Where the config lives | Field for the URL |
|---|---|---|
| Claude Code | claude mcp add, or .mcp.json | "type": "http" + url |
| Cursor | .cursor/mcp.json | url |
| VS Code (Copilot) | .vscode/mcp.json | "type": "http" + url |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | serverUrl |
| Codex CLI | ~/.codex/config.toml | url |
| Gemini CLI | ~/.gemini/settings.json | httpUrl |
| Cline | ~/.cline/mcp.json | "type": "streamableHttp" + url |
| Zed | settings.json | url |
| opencode | opencode.json | "type": "remote" + url |
| Claude apps | claude.ai connectors, or claude_desktop_config.json | URL field, or a bridge |
| Copilot CLI | ~/.copilot/mcp-config.json | copilot mcp add --transport http |
| JetBrains AI Assistant | Settings, Tools, AI Assistant, MCP | url |
| Warp | Settings, Agents, MCP servers | url |
| Roo Code | .roo/mcp.json | "type": "streamable-http" + url |
| Amp | ~/.config/amp/settings.json | url |
| Goose | goose configure prompt | Streaming HTTP endpoint URI |
| Anything else | your client's MCP config | POST to the URL |
Each page has the exact file, the entry with and without a key, where the client shows its tool list, and what breaks, checked against that client's own documentation on the date the page shows.
The three shapes
Almost every config above is one of three.
A URL and nothing else. Cursor, Zed, JetBrains, Warp and Amp infer the transport from the presence of a url.
{
"mcpServers": {
"wellworn": {
"url": "https://mcp.wellworn.dev/mcp"
}
}
}A URL plus a transport field. The field name and its value change from client to client, and a value copied from the wrong client is the most common reason a server never connects. Claude Code and VS Code want "type": "http", Cline wants "streamableHttp", Roo Code wants "streamable-http", opencode wants "remote". Gemini CLI encodes it in the field name instead, httpUrl for Streamable HTTP against url for SSE, and Windsurf uses serverUrl.
{
"servers": {
"wellworn": {
"type": "http",
"url": "https://mcp.wellworn.dev/mcp"
}
}
}A command that launches a bridge. Clients that only start local programs run mcp-remote, which speaks stdio to the client and Streamable HTTP to the endpoint.
{
"mcpServers": {
"wellworn": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.wellworn.dev/mcp"]
}
}
}That form needs Node.js installed for npx to resolve, and it adds a local process to every session. Prefer a direct URL wherever the client accepts one.
Verified 2026-09-08 against github.com
Adding a key
A key is one header on every request, and it is the same header everywhere:
authorization: Bearer ww_your_keyClients that expand environment variables inside header values are worth using for it: Claude Code takes ${WELLWORN_KEY}, Cursor takes ${env:WELLWORN_KEY}, VS Code prompts once with a promptString input and keeps the value in secret storage, and Codex reads the variable named by bearer_token_env_var. Where none of those exist, keep the file out of version control. Keys covers where a key comes from and how to rotate one.
Next
Make your first call checks the connection and reads a verdict end to end. Any MCP client has the raw protocol contract and a curl you can run right now.