PostHog MCP Server
Official PostHog MCP Server for product analytics, feature flags, experiments, and more.
Scans MCP server auth code for OAuth 2.1 anti-patterns: token passthrough, missing audience
使っているAIアプリを選んで、設定をコピーしてください。
チェック 3/3 合格 · あなたのパソコンで動きます
まず:どの AI を使っていますか?
使っているアプリを選ぶと、下に手順が表示されます。
Claude につなげますが、先に準備が必要です
先にパソコンへ Node.js を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
SettingsDeveloperEdit Config
{
"mcpServers": {
"oauth-auditor": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-oauth-auditor"
]
}
}
}Oauth Auditor を使って、私に何ができるか教えて、1 つやってみせて✓ Claude が Oauth Auditor を使っていると言うか、回答に Oauth Auditor のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
ChatGPT はまだ Oauth Auditor につなげません
Oauth Auditor はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません
A · Oauth Auditor につなげるアプリを使う
B · マーケティング・SNS の中で ChatGPT につなげる別のサーバー
同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました
Claude Code につなげますが、先に準備が必要です
先にパソコンへ Node.js を入れてください(1 回だけ)
Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く
claude mcp add --scope user oauth-auditor -- npx -y @guardbee/mcp-oauth-auditorOauth Auditor が一覧にあり、接続済みと表示されれば OK です
Oauth Auditor を使って、私に何ができるか教えて、1 つやってみせて✓ Claude Code が Oauth Auditor を使っていると言うか、回答に Oauth Auditor のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Cursor につなげますが、先に準備が必要です
先にパソコンへ Node.js を入れてください(1 回だけ)
Oauth Auditor を使って、私に何ができるか教えて、1 つやってみせて✓ Cursor が Oauth Auditor を使っていると言うか、回答に Oauth Auditor のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
VS Code につなげますが、先に準備が必要です
先にパソコンへ Node.js を入れてください(1 回だけ)
Oauth Auditor を使って、私に何ができるか教えて、1 つやってみせて✓ VS Code が Oauth Auditor を使っていると言うか、回答に Oauth Auditor のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Windsurf、Zed、Gemini CLI など MCP を使える他のアプリは追加方法がそれぞれ違います。アプリ一覧で確認してください
JSON 設定は下の「開発者向け」にあります
Claude Code
claude mcp add --scope user oauth-auditor -- npx -y @guardbee/mcp-oauth-auditorClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"oauth-auditor": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-oauth-auditor"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"oauth-auditor": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-oauth-auditor"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"oauth-auditor": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-oauth-auditor"
]
}
}
}この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月12日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント GuardBee で確認済みです
コードの最終更新:一昨日
MITを使用
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
まだレビューはありません
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック3項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は一昨日、最新バージョン(0.5.1)がレジストリに届いたのは13 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:PostHog MCP Server, Openshorts, Google Ads + Meta Ads + SEO/GEO MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Official PostHog MCP Server for product analytics, feature flags, experiments, and more.
Turn long videos into viral vertical shorts and publish them to TikTok, Instagram and YouTube.
Google Ads, Meta Ads, Google Analytics (GA4) & Search Console MCP server by Ryze AI
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch
An MCP (Model Context Protocol) server that scans an MCP server's own authorization code for OAuth 2.1 anti-patterns named in the MCP specification's own Security Considerations section.
The MCP spec doesn't leave this to guesswork — it explicitly calls out token passthrough (forwarding a client's token to a downstream API unchanged, instead of exchanging/re-scoping it) and missing audience validation (accepting a token whose aud claim was never issued for this server) as the central authorization failure modes for a server acting as an OAuth resource server. This package checks for exactly those two, plus three related anti-patterns in the same family.
Telemetry is off by default. With
GUARDBEE_TELEMETRY=1it sends the server, tool, success, duration and short parameter values such as a file path; longer strings and fields likecontent,tokenorpasswordare replaced with a placeholder. See@guardbee/mcp-telemetry.
Claude ──► oauth-auditor ──► Your MCP server's auth code
│ ├─ token-passthrough (client's token forwarded unchanged downstream) ├─ token-validation (jwt.verify() with no audience check) ├─ discovery-ssrf (OAuth/OIDC discovery URL built from client input) ├─ pkce (authorization request missing code_challenge) ├─ redirect-validation (redirect_uri checked with startsWith/includes, not exact match) └─ secrets-exposure (hardcoded client_secret)
Token passthrough matters because a token a client presented to *this* server was scoped and audienced for this server — not whatever downstream API the server's own tool handlers call next. Forwarding it unchanged means the downstream service is trusting a credential it never issued, on the basis of a server-side decision the original token issuer never approved.
Missing audience validation is the same failure from the other direction: jwt.verify(token, key) confirms a token's *signature* is valid, but says nothing about who it was issued *for*. Without an explicit audience check, a token minted for a completely unrelated resource server — one that happens to share the same issuer/signing key — will verify successfully here too. This is the textbook confused-deputy substitution the MCP spec is warning about.
The other three patterns are adjacent, concrete instances of the same "an MCP server's auth code trusts something it shouldn't" theme: an OAuth/OIDC discovery URL built from client-supplied input (the shape behind a real disclosed CVE), a redirect_uri validated with a prefix/substring check instead of an exact match (open-redirect bypass), and PKCE silently missing from an authorization request (required by OAuth 2.1 unconditionally, not just for public clients).
jwt.verify(...) call (or the authorization-request URL construction) and confirm audience: / code_challenge is genuinely nowhere nearby, not just matched by a lucky string positionguardbee.yml\b after a ] character that can never match, since ] isn't a word character — silently missed the bracket-notation form of header access). End-to-end verified against a fixture with all 6 anti-patterns deliberately planted (caught all 6), and against the entire guardbee-mcp monorepo (401 files — zero findings in any real third-party code; the only non-test matches were the scanner's own pattern-definition source textually containing the string jwt.verify( inside a regex literal and a doc comment, not actual vulnerable usage){
"mcpServers": { "guardbee-oauth-auditor": { "command": "npx", "args": ["-y", "@guardbee/mcp-oauth-auditor"] } } }
npx @guardbee/mcp-oauth-auditor scan ./src --fail-on=high --format=sarif > results.sarif
| Tool | Description |
|---|---|
scan_text | Scans a code snippet |
scan_file | Scans a single file |
scan_directory | Recursively scans a directory |
list_patterns | Lists all supported patterns by category |
| Category | Pattern | Severity | OWASP |
|---|---|---|---|
| token-passthrough | token_passthrough_to_downstream | critical | MCP07 |
| token-validation | missing_audience_validation | high | MCP07 |
| discovery-ssrf | oauth_discovery_ssrf | critical | MCP07 |
| pkce | missing_pkce_on_auth_request | high | MCP07 |
| redirect-validation | loose_redirect_uri_validation | high | MCP07 |
| secrets-exposure | hardcoded_oauth_client_secret | high | MCP07 |
| state-handle | predictable_state_handle (+ Python) — state / session handle from Math.random, Date.now, a counter | high | MCP07 |
| state-handle | state_handle_not_bound_to_user — a handle from a tool argument looked up with no check that it is the caller's | medium | MCP07 |
| mix-up | missing_iss_validation — authorization code redeemed without checking iss (RFC 9207) | medium | MCP07 |
| auth-url | auth_url_scheme_not_validated — a server-provided URL opened with no scheme check (javascript:, data:, file:) | high | MCP07 |
| auth-url | auth_url_opened_via_shell — URL interpolated into open / xdg-open / start through a shell | critical | MCP05 |
| local-exposure | local_http_server_unauthenticated — HTTP MCP transport with no authentication | high | MCP07 |
| local-exposure | missing_host_origin_check — no Host / Origin validation (DNS rebinding) | medium | MCP07 |
| local-exposure | listen_all_interfaces — MCP server bound to 0.0.0.0 | medium | MCP07 |
The language comes from the file extension, and Python- and Go-specific rules run only on their own files.
python_missing_audience_validation (jwt.decode with no audience= and no authlib claims_options aud), python_audience_verification_disabled ("verify_aud": False), python_token_passthrough_to_downstream (the Authorization header or all of request.headers on a requests / httpx / client call), missing_pkce_on_auth_request on authlib create_authorization_url / authorize_redirect with no code_challenge, and the discovery SSRF, redirect, state and 0.0.0.0 rules.go_missing_audience_validation (jwt.Parse with no jwt.WithAudience), go_oidc_client_id_check_skipped, go_token_passthrough_to_downstream (out.Header.Set("Authorization", r.Header.Get("Authorization"))), go_hardcoded_oauth_client_secret, go_loose_redirect_uri_validation (strings.HasPrefix), go_predictable_state_handle (math/rand, time), go_oauth_discovery_ssrf, go_auth_url_opened_via_shell, missing_pkce_on_auth_request on AuthCodeURL with no S256ChallengeOption, and ListenAndServe(":8080") as listen_all_interfaces.token_passthrough_via_variable — the incoming Authorization header read into a variable that is then put on an outgoing request.Every finding links its section of the MCP spec Security Best Practices (SARIF helpUri) and carries its OWASP MCP Top 10 id as a SARIF tag. The newer rules are heuristics over one file at a time: a check done in another module (an auth middleware, an iss comparison in a helper) is not seen.
npx @guardbee/mcp-oauth-auditor probe http://127.0.0.1:3000/mcp
Read-only checks of a running HTTP MCP endpoint: does it answer an initialize without credentials (probe_unauthenticated_access), and does it accept a foreign Host (probe_dns_rebinding_host_accepted) or Origin (probe_foreign_origin_accepted)? It sends no credentials, calls nothing beyond initialize, closes any session it opened, and refuses a host that resolves to a public address unless --allow-public. CLI only: an agent cannot start it through the MCP tools.
guardbee.yml)oauth-auditor:
fail-on: high # any | critical | high | medium | none max-files: 5000 exclude:
client_secret or response_type=code.jwt.verify() call whose options object happens to be built far away from the call site (a variable passed in, rather than an inline object) won't be checked for audience correctly.npm run build
npm test
MIT — GuardBee
Questions, ideas, or a false positive? Start a thread in GitHub Discussions or open an issue. If GuardBee is useful to you, a ⭐ on the repository helps others find it.