AgentStack
MCP unreviewed Apache-2.0 Self-run

Authprobe

mcp-authprobe-authprobe · by authprobe

authprobe pinpoints MCP OAuth failures

No reviews yet
0 installs
16 views
0.0% view→install

Install

$ agentstack add mcp-authprobe-authprobe

Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Pipes remote content directly into a shell (remote code execution).

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Authprobe? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

authprobe — MCP OAuth Diagnostics

[](https://github.com/authprobe/authprobe/actions/workflows/go.yml) [](https://snyk.io/test/github/authprobe/authprobe) [](https://discord.gg/ZYRjaZEsNV) [](https://github.com/codespaces/new?hidereposelect=true&repo=authprobe/authprobe)

authprobe pinpoints MCP OAuth failures.

MCP + OAuth breaks for mundane reasons like missing headers, wrong content types, malformed metadata. authprobe scan walks the discovery flow and reports exactly where it diverges from spec.

┌──────────────────────────────────────────────────────────────────────────────────────┐
│                               AuthProbe Scan Funnel                                  │
├──────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                      │
│  [1] Discovery ──► [2] MCP Init ──► [3] PRM ──► [4] Auth Server ──► [5] Token ──► [6] DCR
│        │                │              │              │                │           │ │
│        ▼                ▼              ▼              ▼                ▼           ▼ │
│     401 + WWW-     initialize +    Fetch PRM     Fetch issuer       POST        DCR  │
│     Authenticate   tools/list      metadata      metadata          probe       probe │
└──────────────────────────────────────────────────────────────────────────────────────┘

See [docs/funnel.md](docs/funnel.md) for the full breakdown of what gets checked and why. See [ARCHITECTURE.md](docs/ARCHITECTURE.md) for the code map and design invariants.

Specs involved: MCP, RFC 9728, RFC 8414, RFC 8707, RFC 7636, RFC 7591, RFC 7517, RFC 3986, RFC 9110.


Who this is for

  • MCP server authors validating OAuth discovery and protected-resource metadata behavior.
  • MCP client implementers debugging where auth flows diverge from RFC 9728 / RFC 8414.
  • Platform, security, and infra teams triaging auth regressions in CI before rollout.
  • API teams that need reproducible evidence bundles for handoff across org boundaries.

Quickstart

2-minute demo

# Fast install (no sudo, installs into ~/.local/bin)
curl -fsSL https://raw.githubusercontent.com/authprobe/authprobe/main/scripts/install.sh | sh

# Run a real scan
~/.local/bin/authprobe scan https://mcp.example.com/mcp --json -

Expected output (trimmed):

Funnel
  [1] MCP probe (401 + WWW-Authenticate)      [✓] PASS
  [2] MCP initialize + tools/list             [X] FAIL
  [3] PRM fetch matrix                        [✓] PASS

Demo GIF:

AuthProbe MCP Server

AuthProbe runs as an MCP server via authprobe mcp --transport stdio.

Configure

{
  "mcpServers": {
    "authprobe": {
      "command": "authprobe",
      "args": ["mcp", "--transport", "stdio"]
    }
  }
}

See docs/mcp-server.md for the full OAuth-assist flow and security notes.

Used in the wild

  • Anthropic MCP Python SDK (modelcontextprotocol/python-sdk) used AuthProbe in issue triage to validate OAuth discovery behavior in the wild and capture actionable protocol diagnostics for maintainers (Issue #2057).
  • Sentry MCP (getsentry/sentry-mcp) used AuthProbe to identify and fix RFC 9728 Protected Resource Metadata compliance gaps for mcp.sentry.dev (PR #799, merged Feb 10, 2026; [details](docs/case-studies/sentry-mcp.md)).
  • Kiro (kirodotdev/Kiro) used AuthProbe to help pinpoint an MCP server metadata/authorization detection issue after a CLI update; details
  • Yargı MCP (saidsurucu/yargi-mcp) used AuthProbe to surface a protocol-compliance bug where JSON-RPC request IDs with null were accepted (Issue #18, opened Feb 12, 2026); details
  • Borsa MCP (saidsurucu/borsa-mcp) used AuthProbe during integration testing to catch a JSON-RPC protocol compliance bug; the follow-up fix tightened request validation to reject invalid id values and align behavior with MCP expectations (Issue #6, fix commit).
  • Rival Search MCP (damionrashford/RivalSearchMCP) used AuthProbe to surface a protocol-compliance bug where JSON-RPC request IDs with null were accepted (Issue #5); details

Mentions are factual references, not endorsements. If you are using authprobe, drop us a note. Like authprobe? toss a ⭐ - it's our caffine shot.

Install (fast paths)

# Option A: Go toolchain
go install github.com/authprobe/authprobe/cmd/authprobe@latest

# Option B: Install script (latest GitHub release asset)
curl -fsSL https://raw.githubusercontent.com/authprobe/authprobe/main/scripts/install.sh | sh

Install (Docker)

docker pull ghcr.io/authprobe/authprobe:latest
docker run --rm ghcr.io/authprobe/authprobe:latest scan https://mcp.example.com/mcp
docker run --rm ghcr.io/authprobe/authprobe:latest scan \
	https://compute.googleapis.com/mcp --openai-api-key=

Install (release binary fallback)

Download the latest release binary from GitHub Releases and put it on your PATH.

Install (Clone Repository)

git clone https://github.com/authprobe/authprobe.git && \
      cd authprobe && \
      go run cmd/authprobe/main.go scan https://mcp.example.com/mcp

Check version

authprobe --version
authprobe 0.4.0 (commit 92d5fada10399cd96da6521536ed746464592c93, built 2026-02-09T05:48:13Z)

Isolating Failure using authprobe

AuthProbe helps you isolate failures by capturing network traces for failed probe steps and optionally using an LLM to explain RFC compliance gaps.

Run Basic Scan
authprobe scan https://mcp.example.com/mcp
Embed as a Go package

AuthProbe also exposes a small public Go wrapper for services that need typed scan reports without starting the CLI:

import authprobescan "authprobe/pkg/scan"

result, err := authprobescan.Run(authprobescan.Options{
	TargetURL:           "https://mcp.example.com/mcp",
	MCPMode:             authprobescan.MCPModeStrict,
	RFCMode:             authprobescan.RFCModeBestEffort,
	Timeout:             8 * time.Second,
	AllowPrivateIssuers: false,
})
if err != nil {
	return err
}
_ = result.Report.Findings
Scan stdio MCP servers via local bridge

AuthProbe can launch a stdio MCP command and bridge it to a local HTTP endpoint automatically:

authprobe scan --stdio-command 'npx -y @modelcontextprotocol/server-everything' --tool-list

This bridge lets existing HTTP scan checks run against stdio servers.

Get an RFC-based explanation of the failure
authprobe scan https://mcp.example.com/mcp --explain
Get verbose output for failure

Shows the complete trace of request/response that went on the wire to help understand failure

authprobe scan https://mcp.example.com/mcp --explain --trace-failure
Have a LLM model explain failure

Use a LLM to request analysis of failure. llm-max-tokens defaults to 600 if a value isn't provided

export OPENAI_API_KEY=
authprobe scan https://mcp.example.com/mcp --explain --trace-failure --llm-max-tokens=1080

To use Anthropic

export ANTHROPIC_API_KEY=
authprobe scan https://mcp.example.com/mcp --explain --trace-failure --llm-max-tokens=1080

What you get

The scan produces a funnel view output and an LLM explanation of spec expectations if an Anthropic or OpenAI API key is provided.

1) Funnel view (what broke, where)


$ go run cmd/authprobe/main.go scan https://aws-mcp.us-east-1.api.aws/mcp --trace-failure
Command:   authprobe scan --trace-failure https://aws-mcp.us-east-1.api.aws/mcp
Scanning:  https://aws-mcp.us-east-1.api.aws/mcp
Scan time: Feb 09, 2026 04:44:41 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             [X] FAIL
        initialize -> 401 (error: Authentication failed: Unable to verify your
        user identity. Please ensure you are properly authenticated and try
        again.)

  [3] PRM fetch matrix                        [X] FAIL
        https://aws-mcp.us-east-1.api.aws/.well-known/oauth-protected-resource
        -> 405
        https://aws-mcp.us-east-1.api.aws/.well-known/oauth-protected-resource/mcp
        -> 405
        PRM unreachable or unusable; OAuth discovery unavailable

  [4] Auth server metadata                    [-] SKIP
        no authorization_servers in PRM

  [5] Token endpoint readiness (heuristics)   [-] SKIP
        no token_endpoint in metadata

  [6] Dynamic client registration (RFC 7591)  [-] SKIP
        no registration_endpoint in metadata

Primary Finding (HIGH): AUTH_REQUIRED_BUT_NOT_ADVERTISED (confidence 1.00)
  Evidence:
      initialize -> 401
      initialize error: Authentication failed: Unable to verify your user identity. Please
      ensure you are properly authenticated and try again.
      WWW-Authenticate: (missing)
      https://aws-mcp.us-east-1.api.aws/.well-known/oauth-protected-resource -> 405
      https://aws-mcp.us-east-1.api.aws/.well-known/oauth-protected-resource/mcp -> 405
      PRM unreachable or unusable; OAuth discovery unavailable
      Auth appears required but OAuth discovery was not advertised. Next steps: add
      WWW-Authenticate + PRM for OAuth/MCP discovery, or document the required non-OAuth auth
      (e.g., SigV4).

┌─────────────────────┤ RFC RATIONALE ├──────────────────────┐
Explain (RFC 9728 rationale)
1) MCP probe
- AuthProbe sends an unauthenticated GET to https://aws-mcp.us-east-1.api.aws/mcp.
- RFC 9728 discovery hinges on a 401 with WWW-Authenticate that includes resource_metadata.
- resource_metadata hint: (none)

2) MCP initialize + tools/list
- AuthProbe sends an MCP initialize request followed by tools/list to enumerate server tools.

3) Protected Resource Metadata (PRM) discovery
- RFC 9728 defines PRM URLs by inserting /.well-known/oauth-protected-resource between the host and path.
- https://aws-mcp.us-east-1.api.aws/.well-known/oauth-protected-resource (root)
- https://aws-mcp.us-east-1.api.aws/.well-known/oauth-protected-resource/mcp (path-suffix)
- Because the resource has a path, the path-suffix PRM endpoint is required by RFC 9728.
- PRM responses must be JSON objects with a resource that matches the target URL; trailing-slash mismatches are warned for compatibility.
- authorization_servers is required for OAuth discovery; it lists issuer URLs.

4) Authorization server metadata
- No authorization_servers found in PRM, so AuthProbe skips metadata fetches.

5) Token endpoint readiness (heuristics)
- AuthProbe sends a safe, invalid grant request to the token endpoint to observe error response behavior.
- It flags non-JSON responses or HTTP 200 responses that still contain error payloads.

