原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Nostr Ops MCP

作者:llmops-pro版本 0.2.3i★ –i在你的电脑上运行
注册名称io.github.llmops-pro/nostr-ops-mcp

安装

概览

作者提供的说明(英文原文)

Nostr publishing, queries, and DMs for AI agents, with allowlists, rate limits, and an audit log.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他
  • 你需要填写:NOSTR_RELAYS, NOSTR_NIP46_URI, NOSTR_PRIVATE_KEY

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: NOSTR_RELAYS, NOSTR_NIP46_URI, NOSTR_PRIVATE_KEY, NOSTR_ALLOWED_KINDS

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "nostr-ops": {
      "command": "npx",
      "args": [
        "-y",
        "nostr-ops-mcp"
      ],
      "env": {
        "NOSTR_RELAYS": "your-value",
        "NOSTR_NIP46_URI": "your-value",
        "NOSTR_PRIVATE_KEY": "your-value",
        "NOSTR_ALLOWED_KINDS": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add nostr-ops --env NOSTR_RELAYS=your-value --env NOSTR_NIP46_URI=your-value --env NOSTR_PRIVATE_KEY=your-value --env NOSTR_ALLOWED_KINDS=your-value -- npx -y nostr-ops-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "nostr-ops": {
      "command": "npx",
      "args": [
        "-y",
        "nostr-ops-mcp"
      ],
      "env": {
        "NOSTR_RELAYS": "your-value",
        "NOSTR_NIP46_URI": "your-value",
        "NOSTR_PRIVATE_KEY": "your-value",
        "NOSTR_ALLOWED_KINDS": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "nostr-ops": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "nostr-ops-mcp"
      ],
      "env": {
        "NOSTR_RELAYS": "your-value",
        "NOSTR_NIP46_URI": "your-value",
        "NOSTR_PRIVATE_KEY": "your-value",
        "NOSTR_ALLOWED_KINDS": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • NOSTR_RELAYS 必填 env
    Comma-separated wss:// relay URLs
  • NOSTR_NIP46_URI 机密 env
    NIP-46 bunker URI (preferred signer; keeps the nsec off this machine)
  • NOSTR_PRIVATE_KEY 机密 env
    nsec private key (alternative to NOSTR_NIP46_URI; read-only mode if neither is set)
  • NOSTR_ALLOWED_KINDS env
    Comma-separated event kinds the server may publish (required when a signer is configured)

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 llmops-pro 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 18490 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 18490 个服务器的 10% 更新
  • 基础检查结果等于或优于此分类中其他 18490 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Nostr Ops MCP 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:NOSTR_RELAYS, NOSTR_NIP46_URI, NOSTR_PRIVATE_KEY

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.2.3)于5个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, Talexio MCP by usefulapi

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

作者:formulahendry起步阶段↓ 66/周★ 44014个月前更新

在你的电脑上运行

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

作者:desktop-commander正在增长★ 2113天前更新

在云端运行✓ desktopcommander.app

Talexio MCP by usefulapi

Read employees, approved pay lines, approved time off and shift templates in Talexio.

作者:m190起步阶段今天更新

在云端运行✓ usefulapi.io

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

nostr-ops-mcp

A NOSTR identity for your LLM agent. MCP server that exposes NOSTR protocol primitives — sign, publish, query, NIP-19 encode/decode, NIP-05 lookup, encrypted DMs — as tools your agent can call. Drop it into Claude Desktop, Claude Code, Cursor, or any MCP-speaking client. Hand the agent a NIP-46 bunker key (not a raw nsec). Set a kind allowlist. Let it post on your behalf within rails you control.

v0.1 — full read + write + DM surface. 16 tools wrapped in a defense-in-depth safety stack: kind allowlist (deny-by-default), recipient allowlist, rate limits, optional two-step confirmation, structured audit log. Supports both nsec (dev) and NIP-46 bunker (production).


What you can do with this

  • A bot that publishes kind:1 notes from your npub — daily summaries, scheduled posts, programmatic reactions to incoming events.
  • A NOSTR sales agent — pair with marketplace-mcp to publish NIP-15 stalls + products as the same identity.
  • Profile management — nostr_publish_metadata for kind:0 (always demands confirmation — overwriting your profile is irreversible without older relay data).
  • DM-driven workflows — a storefront agent that watches incoming DMs (with nostr_list_dms), decrypts orders, and replies via nostr_send_dm. Default-off behind NOSTR_DM_TOOLS_ENABLED.
  • Cross-server identity — share the same NIP-46 bunker URI across nostr-ops-mcp and marketplace-mcp. One key, one identity, two specialized tool surfaces.

The safety stack is the load-bearing reason this is usable in production: an agent with the keys to publish *as you* can ruin your reputation in seconds if unconstrained. The server enforces what kinds it'll sign, what rate, optional second-step confirmation, and writes every call to a structured audit log.


The sixteen tools

Read-only — local (no network, no signer needed)
ToolPurpose
nostr_decodeParse NIP-19 strings (npub / nsec / note / nevent / naddr / nprofile). nsec decoding gated behind NOSTR_ALLOW_NSEC_DECODE=true.
nostr_encodeBuild NIP-19 strings from raw fields. nsec encoding deliberately not supported.
Read-only — network (no signer needed for query/profile/nip05)
ToolPurpose
nostr_get_pubkeyReturns the signer's pubkey + npub. Errors clearly if no signer configured.
nostr_list_relaysConfigured relay pool + each relay's connection status.
nostr_query_eventsThe workhorse. NIP-01 filters: kinds, authors, e_tag / p_tag / d_tag / t_tag tag filters (mapped to NIP-01 #e/#p/#d/#t internally — renamed in v0.2.0 for hosted-API schema compatibility), since / until / limit.
nostr_get_profileFetch + parse kind:0 metadata for a pubkey or npub. Returns the parsed JSON content (name, about, picture, nip05, lud16, …).
nostr_verify_nip05Resolve name@domain → pubkey via /.well-known/nostr.json. Optional expected_pubkey for verification mode.
Write (require signer; gated by KindAllowlist + RateLimiter + optional confirm)
ToolPurpose
nostr_publish_eventThe primitive write tool. Pass kind / content / tags.
nostr_publish_text_noteConvenience for kind:1. Reply/mention/hashtag shortcuts auto-assemble into NIP-10 tags.
nostr_publish_metadataKind:0 profile. Always demands two-step confirmation regardless of NOSTR_REQUIRE_CONFIRM — overwriting your profile is hard to reason about.
nostr_publish_addressable_eventKinds 30000–39999 (replaceable). Sets the d tag automatically. The bridge marketplace-mcp uses for NIP-15.
nostr_delete_eventNIP-09 kind:5 soft delete. Best-effort — relays may ignore.
nostr_confirm_publishExecute a token-gated publish. Single-use; safety pipeline re-runs.
DMs (highest-risk; default-off via NOSTR_DM_TOOLS_ENABLED=true)
ToolPurpose
nostr_send_dmNIP-04 (kind:4) DM with NIP-44 encryption by default; NIP-04 supported for legacy compat. Gated by NOSTR_DM_ALLOWLIST.
nostr_list_dmsFetch + decrypt the thread with a counterparty. Auto-detects NIP-44 vs NIP-04 per event.
nostr_decrypt_dmDecrypt a single ciphertext (when you already have the event from elsewhere).

NIP-17 sealed/gift-wrapped DMs are not yet supported — deferred to a future v0.2 (rumor events + gift-wrapping add nontrivial complexity).


Requirements

  • Node 20+
  • A NOSTR signer — strongly preferred: a NIP-46 bunker URI from Amber (Android), nsec.app (web), or any other NIP-46 implementation. Legacy path: a raw nsec in .env. The server logs a stderr warning at startup when nsec-on-disk is detected.

Install

# From npm (once published)

npx -y nostr-ops-mcp

From source

git clone cd nostr-ops-mcp corepack enable pnpm pnpm install pnpm build

Configure

cp .env.example .env

edit .env: set NOSTR_NIP46_URI (recommended) OR NOSTR_PRIVATE_KEY

set NOSTR_RELAYS (comma-separated wss://)

set NOSTR_ALLOWED_KINDS (required when a signer is configured)

The server auto-loads .env from this binary's own directory (next to dist/) — deliberately NOT from cwd, to avoid env-var collision when multiple MCP servers run in the same Claude Code session.

Required
VarPurpose
NOSTR_RELAYSComma-separated wss:// relays. Server refuses to start if empty.
NOSTR_ALLOWED_KINDSComma-separated event-kind numbers the server may sign. Required when a signer is configured. Example: 1,30017,30018 for text-note + NIP-15 marketplace. Default omits kind:0 (profile) and kind:5 (delete) — both easy to misuse.
Signer — provide AT MOST one
VarPurpose
NOSTR_NIP46_URIbunker:// ?relay=...&secret=... from Amber / nsec.app / Alby Account / any NIP-46 bunker. Recommended.
NOSTR_PRIVATE_KEYRaw nsec1.... Dev/legacy only. Server warns at startup.
Optional safety knobs
VarDefaultPurpose
NOSTR_READ_ONLYfalseForce read-only — disables all write tools.
NOSTR_DM_TOOLS_ENABLEDfalseOpt-in for send_dm / list_dms / decrypt_dm.
NOSTR_DM_ALLOWLISTunsetHex pubkeys allowed as DM recipients. Empty = NOSTR_DM_TOOLS_ENABLED alone gates.
NOSTR_REQUIRE_CONFIRMfalseTwo-step confirm: write tools return a token, nostr_confirm_publish executes.
NOSTR_MAX_EVENTS_PER_MINUTE10Rolling 60s rate limit on writes.
NOSTR_MAX_DMS_PER_MINUTE5Same but for DMs.
NOSTR_ALLOW_NSEC_DECODEfalseAllow nostr_decode to return raw private key material. Don't enable unless you really need it.
NOSTR_LOG_PATH./nostr-mcp.logServer log path.
NOSTR_AUDIT_PATH./nostr-mcp-audit.logStructured audit log (one JSON line per tool call).

Wire into an MCP client

Claude Code (project-scoped)
claude mcp add nostr-ops -s project node "$(pwd)/dist/index.js"
Claude Desktop / Cursor / other clients
{

"mcpServers": { "nostr-ops": { "command": "npx", "args": ["-y", "nostr-ops-mcp"], "env": {} } } }

Because the server loads its own .env, leave the env block empty in the client config — keep secrets out of any committed file.


Safety model

Every write tool runs the pipeline in this order:

  1. `NOSTR_READ_ONLY` gate — refuse outright.
  2. Signer presence — refuse if neither nsec nor NIP-46 URI is configured.
  3. KindAllowlist — refuse if the event kind isn't in NOSTR_ALLOWED_KINDS.
  4. RateLimiter — refuse if the rolling 60s events bucket is full.
  5. Confirm gate — if NOSTR_REQUIRE_CONFIRM=true (or the tool always-confirms, like publish_metadata), return a 16-byte hex token instead of signing.
  6. Sign + publish — via NDK; the signer handshake completes lazily on first use (relevant for NIP-46 where the bunker handshake is async).
  7. Audit log — append-only JSON line for every attempt (ok / blocked / error).

DM tools add three more checks on top: NOSTR_DM_TOOLS_ENABLED, DmAllowlist (per-recipient), and a separate dms rate bucket.

The floor is your signer. If using NIP-46, the bunker can refuse any sign request — that's the strongest safety boundary. This server's checks are belt-and-suspenders on top.

Verifying calls actually went through
tail -n 5 nostr-mcp-audit.log

Successful publish: {"ts":"...","tool":"nostr_publish_text_note","outcome":"ok","result":{"event_id":"...","relays_accepted":[...]}}. Blocked / error lines are equally structured. The audit log is append-only by intent — rotate it as part of your operational hygiene.


Testing

pnpm typecheck   # tsc --noEmit

pnpm test # 13 vitest cases (KindAllowlist, RateLimiter, nip19 roundtrip) pnpm build # dist/index.js (~58 KB ESM bundle)

For end-to-end testing against live relays, configure a throwaway nsec + a couple of public relays (damus.io, nos.lol) and run a small loop: nostr_publish_text_note → nostr_query_events to confirm the note round-tripped. The nostr_send_dm → nostr_list_dms loop validates the DM path (you can DM yourself for a closed-loop check).


Companion servers

  • nwc-mcp — Lightning wallet over NWC. Pair these to build sats-spending NOSTR agents.
  • marketplace-mcp — NIP-15 marketplace publish (Shopstr-compatible). Uses the same signer setup as this server.

License

MIT — see LICENSE.

Contact / Issues

Built by LLMOps.Pro.

  • NOSTR: npub1hdg932jvwc3jdvkqywgqv0ue4nn60exrf92asy8mtazt3hjg7d2s2yw0nw — follow, DM, zap.
  • Lightning Address: sovereigncitizens@getalby.com — for support zaps and "this was useful" tips.
  • Bug reports / feature requests: open a GitHub issue (link forthcoming).
  • Security issues: please disclose privately via NOSTR DM before opening a public issue.
问 PopNx