mcpField
N
Nostr Signer

Nostr Signer

远程服务
github.com/hudhaifahz安全07 周前更新
代码仓库

关于 Nostr Signer

Nostr Signer 是供 ChatGPT 和 Codex 通过浏览器签名器请求 Nostr 签名的开源本地桥接工具,不接触私钥。面向可运行 Node.js 并能在兼容浏览器扩展中逐项批准操作的桌面用户。

主要功能

  1. 01连接 NIP-07 浏览器签名器
  2. 02支持 NIP-46 签名流程
  3. 03准备并验证 Nostr 事件
  4. 04签名操作需逐项批准
  5. 05发布事件并接收中继确认
  6. 06签名会话仅保存在内存中

适用场景

  1. 01批准已准备的 Nostr 短文签名
  2. 02单独确认后发布事件
  3. 03通过临时签名链接连接 NIP-46 应用
  4. 04从中继读取范围受限的 Nostr 事件

MCP 相关

通过本地 stdio MCP 工具,让 ChatGPT 或 Codex 请求公钥访问、事件准备与签名、中继读取及单独确认的发布。另提供工具集有所缩减的托管 MCP 端点。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://signer.frontiercrown.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

17

此工具无需参数。

详细介绍

ChatGPT 和 Codex 的 Nostr 签名器

一款本地优先的开源签名器桥接工具,让 ChatGPT Work 或 Codex 可以请求由 Alby、nos2x、其他 NIP-07 浏览器扩展或高级 NIP-46 远程签名器提供 Nostr 签名。私钥由签名器保管。本项目不需要、接受、存储、记录或传输 nsec。

为了获得最强安全性,请使用本地安装。 它会将审批页面和会话协调器保留在你的电脑上。托管桥接服务是一个便利的 Beta 版本:事件内容、公钥、签名、密文和中继响应会经过 Frontier Crown 在 Railway 上运营的基础设施。由于明文可能经过该基础设施,托管版 NIP-44 加密和解密功能已禁用。

发布状态:v0.4.0 本地公开 Beta 版,以及在线、无需账户的托管 Alpha 版。2026-09-10,已成功通过 Chrome 系浏览器访问 NIP-07 公钥并完成签名。经用户批准发布的公告已被接受,并从 nos.lol、nostr.mom 和 relay.primal.net 独立读取回验证签名。托管 MCP 端点 https://signer.frontiercrown.com/mcp 已完成外部初始化和双会话配对页面隔离测试。其精简的托管功能提供 17 个工具,不包含 NIP-44 加密/解密。该服务已在官方 MCP Registry 上启用,但尚未获 OpenAI 目录批准。

它适用于所有人吗?

并非如此。当前版本面向桌面用户:用户需要运行 Node.js 22+、连接本地 stdio MCP 服务,并在安装了兼容 NIP-07 扩展的 Chrome 或 Firefox 系浏览器配置文件中打开审批页面。它不是移动端签名器,也不是无人值守的签名守护进程。建议使用能在每次审批前显示完整事件(包括 kind、content、tags 和 timestamp)的签名器。

免费的本地插件是主要且推荐的公开版本,因为每位用户都会保管自己的密钥并运行桥接工具。它无需 OAuth 或单独的账户:浏览器扩展会提供 Nostr 公钥,并批准每次签名。托管原型同样无需 OAuth 或用户账户:它使用短期、高熵的能力 URL,将每个 AI MCP 会话绑定到启用了扩展的浏览器。它仍需要按会话进行隔离、滥用控制、隐私/数据保留管理操作,以及独立安全审查。请参阅 LAUNCH_READINESS.md、COMPATIBILITY.md 和 HOSTED_SERVICE.md。

在 Codex 中安装

克隆公开源代码,验证发布标签,在本地构建,并注册捆绑的 MCP 服务。 然后启动新的 Codex 任务,以加载其工具:

git clone --branch v0.4.0 https://github.com/hudhaifahz/nostr-signer-chatgpt.git
cd nostr-signer-chatgpt
npm ci
npm run check
codex mcp add nostr-signer -- node "$PWD/mcp/server.mjs"

