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

bouncer

作者:nugehs版本 0.3.0i★ –i在你的电脑上运行
注册名称io.github.nugehs/bouncer

安装

概览

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

Static compliance-controls checker for UK Online Safety Act & ICO Children's Code. CLI + MCP.

PopNx MCP 的三大支柱

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

它能帮你做什么

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

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 开发者工具

安装

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

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 注册中心没有列出需要填写的密钥。

你需要

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

你用的是哪个应用?

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

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

{
  "mcpServers": {
    "bouncer": {
      "command": "npx",
      "args": [
        "-y",
        "@nugehs/bouncer",
        "mcp"
      ]
    }
  }
}

在终端中运行这条命令

claude mcp add bouncer -- npx -y @nugehs/bouncer mcp

在 Cursor 中打开

或者自己复制设置

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

{
  "mcpServers": {
    "bouncer": {
      "command": "npx",
      "args": [
        "-y",
        "@nugehs/bouncer",
        "mcp"
      ]
    }
  }
}

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

在 VS Code 中打开

或者自己复制设置

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

{
  "servers": {
    "bouncer": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@nugehs/bouncer",
        "mcp"
      ]
    }
  }
}

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

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

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

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

它能做什么

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

基础检查i

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

  • ✓ 通过

    作者与仓库一致

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

  • … 尚未检查

    仍在维护

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

  • … 尚未检查

    有许可证

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

  • – 不适用

    端点有响应

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

  • – 不适用

    使用 OAuth 登录

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

  • … 尚未检查

    工具描述中没有隐藏指令

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

与“开发者工具”中的其他服务器比较i

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

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

常见问题

bouncer 安全吗?

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

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

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

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

它还在维护吗?

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

哪些应用可以使用它?

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

有什么可以替代它?

同一分类中有:GitHub, Desktop Commander, Cloudflare MCP

替代选择

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

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

GitHub

Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

作者:github广泛使用★ 3.4万5天前更新

电脑或云端

Desktop Commander

MCP server for terminal commands, file operations, and process management

作者:wonderwhy-er广泛使用↓ 71万/周★ 1万17天前更新

在你的电脑上运行

Cloudflare MCP

Cloudflare MCP servers

作者:cloudflare正在增长★ 444614个月前更新

在云端运行✓ mcp.cloudflare.com

作者的 README

打开 README

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

bouncer

Static compliance-controls checker — the controls a regulation requires, verified in your code.

