Gemini CLI
The settings.json entry, where httpUrl means Streamable HTTP and url means SSE.
Gemini CLI reads ~/.gemini/settings.json for every project and .gemini/settings.json inside one. The field name carries the transport: httpUrl is Streamable HTTP, url is the legacy SSE transport, and command is stdio. Wellworn speaks Streamable HTTP, so the field is httpUrl.
Without a key
{
"mcpServers": {
"wellworn": {
"httpUrl": "https://mcp.wellworn.dev/mcp"
}
}
}The CLI writes the same entry:
gemini mcp add --transport http wellworn https://mcp.wellworn.dev/mcpWith a key
{
"mcpServers": {
"wellworn": {
"httpUrl": "https://mcp.wellworn.dev/mcp",
"headers": {
"Authorization": "Bearer ww_your_key"
},
"timeout": 30000
}
}
}gemini mcp add --transport http --header "Authorization: Bearer ww_your_key" \
wellworn https://mcp.wellworn.dev/mcpRepeat --header for each header you need.
Confirm it works
Run /mcp in a session. It prints each server as CONNECTED, CONNECTING or DISCONNECTED, then the tools it discovered with their descriptions. Wellworn contributes eight.
What breaks
Putting the endpoint under url instead of httpUrl makes Gemini open an SSE connection that never completes the handshake, because the server has no SSE endpoint to hold open. The server sits at CONNECTING.
timeout is milliseconds and defaults to 600000, ten minutes. That default is fine, but a value you meant as seconds gives up before the first response arrives.
trust: true skips the confirmation dialog for every tool on the server, including submit_trap, which writes a report a person then reviews. Leave it off unless you mean that.
Verified 2026-09-08 against github.com