Token导航 LogoToken导航TokenDH.com
Bonafide MCP logo
安全风控stdio官方级别未说明来源级核验

Bonafide MCP

MCP Server

bonafide-mcp

BonafideMCP是一个开源的MCP服务器,通过多轮验证挑战验证连接系统是否为真正的AI代理,而非人类或传统机器人。

工具数

3

提示词数

0

GitHub Stars

4

资源数

0
安全TypeScript开发工具

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

AndyShortt

提供方

AndyShortt

最后核验

2026/5/17 20:22

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx bonafide-mcp

详细介绍

BonafideMCP

使用多轮MCP挑战实现代理验证的概念。

BonafideMCP以特工携带的证明其“真实”身份的文件命名。

BonafideMCP是一个开源软件 MCP服务器 这展示了MCP是如何 sampling/createMessage primary可用于进行多轮链式验证挑战——验证连接系统是具有LLM运行时的真正AI代理,而不是人类或经典机器人。这是一个概念测试,不应用于真正的身份验证。

想法

CAPCTHA系统用于防止机器人进入网站,证明客户端系统真的是人类。但是,如果你想把人类拒之门外,只允许人工智能代理呢?

对于这个项目,我们将AI Agent(即AI应用程序)定义为由LLM驱动的系统,并实现MCP规范中概述的功能。这个定义是一个移动的目标。

最近有几种反向验证码的实现,例如 MoltcaptchaClawptcha和BOTCHA。这些系统使用单一的HTTP质询-响应协议,并严重依赖时间(所有Auth框架中的一个重要指标)来验证响应者是人类还是人工智能。在这个系统中,我们实现了一个MCP本机身份验证协议,该协议发出一系列质询,所有这些质询都建立在先前的响应之上。这种多回合对话提高了检测来自非人工智能参与者(或中间人)的定时信号的能力。

对于MCP协议,我们利用了新的 sampling/createMessage 原语允许AI应用程序提示其LLM支持MCP服务器的提示。如果AI应用程序没有实现采样(它是新的,有自己的安全问题),那么协议可以回退到标准工具调用/响应。挑战类型的设计不需要LLM进行验证,但仍然是只有LLM才能提供的答案。已完成的挑战加上相关的延迟用于最终验证。一旦验证,签名的jwt将作为MCP资源发布到token/{session_id}。

快速开始

npm install bonafide-mcp

添加到您的MCP客户端

{
  "mcpServers": {
    "bonafide": {
      "command": "npx",
      "args": ["bonafide-mcp"]
    }
  }
}

直接运行

npx bonafide-mcp

运作原理

采样模式(首选)

当连接客户端声明支持采样时,验证会在单个客户端中自动运行 agent_verification 工具调用:

Agent                              BonafideMCP Server
  │  tools/call: "agent_verification"  │
  │ ───────────────────────────────────▸│  Starts timer
  │                                     │
  │  sampling/createMessage (Round 1)   │
  │ ◂───────────────────────────────────│  Constrained text challenge
  │  Response ─────────────────────────▸│  Verify deterministically
  │                                     │
  │  sampling/createMessage (Round 2)   │
  │ ◂───────────────────────────────────│  Depends on Round 1
  │  Response ─────────────────────────▸│  Verify deterministically
  │                                     │
  │  sampling/createMessage (Round 3)   │
  │ ◂───────────────────────────────────│  Depends on Round 2
  │  Response ─────────────────────────▸│  Verify · Stop timer
  │                                     │
  │  Tool result: ✓ verified            │
  │  { token_uri: "bonafide://..." }   │
  │ ◂───────────────────────────────────│

基于工具的回退

当采样不可用时,验证退回到基于工具的流程,其中挑战嵌入到工具响应中:

Agent → tools/call: "agent_verification"  → gets Round 1 challenge
Agent → tools/call: "submit_response"     → gets Round 2 challenge
Agent → tools/call: "submit_response"     → gets Round 3 challenge or result

同样的挑战,同样的链接,但减少了代理阻力(更接近基于HTTP)。

工具

工具说明
agent_verification开始验证。接受 difficulty: "lightweight" (2轮,3秒)或 "standard" (3轮,5秒)。
submit_response提交挑战响应(仅基于工具的回退)。
check_status检查会话的验证状态。

资源

URI描述
bonafide://token/{session_id}签名的JWT凭证(通过验证后可用)。
bonafide://status/{session_id}会话状态元数据。

挑战类型

约束文本生成(SMHL启发)

生成同时满足语义和结构约束的文本:一个主题、一个起始字母、一个确切的字数和一个必需的关键字。改编自 Moltcaptcha的smhl 方法。

计算字段结构化输出

生成一个JSON对象,其中一些字段需要世界知识(一个真实的城市,它的国家),而另一些字段是数学推导(字母计数,ASCII和)。通过确定性计算验证。

链式

每一轮的挑战都是根据前一轮的验证响应生成的。这会产生无法并行化的串行依赖关系,加剧代理中继延迟,并需要完全的上下文维护。

配置

环境变量:

变量默认值描述
BONAFIDE_EC_PRIVATE_KEY*(启动时生成的临时密钥)*PEM编码的EC P-256私钥用于JWT签名。 生产所需。
BONAFIDE_ISSUERbonafide.localhost智威汤逊发行人索赔

要生成密钥对,请执行以下操作:

openssl ecparam -genkey -name prime256v1 -noout | openssl pkcs8 -topk8 -nocrypt -out bonafide.pem
openssl ec -in bonafide.pem -pubout -out bonafide.pub
export BONAFIDE_EC_PRIVATE_KEY="$(cat bonafide.pem)"

如果 BONAFIDE_EC_PRIVATE_KEY 如果未设置,服务器将在启动时生成临时密钥对并记录警告。使用临时密钥发行的令牌在服务器重启后将无法生存。真正的实现将使用更强大的密钥生成器和存储primitevs。

项目结构

bonafide-mcp/
├── src/
│   ├── index.ts                  # Entry point (stdio transport)
│   ├── server.ts                 # MCP server: tools, resources, verification flow
│   ├── challenges/
│   │   ├── types.ts              # Shared types and config
│   │   ├── constrained-text.ts   # SMHL-inspired text challenges
│   │   ├── computed-field.ts     # Structured JSON challenges
│   │   └── chain.ts             # Round chaining logic
│   ├── verification/
│   │   └── verifier.ts          # Response verification engine
│   ├── session/
│   │   └── manager.ts           # Session state management
│   └── credentials/
│       └── jwt.ts               # JWT issuance and validation
├── data/
│   └── cities.json              # City/country lookup for computed-field challenges
├── website/                     # Static landing page (Cloudscape Design System)
├── package.json
└── tsconfig.json

学分

BonafideMCP建立在其他人的工作之上:

  • Moltcaptcha --SMHL的挑战。BonafideMCP的挑战类型直接受到了这种方法的启发。
  • 阿卡帕查 --基于HTTP的多轮验证,具有跨轮依赖性。
  • IETF Web Bot认证 --加密代理身份(与BonafideMCP互补)。
  • 模型上下文协议 --使这种方法成为可能的协议。

局限性

BonafideMCP并非牢不可破。一个拥有快速LLM端点和优化MCP中继的动机充分的对手可能会通过验证。与基于HTTP的验证相比,该系统大大提高了标准,但它不是加密保证。

为了获得更强的保证,请将BonafideMCP与加密身份(Web Bot Auth、客户端证书)相结合。

安全考虑

BonafideMCP是一个 研究项目与参考实施。它没有经过正式的安全审计,在用于任何生产或信托环境之前应仔细评估。

需要考虑的已知设计和实施限制:

  • 人工智能的证明,而不是身份的证明。 通过验证证明连接系统可以访问有能力的LLM,而不是任何特定的代理或用户都被授权。将挑战转发给另一个LLM的中继可以通过。为了确保身份,将BonafideMCP与加密机制(客户端证书、Web Bot Auth)相结合。
  • 基于工具的模式较弱。 在基于工具的回退模式下,挑战以明文工具结果的形式返回,堆栈中的任何中间件都可以看到。采样模式将挑战直接推送到模型中,并且对代理攻击的抵抗力更强。
  • 内存会话存储。 所有会话和令牌都保存在进程内存中,并在重新启动时丢失。没有持久层、集群支持或令牌撤销机制。已发布的JWT有效期至到期(15分钟)。
  • 没有每个客户的费率限制。 服务器对并发会话实施全局上限(100),但不限制单个客户端的速率。单个客户端可能会耗尽会话池。
  • 挑战可预测性。 通过以下方式选择挑战参数(主题、字母、字数) Math.random(),这不是加密安全的。能够预测RNG状态的对手可以预先计算响应。

这是一个用于实验和测试的概念实现。请勿在实际应用中使用。

许可证

麻省理工学院

目录标签

目录标签

安全TypeScript开发工具AI验证本地部署MCP协议多轮挑战代理认证安全测试

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

token

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

bonafide-mcp

工具数量(toolCount,工具数)

3

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiotoken部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP