nostr-ops-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NOSTR_RELAYS | Yes | Comma-separated wss:// relays. Server refuses to start if empty. | |
| NOSTR_LOG_PATH | No | Server log path. | ./nostr-mcp.log |
| NOSTR_NIP46_URI | No | NIP-46 bunker URI (recommended signer). Provide AT MOST ONE of NOSTR_NIP46_URI or NOSTR_PRIVATE_KEY. | |
| NOSTR_READ_ONLY | No | Force read-only — disables all write tools. | false |
| NOSTR_AUDIT_PATH | No | Structured audit log path. | ./nostr-mcp-audit.log |
| NOSTR_PRIVATE_KEY | No | Raw nsec1... private key (dev/legacy only). Provide AT MOST ONE of NOSTR_NIP46_URI or NOSTR_PRIVATE_KEY. | |
| NOSTR_DM_ALLOWLIST | No | Hex pubkeys allowed as DM recipients. Empty = NOSTR_DM_TOOLS_ENABLED alone gates. | |
| NOSTR_ALLOWED_KINDS | Yes | Comma-separated event-kind numbers the server may sign. Required when a signer is configured. | |
| NOSTR_REQUIRE_CONFIRM | No | Two-step confirm: write tools return a token, nostr_confirm_publish executes. | false |
| NOSTR_DM_TOOLS_ENABLED | No | Opt-in for DM tools (send_dm, list_dms, decrypt_dm). | false |
| NOSTR_ALLOW_NSEC_DECODE | No | Allow nostr_decode to return raw private key material. | false |
| NOSTR_MAX_DMS_PER_MINUTE | No | Rolling 60s rate limit on DMs. | 5 |
| NOSTR_MAX_EVENTS_PER_MINUTE | No | Rolling 60s rate limit on writes. | 10 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| nostr_get_pubkeyA | Return the configured signer's public key as hex + npub. Errors clearly if no signer is configured (server is in read-only mode). For NIP-46 signers, this blocks until the bunker handshake completes. |
| nostr_list_relaysA | List the configured relay pool with each relay's current connection status. |
| nostr_decodeA | Decode a NIP-19 bech32-encoded identifier (npub / nsec / note / nevent / naddr / nprofile) into its raw fields. Local-only — no network call. Refuses nsec unless NOSTR_ALLOW_NSEC_DECODE=true; guards against accidentally surfacing a private key in tool output. |
| nostr_encodeA | Encode a raw NIP-19 record (npub / note / nevent / naddr / nprofile) into its bech32 form. Local-only — no network call. Does NOT support nsec encoding (private keys must not transit the agent). |
| nostr_query_eventsA | Query events from the configured relay pool using NIP-01 filters. Supports kinds, authors, since/until/limit, and tag filters (#e, #p, #d, #t). Returns an array of events as plain objects (id, kind, pubkey, created_at, content, tags, sig). The workhorse read tool. |
| nostr_get_profileA | Fetch and parse a NOSTR profile (kind:0 metadata) for the given pubkey or npub. Convenience wrapper over nostr_query_events with kinds=[0], limit=1. Returns the parsed JSON content (name, about, picture, nip05, lud16, etc.) plus the source event id and timestamp. Returns |
| nostr_verify_nip05A | Verify a NIP-05 identifier resolves to the expected pubkey. Fetches |
| nostr_publish_eventA | Sign and broadcast a raw NOSTR event of any allowed kind. The primitive write tool — other publish_* tools are convenience wrappers around this. Runs the full safety pipeline: read-only gate, signer presence, kind allowlist, rate limit, optional two-step confirmation. |
| nostr_publish_text_noteA | Convenience wrapper for publishing a kind:1 text note. Builds the |
| nostr_publish_metadataA | Publish a kind:0 profile metadata event. Always demands two-step confirmation (regardless of NOSTR_REQUIRE_CONFIRM) because it overwrites your public profile and is hard to reason about safely from an LLM context. Requires kind 0 to be in NOSTR_ALLOWED_KINDS — explicitly opt in. |
| nostr_publish_addressable_eventA | Publish a parameterized-replaceable / addressable event (kind 30000–39999). The marketplace MCP's load-bearing bridge — NIP-15 stalls (kind 30017) and products (kind 30018) flow through this. Sets the |
| nostr_delete_eventA | Publish a NIP-09 kind:5 deletion request for a previously-published event. Soft delete — relays may or may not honor it, and copies on relays you didn't reach stay. Requires kind 5 to be in NOSTR_ALLOWED_KINDS. |
| nostr_confirm_publishA | Execute a previously-prepared signed publish, identified by its one-time token. Only meaningful when NOSTR_REQUIRE_CONFIRM=true, or when called after publish_metadata (which always confirms). Token is consumed (single-use); the safety pipeline (read-only, signer, kind allowlist, rate limit, dm allowlist) re-runs before signing. Dispatches to the right execute path based on which tool issued the token (publish_event variants OR send_dm). |
| nostr_send_dmA | Encrypt + send a NIP-04 (kind:4) direct message. Defaults to NIP-44 encryption (current standard); pass version="nip04" only for legacy compatibility. Gated by NOSTR_DM_TOOLS_ENABLED + NOSTR_DM_ALLOWLIST + rate limit. For modern sealed DMs (NIP-17) wait for the next version. |
| nostr_list_dmsA | Fetch + decrypt the DM thread between the configured signer and a counterparty. Pulls kind:4 events in both directions (sent and received), decrypts each via the signer's encrypt/decrypt interface (auto-selects NIP-44 or NIP-04 based on the ciphertext), and returns the thread sorted oldest-first. Decryption failures are surfaced per-event instead of failing the whole call. |
| nostr_decrypt_dmA | Decrypt a single DM ciphertext using the signer's encrypt/decrypt interface. Useful when you already have a kind:4 event from elsewhere (e.g., nostr_query_events) and just need the plaintext. Auto-detects NIP-44 vs NIP-04 by default. Same NOSTR_DM_TOOLS_ENABLED gate as send/list — reading plaintext is still a confidentiality surface. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/llmops-pro/nostr-ops-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server