Skip to main content
Glama
lcusack

World ID for ChatGPT

by lcusack

面向 ChatGPT 的 World ID

生产环境部署:https://world-id-chatgpt.foundry-world.workers.dev

远程 MCP 端点:https://world-id-chatgpt.foundry-world.workers.dev/mcp

已验证人类墙:https://world-id-chatgpt.foundry-world.workers.dev/wall

创始人类:https://world-id-chatgpt.foundry-world.workers.dev/founding-humans

技能提交:https://world-id-chatgpt.foundry-world.workers.dev/submit

从此仓库安装 World ID 插件

此仓库包含一个可移植的 Codex 插件和一个仓库市场。在仓库可通过 Git 获取后,其他开发者可以添加市场并安装插件,而无需重新创建 MCP 连接:

codex plugin marketplace add lcusack/world-id-chatgpt --ref main
codex plugin add world-id@world-id-plugins

这是一个私有仓库,因此开发者必须已拥有 GitHub 访问权限。对于本地克隆,请改为将绝对仓库路径传递给 codex plugin marketplace add

该插件连接到上述生产 MCP 端点,并为每个用户启动其自己的 OAuth 流程。请使用 Codex CLI 0.147.0 或更新版本进行可移植 Agent 插件安装,然后在安装后启动新任务,以便加载捆绑的技能和 MCP 工具。

本项目是一个面向生产的远程 MCP 服务器,通过 OAuth 2.1 将 World ID 4.0 会话与 AI 助手连接起来。

连接流程如下:

  1. ChatGPT 从远程 /mcp 端点发现 OAuth。

  2. 用户被发送到此服务的 /authorize 端点。

  3. 浏览器创建或恢复 World ID 4.0 会话,并请求带有用户存在的、基于 Orb 的 proof_of_human

  4. Worker 使用 World 验证完整的证明,记录重放保护,并完成 OAuth。

  5. 经过身份验证的 MCP 工具仅返回:

{
  "verified_human": true,
  "verification_level": "orb",
  "protocol_version": "4.0",
  "verified_at": "2026-08-12T18:00:00.000Z",
  "wall_write_enabled": true
}

MCP 客户端永远不会收到证明、World 会话 ID、会话无效器、钱包、电话号码、RP 密钥或 OAuth 令牌内部信息。

创始人类实验

相同的 World ID 连接器现在支持创始人类状态/网络实验:

  1. get_world_agent_status 检查已连接的独特人类是否已申领位置,并返回 Genesis 100 进度,但不发布任何内容。

  2. claim_world_agent_place 幂等地为已连接的内部主体申领一个永久序号,并返回公开卡片和邀请链接。

  3. 现有已验证的会话按原始验证顺序进行回填,为当前测试者保留最早的数字。他们的卡片保持私有,直到明确申领。

  4. 打开公开的创始人类卡片会存储一个不透明的第一方邀请 Cookie。通过该卡片建立的新 World ID 连接仅在被推荐的人验证并申领后,才归因于邀请者。

前 100 个序号永久获得 Genesis 100 待遇。注册表在队列完成后预示一项未来的已验证人类能力。公开卡片仅暴露编号、队列、日期和最低保证;它们从不暴露内部主体、证明、会话、无效器、钱包、身份或对话数据。

实验测量在 D1 中每日聚合,不含访客标识符:分享链接发出次数、公开资料浏览量、状态检查次数以及已验证推荐兑换次数。激活是卡片的首次 claimed_at;重复使用通过不同天数的状态检查次数来衡量。

原型市场使用一个策划性的技能提交流程。公开的 /submit 页面通过可复制模板接受概念、合作伙伴试验和工作集成提案。它记录了已验证人类适配测试、最低披露要求、审查阶段和常见实验指标,但不接受代码上传或暗示自动发布。

推荐的 ChatGPT 提示词:

申领我作为创始人类的位置。

人类授权网关原型

该连接器现在可以充当不运营自己的 World ID 依赖方的合作伙伴的人类证明网关。第一个固定客户端演示刻意范围狭窄:

  1. list_human_grant_opportunities 在不共享任何信息的情况下显示可用的合作伙伴操作。

  2. create_human_grant 仅在用户明确要求激活该机会后,才创建一个十分钟、受浏览器限制的同意链接。

  3. 同意页面命名合作伙伴、利益、操作以及正在共享的确切声明。

  4. 批准创建一个五分钟、单次使用的授权码。合作伙伴使用 HTTP Basic 认证通过服务器到服务器方式交换该授权码。

  5. 网关返回一个 15 分钟、HMAC 签名的 world-id-human-grant/v1 断言,其中仅包含受众绑定的成对主体、已授权操作以及最低限度的 Orb/World ID 4.0 保证声明。

  6. D1 唯一性约束允许每个内部人类、合作伙伴和操作仅赎回一次。

合作伙伴永远不会收到 World 证明、World 会话 ID、内部主体、钱包、电话号码、身份或 ChatGPT 对话。成对主体在一个合作伙伴内是稳定的,且在不同合作伙伴之间无法关联。模拟的合作伙伴体验位于 人类授权演示;机器可读的颁发者元数据位于 /.well-known/world-id-human-grants

推荐的 ChatGPT 提示词:

使用 World ID 向我展示已验证的人类合作伙伴机会,然后激活网关演示。

该原型使用一个预先注册的演示客户端。一个真正的合作伙伴接入层应为每个合作伙伴添加独立的客户端凭据和签名密钥、经过审核的操作/声明允许列表、密钥轮换、撤销、合作伙伴审计事件以及一个自助注册工作流程。它绝不能成为一个通用身份代理,或允许合作伙伴跨服务关联用户。

Human Required Shopify 交接

主要实验在 humanrequired.shop 发现实时交易,并能将已连接账户的已验证人类权益带入 Shopify,无需第二次 World ID 验证:

  1. list_unique_human_deals 读取当前公开目录和库存。

  2. get_unique_human_deal 返回产品、价格和可用选项。

  3. create_unique_human_claim_link 仅在用户要求申领 15% 优惠后,创建一个五分钟的不透明申领 URL。

  4. 打开申领 URL 会创建一个随机的、仅限一次兑换的 Shopify 折扣,限制于符合条件的商品,然后通过 Shopify 的可分享折扣 URL 重定向。

申领票据和折扣代码在静态存储时加密。公开 URL 不包含任何 World 证明、会话 ID、主体、钱包或个人身份信息。Shopify 仅接收随机折扣代码和符合条件的商品 ID。生成的折扣在 15 分钟后过期,总使用限制为一次。

要激活此交接,请为 Human Required 创建并安装一个 Shopify Dev Dashboard 应用,并具有 read_productswrite_discounts Admin API 作用域。然后将其 .myshopify.com 域名、客户端 ID 和客户端密钥上传,但不要将它们放入源代码控制中。当申领被兑换时,Worker 使用 Shopify 的客户端凭据流程来生成一个短期的 Admin API 令牌:

npx wrangler secret put SHOPIFY_SHOP_DOMAIN
npx wrangler secret put SHOPIFY_CLIENT_ID
npx wrangler secret put SHOPIFY_CLIENT_SECRET

在两个密钥都存在之前,申领工具保持安全不可用状态;目录发现和连接器的其余部分继续工作。

已验证人类墙实验

这堵墙是构建在此连接之上的第一个应用程序。它暴露了三个受 OAuth 保护的 MCP 工具:

  • get_verified_human_question:读取当前公开问题

  • list_verified_human_answers:以不可信的用户生成内容形式读取最近的公开答案

  • publish_verified_human_answer:在用户明确确认后,创建或替换已连接账户的一个答案

发布需要单独的 wall:write OAuth 作用域。在部署墙之前创建的连接必须断开并重新连接,然后才能发布。阅读墙也可通过公开的 GET /api/wall 端点进行,该端点从不包含内部 World/OAuth 主体。

第一个问题是:一个已验证的人类应该能够用 AI 做什么?

推荐的 ChatGPT 提示词:

使用 World ID 连接器打开已验证人类墙。向我展示今天的问题和最近的答案,帮助我撰写回复,然后在发布前请求我的明确确认。

此原型的“已验证”标签意味着该答案是通过由 Orb 验证的 World ID 4.0 会话支持的 OAuth 连接发布的。它并不声称 World App 刚刚签署了确切的答案文本,或已知作者的身份。

生产架构

  • Cloudflare Worker:稳定的 HTTPS 来源、OAuth 提供者、World 验证以及无状态 MCP 传输

  • D1:过期的授权尝试、加密的 World 会话连续性、证明重放记录、创始人类序号/推荐/聚合数据、加密的 Shopify 申领票据、一次性人类授权以及公开墙问题/答案

  • Workers KV:由 Cloudflare 的 OAuth 提供者管理的 OAuth 客户端、授权、授权码和令牌

  • 速率限制绑定:独立的授权、证明提交、MCP、申领、人类授权、意图和墙发布限制

  • 定期清理任务:过期的 D1 尝试/重放标记、人类授权、意图、申领和 OAuth 数据

  • Workers Observability:结构化事件,不记录证明或标识符

World 会话 ID 和待处理的 OAuth 请求在存储到 D1 之前使用 AES-256-GCM 加密。一个独立的 HMAC 密钥派生不透明的内部 OAuth 主体。原始的 World 证明在内存中验证,且从不存储。

World ID 配置

