Skip to main content
Glama
jorgenclaw

Nostr Tools for AI Agents

by jorgenclaw
README.md
# nostr-mcp-server

A Nostr MCP (Model Context Protocol) server with **NIP-46 remote signing** support. Private keys never need to touch the AI context window.

## Live Endpoint

Connect directly without running locally:

```
https://nostr.jorgenclaw.ai/mcp
```

Transport: **Streamable HTTP** (MCP spec 2025-03-26) — compatible with Claude Desktop, Cursor, Glama, Smithery, and any MCP client.

Legacy SSE endpoint (backward compat): `https://nostr.jorgenclaw.ai/sse`

---

## NIP-05 Identity Service

Get a `yourname@jorgenclaw.ai` verified Nostr identity — registered by an AI agent over Lightning.

**How to register:**
1. Open any Nostr client (Amethyst, Primal, Damus, etc.)
2. DM this npub: `npub16pg5zadrrhseg2qjt9lwfcl50zcc8alnt7mnaend3j04wjz4gnjqn6efzc`
3. Send the message: `register yourname`
4. Pay the Lightning invoice that arrives in reply (1,000 sats)
5. Done — `yourname@jorgenclaw.ai` resolves immediately on all Nostr clients

Uses NIP-17 gift-wrapped DMs. Works with all modern Nostr clients.

---

## Features

- **NIP-46 bunker mode** — Set `NOSTR_BUNKER_URI` once, all signing routes through your bunker
- **Direct key mode** — Pass `privateKey` per-tool call (backwards compatible)
- **23 tools** — Notes, profiles, social actions, DMs (NIP-04/44), relay lists, zaps, fetch
- **MCP native** — Works with any MCP-compatible client

## Quick Start

```bash
npm install
npm run build
```

### Direct key mode (no bunker)

```bash
node dist/index.js
```

Tools require `privateKey` parameter on each signing call.

### Bunker mode (recommended)

```bash
NOSTR_BUNKER_URI="bunker://<pubkey>?relay=wss://relay.example.com&secret=abc" node dist/index.js
```

All signing tools use the bunker. `privateKey` parameter becomes optional.

## Tools

| Tool | Description |
|------|-------------|
| `postNote` | Create, sign, and publish a text note |
| `createNote` | Create unsigned text note |
| `signNote` | Sign a note event |
| `publishNote` | Publish signed note to relays |
| `createNostrEvent` | Create unsigned event of any kind |
| `signNostrEvent` | Sign any unsigned event |
| `publishNostrEvent` | Publish signed event to relays |
| `createProfile` | Create Nostr profile (kind 0) |
| `updateProfile` | Update existing profile |
| `follow` | Follow a pubkey |
| `unfollow` | Unfollow a pubkey |
| `reactToEvent` | React to event (kind 7) |
| `repostEvent` | Repost event (kind 6) |
| `deleteEvent` | Delete events (kind 5) |
| `replyToEvent` | Reply with NIP-10 threading |
| `encryptNip04` / `decryptNip04` | NIP-04 encryption |
| `sendDmNip04` | Send NIP-04 DM |
| `encryptNip44` / `decryptNip44` | NIP-44 encryption |
| `sendDmNip44` | Send NIP-44 DM |
| `setRelayList` | Publish relay list (NIP-65) |
| `getSignerInfo` | Check signing mode and pubkey |
| `fetchProfile` | Fetch a Nostr profile |
| `fetchEvents` | Fetch events from relays |

## NIP-46 Bunker URI

Format: `bunker://<bunker-hex-pubkey>?relay=wss://relay.com&secret=optional`

Compatible with: [nsecbunker](https://github.com/kind-0/nsecbunker), [Amber](https://github.com/nickyknox/Amber), any NIP-46 signer.

## Also Available: Sovereign MCP (Paid)

For agents that need verifiable signed actions with a Lightning-gated audit trail:

```
https://mcp.jorgenclaw.ai/mcp
```

9 tools, sats per call, [LCS-1](https://github.com/jorgenclaw/lcs-1) action receipts. No signup.

## Dependencies

- `nostr-tools` — Nostr protocol library (signing, encryption, NIP-46)
- `@modelcontextprotocol/sdk` — MCP server framework
- `ws` — WebSocket for Node.js relay connections
- `zod` — Input validation

## License

MIT

TDQS

C2.8/5.0

Scored across 23 tools

Disambiguation2/5

Many tools overlap conceptually: e.g., 'createNostrEvent' vs 'createNote', 'postNote' vs 'createNote'+'signNote'+'publishNote', and 'publishNostrEvent' vs 'publishNote'. The distinction between generic and specific tools is unclear, causing potential confusion for agents.

Naming Consistency3/5

All names use camelCase, but patterns are mixed: some are verb+object ('createNote'), others verb+protocol ('decryptNip04'), and some use prepositions ('reactToEvent', 'replyToEvent'). While readable, the inconsistency in verb choice and structure reduces predictability.

Tool Count4/5

With 23 tools, the server covers many Nostr operations. While slightly high, most tools have distinct roles in sending, receiving, and managing events. A few could be merged (like generic vs specific event creation), but overall the count is reasonable for a comprehensive Nostr toolset.

Completeness2/5

The server focuses exclusively on writing and event creation operations (create, sign, publish, encrypt). There are no tools for reading or querying events (e.g., subscribe, fetch filters), which is a major gap for an agent to usefully interact with Nostr. The set is severely one-sided.

Maintenance

ActivityInactive
ResponsivenessNo issues