[BUG] Claude CLI: URL-mode elicitation/create not supported — server-initiated OAuth flows fails with not supported error

Open 💬 8 comments Opened Apr 14, 2026 by smohite04

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Claude Code does not support elicitation/create with mode: "url" sent by MCP servers. This blocks server-initiated OAuth authorization flows during session setup (e.g. 3LO flows where the server needs the user to visit an authorization URL).

Setup:

  • Server declares "elicitation": {"url": {}} in initialize response capabilities
  • Client version .108 version declares "elicitation": {} in initialize request capabilities -> Note this can also be an issue where url mode is not supported.

Server sends elicitation/create mid/task (not as a response on any mcp api call)

json
{
  "jsonrpc": "2.0",
  "id": 100000,
  "method": "elicitation/create",
  "params": {
    "mode": "url",
    "elicitationId": "uuid",
    "url": <AUTH-URL>,
    "message": "Please authorize to continue."
  }
}

Response from claude --debug (mcp debug logs)

{"jsonrpc": "2.0", "id": 100000, "error": {"code": -32602, "message": "MCP error -32602: Client does not support URL-mode elicitation requests"}}

Testing with version 87

{"method": "initialize", "params": {"protocolVersion": "2025-11-25", "capabilities": {"roots": {}, "elicitation": {"form": {}, "url": {}}}, "clientInfo": {"name": "claude-code", "version": "2.1.87"}}, "jsonrpc": "2.0", "id": 0}

For similar elicitation:

Claude mcp logs provide info on:

 MCP server "server name": Elicitation request received during initialization: {"method":"elicitation/create","params":{"mode":"url","message":"Please authorize to continue.","elicitationId":"0f5e7464-72eb-40ce-aa06-511c258b7c9a","url":"<auth_url>"}}

No url shown to user and server received response:

 elicitation response (id=100000): {"result": {"action": "cancel"}, "jsonrpc": "2.0", "id": 100000}

What Should Happen?

Elicitation should be supported where:

  1. elicitation/create request should be handled properly and user should see the url.
  2. Elicitation capability should clearly reflect url mode. (it was declared in 87 but dropped in 108).

Error Messages/Logs

Version 108




{"jsonrpc": "2.0", "id": 100000, "error": {"code": -32602, "message": "MCP error -32602: Client does not support URL-mode elicitation requests"}}


Version 87 which declares the URL mode drops silently.



 MCP server "server name": Elicitation request received during initialization: {"method":"elicitation/create","params":{"mode":"url","message":"Please authorize to continue.","elicitationId":"0f5e7464-72eb-40ce-aa06-511c258b7c9a","url":"<auth_url>"}}


No url shown to user and server received response:


 elicitation response (id=100000): {"result": {"action": "cancel"}, "jsonrpc": "2.0", "id": 100000}

Steps to Reproduce

  1. Create a minimal stdio MCP server that declares elicitation.url capability

and sends elicitation/create with mode: "url":

python
#!/usr/bin/env python3
"""Minimal MCP server that sends URL-mode elicitation after initialize."""
import json, sys

def write(msg):
    sys.stdout.write(json.dumps(msg) + "\n")
    sys.stdout.flush()

for line in sys.stdin:
    msg = json.loads(line.strip())
    method = msg.get("method", "")
    msg_id = msg.get("id")

    if method == "initialize":
        write({
            "jsonrpc": "2.0", "id": msg_id,
            "result": {
                "protocolVersion": "2025-11-25",
                "capabilities": {"tools": {}, "elicitation": {"url": {}}},
                "serverInfo": {"name": "elicitation-test", "version": "1.0.0"},
            }
        })

    elif method == "notifications/initialized":
        # Send URL-mode elicitation to client
        write({
            "jsonrpc": "2.0", "id": 1,
            "method": "elicitation/create",
            "params": {
                "mode": "url",
                "elicitationId": "550e8400-e29b-41d4-a716-446655440000",
                "url": "https://example.com/authorize",
                "message": "Please authorize to continue.",
            }
        })

    elif method == "tools/list":
        write({"jsonrpc": "2.0", "id": msg_id, "result": {"tools": []}})

    elif "result" in msg or "error" in msg:
        # Log client's response to elicitation/create
        print(json.dumps(msg), file=sys.stderr)
  1. Save as elicitation_test_server.py
  1. Add to ~/.claude.json:

json

{
  "mcpServers": {
    "elicitation-test": {
      "type": "stdio",
      "command": "python3",
      "args": ["elicitation_test_server.py"]
    }
  }
}
  1. Run claude --debug
  1. Check stderr/debug logs for the client's response to elicitation/create

Expected: Claude Code shows the URL to the user with consent controls per MCP
spec.

Actual (v2.1.87): Client declares "elicitation": {"form": {}, "url": {}} in
capabilities but silently returns {"action": "cancel"}. User never sees the URL.

Actual (v2.1.108): Client declares "elicitation": {} and returns
{"code": -32602, "message": "Client does not support URL-mode elicitation requests"}

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

2.1.87

Claude Code Version

2.1.108

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

_No response_

View original on GitHub ↗

This issue has 8 comments on GitHub. Read the full discussion on GitHub ↗