仓库包含可移植的插件清单,但目前尚未发布一键式 Grynvault marketplace 封装。安装前请检查源代码和发布标签;本地签名器桥接工具以启动它的桌面用户权限运行。

下载预构建的本地软件包

发布页面包含预构建归档和 SHA-256 校验和。该归档包含独立 MCP 软件包、插件清单、签名器技能、许可证声明、源代码、测试和文档。不包含私钥、签名器会话或浏览器数据。

构建哈希和在线部署所声明的源代码修订版本记录在 PROVENANCE.md 中,并发布于 https://signer.frontiercrown.com/provenance。带标签的归档附有 GitHub 构建来源证明。

curl -LO https://github.com/hudhaifahz/nostr-signer-chatgpt/releases/download/v0.4.0/nostr-signer-chatgpt-0.4.0.tgz
curl -LO https://github.com/hudhaifahz/nostr-signer-chatgpt/releases/download/v0.4.0/nostr-signer-chatgpt-0.4.0.tgz.sha256
shasum -a 256 -c nostr-signer-chatgpt-0.4.0.tgz.sha256
mkdir nostr-signer-chatgpt
tar -xzf nostr-signer-chatgpt-0.4.0.tgz -C nostr-signer-chatgpt --strip-components=1
codex mcp add nostr-signer -- node "$PWD/nostr-signer-chatgpt/mcp/server.mjs"

v0.4.0 软件包的预期 SHA-256: 75d2c2cc7070ce0a15dbc122c479c312919279ff4160ed9e7e1993c335ce95a5。

普通用户的使用流程

  1. 在本地安装并启动插件。
  2. 在安装了 Alby、nos2x 或其他 NIP-07 签名器的 Chrome 或 Firefox 配置文件中,打开本地设置页面 http://127.0.0.1:34846/。
  3. 点击一次 Connect browser extension,并在扩展程序中批准公钥访问。保持此页面打开。
  4. 让 ChatGPT 或 Codex 准备一条 Nostr 笔记。
  5. 检查确切的笔记内容。然后让 ChatGPT 或 Codex 请求签名。
  6. 本地页面会显示待处理操作的确切内容。点击 Continue in extension,然后在扩展程序提示时批准。
  7. 另外告诉 ChatGPT 或 Codex 发布。只有至少一个中继确认后,帖子才会被报告为已上线。

若要在 Noornote 或 YakiHonne 等支持 NIP-46 的应用中使用同一签名器,请先连接浏览器扩展程序,点击 Create app sign-in link,复制私有的 bunker:// 链接,并将其粘贴到应用的 Remote signer 或 Bunker 登录界面。返回本地页面,批准确切的客户端公钥以及之后的每一项签名、加密或解密请求。该链接会过期,仅对一个已批准的客户端有效,必须像临时密码一样妥善保管。

若要在 Codex 内置浏览器中使用 Grynvault,请打开 https://frontiercrown.com/portal,点击 Sign in with Codex signer,并让 Codex 使用此插件批准确切的短代码。门户标签页会保留一个独立的高熵密钥;短代码仅用于定位待处理请求。签名授权会将该公钥的只读账户仪表板返回到发起请求的标签页,不会发布事件、创建发票、更改结算方式,也不会授予钱包托管权限。

切勿将 nsec、原始私钥、助记词或备份粘贴到 ChatGPT、Codex、设置页面或工具调用中。如果 nsec 已泄露,请在本项目之外使用可信的签名器轮换它。

架构

flowchart LR
  U[User] --> C[ChatGPT Work or Codex]
  U --> E[Alby, nos2x, or NIP-07 extension]
  U --> S[Advanced NIP-46 signer]
  U --> A[Noornote, YakiHonne,
  or another NIP-46 app]
  C -->|focused MCP tools| P[Local plugin process]
  B[Local approval page\n127.0.0.1 only] <--> P
  B -->|window.nostr request| E
  E -->|signed or encrypted result| B
  P -->|NIP-46 encrypted requests| R[(Configured Nostr relays)]
  A -->|NIP-46 encrypted requests| R
  R -->|approval-gated responses| P
  R -->|NIP-46 events| S
  S -->|approve or reject| R
  P -->|verified signed event\nafter separate publish intent| R

  K[nsec] -. remains inside signer .-> E
  K -. remains inside signer .-> S

