Nostr MCP服务器
是能从AI助手(Goose,Claude Desktop,VS Code等)读写Nostr的MCP服务器。
能做的事
- 投稿 -将注释和长篇文章发布到Nostr
- 阅覧 -获取时间轴、查找注释和查看基本信息
- 会話 -浏览、回复、回应(不错)
- 通知 -确认对自己的成员和反应
- 记事管理 -保存和获取长篇文章的投稿和草稿
- 扎普 - Lightning Zapの送受信(NWC设定が必要)
- 数字营销 -发送和接收加密直接消息
- 媒体上传 -向Blossom服务器上传视频音频文件(NIP-B7)
- 远程控制 -使用移动钱包签名,而不将私钥放在服务器上
- 富用户界面 -在支持MCP Apps的客户端交互显示笔记本卡、文章预览、Zap按钮等
私钥保存在本地,不会传递给AI。使用NIP-46的话,也可以在服务器上完全不保存秘密密钥的运用。
安装,安装
1.构建
git clone https://github.com/tami1A84/rust-nostr-mcp.git
cd rust-nostr-mcp
cargo build --release如果未安装运行 rustup.rs 对较大场景进行渲染期间已观察到该故障。
2.注册MCP客户端
鹅
~/.config/goose/config.yaml 添加到:
extensions:
nostr:
name: nostr
type: stdio
enabled: true
cmd: /path/to/rust-nostr-mcp/target/release/nostr-mcp-server克劳德桌面版
claude_desktop_config.json 添加到:
{
"mcpServers": {
"nostr": {
"command": "/path/to/rust-nostr-mcp/target/release/nostr-mcp-server"
}
}
}配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
VS Code
.vscode/settings.json 或从VS Code的设置中添加MCP服务器。
/path/to/ 请用实际路径替换。
3.设置私钥(想投稿时)
首次启动时 ~/.config/rust-nostr-mcp/config.json 将条目添加到文档注册表。 要使用帖子功能,请在此文件中添加私钥:
{
"relays": {
"wss://relay.damus.io": { "read": true, "write": true, "search": false },
"wss://nos.lol": { "read": true, "write": true, "search": false },
"wss://relay.nostr.band": { "read": true, "write": true, "search": true }
},
"privatekey": "nsec1ここにあなたの秘密鍵を入れてください"
}即使没有私钥也可以使用阅览功能(时间线、检索、简介)。
4.NIP-46远程扫描设置(可选)
不在服务器上保存私钥,而是用移动钱包(Primal、Amber等)签名的方式。
方式A:QR码连接(推荐)
auth-mode 的 nip46 设置为:
{
"relays": { ... },
"auth-mode": "nip46",
"nip46-relays": ["wss://relay.nsec.app", "wss://relay.damus.io"]
}如果对AI助手说“连接Nostr”,就会显示二维码。只要用移动钱包扫描连接就完成了。
方式B:Bunker URI连接
从钱包获取的 bunker:// 设置URI:
{
"relays": { ... },
"auth-mode": "bunker",
"bunker-uri": "bunker://?relay=wss://relay.damus.io&secret="
}5.NWC的设置(想要发送Zap时)
若要发送Lightning Zap,请设定NWC URI:
{
"relays": { ... },
"privatekey": "nsec1...",
"nwc-uri": "nostr+walletconnect://..."
}NWC URI可从Lightning Wallet(Alby、Mutiny Wallet等)中获取。
6.设置Blossom服务器(如果要上传介质)
单击功能区上blossom-servers 请设置:
{
"relays": { ... },
"privatekey": "nsec1...",
"blossom-servers": ["https://blossom.primal.net"]
}默认情况下不设置 blossom.primal.net 将条目添加到文档注册表。set_blossom_servers 也可以用工具作为Kind10063事件在Nostr上公开。
关于MCP Apps(富UI)
MCP Apps(SEP-1865)是MCP的官方扩展规格,将工具执行结果作为交互式UI显示在聊天中。本服务器提供以下5个UI组件。
提供的用户界面组件
组件|说明|对应工具| |---|---|---| | 笔记本卡 丰富注释(媒体嵌入、反应数等) get_nostr_timeline, search_nostr_notes, get_nostr_thread | | 文章预览 |长篇文章的Markdown预览(标题图像、字计数等)| get_nostr_articles, get_nostr_drafts | | 简档卡 |虚拟形象、横幅、NIP-05认证、跟踪数等的结构化显示| get_nostr_profile | | Zap按钮 带金额选择注释的Lightning Zap UI send_zap, get_zap_receipts | | 二维码连接画面 NIP-46远程控制的QR码显示、连接状态管理 nostr_connect, nostr_connect_status |
支持的MCP客户端
可在以下客户端使用MCP Apps:
- 鹅 (v1.19.0+)-Block公司的AI代理
- 克劳德桌面版 -Anthropic官方桌面应用程序
- VS Code (Insiders)-微软代码编辑器
- ChatGPT -OpenAI聊天客户端
即使是不支持MCP Apps的客户端,所有工具也会以无UI的文本形式正常运行。用户界面作为渐进式增强(仅在适用环境中显示为富集)提供。
工作原理
- 如果MCP客户机
initialize有时io.modelcontextprotocol/ui声明扩展支持 - 服务器在工具定义中
_meta.ui.resourceUri选项卡页面上创建或编辑条目ui://注册资源 - 工具运行时,客户机
ui://获取资源的HTML - 在沙箱iframe中渲染HTML
- iframe中的JavaScript
postMessage+JSON-RPC与主机双向通信
使用方法
只需和AI助手搭话即可使用:
想做的事 |---|---| 查看时间轴查看Nostr的时间轴 发布注释:向Nostr发布“早上好” 查找注释:在Nostr中查找比特币 查看简介“请告诉我npub1…的简介” 查看线程查看此注释中的线程 “请回复这个笔记本‘谢谢!’” “对这个笔记本好” 确认通知|“确认Nostr的通知”| 写长篇文章“把这个内容作为Nostr的长篇文章投稿” 保存草稿 发送,发送 发送DM“向npub1…DM说‘你好’” 通过NIP-46连接(显示二维码) 确认继电器列表“请告诉我npub1…的继电器列表” 上传图像:将此图像上传到Blossom 查看Blossom服务器“让我看看自己的Blossom服务器列表”
工具列表
基本工具
|工具名称|说明|私钥| |---|---|---| | get_nostr_timeline 获取时间轴|不需要| | search_nostr_notes |查找注释(NIP-50)|不需要| | get_nostr_profile 获取基本信息 | post_nostr_note 发布注释
记事管理(NIP-23)
|工具名称|说明|私钥| |---|---|---| | get_nostr_articles 获取长篇文章 | post_nostr_article 需要投稿长篇文章 | save_nostr_draft 需要保存草稿 | get_nostr_drafts 需要获取草稿
会話・通知(NIP-10 / NIP-25)
|工具名称|说明|私钥| |---|---|---| | get_nostr_thread 获取线程(回复树)|不需要| | get_nostr_notifications |获取通知|必需| | reply_to_note 需要回复注释 | react_to_note 需要发送反应
Zap(NIP-57)
工具名称|说明|必要设置| |---|---|---| | send_zap | Lightning Zap を送信 | 秘密鍵 + NWC | | get_zap_receipts 获取Zap收据
直接消息(NIP-04)
|工具名称|说明|私钥| |---|---|---| | send_dm |发送加密DM|必需| | get_dms 获取/解密DM对话
继电器管理(NIP-65)
|工具名称|说明|私钥| |---|---|---| | get_relay_list |获取继电器列表|不需要|
介质上传(NIP-B7 Blossom)
|工具名称|说明|私钥| |---|---|---| | upload_media 需要将介质文件上载到Blossom服务器(BUD-02) | get_blossom_servers 获取用户的Blossom服务器列表(Kind10063) | set_blossom_servers 需要发布Blossom服务器列表(Kind10063)
远程控制(NIP-46)
|工具名称|说明|私钥| |---|---|---| | nostr_connect 启动NIP-46连接并显示二维码 | nostr_connect_status |确认遥控器的连接状态|不需要| | nostr_disconnect |断开与遥控器的连接|不需要|
配置参考
配置文件位置
~/.config/rust-nostr-mcp/config.json
设定形式(algia互换)
{
"relays": {
"wss://relay.damus.io": {
"read": true,
"write": true,
"search": false
},
"wss://relay.nostr.band": {
"read": true,
"write": true,
"search": true
}
},
"privatekey": "nsec1...",
"auth-mode": "local",
"bunker-uri": "bunker://...",
"nip46-relays": ["wss://relay.nsec.app"],
"nwc-uri": "nostr+walletconnect://...",
"blossom-servers": ["https://blossom.primal.net"]
}设定项目
|项目|说明|默认| |---|---|---| | relays |继电器的连接设置(read/write/search)|5个默认继电器| | privatekey |nsec格式的私钥|无(只读)| | auth-mode |认证模式: local / nip46 / bunker | local | | bunker-uri |nip-46掩体://种类|破裂”| | nip46-relays |NIP-46通信继电器| relay.nsec.app, relay.damus.io | | nwc-uri 无节点Wallet Connect URI(Zap用) | blossom-servers 蓝光服务器URL列表(用于媒体上传) blossom.primal.net |
环境变量(替代配置文件)
| 环境变数 | 说明 |
|---|---|
NSEC / NOSTR_SECRET_KEY | 秘密鍵 |
NOSTR_RELAYS |继电器URL(逗号分隔)| | |
NOSTR_SEARCH_RELAYS |检索用继电器URL(逗号分隔)| |
NIP支持
| NIP | 说明 | 状态 |
|---|
|NIP-01|基本协议|已实现| |NIP-02|联系人列表|已实施| |NIP-04|加密DM|已实现| |NIP-05|DNS验证|已安装| |NIP-10|回复线程|已实施| 已实现 |NIP-23|长句内容|已实施| NIP-25|反应|已实施| NIP-27:参考/已实现 NIP-46(远程控制) | NIP-47 | Nostr Wallet Connect | 実装済み | |NIP-50|搜索|已实施| 已实施 |NIP-65|继电器列表|已安装| 已实现
故障排除
“在只读模式下无法执行此操作。” → ~/.config/rust-nostr-mcp/config.json 中描述的场景,使用下列步骤创建明细表,以便在概念设计中分析体量的周长。
连接超时 →请确认网络连接。最多等待10秒的继电器响应。
未返回搜索结果 →并不是所有的继电器都支持搜索。relay.nostr.band 在工作空间的边缘 "search": true 中所述修改相应参数的值。
未显示NIP-46的二维码 →请使用支持MCP Apps的客户端(Goose v1.19.0+、Claude Desktop等)。在非支持客户机中 nostrconnect:// URI显示为文本。
无法发送Zap → config.json 的 nwc-uri 进行动态观察时的轴心点。NWC URI可从Lightning Wallet(Alby等)中获取。
介质上传失败 →需要私钥或NIP-46连接。在动态输入提示中单击config.json 的,之 blossom-servers 对话框,您可以在此定义自定义格式upload_media 的,之 server 请直接在参数中指定。
开発
# ビルド
cargo build
# デバッグログ付きで実行
RUST_LOG=debug cargo run
# MCP インスペクターでテスト
npx @anthropics/mcp-inspector cargo run代码配置
src/
├── main.rs # エントリーポイント、設定読み込み
├── config.rs # 設定管理(認証モード切り替え含む)
├── content.rs # コンテンツ解析(メディア・ハッシュタグ・NIP-27 参照)
├── mcp.rs # MCP プロトコルハンドラ(MCP Apps 拡張対応)
├── mcp_apps.rs # MCP Apps UI リソース管理
├── nip46.rs # NIP-46 Nostr Connect セッション管理
├── blossom.rs # Blossom メディアアップロード (NIP-B7, BUD-02)
├── nostr_client.rs # Nostr SDK ラッパー
├── tools.rs # ツール定義とエグゼキュータ(26 ツール)
└── ui_templates.rs # HTML テンプレート管理
ui/
├── common.css # 共通スタイル(テーマ対応)
├── note-card.html # ノートカード UI
├── article-card.html # 記事プレビューカード UI
├── profile-card.html # プロフィールカード UI
├── zap-button.html # Zap ボタン UI
└── connect-qr.html # NIP-46 QR コード接続画面 UI许可证
麻省理工学院
