Command: authprobe scan --llm-max-tokens=1080 --openai-api-key=***REDACTED*** http://localhost:8024/mcp
Scanning: http://localhost:8024/mcp
Scan time: Feb 20, 2026 06:58:55 UTC
Github: https://github.com/authprobe/authprobe
Funnel
[1] MCP probe (401 + WWW-Authenticate) [-] SKIP
probe returned 405; checking PRM for OAuth config
[2] MCP initialize + tools/list [+] PASS
initialize -> 200
notifications/initialized -> 202
tools/list -> 200 (tools: generate_area_chart, generate_bar_chart,
generate_boxplot_chart, generate_column_chart, +23 more)
[3] PRM fetch matrix [X] FAIL
PRM unreachable or unusable; OAuth discovery unavailable
[4] Auth server metadata [-] SKIP
auth not required
[5] Token endpoint readiness (heuristics) [-] SKIP
auth not required
[6] Dynamic client registration (RFC 7591) [-] SKIP
auth not required
┌───────────────────────┤ CALL TRACE ├───────────────────────┐
Call Trace Using: https://github.com/authprobe/authprobe
┌────────────┐ ┌────────────┐
│ authprobe │ │ MCP Server │
└─────┬──────┘ └─────┬──────┘
│ │
│ ╔═══ Step 1: MCP probe ═══════╪═══════════════════╗
│ GET http://localhost:8024/mcp
│ Reason: 401 + WWW-Authenticate discovery
│ Accept: text/event-stream
│ Host: localhost:8024
├─────────────────────────────────────────────────────────────────►│
│ 405 Method Not Allowed
│ Connection: keep-alive
│ Date: Fri, 20 Feb 2026 06:58:51 GMT
│ Keep-Alive: timeout=5
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ ╔═══ Step 2: MCP initialize ═══════╪═══════════════════╗
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (pre-init tools/list)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: 2025-11-25
├─────────────────────────────────────────────────────────────────►│
│ 200 OK
│ Cache-Control: no-cache
│ Connection: keep-alive
│ Content-Type: text/event-stream
│ Date: Fri, 20 Feb 2026 06:58:51 GMT
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (initialize)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: 2025-11-25
├─────────────────────────────────────────────────────────────────►│
│ 200 OK
│ Cache-Control: no-cache
│ Connection: keep-alive
│ Content-Type: text/event-stream
│ Date: Fri, 20 Feb 2026 06:58:52 GMT
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (notifications/initialized)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: 2025-11-25
├─────────────────────────────────────────────────────────────────►│
│ 202 Accepted
│ Connection: keep-alive
│ Content-Type: text/plain; charset=UTF-8
│ Date: Fri, 20 Feb 2026 06:58:52 GMT
│ Keep-Alive: timeout=5
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (null id probe)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: 2025-11-25
├─────────────────────────────────────────────────────────────────►│
│ 400 Bad Request
│ Connection: keep-alive
│ Content-Length: 101
│ Content-Type: application/json
│ Date: Fri, 20 Feb 2026 06:58:52 GMT
│ Keep-Alive: timeout=5
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (notification id probe)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: 2025-11-25
├─────────────────────────────────────────────────────────────────►│
│ 200 OK
│ Cache-Control: no-cache
│ Connection: keep-alive
│ Content-Type: text/event-stream
│ Date: Fri, 20 Feb 2026 06:58:52 GMT
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (origin probe)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: 2025-11-25
│ Origin: http://invalid.example
├─────────────────────────────────────────────────────────────────►│
│ 200 OK
│ Cache-Control: no-cache
│ Connection: keep-alive
│ Content-Type: text/event-stream
│ Date: Fri, 20 Feb 2026 06:58:53 GMT
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (protocol version probe)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: invalid
├─────────────────────────────────────────────────────────────────►│
│ 400 Bad Request
│ Connection: keep-alive
│ Content-Length: 195
│ Content-Type: application/json
│ Date: Fri, 20 Feb 2026 06:58:54 GMT
│ Keep-Alive: timeout=5
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
│ │
│ POST http://localhost:8024/mcp
│ Reason: Step 2: MCP initialize + tools/list (tools/list)
│ Accept: application/json, text/event-stream
│ Content-Type: application/json
│ Host: localhost:8024
│ Mcp-Protocol-Version: 2025-11-25
├─────────────────────────────────────────────────────────────────►│
│ 200 OK
│ Cache-Control: no-cache
│ Connection: keep-alive
│ Content-Type: text/event-stream
│ Date: Fri, 20 Feb 2026 06:58:54 GMT
│ X-Powered-By: Express
│◄─────────────────────────────────────────────────────────────────┤
▼ ▼
┌──────────────────┤ ROOT-CAUSE ANALYSIS ├───────────────────┐
Summary
The AuthProbe scan against the MCP OAuth server located at
http://localhost:8024/mcpproduced a valid and justified failure during step [3], specifically related to the PRM fetch matrix being unreachable or unusable, which resulted in OAuth discovery being unavailable. Additional findings regarding MCP initialization ordering and Origin validation were observed but noted as informational or low confidence issues.Detailed explanation and spec references
1. PRM Fetch Matrix Failure ([3])
The failure is justified because without valid PRM discovery, OAuth clients cannot determine essential authorization server endpoints or capabilities. This violates MCP mandatory requirements for interoperability and security.
issuer,authorization_endpoint,token_endpoint,jwks_uri, and supported scopes/grants.2. MCP Initialization Ordering Not Enforced
tools/listcommand before completinginitialize.initializerequest to negotiate capabilities and versions before any other commands (e.g.,tools/list).Although this does not cause a functional failure, it violates MCP protocol ordering semantics and could lead to inconsistent client state.
Reject or defer requests other than
initializeuntil theinitializehandshake is complete, preferably responding with HTTP 409 Conflict or MCP error indicating the client must initialize first.3. MCP Origin Not Validated
Originheader probe, indicating no origin checking.Originheader to prevent DNS rebinding and cross-site attacks, rejecting unsupported or unexpected origins with HTTP 403 Forbidden.This is a low-severity security concern but recommended to be fixed to harden CSP and prevent malicious usage via injected origins.
Implement strict origin validation and reject requests from invalid or unexpected origins per MCP guidelines.
Additional Notes on Skipped Steps
auth not required), which is acceptable but makes OAuth-related discovery and registration steps irrelevant.Correct Server Behavior According to Specs
initializefirst.Originheaders against allowed origins list.Conclusion
The failure during PRM fetch matrix retrieval (step 3) is valid and justified