[nugehs.github.io/bouncer-web](https://nugehs.github.io/bouncer-web/) (site)

bouncer verifies that the controls a regulation *requires* actually exist in your code — UK Online Safety Act, ICO Children's Code (AADC), and Nigeria (NDPC, FCCPC, FIRS) — expressed as deterministic rule packs. It runs in CI, exits non-zero when a required control is missing, and needs no LLM.

It checks IDs at the door so non-compliant code doesn't get in.

bouncer is an engineering aid, not legal advice. A green report means the

coded controls a rule looks for were found — it is not a substitute for a

compliance / DPO review.


Why

Regulators now expect *demonstrable* controls: age assurance, high-privacy defaults for children, report/block affordances on user-generated content, a DPIA, a risk assessment. Those are concrete things that either exist in a codebase or don't. bouncer turns a regulation into a set of static checks over your repo, the same way tieline turns an API contract into drift checks — the engine knows nothing about the law; the rule packs do.

bouncer vs semgrep / policy-as-code

Scanners like semgrep, CodeQL, or Snyk answer *"is there bad code here?"* — they hunt for vulnerabilities and dangerous patterns that shouldn't exist. bouncer answers the opposite question: *"does the code the regulation requires actually exist?"* — age assurance on sign-up, report/block on UGC surfaces, high-privacy defaults for children. A repo can be vulnerability-free and still fail every one of those obligations. Policy-as-code tools (OPA/Rego, Conftest) gate *configs and infrastructure* against policy; bouncer gates *application source* against regulatory rule packs, with file:line evidence for every control and an honest unknown when a surface can't be located. In short: semgrep finds vulnerabilities; bouncer proves required controls exist. They complement each other — run both.

Install

npx @nugehs/bouncer init

npx @nugehs/bouncer check

Or clone and run with plain Node (zero runtime dependencies, Node ≥ 18).

Usage

bouncer init [path]                 # write a starter bouncer.config.json

bouncer check # run packs, print report, exit 1 on a missing control bouncer check --pack uk-aadc # restrict to one pack bouncer check --status fail # show only the failures bouncer report --out report.html # self-contained HTML audit report bouncer list # every rule the configured packs apply bouncer explain # what a rule requires + how it is checked bouncer packs # rule packs shipped with bouncer bouncer doctor # sanity-check config, adapter, packs bouncer mcp # start the MCP server (stdio)

Verdicts
VerdictMeaning
passthe required control was found (evidence: file:line)
failthe surface exists, but no evidence of the control was found
unknownthe surface could not be located in this repo — *can't determine, not a pass*

unknown is deliberate: bouncer never reports a green pass for a surface it could not find. Missing surface → honest "can't determine".

Configuration

bouncer.config.json:

{

"target": { "adapter": "auto", "repo": "./my-app", "roots": ["."] }, "packs": ["uk-osa", "uk-aadc"], "packDirs": [], "ignore": [], "exclude": [], "failOn": ["fail"] }

  • adapter — how regulation *surfaces* (sign-up, profile, chat, livestream…) map onto files for your stack.

bouncer is language-agnostic. The default auto adapter scans TS/JS, Go,

Java, Kotlin, Scala, C#, C/C++, Rust, Swift, Dart, PHP, Python, Ruby, Elixir,

SQL and HTML templates. Surfaces are found by directory/file *names* in any

naming convention (signup/, sign_up.py, SignUpController.java).

Comments and test/fixture files are never counted as evidence. next and

react-native remain as TS/JS-only aliases. Narrow with target.languages.

  • exclude — extra globs to skip (added to built-in test/fixture/mock excludes; set "defaultExcludes": false to disable those).
  • packs — which rule packs to run. Built-ins: uk-osa, uk-aadc, ng-ndpc, ng-fccpc, ng-firs.
  • packDirs — extra directories of your own *.json packs.
  • ignore — rule ids to skip.
  • failOn — which buckets make check exit non-zero (default ["fail"]). Regardless of failOn, check also exits 1 when *every* rule is unknown: no surface was located, so nothing was verified.
  • Keys starting with _ (e.g. "_note") are treated as comments and ignored silently.

Rule packs

A pack is JSON. Each rule maps a *legal standard* to a static assertion over a *surface*:

{

"id": "aadc.geolocation-default-off", "standard": "Standard 10 — Geolocation", "severity": "high", "surface": "profile", "intent": "Geolocation must default to off for children.", "fix": "Default any location-sharing setting to off.", "assert": { "find": "(share[_-]?location|location[_-]?sharing)[\"']?\\s*[:=]\\s*(false|off)\\b", "in": ["profile", "privacy", "location"], "expect": "present" } }

Assertion nodes:

  • { "find": " ", "in": " ", "expect": "present|absent" }
  • { "allOf": [ … ] } · { "anyOf": [ … ] } · { "not": … }

in accepts a surface alias (resolved by the adapter), an array of aliases/globs, or a raw glob. expect: "absent" flips the meaning — a match is a *violation* (used for nudge patterns, self-declared age checkboxes, etc.).

Surfaces

any, signup, auth, profile, privacy, location, chat, livestream, ugc, moderation, consent, legal, dsr, security, retention, breach, processors, payments, invoice, governance. Unknown surface names are pack-validation errors.

Nigeria packs

For a platform operating in Nigeria, three packs ship built-in:

  • `ng-ndpc` — Nigeria Data Protection Act 2023 (NDPC): privacy notice, opt-in & granular consent, data-subject rights, encryption, retention/erasure, NDPA localization, DPO designation, 72-hour breach plan, cross-border safeguards.
  • `ng-fccpc` — consumer protection (FCCPC): blanket "no refund / all sales final" clauses flagged as void — and high-precision, so a *tiered* or conditional refund policy doesn't trip it — plus refund-policy present, no drip pricing, explicit terms acceptance, terms of service present.
  • `ng-firs` — tax (FIRS): 7.5% VAT rate, VAT on commission, WHT on payouts, VAT tax invoice.

Some obligations are process, not code — NDPC registration, signed cross-border DPAs, the WHT remittance itself. Those rules surface as gaps to track (add them to ignore with a note), not things a static scan can prove.

MCP

bouncer is also an MCP server (stdio), so an agent can pull the same deterministic results:

ToolPurpose
compliance_checkrun packs, return per-control verdicts + evidence
list_ruleslist rules the configured packs apply
explain_rulea rule's standard, intent, fix, and how it is checked
list_packsavailable rule packs
// .mcp.json

{ "mcpServers": { "bouncer": { "command": "npx", "args": ["-y", "@nugehs/bouncer", "mcp"] } } }

CI

- run: npx @nugehs/bouncer check

Fails the build when a required control goes missing — e.g. someone removes an age-gate or a report button from a UGC surface.

Tests

npm test    # node --test — zero dependencies, nothing to install

The suite runs on Node's built-in test runner against throwaway fixture repos: glob/brace expansion, every assertion probe (find, allOf/anyOf/not, allInFile + within windows, expect: "absent"), the pass/fail/unknown verdict semantics, and pack loading. CI runs it on Node 18, 20, 22, and 24.

License

MIT


Part of the toolchain

bouncer is one of four tools that form a deterministic trust layer for AI-assisted development. Each answers a question people keep handing to an LLM — with static analysis instead.

  • repoctx — context: what does this change actually touch?
  • tieline — contracts: did the front end and back end quietly stop agreeing?
  • bouncer (this tool) — compliance: could you defend this to Ofcom?
  • aiglare — governance: where can the model do something you can't undo?

More at segunolumbe.com. *static analysis, never the model.*

问 PopNx