┌───────────────────────┤ CALL TRACE ├───────────────────────┐
Call Trace Using: https://github.com/authprobe/authprobe

  ┌────────────┐                                                    ┌────────────┐
  │ authprobe  │                                                    │ MCP Server │
  └─────┬──────┘                                                    └─────┬──────┘
        │                                                                 │
        │ ╔═══ Step 1: MCP probe                    ═══════╪═══════════════════╗
        │  GET https://aws-mcp.us-east-1.api.aws/mcp
        │  Reason: 401 + WWW-Authenticate discovery
        │    Accept:  text/event-stream
        │    Host:    aws-mcp.us-east-1.api.aws
        ├─────────────────────────────────────────────────────────────────►│
        │  405 Method Not Allowed
        │    Allow:           POST
        │    Content-Length:  102
        │    Date:            Mon, 09 Feb 2026 04:44:41 GMT
        │    Server:          CloudFront
        │    Via:             1.1 6269ff653a8a0b71d436afa999909318.cloudfront.net (CloudFront)
        │    X-Amz-Cf-Id:     hFriapAaoBgVX_B09D4MbK1-SDPg9l6VwvOw67mrScOeCh5N2ywTWA==
        │    X-Amz-Cf-Pop:    SFO53-P7
        │    X-Cache:         LambdaGeneratedResponse from cloudfront
        │◄─────────────────────────────────────────────────────────────────┤
        │                                                                  │
        │ ╔═══ Step 2: MCP initialize               ═══════╪═══════════════════╗
        │  POST https://aws-mcp.us-east-1.api.aws/mcp
        │  Reason: Step 2: MCP initialize + tools/list (pre-init tools/list)
        │    Accept:                application/json, text/event-stream
        │    Content-Type:          application/json
        │    Host:                  aws-mcp.us-east-1.api.aws
        │    Mcp-Protocol-Version:  2025-11-25
        ├─────────────────────────────────────────────────────────────────►│
        │  401 Unauthorized
        │    Content-Length:  194
        │    Date:            Mon, 09 Feb 2026 04:44:41 GMT
        │    Server:          CloudFront
        │    Via:             1.1 6269ff653a8a0b71d436afa999909318.cloudfront.net (CloudFront)
        │    X-Amz-Cf-Id:     b-ejOK7BHXqcZ_OFbQHqbli8XnA6ZqH160dnpSlKzCbYcuMBG7aLJQ==
        │    X-Amz-Cf-Pop:    SFO53-P7
        │    X-Cache:         LambdaGeneratedResponse from cloudfront
        │◄─────────────────────────────────────────────────────────────────┤
        │                                                                  │
        │  POST https://aws-mcp.us-east-1.api.aws/mcp
        │  Reason: Step 2: MCP initialize + tools/list (initialize)
        │    Accept:                application/json, text/event-stream
        │    Content-Type:          application/json
        │    Host:                  aws-mcp.us-east-1.api.aws
        │    Mcp-Protocol-Version:  2025-11-25
        ├─────────────────────────────────────────────────────────────────►│
        │  401 Unauthorized
        │    Content-Length:  194
        │    Date:            Mon, 09 Feb 2026 04:44:41 GMT
        │    Server:          CloudFront
        │    Via:             1.1 6269ff653a8a0b71d436afa999909318.cloudfront.net (CloudFront)
        │    X-Amz-Cf-Id:     OfTZxhdf7sBGylO_uwnubF6Ug8I6t2hhJtNf3Y2cKY9JJFDKQf8Umg==
        │    X-Amz-Cf-Pop:    SFO53-P7
        │    X-Cache:         LambdaGeneratedResponse from cloudfront
        │◄─────────────────────────────────────────────────────────────────┤
        │                                                                  │
        │ ╔═══ Step 3: PRM Discovery                ═══════╪═══════════════════╗
        │  GET https://aws-mcp.us-east-1.api.aws/.well-known/oauth-protected-resource
        │  Reason: Step 3: PRM fetch matrix
        │    Accept:  application/json
        │    Host:    aws-mcp.us-east-1.api.aws
        ├─────────────────────────────────────────────────────────────────►│
        │  405 Method Not Allowed
        │    Allow:           POST
        │    Content-Length:  102
        │    Date:            Mon, 09 Feb 2026 04:44:41 GMT
        │    Server:          CloudFront
        │    Via:             1.1 6269ff653a8a0b71d436afa999909318.cloudfront.net (CloudFront)
        │    X-Amz-Cf-Id:     T7

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [authprobe](https://github.com/authprobe)
- **Source:** [authprobe/authprobe](https://github.com/authprobe/authprobe)
- **License:** Apache-2.0
- **Homepage:** https://authprobe.com

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.