Nostr Signer
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Approve Nostr signatures with your own browser signer without exposing a private key.
| Author | com.frontiercrown.signer |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 208 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Nostr Signer": {
"url": "https://signer.frontiercrown.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (17)
get_setup_urlread-onlyReturn the loopback-only page used to connect a NIP-07 browser extension or an advanced NIP-46 signer.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_signer_statusread-onlyCheck whether a user-controlled NIP-07 or NIP-46 signer is connected.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
begin_nostrconnect_pairingAdvanced fallback: create a nostrconnect:// URI for the user to scan or open in a remote signer. Never accepts an nsec.
Parameters:
relays— array
Hints: read-only no · destructive no · idempotent not declared · open-world yes
connect_bunkerConnect a bunker:// URI only when the user knowingly supplied it. Prefer the local setup page so connection secrets are not placed in chat. Never accepts an nsec.
Parameters:
connection_uri(required) — string
Hints: read-only no · destructive no · idempotent not declared · open-world yes
get_public_keyread-onlyReturn the public key exposed by the currently paired signer.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
prepare_noteread-onlyPrepare and bind an exact unsigned kind:1 note for user review. This does not sign or publish.
Parameters:
content(required) — string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
prepare_eventread-onlyValidate and bind an exact unsigned Nostr event for user review. This does not sign or publish. Show the user every field before requesting a signature.
Parameters:
event(required) — object
Hints: read-only yes · destructive no · idempotent not declared · open-world no
sign_eventAsk the paired signer to approve and sign the exact event bound to a fresh intent. Requires explicit user intent and never publishes.
Parameters:
intent_id(required) — stringconfirm_signature(required) — boolean — Must be true only after the user explicitly approved this action.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
publish_eventdestructivePublish a previously verified signed event to configured relays. Requires separate explicit user intent.
Parameters:
intent_id(required) — stringconfirm_publish(required) — boolean — Must be true only after the user explicitly approved this action.relays— array
Hints: read-only no · destructive yes · idempotent not declared · open-world yes
query_eventsread-onlyRead a bounded set of verified public profile or note events from selected relays.
Parameters:
kinds— arraylimit— integersince— integerrelays— arrayauthors— array
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
disconnect_signerdestructiveForget the in-memory signer session and all prepared events.
Parameters:
confirm_disconnect(required) — boolean — Must be true only after the user explicitly approved this action.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
get_grynvault_account_dashboardread-onlyRead the connected Nostr identity's Grynvault supporter, payment, and NIP-05 dashboard using a short-lived signed authorization. This does not create an invoice or change settlement.
Parameters:
confirm_account_access(required) — boolean — Must be true only after the user approved signing a read-only Grynvault account request.
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
approve_grynvault_browser_handoffSign a short-lived, read-only Grynvault account handoff code so the browser tab that created it can receive its own dashboard. This does not create an invoice, publish a Nostr event, change settlement, or grant wallet custody.
Parameters:
code(required) — string — The one-time code displayed by the Grynvault portal, for example ABCD-EFGH-JKLM.confirm_browser_sign_in(required) — boolean — Must be true only after the user asked to sign the displayed Grynvault browser code.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
prepare_grynvault_supporter_invoiceread-onlyPrepare an exact, short-lived signed-authorization request for a one-time donation of 21 to 1,000,000 sats or the fixed 2,100-sat 30-day membership. Does not sign, create, pay, or settle an invoice.
Parameters:
plan(required) — stringdonation_sats— integer
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
create_grynvault_supporter_invoiceAfter separate explicit user confirmation, sign the prepared authorization and create exactly one pending Grynvault supporter invoice. Does not pay it and never treats a redirect as settlement.
Parameters:
operation_id(required) — stringconfirm_invoice_creation(required) — boolean — Must be true only after the user explicitly approved this action.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
prepare_grynvault_nip05_invoiceread-onlyCheck and normalize a [email protected] identifier, then prepare its exact 2,000-sat invoice authorization. Does not sign, reserve the name, create, pay, or settle an invoice.
Parameters:
name(required) — string
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
create_grynvault_nip05_invoiceAfter separate explicit user confirmation, sign the prepared authorization and create exactly one pending 2,000-sat [email protected] invoice. Does not pay, settle, activate, or prove identity.
Parameters:
operation_id(required) — stringconfirm_invoice_creation(required) — boolean — Must be true only after the user explicitly approved this action.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.