代码将签名器接口、会话/意图状态、中继网关、MCP 适配器和本地 UI 分离开来。未来的 MCP Apps 组件、WebMCP 网站工具、硬件签名器或其他传输方式,都可以复用服务层,而无需更改事件验证策略。

已实现的功能

  • 适用于 Alby、nos2x 及兼容扩展的主要 NIP-07 桥接:一次仅建立一个本地连接,同一时间仅排队等待一个审批请求,使用随机请求 ID,拒绝过期响应,且不访问私钥。
  • 使用 nostr-tools 的 NIP-46 支持实现高级 bunker:// 和客户端生成的 nostrconnect:// 流程。
  • 面向第三方 NIP-46 客户端的实验性远程签名器模式。它会创建一个仅限单个客户端使用、短时有效的 bunker:// 链接,支持 NIP-44 和旧版 NIP-04 加密 RPC 传输,并要求对连接、事件签名、NIP-04 和 NIP-44 操作进行本地审批。
  • get_public_key、精确的通用事件和 kind:1 准备、绑定的 sign_event、nip44_encrypt、nip44_decrypt、需单独确认的 publish_event,以及针对 kind 0 和 1 的有限中继读取。
  • 精确的未签名事件验证、签名/哈希校验、签名器公钥绑定、一次性签名意图、超时、会话过期和过期配对拒绝。
  • 每个中继的发布确认。所有中继均拒绝或超时,不会声称发布成功。
  • 签名器会话仅保存在内存中。重启或断开连接后,配对信息和已准备的事件都会被清除。
  • 仅限 localhost 的设置页面,采用每个进程独有的 anti-CSRF 令牌、请求大小限制,不加载外部脚本,也不持久化数据。
  • 结构化日志会隐藏敏感信息,并严格拒绝类似 nsec 的输入。
  • 已签名的 Grynvault 账户仪表板访问,以及单独准备/确认的支持者和 2,000 sat [email protected] NIP-05 发票请求。发票响应始终报告为待处理状态, 绝不表示已付款或已结算。
  • 短时有效的 Grynvault 应用内浏览器交接审批绑定到确切的 HTTPS URL、质询、代码 和载荷哈希。只有持有独立密钥的浏览器才能认领其只读仪表板。
  • 可移植的 Agent Plugins 清单,以及脚手架生成的 Codex 兼容性清单。
  • 用于 CI 和引导入门的确定性安全模拟签名器/中继流程。

本地设置

要求:Node.js 22 或更高版本,以及 npm。公开测试版请使用 Nostr 测试身份。

npm ci
cp .env.example .env
npm run build
npm start

在实时配对或发布之前,将 NOSTR_RELAYS 设置为以逗号分隔的 wss:// 中继 URL。示例文件中的值仅供起步使用,不保证可用。除 localhost/环回测试中继外,均拒绝 ws://。

设置页面仅绑定并接受 127.0.0.1。请在包含 NIP-07 扩展的浏览器配置文件中打开该页面,而不要在 Codex 应用内浏览器中打开,除非该浏览器确实装有此类扩展。连接一次,并在签名期间保持标签页打开。页面会将确切请求加入队列,并要求先在浏览器端点击,之后才会调用 window.nostr。如果主机还运行着浏览器自动化,那么这种交互门槛并不能证明有人在场,因此最终防护仍由扩展自身的审批策略提供。

高级部分只会在内存中接收 bunker: URI,绝不会记录它。生成的 nostrconnect: URI 包含临时配对密钥;请将其视为敏感信息,不要公开发布。

面向第三方应用的实验性部分会让此插件充当远程签名器。生成的 bunker:// 链接仅显示在环回页面上,不会作为 MCP 工具公开。一次仅可连接一个客户端。停止桥接、重启进程或会话过期后,该应用连接会失效;请使用新链接重新连接应用。

本地演示

安全引导演示完全在内存中执行准备 → 签名 → 验证 → 发布:

npm run demo

输出包含模拟公钥、事件 ID 和中继确认。这不能证明它与实时签名器或公共中继兼容。