已部署的 Worker 固定到:

  • 应用:app_d25e6e3d21651abfb9fbc52d033ef2a3

  • 依赖方:rp_79ffdf898662dd4c

  • 环境:production

  • 协议:World ID 4.0 会话证明

现有的 register 操作不用于账户关联。操作/无效器适用于一次性唯一性操作;账户连续性使用 createSessionproveSession,其 RP 签名有意省略了操作。

本地验证

npm install
npm run build
npm run typecheck
npm test
npx wrangler d1 migrations apply world-id-chatgpt --local
npm run cf:dev

Wrangler 可以从 .env 加载本地 secret 值。切勿提交该文件。

首次 Cloudflare 部署

选择所属的 Cloudflare 账户,然后创建持久资源:

npx wrangler d1 create world-id-chatgpt
npx wrangler kv namespace create OAUTH_KV

将返回的 ID 放入 wrangler.jsonc,然后应用模式:

npx wrangler d1 migrations apply world-id-chatgpt --remote

上传四个受管理的 secret。对第一个值使用现有的 World RP 签名密钥,对其他三个值使用独立的随机 32 字节 base64url 值:

npx wrangler secret put WORLD_RP_SIGNING_KEY
npx wrangler secret put DATA_ENCRYPTION_KEY
npx wrangler secret put SUBJECT_HMAC_KEY
npx wrangler secret put HUMAN_GATEWAY_DEMO_SECRET

然后验证并发布:

npm run cf:check
npm run deploy

部署的 MCP 端点是 https://world-id-chatgpt.foundry-world.workers.dev/mcp。OAuth 发现、PKCE S256、动态客户端注册和客户端 ID 元数据文档会自动广播。

安全不变性

  • 授权状态十分钟后过期,并绑定到 SecureHttpOnlySameSite=Lax__Host- 浏览器 Cookie。

  • 服务器仅接受协议 4.0、生产环境、无动作的会话证明,且要求用户在场、颁发者模式为 1proof_of_human)。

  • 每次证明必须匹配服务器为该授权尝试签发的确切 RP 随机数。

  • 完整会话无效器元组经过哈希处理,在颁发 OAuth 之前,以唯一 D1 约束插入。

  • 证明主体大小限制为 256 KiB,World 验证请求超时时间为十秒。

  • OAuth 使用授权码流程、PKCE S256、精确注册的重定向地址、一小时有效期的访问令牌和 30 天有效期的刷新令牌。

  • 注册的重定向地址必须使用 HTTPS,回环 localhost 开发环境除外。

  • Worker 应用 CSP、框架拒绝、无引荐来源、MIME 嗅探保护、权限策略、来源验证以及无存储授权响应。

  • MCP 输出经过允许列表过滤,不包含任何稳定的 World 标识符。

  • 公开墙上投影省略内部主体;答案文本使用 textContent 渲染,限制为 600 个字符,且不能包含链接、电子邮件地址或控制字符。

  • 唯一 D1 约束强制每个活跃问题及内部关联账户主体只能存在一个可替换的答案。

  • 工具指令将墙上答案视为不可信内容,并要求用户在公开发布前确认确切的文本。

  • 声领凭证是随机的,仅以哈希形式存储用于查找,加密后用于受控重新颁发,五分钟后过期,并使用原子 D1 处理租约防止重复创建 Shopify 记录。

  • Shopify 折扣码是随机的,静态加密,限制为合格产品 ID,15 分钟后过期,且只允许一次总兑换。

  • 人类授权(Human Grant)同意链接十分钟后过期,并同时绑定到能力 Cookie 和浏览器的 World ID 会话 Cookie。

  • 合作伙伴授权码五分钟后过期,并通过经过身份验证的反向通道交换一次性使用。

  • 断言使用成对合作伙伴主体;World 会话和内部主体从不出网关。

  • 合作伙伴、动作和内部主体上的 D1 主键即使在并发交换尝试下也强制执行一人一兑换。

测试

npm test 涵盖传统 MCP 传输以及强化后的 4.0 证明形状、精确随机数绑定、拒绝唯一性证明、必需的用户在场、加密会话存储、不透明稳定主体派生、Shopify 声领移交和主体编辑、墙上输入验证以及公开主体编辑。wrangler deploy --dry-run 验证生产版本,而本地 Worker 检查则测试 OAuth 注册/发现、授权状态、D1 持久化、CSP 和 RP 签名生成。

World 参考文档:World ID 4.0 迁移RP 签名IDKit 集成

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.

  • A paid remote MCP for ZeroID, built to return verdicts, receipts, usage logs, and audit-ready JSON.

  • Personal MCP server for humans who create. Proof of authorship, license control.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lcusack/world-id-chatgpt'

If you have feedback or need assistance with the MCP directory API, please join our Discord server