Bray MCP server
Trust-aware Nostr for AI agents -- 235 tools covering social, DMs, zaps, trust, and identity
1 stars693 downloads/wk
Reviews
Write oneNobody has reviewed Bray yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Bray tools (100, 24 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
canary-beacon-checkCheck a CANARY beacon's status. Pass a beaconId to check a locally tracked beacon,
canary-beacon-createwrite actionCreate an encrypted liveness beacon for a CANARY group.
canary-group-createwrite actionCreate an encrypted CANARY verification group. All members share a secret seed
canary-group-currentGet the current verification word for a CANARY group.
canary-group-joinJoin an existing CANARY group using a shared seed (received via NIP-17 DM).
canary-group-membersList members and admins of a CANARY group.
canary-group-verifyVerify a spoken word against a CANARY group.
canary-session-createwrite actionCreate a CANARY verification session for two-party spoken verification.
canary-session-currentGet the current verification words for an active CANARY session.
canary-session-verifyVerify a spoken word against an active CANARY session.
cast-spellwrite actionExecute a NIP-A7 Spell (kind 777). Fetches the Spell event, resolves runtime variables ($me → your pubkey, $contacts → your follow list) and relative timestamps (e.g. "7d", "30d"), builds a REQ filter, and queries relays. Pass either an event ID or a Spell event object from a prior relay-query.
dispatch-ackAcknowledge receipt of a dispatch task. Tells the sender "got it, working on it" before you have a full result. Use when a task will take time to complete.
dispatch-cancelwrite actionCancel a dispatch task you previously sent or received. Notifies the other party that the task should be abandoned.
dispatch-capability-discoverDiscover dispatch-capable agents on Nostr. Searches for NIP-89 capability cards (kind 31990) tagged with the dispatch protocol. Optionally filter by task type. Returns agent names, descriptions, supported task types, repos, and availability.
dispatch-capability-publishwrite actionPublish your agent's dispatch capabilities as a NIP-89 capability card (kind 31990). Lets other agents discover you on Nostr without needing a pre-shared identities file. The card advertises what task types you support, which repos you can work on, and your availability.
dispatch-capability-readRead a specific agent's dispatch capability card. Fetches their NIP-89 kind 31990 event to see what task types they support, which repos they work on, and their current availability.
dispatch-checkCheck for incoming collaboration tasks from trusted Nostr identities. Returns dispatch messages: think tasks, build tasks, results, acks, status updates. Only shows messages from identities in the dispatch trust list, validated for freshness. Defaults to messages received since this session started (prevents re-processing old tasks). Pass since=0 to see all available messages regardless of age.
dispatch-failureReport that a dispatch task failed after you attempted it. Use when you tried to complete the task but encountered errors. Optionally include partial results so work is not lost.
dispatch-proposePropose an alternative approach for a dispatch task. Use when you can't do exactly what was asked but have a better idea. The sender receives the proposal via dispatch-check.
dispatch-queryAsk the task sender a clarifying question before delivering results. Use mid-task when you need more information to proceed. The sender receives the question via dispatch-check and can reply.
dispatch-refuseRefuse a dispatch task you cannot or should not complete. Tells the sender "I cannot do this" with a reason. Use when the task is outside your capabilities, scope, or permissions.
dispatch-replywrite actionSend a result back for a completed dispatch task. Use after finishing a think or build task received via dispatch-check. Only replies to trusted identities. Do not use this for human conversations — only for responding to tasks from other AI agents.
dispatch-sendwrite actionSend a collaboration task to a trusted Nostr identity. Think tasks request read-only code analysis. Build tasks request implementation with code changes. The recipient's AI agent receives the task via encrypted NIP-17 DM and processes it with dispatch-check. Uses the active identity as sender — switch identity first if needed.
dispatch-statuswrite actionSend a status update to collaborators. Use to broadcast availability (e.g. "busy until 14:00"), queue depth, or progress on long-running tasks.
execute-actionwrite actionExecute an action found via search-actions. Pass the exact action name and its parameters.
handler-discoverDiscover MCP-capable handlers on Nostr. Searches for kind 31990 events that include mcp transport tags. Optionally filter by supported event kind. Returns handler names, descriptions, supported kinds, and transport endpoints.
handler-publishwrite actionPublish a NIP-XX Machine Application Handler card (kind 31990) advertising MCP transport endpoints. Lets other agents and tools discover MCP servers on Nostr by the event kinds they support. Provide at least one of stdio_command or http_url.
identity-accept-migrationAccept a migration from an external signer (Amber, nsec.app, etc). Signs and publishes the acceptance event via the current signer. Optionally verifies the migration event from the old key. Requires a Heartwood-compatible signer or local key.
identity-backupFetch profile, contacts, relay list, and attestations for a pubkey. Returns a portable JSON bundle (no private keys).
identity-backup-shamirSplit the active identity's private key into Shamir shard files using threshold secret sharing. Any "threshold" shards can reconstruct the key. Files written with 0600 permissions via atomic rename. Returns file paths only — shard content never appears in the response.
identity-createwrite actionGenerate a fresh Nostr identity with a BIP-39 mnemonic seed. Returns { npub, mnemonic }. Store the mnemonic securely — it will not be shown again. Use this when the user needs a brand new identity unrelated to the current one.
identity-deriveDerive a child Nostr identity from the master key by purpose and index. Deterministic — same inputs always produce the same npub. Returns { npub, purpose, index }. Use identity_switch after deriving to operate as the new identity.
identity-derive-personaDerive a named persona (e.g. "work", "personal", "anonymous"). Like identity_derive but uses a human-readable name. Returns { npub, personaName, index }. Follow with identity_switch to activate.
identity-listList all known identities (master + all derived). Returns array of { npub, purpose, index, personaName }. Never includes private keys. Use this to see what identities are available before switching.
identity-migrateMigrate from an old identity to the active one. Shows preview first — set confirm: true to execute. Publishes linkage proof and re-signs migratable events.
identity-provewrite actionCreate a cryptographic linkage proof between the master key and the active identity. "blind" (default) proves they share a master without revealing how the child was derived. "full" also reveals the purpose and index. Returns a LinkageProof object that can be verified by anyone with nsec-tree. Use trust_proof_publish to make it permanent on relays.
identity-restoreRe-sign migratable events (profile, contacts, relay list) under the active identity. Skips attestations (trust chain protection).
identity-restore-shamirReconstruct a secret from Shamir shard files. Returns the restored npub for verification.
identity-switchSwitch the active Nostr identity. ALL subsequent tool calls will sign events and query relays as the new identity. Pass "master" to return to root. Returns { npub } of the now-active identity. This is the key tool for multi-persona workflows.
label-createwrite actionLabel an event, pubkey, or addressable event using NIP-32 (kind 1985).
label-readQuery NIP-32 labels for a target event, pubkey, or address.
label-removewrite actionDelete a label event via kind 5 deletion. Only works for labels you authored.
label-searchFind all events/pubkeys that have been given a specific label in a namespace.
label-selfSelf-label your own content (kind 1985). Useful for content warnings, categories,
list-bookmarkManage bookmarks (NIP-51). Without a name, manages general bookmarks (kind 10003).
list-bookmark-readRead bookmarks. Without a name, reads general bookmarks (kind 10003).
list-check-mutedCheck if a pubkey, event ID, keyword, or hashtag is on your mute list.
list-followset-createwrite actionCreate a named follow set (NIP-51, kind 30000).
list-followset-manageAdd or remove pubkeys from a named follow set (NIP-51, kind 30000).
list-followset-readRead a named follow set by name (NIP-51, kind 30000).
list-muteManage your mute list (NIP-51, kind 10000). Add or remove pubkeys, event IDs, keywords, or hashtags.
list-mute-readRead your current mute list (NIP-51, kind 10000). Returns all muted pubkeys, events, keywords, and hashtags.
list-pinManage pinned events (NIP-51, kind 10001). Add or remove event IDs from your pin list.
list-pin-readRead your pinned events list (NIP-51, kind 10001).
listing-closeMark a classified listing as sold or closed (NIP-99, kind 30402).
listing-createwrite actionCreate a classified listing (NIP-99, kind 30402). Publishes a replaceable event with title,
listing-readRead classified listing(s) (NIP-99, kind 30402) by author and optional slug.
listing-searchSearch classified listings (NIP-99, kind 30402) by hashtag or geohash location.
marketplace-announcewrite actionPublish a kind 31402 service announcement on Nostr.
marketplace-callMake an authenticated API call using L402 credentials obtained from marketplace-pay.
marketplace-compareCompare two or more L402 services side by side — pricing, capabilities, and shared features.
marketplace-credentials-clearClear all stored L402 credentials from memory. Use when switching identity or cleaning up.
marketplace-discoverDiscover L402/x402 paid API services announced on Nostr (kind 31402).
marketplace-inspectGet full details of a specific L402 service by event ID, or by provider pubkey + identifier.
marketplace-paywrite actionPay an L402 invoice via NWC and store credentials for authenticated API calls.
marketplace-probewrite actionSend an HTTP request to an endpoint and inspect the response.
marketplace-reputationCheck a service provider's reputation — number of active services, announcement history, and topics covered.
marketplace-retireRetire (delete) a service announcement by publishing a kind 5 deletion event. The service will no longer appear in discovery results.
marketplace-searchFull-text search across L402 service names, descriptions, topics, and capabilities.
marketplace-updatewrite actionUpdate an existing kind 31402 service announcement. Same pubkey + identifier replaces the previous version (NIP-33 replaceable).
moderation-filterFilter a set of events against the active identity's mute list.
nip05-lookupResolve a NIP-05 identifier (user@domain) to a Nostr pubkey. Also returns relay hints if the server provides them. Use this to find someone's pubkey from their human-readable address.
nip05-relaysFetch relay hints from a NIP-05 identifier. The NIP-05 server can suggest preferred relays for each pubkey. Returns a map of pubkey to relay URLs. Useful for relay discovery before messaging someone.
nip05-verifyVerify that a NIP-05 identifier (user@domain) resolves to the expected pubkey. Returns { verified: true/false }. Use this to confirm someone's claimed NIP-05 identity.
privacy-commitwrite actionCreate a Pedersen commitment to a secret value. Returns a public commitment point (safe to share) and a blinding factor (keep secret). The commitment cryptographically binds you to the value without revealing it.
privacy-openVerify a Pedersen commitment opening. Given the original value and blinding factor, check they match the public commitment. Returns true if the commitment is valid.
privacy-prove-ageProve age is within a range without revealing the exact age. Supports formats like "18+" (adult), "13-17" (teen), "8-12" (child). Optionally bind to a subject pubkey to prevent transplanting.
privacy-prove-rangeProve a secret value is within [min, max] without revealing the value. Returns a cryptographic range proof that anyone can verify against the commitment. Optional binding context prevents proof transplanting between credentials.
privacy-prove-thresholdProve a value exceeds a threshold without revealing the exact value. Useful for income verification, balance checks, credit scoring. The proof shows value >= threshold.
privacy-publish-proofwrite actionPublish a range proof as a kind 30078 (NIP-78) Nostr event. Includes the commitment, proof, range description, and optional subject pubkey. The proof can then be discovered and verified by anyone.
privacy-read-proofFetch and verify range proof events from relays. Returns a list of proofs with their verification status, labels, ranges, and subject pubkeys.
privacy-verify-ageVerify an age range proof. Checks that the subject is within the expected age range without learning their exact age.
privacy-verify-rangeVerify a range proof. Checks that the committed value is within [min, max] without learning the value. Supply the same binding context used during proof creation.
privacy-verify-thresholdVerify a threshold proof. Checks that the committed value is >= threshold without learning the value.
relay-addAdd a single relay to the active identity's relay set (in-memory only — does not publish kind 10002).
relay-authAuthenticate to a relay that requires NIP-42 AUTH. Connects to the relay, waits for an AUTH challenge, signs a kind 22242 event, and sends it back. Returns { authenticated: true/false }. Use this when a relay-query fails due to AUTH requirements, then retry the query.
relay-compareCompare 2 or more relays side-by-side. For each relay: NIP-11 metadata, response time,
relay-countCount events matching a filter without fetching them (NIP-45). Sends a COUNT request to each relay. Falls back to fetch-and-count (capped at 1000) if the relay does not support NIP-45. Results show per-relay counts with fallback/estimated flags. Filter fields may be supplied either as top-level arguments or wrapped in a single "filter" object (both shapes are accepted).
relay-discoverDiscover relays used by your contacts. Fetches kind 10002 (NIP-65) relay lists from your follow list,
relay-diversityAnalyse your relay set for centralisation risk. Checks unique operators, software diversity,
relay-infoFetch the NIP-11 relay information document for a relay URL.
relay-listList the relay set (read/write) for the active identity. Optionally check for shared relays with another identity.
relay-nip-searchFind relays that support specific NIPs. Queries NIP-11 info documents and filters to relays
relay-queryQuery events from Nostr relays by kind, author, ids, tags, or time range. Useful for discovering events, scanning for specific kinds, or investigating unknown event schemas. Uses explicit relays if provided, otherwise the active identity's read relays. Filter fields may be supplied either as top-level arguments or wrapped in a single "filter" object (both shapes are accepted).
relay-recommendRecommend relays for your use case. Uses contact relay discovery, NIP-11 metadata, and health checks
relay-setwrite actionPublish a kind 10002 relay list for the active identity. Warns if a relay list already exists.
safety-activateSwitch to an alternative identity configuration.
safety-configureConfigure an alternative identity persona and pre-warm relay connections.
search-actionsSearch … additional actions by describing what you want to do.
whoamiReturns the active identity's npub. The simplest way to check which identity is currently in use.
Public scan report
scanner v0.1.9 · 2026-09-27 · same rubric, same numbers if you re-run it
- Code scan187 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 3 days ago15/15
- Maintainer identityregistry namespace matches repository owner7/10
Install Bray in Claude Code, Cursor or VS Code
Runs npx -y nostr-bray on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add bray -- npx -y nostr-bray
What the publisher says
From the Bray repository's README, as published. We do not edit it. Read it on GitHub
nostr-bray
Trust-aware Nostr MCP for AI and humans. 261 tools across 29 groups. Model-agnostic. Works with Claude, ChatGPT, Gemini, Cursor, Windsurf, or any MCP client.
Quick Start
Install globally or run via npx:
npm install -g nostr-brayNew to Nostr? Mint a key first -- this works before anything is configured and prints your npub plus a 24-word mnemonic (write it down; it is the key):
npx nostr-bray createAdd to your MCP client config:
{
"mcpServers": {
"nostr": {
"command": "npx",
"args": ["nostr-bray"],
"env": {
"NOSTR_SECRET_KEY": "nsec1...",
"NOSTR_RELAYS": "wss://relay.damus.io,wss://nos.lol"
}
}
}
}Then ask your AI to call whoami to verify it works.
For production use, prefer Heartwood or any NIP-46 bunker (your key never leaves your signing device):
{
"mcpServers": {
"nostr": {
"command": "npx",
"args": ["nostr-bray"],
"env": {
"BUNKER_URI": "bunker://...",
"NOSTR_RELAYS": "wss://relay.damus.io,wss://nos.lol"
}
}
}
}Auth tiers (best to worst)
Tool Groups
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Bray: common questions
- Is Bray MCP server safe?
- Mostly: it is graded B (82/100). Read the Bray safety report
- How do I install Bray?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Bray need an API key?
- Yes. The registry entry asks for
NOSTR_SECRET_KEY,NWC_URI. - Is Bray maintained?
- The last commit was 3 days ago (2026-09-24). The latest release is v1.27.7.