原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

mcp-authprobe

作者:Enigmacker版本 0.8.0i★ –i在你的电脑上运行
注册名称io.github.Enigmacker/mcp-authprobe

安装

概览

作者提供的说明(英文原文)

Active OAuth tests for remote MCP servers you own: tokens, PKCE, redirect_uri, audience, CSRF.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他
  • 你需要填写:MCP_AUTHPROBE_SECRET

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: MCP_AUTHPROBE_SECRET_FILE, MCP_AUTHPROBE_SECRET, MCP_AUTHPROBE_CREDENTIALS_FILE, MCP_AUTHPROBE_ALLOW_PRIVATE, MCP_AUTHPROBE_LAB_ORIGINS, MCP_AUTHPROBE_TIMEOUT_MS

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "authprobe": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-authprobe",
        "mcp"
      ],
      "env": {
        "MCP_AUTHPROBE_SECRET_FILE": "your-value",
        "MCP_AUTHPROBE_SECRET": "your-value",
        "MCP_AUTHPROBE_CREDENTIALS_FILE": "your-value",
        "MCP_AUTHPROBE_ALLOW_PRIVATE": "your-value",
        "MCP_AUTHPROBE_LAB_ORIGINS": "your-value",
        "MCP_AUTHPROBE_TIMEOUT_MS": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add authprobe --env MCP_AUTHPROBE_SECRET_FILE=your-value --env MCP_AUTHPROBE_SECRET=your-value --env MCP_AUTHPROBE_CREDENTIALS_FILE=your-value --env MCP_AUTHPROBE_ALLOW_PRIVATE=your-value --env MCP_AUTHPROBE_LAB_ORIGINS=your-value --env MCP_AUTHPROBE_TIMEOUT_MS=your-value -- npx -y mcp-authprobe mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "authprobe": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-authprobe",
        "mcp"
      ],
      "env": {
        "MCP_AUTHPROBE_SECRET_FILE": "your-value",
        "MCP_AUTHPROBE_SECRET": "your-value",
        "MCP_AUTHPROBE_CREDENTIALS_FILE": "your-value",
        "MCP_AUTHPROBE_ALLOW_PRIVATE": "your-value",
        "MCP_AUTHPROBE_LAB_ORIGINS": "your-value",
        "MCP_AUTHPROBE_TIMEOUT_MS": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "authprobe": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "mcp-authprobe",
        "mcp"
      ],
      "env": {
        "MCP_AUTHPROBE_SECRET_FILE": "your-value",
        "MCP_AUTHPROBE_SECRET": "your-value",
        "MCP_AUTHPROBE_CREDENTIALS_FILE": "your-value",
        "MCP_AUTHPROBE_ALLOW_PRIVATE": "your-value",
        "MCP_AUTHPROBE_LAB_ORIGINS": "your-value",
        "MCP_AUTHPROBE_TIMEOUT_MS": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • MCP_AUTHPROBE_SECRET_FILE env
    Path to the ownership secret (create it with `mcp-authprobe ownership init `). Without a secret, only discovery runs.
  • MCP_AUTHPROBE_SECRET 机密 env
    Ownership secret, if not read from MCP_AUTHPROBE_SECRET_FILE.
  • MCP_AUTHPROBE_CREDENTIALS_FILE env
    Path to a test grant written by `mcp-authprobe login`, for the refresh token checks. It is consumed by a scan.
  • MCP_AUTHPROBE_ALLOW_PRIVATE env
    Set to 1 to allow loopback and private targets (local labs only).
  • MCP_AUTHPROBE_LAB_ORIGINS env
    Comma-separated lab origins exempt from the ownership proof, e.g. http://127.0.0.1:8080.
  • MCP_AUTHPROBE_TIMEOUT_MS env
    Per-request timeout in milliseconds (default 10000).

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 Enigmacker 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 32509 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 32509 个服务器的 94% 更新
  • 基础检查结果等于或优于此分类中其他 32509 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

mcp-authprobe 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:MCP_AUTHPROBE_SECRET

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.8.0)于前天进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, Fomu MCP

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

作者:formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

在你的电脑上运行★ 440MIT14个月前更新
安装

Remote Desktop Commander

作者:desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

在云端运行★ 211昨天更新
安装

Fomu MCP

作者:gabrielmahia

Kenya government form guides: checklists, draft letters, eCitizen, Huduma, timelines. Sample data.

在你的电脑上运行今天更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

mcp-authprobe

Active authorization testing for remote MCP servers you own.

