Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Active OAuth tests for remote MCP servers you own: tokens, PKCE, redirect_uri, audience, CSRF.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
MCP_AUTHPROBE_SECRET_FILE, MCP_AUTHPROBE_SECRET, MCP_AUTHPROBE_CREDENTIALS_FILE, MCP_AUTHPROBE_ALLOW_PRIVATE, MCP_AUTHPROBE_LAB_ORIGINS, MCP_AUTHPROBE_TIMEOUT_MS「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
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/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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .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 envMCP_AUTHPROBE_CREDENTIALS_FILE envMCP_AUTHPROBE_ALLOW_PRIVATE envMCP_AUTHPROBE_LAB_ORIGINS envMCP_AUTHPROBE_TIMEOUT_MS envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント Enigmacker で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:MCP_AUTHPROBE_SECRET
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.8.0)がレジストリに届いたのは一昨日です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, FlyDocs
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Spec-driven development workflow: your agent works issues, sessions and the status lifecycle.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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,
Originvalidation, tokens in URLs, session IDs used as credentials, CORS, throttling and consent CSRF (in a real browser). It works as a CLI with an interactivelogin, 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.
Besides its own test suite and lab, mcp-authprobe was run against real authorization stacks before each release:
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.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.
Good tools already exist, and this one is meant to sit next to them, not replace them:
| Tool | Focus | Overlap with mcp-authprobe |
|---|---|---|
| mcp-posture | Passive posture of remote servers: OAuth metadata per RFC, transport, tool poisoning, rug pulls | None by design: it never sends state-changing requests. Run it first. |
| MCPJam OAuth conformance | Runs real OAuth flows and checks conformance, with a few negative checks | Basic redirect URI rejection. No refresh token replay, throttling or consent CSRF. |
| Cisco mcp-scanner, Snyk agent-scan | Malicious tools, configs, local servers | None. |
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.
Requires Node.js 22.19 or later.
# run without installing
npx mcp-authprobe --help
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
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
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.
| Profile | What 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. |
secure | Every 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.
# 1. Create a secret and the proof to publish for your MCP host
mcp-authprobe ownership init mcp.example.com
export MCP_AUTHPROBE_SECRET='…'
mcp-authprobe ownership verify mcp.example.com
mcp-authprobe scan https://mcp.example.com/mcp --sarif results.sarif --markdown summary.md
mcp-authprobe login https://mcp.example.com/mcp --out ./test-grant.json
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.
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:
| Method | Where | Value |
|---|---|---|
| Well-known file | https:// /.well-known/mcp-authprobe.txt | one line per proof; other lines are ignored |
| DNS TXT | _mcp-authprobe. | the proof string |
Design choices:
mcp.example.com is useless for any other host.You can remove the proof as soon as you are done testing.
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:
| Step | Request | Expected on a compliant server | Check |
|---|---|---|---|
| 1 | Refresh with the supplied token | New access token and a new refresh token | MAP-RTK01 |
| 2 | Refresh again with the token from step 1's input (already used) | Rejected, typically invalid_grant | MAP-RTK02 |
| 3 | Refresh with the newest token (from step 1's output) | Rejected: reuse revoked the whole family | MAP-RTK03 |
Important:
MAP-RTK01 fails and the two replay checks are reported as not applicable.error (inconclusive), never as a pass.mcp-authprobe login https://mcp.example.com冒頭だけを表示しています。続きはリポジトリで読めます