mcpField
B
Blame Today

Blame Today

远程服务
github.com/blame-today社交媒体01 周前更新
代码仓库

关于 Blame Today

Blame Today 是基于 Nostr 的匿名 blame 投票看板网页客户端,投票直接发送到中继,无需账号,投票流程不经过后端。适合浏览话题、投票以及查看基于中继统计的总榜和 24 小时热榜。

主要功能

  1. 01匿名 Nostr 投票
  2. 02事件直发至中继
  3. 03总榜和 24 小时热榜
  4. 04基于新闻标题的话题建议
  5. 05内容过滤

适用场景

  1. 01无需账号为目标投票
  2. 02浏览热门和当前热议目标
  3. 03从新闻标题探索建议话题

配置

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

服务地址https://blame.today/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 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

1

此工具无需参数。

详细介绍

blame-web

blame.today 网页客户端——“原始火力流”。这是一个基于客户端的 Svelte + Vite 应用,直接与 nostr 中继通信:投票流程没有后端、没有身份验证,也没有速率限制(事件直接发送到中继)。一个精简的 Cloudflare Worker 负责托管静态网站、强制使用 https、将 www 重定向到根域名,并在 /mcp 提供 MCP 指针。这是 blame 开放且权威的实现;iOS 应用位于同级的 blame-ios 仓库中。

从 blame-today/blame-mobile(旧的 iOS 应用 + Worker 仓库)拆分出来,让各个平台都各自独立——它们共享一个品牌和 pureblameapp nostr 标签,但代码、构建和部署均互不相干。

点此体验 - blame.today

它是什么

  • blame 目标是带有 pureblameapp 标签的 nostr kind 1 事件;投票是带有 e:<targetId> + pureblameapp 标签的 kind 7 reaction。每个事件使用一个一次性密钥。
  • 排行榜根据中继的 COUNT 构建(全部时间 + 24 小时“热门”窗口),而不是通过获取事件构建。
  • “新闻”标签页会在客户端将今日头条(compromise)挖掘为可点击的建议。
  • 内容过滤(脏话 / 个人身份信息 / 乱码)是唯一的关卡——这是开放的火力流。

开发

每次点击都会对投票签名一次,并使用相同的事件 ID 重试。发送其开场投票前,必须先收到对新目标的确认。五次尝试均失败后,排行榜会提供重试选项,并使用相同的已签名事件。排队和发送失败的投递只保存在当前标签页中;请保持页面打开,直到待处理投票完成。

计数是中继估算值:对于每个目标和时间窗口,分别取不同已配置中继的最新报告中第二高的数值。报告少于两份时,计数不可用,以省略号而不是零显示。实时事件或确认会请求新的快照;它们不会累加到快照中,因此重叠投递不会重复计数。中继可以向下修正其估算值。超过 90 秒的样本会在收到新回复或下次 45 秒同步时移除,即使期间没有消息也一样。这不是跨中继的精确并集。NIP-45 会筛选应用标签和事件类型,但无法筛选 reaction 内容。收到的排行榜事件还会单独检查其结构、应用标签、规范 ID 和签名。

COUNT 响应是未经签名的中继声明。一个不诚实的中继无法将估算值提高到所有诚实中继报告的计数之上,但仍可在该范围内影响结果。两个不诚实的中继可以互相印证虚假计数。覆盖不完整且签名投票不受限制,这些都是此开放排行榜机制的一部分,因此这些估算值并非经过验证的投票统计。一个中继可以接受投票,而其计数仍在等待另一份响应。“我的内容”会保留已提交的主题。重新加载时会丢弃旧的缓存总数;已保存的主题及所有权会保留。

每个标签页最多保留 1,000 个远程目标,以及所有由当前用户拥有的目标。新目标会替换最早添加的非自有远程目标,因此即使缓存排行榜已满,也能接收实时主题。传入帧限制为 128 KiB;每个中继最多允许 1,024 个帧 / 1 MiB 等待验证。超出此队列限制的中继会断开连接并重试。连接池中未响应的 COUNT 请求上限为 12,000,已被替代的请求会移除。这些是客户端资源限制;它们不会改变中继接受哪些事件。

npm install
npm run dev      # vite dev server
npm test         # vitest unit tests
npm run test:e2e # playwright
npm run build    # -> dist/

部署

推送到 main → .github/workflows/deploy-web.yml 会构建 dist/ 并运行 wrangler deploy,将内容发布到提供 blame.today 服务的 Cloudflare Worker(blame-today,Workers + Static Assets)。该 Worker(worker/index.js)将 dist/ 作为静态资源提供,强制将 http 升级为 https,将 www 重定向到根域名,并在 /mcp 内联提供 MCP(worker/mcp.js)。需要在仓库密钥中设置 CLOUDFLARE_API_TOKEN(Workers:Edit)和 CLOUDFLARE_ACCOUNT_ID。/about 的文案位于 public/about/,Vite 会将其复制到 dist/about/。

已于 2026-06-16 从 GitHub Pages 迁移——该区域现已托管在 Cloudflare 上,blame.today 是 Worker 的自定义域名。仅更改 scripts/** 或 infra/** 的推送会跳过重新构建。

infra(Worker 周边的 Cloudflare 配置)

CF 的“点击式配置层”——DNS 记录、区域设置(HSTS、Always Use HTTPS)、www → 根域名的重定向规则,以及邮件路由(*@blame.today → gmail)——均以声明式 IaC 的形式写在 infra/(OpenTofu)中。wrangler 管理 Worker 代码和根域名自定义域名;OpenTofu 管理其他所有内容,每项资源都只有一个所有者。参见 infra/README.md。

评论

支持 Markdown

第一次接触 MCP?

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

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