若要在本地检查实际的 MCP 工具界面:

npm run build
npx @modelcontextprotocol/inspector node mcp/server.mjs

若要将此代码库直接连接到本地 Codex 主机,而不安装市场软件包:

codex mcp add nostr-signer -- node /absolute/path/to/nostr-signer-chatgpt/mcp/server.mjs

然后重启 ChatGPT 桌面应用/Codex 主机,并使用 /mcp 或 MCP 设置验证服务。若要安装打包版本,请在本地市场中使用随附的 plugin.json、mcp.json、.codex-plugin/plugin.json、.mcp.json、技能,以及已提交的 mcp/server.mjs 捆绑包。目前的 OpenAI 文档区分了本地 Codex stdio 支持与 ChatGPT 网页版。无需账户的托管版 alpha 可通过 https://signer.frontiercrown.com/mcp 使用;它使用短期有效的能力会话,而不是 OAuth。

OpenClaw 目前记录了对 Agent Plugin/Codex 捆绑包的支持。下载并解压发行版后,安装本地目录(或发行版压缩包,如果你的 OpenClaw 版本接受该格式),检查插件,然后重启 OpenClaw:

openclaw plugins install /absolute/path/to/nostr-signer-chatgpt
openclaw plugins inspect nostr-signer-chatgpt

此软件包具有所需的捆绑包布局,但验证环境中没有可用的 OpenClaw 安装。在实时安装、工具发现和签名器往返流程记录到 COMPATIBILITY.md 之前,请将其视为预期兼容性。

相关 OpenAI 指南:插件打包、连接与测试,以及 Codex MCP 配置。

对话示例

你:安全地连接我的签名器。

助手:在安装了 Alby 或 nos2x 的浏览器配置文件中打开本地设置 URL,点击 连接浏览器扩展,并批准公钥访问。我会等待签名器状态变为已连接。

你:将“Hello Nostr”准备为一条笔记。

助手:这是确切的 kind:1 事件预览。它尚未签名或发布。要我请求签名吗?

你:是,请求签名。

助手:确切的请求正在本地页面上等待处理。点击 在扩展程序中继续,然后在扩展程序中批准。已验证的事件将保持已签名但未发布状态,直到你另行告诉我发布。

你:发布它。

助手:中继 A 已接受该事件;中继 B 超时。该事件至少已在中继 A 上生效。

工具与安全门控

工具用途门控
get_setup_url返回本地回环扩展/设置页面无
get_signer_status读取内存中的连接状态无
begin_nostrconnect_pairing高级:创建临时配对 URI由用户发起配对;由签名器批准
connect_bunker高级:连接现有的 bunker URI优先使用 localhost UI;由签名器批准
get_public_key读取签名器公开的公钥活动会话
prepare_note绑定一个精确的 kind:1 事件不签名或写入网络
prepare_event绑定任意精确且有效的事件模板不签名或写入网络;展示所有字段
sign_event仅签署一个已准备的意图明确确认工具操作并由签名器批准
publish_event发布已验证并存储的事件单独明确确认
nip44_encrypt / nip44_decrypt仅限本地版本:请求签名器执行 NIP-44 操作托管服务上已禁用;本地使用需要明确确认
query_events读取已验证的公开 kind 0/1 事件限定过滤条件和结果数量
disconnect_signer忘记会话和意图明确确认
get_grynvault_account_dashboard签名并获取已连接公钥对应的 Grynvault 只读仪表板明确确认签名访问;不创建发票
approve_grynvault_browser_handoff批准 Grynvault 应用内浏览器标签页显示的确切短代码明确确认;仅限只读仪表板;不发布内容或创建发票
prepare_grynvault_supporter_invoice准备金额为 21–1,000,000 sat 的捐赠,或 2,100 sat/30 天的请求不签名或创建发票
create_grynvault_supporter_invoice签名并提交一个已准备的支持者请求单独明确确认创建发票;仅返回待处理状态
prepare_grynvault_nip05_invoice检查并准备 [email protected] 的 2,000 sat 请求不签名、预留或创建发票
create_grynvault_nip05_invoice签名并提交一个已准备的 NIP-05 请求单独明确确认创建发票;不声称已激活

Grynvault 集成

Grynvault 授权使用一个全新的 kind 27235 Nostr HTTP-auth 事件,该事件绑定到确切的 HTTPS URL、 POST 方法、服务器质询,以及确切 JSON 请求正文的 SHA-256 哈希。使用相同的 NIP-07/NIP-46 签名器 和签名验证流程;生成的授权只会发送到固定的 Grynvault 生产 API 来源。

支持者会员资格和付费 NIP-05 是不同的产品。一次性支持者捐赠金额为 21 至 1,000,000 sat,可选的 30 天套餐为 2,100 sat,而 [email protected] 发票金额为 2,000 sat。创建发票不代表已付款。结账 URL、 浏览器重定向或 pending 响应都不会激活支持者权益或 NIP-05 标识符; 只有单独验证的 BTCPay 结算才能激活。

生产环境 v117 已在提交 7517fea8fe2a46ee96321e2ba694e91f781a4fc0 中上线。一次实时应用内浏览器 交接批准了确切的签名请求,并返回了来源标签页的仪表板,该标签页对应的公钥为 0ab377…9b5bd;随后,门户显示了账户、Drive、Arkade、NIP-05 和已结算付款状态。 该测试未创建发票、未发布 Nostr 事件,也未更改任何结算状态。

确切的 MCP 输入、HTTP 正文和签名标签请参阅 GRYNVAULT_INTEGRATION.md。

签名器状态

签名器预期连接方式自动化证据此 RC 中的实时证据
模拟签名器进程内测试适配器通过并非实时签名器
AlbyNIP-07 浏览器桥接桥接测试实时测试未记录提供方/版本
nos2xNIP-07 浏览器桥接桥接测试实时测试未记录提供方/版本
Brave 中未识别的兼容扩展NIP-07 浏览器桥接相同的桥接测试实时公钥连接和 v117 Grynvault 交接均通过
AmberNIP-46 / bunker 兼容目标仅协议路径未测试
nsec.appNIP-46 / bunker 兼容目标仅协议路径未测试
ClaveNIP-46 / bunker 兼容目标仅协议路径未测试
其他 bunker 兼容签名器bunker: 或 nostrconnect:仅协议路径未测试

“预期”并不代表兼容性声明。将签名器状态改为“已测试”之前,请记录签名器/版本、配对模式、中继集、请求的方法、审批界面、返回事件的验证结果以及发布确认。

NIP-07 桥接的工作方式

NIP-07 为浏览器页面定义了 window.nostr.getPublicKey()、window.nostr.signEvent() 和可选的加密方法。此插件不会注入或冒充扩展。它的环回页面会检测已安装签名器提供的 API,向其发送一个经过审查的请求,并将结果返回到与 NIP-46 相同的验证流程中。NIP-07 规范定义了标准接口。

扩展会决定是否提示、批准或拒绝。请使用会在每次审批前显示完整事件的签名器;如果无法检查事件,请勿在通用的“签名”提示中批准。多个已安装的签名器扩展可能会争用 window.nostr;如果无法明确选择,请使用专用浏览器配置文件。

为什么不提供私钥回退方案

GitHub 和 Cloudflare 密钥存储会保护静态数据,但签名代码必须在运行时恢复可用的密钥材料。这会使此插件成为可远程托管密钥的热签名器,并将签名权限扩展到部署凭据、操作人员以及任何遭到入侵的运行时。本地加密存储也存在同样的运行时解锁问题。因此,本项目将私钥保留在用户的扩展或远程签名器中。

故障排除

  • **未配置中继:**将 .env.example 复制为 .env,或在配对工具中提供中继。包含的启动命令会在 .env 存在时加载它。
  • **未检测到扩展:**将设置 URL 复制到已安装并解锁 Alby 或 nos2x 的 Chrome 或 Firefox 配置文件中,然后重新加载页面。Codex 应用内浏览器通常不会共享这些扩展。
  • **安装了多个扩展:**为此网站停用不需要的签名器,或使用仅安装预期扩展的浏览器配置文件。
  • **请求正在等待:**保持设置页面打开,检查显示的操作,点击 在扩展中继续,并完成任何扩展提示。超时后请勿静默重试。
  • **配对一直处于待处理状态:**确认客户端和签名器都能访问完全相同的中继集,在签名器中批准,并在五分钟后使用新的 URI 重试。配对 URI 是仅限单次会话使用的密钥。
  • **签名器请求超时:**检查签名器连接和中继可访问性。准备一个新事件;对于结果不明确的签名请求,请勿静默重试。
  • **所有发布确认均失败:**已签名事件会保留在当前会话中,以便明确重试。检查中继策略、身份验证要求和网络访问。
  • **设置页面无法启动:**另一个进程可能占用了端口 34846。将 NOSTR_SETUP_PORT 设置为一个空闲的本地端口。
  • **ChatGPT 网页无法连接到服务:**stdio 仅限本地主机。开发时请使用经过审查的 Secure MCP Tunnel,或在托管环境中使用前部署经过身份验证的流式 HTTP 服务。

开发者命令

命令结果
npm run format格式化源代码、测试和清单
npm run format:check检查格式,不写入更改
npm run lint运行静态 lint 规则
npm run typecheck执行严格的 TypeScript 检查
npm test运行单元测试和模拟集成测试
npm run build进行类型检查,并创建已提交的独立入口点 mcp/server.mjs
npm start启动真实的 MCP 服务和本地设置页面
npm run demo运行完全模拟的端到端演示
npm run smoke:bundle启动可分发构建包并验证其中的 MCP 工具
npm run validate:release检查可移植清单、版本一致性、必需的发布文件以及符合密钥特征的内容
npm run check运行完整的候选发布检查门禁

有关本地验证依据及其限制,请参阅 VALIDATION.md。

限制和路线图

  • 已通过一次真实的 Brave NIP-07 流程和精确的 Grynvault 交接,但未记录扩展程序名称和版本。尚未验证与 Alby、nos2x、NIP-46 签名器以及特定中继的兼容性。
  • 会话有意设为非持久化;每次进程重启或会话过期后都需要重新连接。
  • NIP-07 浏览器标签页必须保持打开,因为浏览器扩展程序只会向浏览器页面提供 window.nostr。
  • 签名时不使用 MCP Apps iframe,因为它不会自动继承用户常用的浏览器扩展程序或其权限模型。
  • v0.4.0 不会显示签名器的 auth_url 挑战;依赖这些挑战的 NIP-46 签名器可能无法完成配对。
  • 不包含 NIP-46 中继身份验证、动态切换中继、离线队列、同时进行的第三方客户端会话、多账户选择以及自动发现事件。
  • ChatGPT Work/web 需要部署远程 HTTPS MCP 传输、提供隐私披露,并通过工作区/公开审核。托管测试版有意采用无账户的能力会话,而非 OAuth。
  • Noornote v1.5.3 和 YakiHonne web 均已在 Codex 应用内浏览器中完成远程签名器登录。 未尝试发布内容、关注、发送私信、请求加密或发布操作,因此这些操作在列出的客户端上 仍未验证。
  • v117 Grynvault 浏览器交接已通过真实验证。交接测试期间未调用支持者/NIP-05 创建功能, 因此没有创建发票或进行支付。
  • 后续工作:将可变的托管审批网页替换为可审计的浏览器扩展程序或签名的本地配套应用,防止操作员暗中更改审批页面代码;增加真实兼容性矩阵、已验证的 OpenClaw 安装方案,以及可选的硬件支持本地签名器适配器,且绝不导出密钥。

许可证

Apache License 2.0。该许可证允许广泛重用,同时明确授予专利许可并保留许可证和声明义务;这对可能吸引多种实现、安全敏感的互操作性项目很有用。

贡献和安全

更改协议、信任边界、打包或依赖项代码之前,请阅读 CONTRIBUTING.md、SECURITY.md、DECISIONS.md、COMPATIBILITY.md、 LAUNCH_READINESS.md、MARKETPLACE_CHECKLIST.md 和 THIRD_PARTY_NOTICES.md。公开发布草案位于 LAUNCH_KIT.md; 这些草案尚未发布。

评论

支持 Markdown

第一次接触 MCP?

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

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