Passive scanners read what a remote Model Context Protocol server *announces*: its OAuth metadata, its TLS setup, its tool descriptions. Some properties can only be confirmed by actually exercising the authorization server: does it really rotate refresh tokens, does it really refuse a redirect URI it never registered, does it enforce PKCE, does it accept a token meant for another server, does it slow down repeated failures?

mcp-authprobe runs those active checks, against servers whose ownership you have proven, and reports the results as JSON, SARIF and Markdown.

19 checks, field-tested against a certified OpenID provider: OAuth discovery, refresh token rotation and replay, redirect URI strictness, PKCE enforcement, single-use codes, token audience, Origin validation, tokens in URLs, session IDs used as credentials, CORS, throttling and consent CSRF (in a real browser). It works as a CLI with an interactive login, as an MCP server so an AI assistant can run the audit, and as a GitHub Action. A deliberately vulnerable lab lets you try everything in a minute.

Only test servers you own or are explicitly authorized to test. Active checks change state on the target. The tool enforces an ownership proof before running them, but responsibility stays with the operator.

Contents

  • Field-tested
  • Why another scanner?
  • Install
  • Try it in a minute: the lab
  • Quick start
  • Ownership proof
  • Refresh token checks
  • Interactive login
  • Redirect URI checks
  • Throttling check
  • Consent CSRF check
  • Use it from an MCP client
  • What it checks
  • Combine with mcp-posture
  • Reports and exit codes
  • GitHub Action
  • Safety of the scanner
  • Roadmap
  • Development
  • Contributing and security

Field-tested

Besides its own test suite and lab, mcp-authprobe was run against real authorization stacks before each release:

  • node-oidc-provider (an OpenID Certified authorization server) with dynamic registration, resource indicators and JWT access tokens, in front of an MCP server built with the official TypeScript SDK that validates the token audience and the Origin header. Every check that can be judged from outside passed; MAP-THR01 failed, as expected, since that provider leaves rate limiting to the deployment; and its consent page, protected by a per-flow identifier instead of an anti-CSRF field, is reported as inconclusive with the reason.
  • The MCP TypeScript SDK's OAuth example server, a demonstration that is not meant for production. The results matched its code: redirect_uri not bound to the code, no Origin validation, unsafe redirect URIs accepted at registration, no refresh tokens, and crashes reported as inconclusive rather than passes. Its sessions correctly require the token on every request (MAP-SES01 passes).

These runs led to several fixes: results kept when a server issues no refresh token or crashes during login, a throttling check that copes with a broken refresh grant, and the per-flow identifier analysis above.

Why another scanner?

Good tools already exist, and this one is meant to sit next to them, not replace them:

ToolFocusOverlap with mcp-authprobe
mcp-posturePassive posture of remote servers: OAuth metadata per RFC, transport, tool poisoning, rug pullsNone by design: it never sends state-changing requests. Run it first.
MCPJam OAuth conformanceRuns real OAuth flows and checks conformance, with a few negative checksBasic redirect URI rejection. No refresh token replay, throttling or consent CSRF.
Cisco mcp-scanner, Snyk agent-scanMalicious tools, configs, local serversNone.

mcp-authprobe focuses on what only an active, authorized test can confirm, and uses check IDs (MAP-…) that do not clash with mcp-posture's (MCPP-…). mcp-posture reserves its own active IDs for this and points here; the two reports can be merged into one.

Install

Requires Node.js 22.19 or later.

# run without installing

npx mcp-authprobe --help

or install globally

npm install -g mcp-authprobe

Releases are published from GitHub Actions with npm trusted publishing; check the provenance on the package page before installing a security tool.

From source:

git clone https://github.com/Enigmacker/mcp-authprobe.git

cd mcp-authprobe npm ci npm run build node dist/cli.js --help

Try it in a minute: the lab

mcp-authprobe lab starts a small MCP server with its own OAuth authorization server on 127.0.0.1, so you can see every check at work without touching a real server:

# Terminal 1: a deliberately vulnerable server (or --profile secure)

npx mcp-authprobe lab

Terminal 2

npx mcp-authprobe scan http://127.0.0.1:8787/mcp --allow-private npx mcp-authprobe login http://127.0.0.1:8787/mcp --allow-private --out lab-grant.json npx mcp-authprobe scan http://127.0.0.1:8787/mcp --allow-private --credentials-file lab-grant.json

Log in with the account test / test and click Allow.

ProfileWhat you should see
vulnerable (default)Refresh token replay accepted, unsafe redirect URIs registered, PKCE not enforced, token audience ignored, foreign Origin accepted, token accepted in the URL, session ID accepted without a token, CORS open to any origin with credentials, no throttling, consent page without CSRF protection. MAP-RDR02 is reported as inconclusive: this server sends unknown visitors to its login page before looking at redirect_uri, which cannot be told apart from outside, and the scanner never turns that into a pass.
secureEvery check passes (or is not applicable); MAP-CSR01 runs with consent-check.

The lab only listens on 127.0.0.1 or ::1 (--host, --port, default 8787; names such as localhost are refused so that no resolver can move it elsewhere), keeps everything in memory, and stops with Ctrl-C. Its access tokens are unsigned JWTs, so MAP-AUD01 can read their audience. It is vulnerable on purpose: never expose it.

Quick start

# 1. Create a secret and the proof to publish for your MCP host

mcp-authprobe ownership init mcp.example.com

2. Publish the proof (well-known file or DNS TXT), then keep the secret in your environment

export MCP_AUTHPROBE_SECRET='…'

3. Check the proof is visible

mcp-authprobe ownership verify mcp.example.com

4. Scan

mcp-authprobe scan https://mcp.example.com/mcp --sarif results.sarif --markdown summary.md

5. Log in once with a dedicated test account to create a test grant

mcp-authprobe login https://mcp.example.com/mcp --out ./test-grant.json

6. Full scan, including the refresh token checks

mcp-authprobe scan https://mcp.example.com/mcp --credentials-file ./test-grant.json

Without a valid proof the scan still runs discovery (the same read-only requests any MCP client sends before logging in), and every active check is reported as skipped.

For a local lab on your own machine:

mcp-authprobe scan http://127.0.0.1:8080/mcp --allow-private

Loopback targets with --allow-private do not need a proof.

Ownership proof

Active checks register clients, rotate tokens and send failing requests. To make sure they only ever hit servers whose operator agreed to it, the scanner requires a proof for every host it would contact: the MCP server host and, when it differs, the authorization server host.

The proof is a hash, bound to the host, of a secret that only you hold:

mcp-authprobe-verification=sha256:<hex(sha256("<host>:<secret>"))>

Publish it in one of two places:

MethodWhereValue
Well-known filehttps:// /.well-known/mcp-authprobe.txtone line per proof; other lines are ignored
DNS TXT_mcp-authprobe. the proof string

Design choices:

  • The secret never leaves your machine. Only its hash is published, so a proof found in the wild cannot be reused by someone else to scan your server.
  • Proofs are host-bound. A proof for mcp.example.com is useless for any other host.
  • The secret is read from `MCP_AUTHPROBE_SECRET` or `--secret-file`, never from the command line, so it does not land in shell history or process listings.
  • Hosted authorization servers. If your authorization server is a third-party service on its own domain, you can only publish a proof if you control that domain (for example a custom domain). Check the provider's penetration testing policy before running active checks against it.

You can remove the proof as soon as you are done testing.

Refresh token checks

MCP clients are usually public clients, so OAuth 2.1 requires their refresh tokens to be rotated, and RFC 9700 recommends revoking the whole token family when an old one is reused. These properties cannot be read from metadata; they have to be exercised.

The checks need a test grant: a client and a refresh token obtained by logging in to your own server with a dedicated test account.

The easy way is mcp-authprobe login (see Interactive login), which writes the file for you. You can also write it by hand, readable only by you (chmod 600):

{

"client_id": "your-test-client-id", "refresh_token": "the-refresh-token", "client_secret": "only-for-confidential-clients", "token_endpoint_auth_method": "none" }

token_endpoint_auth_method is none (default for public clients), client_secret_post (default when a secret is present) or client_secret_basic.

The scan sends at most three refresh_token requests to the token endpoint found by discovery:

StepRequestExpected on a compliant serverCheck
1Refresh with the supplied tokenNew access token and a new refresh tokenMAP-RTK01
2Refresh again with the token from step 1's input (already used)Rejected, typically invalid_grantMAP-RTK02
3Refresh with the newest token (from step 1's output)Rejected: reuse revoked the whole familyMAP-RTK03

Important:

  • The grant is consumed. On a compliant server, step 3 revokes it. Never use a grant you still need.
  • If tokens are not rotated, MAP-RTK01 fails and the two replay checks are reported as not applicable.
  • A throttled or unexpected response is reported as error (inconclusive), never as a pass.
  • Token values never appear in output or reports; evidence only shows status codes and OAuth error codes.

Interactive login

mcp-authprobe login https://mcp.example.com

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx