mcpField
H
Hookwarden — Webhook Integrity

Hookwarden — Webhook Integrity

本地服务
hookwarden.dev安全12 周前更新

关于 Hookwarden — Webhook Integrity

Hookwarden 将确定性的 Webhook 签名检查和证据包完整性验证提供给编码 Agent。检查在本地运行,不访问网络,并返回结构化结果。

主要功能

  1. 01扫描处理程序中的签名检查
  2. 02返回已验证、未验证或需人工复核结果
  3. 03离线验证证据包哈希链
  4. 04离线检查内嵌 Merkle 根签名
  5. 05支持 27 种 Webhook 提供方

适用场景

  1. 01审查处理程序是否缺少签名验证
  2. 02检查证据包是否遭到篡改
  3. 03检查受支持提供方的 Webhook 代码

MCP 相关

MCP 服务提供 `scan_handler`,用于检查 Webhook 代码;并提供 `verify_audit_chain`,用于离线验证证据包。服务在本地运行,不产生网络流量,也无需身份验证。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"hookwarden": {
"command": "npx",
"args": [
"-y",
"@hookwarden/mcp"
]
}
}
}
启动命令npx -y @hookwarden/mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@hookwarden/mcp0.9.5

工具

2

收录的工具列表 · 更新于 2 周前

参数类型必填说明
codestring否
filesobject否
languageenum否js | ts | python | php | go
providerstring否

详细介绍

hookwarden

首个实现 Webhook 签名验证的 MCP 服务。
本地运行。结果确定。零网络访问。JS / TS / Python / PHP / Go — 27 个提供商 — 三态判定。

npm 版本 许可证:Apache 2.0 Node 22+ MCP 规范 2025-06-18

功能

@hookwarden/mcp 将 hookwarden 的确定性 Webhook 验证引擎封装为 MCP 工具。AI 编码 Agent——Claude Desktop、Cursor、Continue,以及基于 Anthropic Agent SDK 构建的应用——可使用两个工具:

  • scan_handler — 扫描粘贴的 Webhook 处理程序代码,并返回结构化结果(verified / not-verified / manual-review),支持 Stripe、GitHub、Shopify、Twilio 及其他 23 个提供商。
  • verify_audit_chain — 离线验证 hookwarden 证据包的哈希链和由 KMS 签名的 Merkle 根(无需网络,无需身份验证),并返回 { valid, broken_at_row, signatures_verified }。

完全在客户端运行。MCP 进程不会向外发起任何网络请求。无需身份验证。使用与 hookwarden CLI 相同的引擎——相同的规则包、相同的内容哈希和端到端来源证明。

一条命令安装

npx @hookwarden/mcp init

该命令会检测已安装的 MCP 客户端(Claude Desktop / Cursor / Continue),打印各操作系统的摘要表,并为每个客户端写入规范配置。它会在每个修改过的配置文件旁生成 .bak 文件。重启相应客户端后,工具列表中就会出现 scan_handler 和 verify_audit_chain。

传入 --all 可用于非交互式操作,传入 --dry-run 可预览更改,传入 --force 可覆盖现有的 mcpServers.hookwarden 条目,或传入 --clients claude-desktop,cursor 可限制客户端范围。

手动配置

如果不想运行初始化辅助工具,也可以手动编写配置。

Claude Desktop
  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "hookwarden": {
      "command": "npx",
      "args": ["-y", "@hookwarden/mcp"]
    }
  }
}
Cursor

~/.cursor/mcp.json — 格式与 Claude Desktop 相同:

{
  "mcpServers": {
    "hookwarden": {
      "command": "npx",
      "args": ["-y", "@hookwarden/mcp"]
    }
  }
}
Continue.dev

Continue 为每个服务使用单独的文件。写入 ~/.continue/mcpServers/hookwarden.yaml:

name: hookwarden
command: npx
args: [-y, "@hookwarden/mcp"]
Anthropic Agent SDK

Agent SDK 以编程方式使用——无需编辑配置文件。将以下内容添加到代码中:

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Audit this webhook handler for missing signature verification...",
  options: {
    mcpServers: {
      hookwarden: {
        command: "npx",
        args: ["-y", "@hookwarden/mcp"],
      },
    },
  },
})) {
  console.log(message);
}

初始化辅助工具不会在这里写入配置——SDK 集成通过代码实现,而非配置。

scan_handler 工具

输入
字段类型说明
codestring单文件模式。默认为 TypeScript;可通过 language 覆盖。不能与 files 同时使用。
filesRecord<string, string>多文件模式。键为虚拟文件路径;语言根据扩展名推断。
language"js" | "ts" | "python"可选。"php" 会返回 language_not_in_preview——PHP 支持将在 v0.8.1 中提供。
providerstring可选。不区分大小写("stripe" = "Stripe")。如果规则包中没有该提供商,则返回 unknown_provider。
输出

返回包含 structuredContent 一等字段的 Tool.result(MCP 规范 2025-06-18),并附带一个字符串化 JSON 文本块以保持向后兼容:

{
  "verdict_summary": { "verified": 0, "not_verified": 1, "manual_review": 0, "parse_error": 0 },
  "findings": [
    {
      "rule_id": "stripe/missing-signature-verification",
      "provider": "stripe",
      "severity": "critical",
      "verdict": "not-verified",
      "file": "__handler.ts",
      "line_start": 7,
      "line_end": 9,
      "message": "Webhook handler reads req.body without calling stripe.webhooks.constructEvent...",
      "provider_docs_url": "https://stripe.com/docs/webhooks",
      "references": [
        "https://www.svix.com/blog/common-failure-modes-for-webhook-signatures/",
        "https://hookdeck.com/webhooks/guides/webhook-security-vulnerabilities-guide"
      ],
      "rule_pack_version": "0.7.2"
    }
  ],
  "scan_metadata": {
    "engine_version": "0.7.2",
    "rule_pack_version": "0.7.2",
    "rule_pack_content_hash": "938f7565e29f19e0cbd34594731d1de2b0ffd40ee87aacaa8be2435fc1f47f32"
  }
}
判定结果词汇
判定结果含义
verified引擎证明处理程序通过提供方文档所述的 SDK 调用验证签名。
not-verified引擎证明处理程序未验证签名(或在产生副作用后才验证)。
manual-review引擎有结构层面的证据,但无法在没有人工检查的情况下作出判断——请检查代码片段。

与 CLI 使用相同的 3 种状态词汇。MCP 层不会进行映射。

错误负载(isError: true)
错误触发条件
empty_input未提供 code 或 files。
exclusive_input_modes同时提供了 code 和 files——请选择其中一种。
language_not_in_previewlanguage: "php"——PHP 将在 v0.8.1 中发布。建议:npx hookwarden scan。
unsupported_languagelanguage 不在已知集合中。
unknown_providerprovider 不在规则包中。响应会包含排序后的已知列表。
engine_drift / rules_drift启动时或调用时发生偏差——请参阅 drift-detection。

解析失败不会导致传输崩溃——而是以 rule_id: "engine/parse-error"、严重性为 high 的发现项形式输出,并递增 verdict_summary.parse_error。

verify_audit_chain 工具

离线验证 hookwarden 证据包的完整性——无需网络、AWS 或凭据。“无需信任 hookwarden 即可验证证据链。”该工具会遍历逐行哈希链,往返验证清单哈希,并针对嵌入签名 CMK 的 SPKI 公钥的 v1.1 证据包,使用 node:crypto 验证 ECDSA-P256(MessageType:DIGEST)Merkle 根和清单签名。

输入
字段类型说明
evidence_pack_jsonstring完整的证据包 JSON(由 hookwarden 证据导出功能生成的文件)。支持 v1.0 和 v1.1 证据包。
输出
{
  "valid": true,
  "broken_at_row": null,
  "signatures_verified": 2
}
字段含义
valid仅当哈希链完整、清单哈希往返验证通过,且所有可离线验证的签名均验证通过时,值为 true。
broken_at_row链哈希不匹配的首行的 seq,若哈希链完整则为 null。签名有效性独立于链完整性。
signatures_verified离线验证通过的签名数量:N 个 Merkle 根签名 + 1 个清单签名(N+1)。v1.0 证据包(未嵌入公钥)为 0——工具会输出 signatures not verifiable offline (v1.0 pack) 提示,而不会失败。
信任模型

v1.1 证据包自带 SPKI 公钥。该签名证明证据包在签名后未被持有该密钥的一方篡改——这是一种首次使用即信任的模型。若要通过带外方式将信任固定到特定签名者,审计人员可以将 signature.signing_cmk_arn 与 AWS KMS GetPublicKey 的结果交叉核对,并确认嵌入的 SPKI 密钥匹配。格式错误的证据包 JSON 会返回 isError: true(error: "invalid_pack_json")——该工具绝不会让异常越过其边界。

该工具仅导入 @hookwarden/canonical-json(共享的 RFC 8785 字节相等性基准)和 node:crypto。它不会加载引擎或规则包,也不会运行偏差检测。

完整性声明

  • 零出站 TCP — 已发布的 tarball 通过 pnpm inspect-bundle 检查。这是一项结构性 CI 门禁,会拒绝任何导入 HTTP 客户端(node:http、axios、undici 等)的源文件,以及任何不在文档所列允许清单中的直接依赖。
  • 漂移检测 — 每次调用 scan_handler 时,都会将运行时解析出的引擎和规则包哈希值与构建时的 dist/build-manifest.json 交叉核对。不匹配时会返回 isError: true,并附带结构化的 engine_drift / rules_drift 负载。无法通过环境变量禁用。请参阅 漂移检测,其中也介绍了 v0.8.0 的引擎内容哈希限制。
  • 无遥测 — tarball 的 dependencies 中及源文件的传递导入中均未声明分析或跟踪 SDK(@datadog/*、@segment/*、@sentry/* 等)。
  • 开源 — Hookwarden/hookwarden/packages/mcp/ 下的代码采用 Apache-2.0 许可。引擎和规则包位于同一个单体仓库中,并采用相同的许可证发布。

链接


版权所有 2026 Hookwarden 贡献者。Apache License 2.0。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。