{
  "markdown": "# @voltanotes/mcp\n\n[![npm version](https://img.shields.io/npm/v/@voltanotes/mcp)](https://www.npmjs.com/package/@voltanotes/mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nMCP server for [Volta Notes](https://voltanotes.com) — create and read **burn-after-read** encrypted notes from any AI agent.\n\nNotes are **end-to-end encrypted** using AES-256-GCM. The decryption key lives only in the URL fragment — it is never sent to any server. Notes are stored on the [Internet Computer](https://internetcomputer.org) and permanently destroyed after a single read.\n\n## Why\n\nAI agents regularly need sensitive information at runtime — API keys, passwords, credentials. Today, users paste these into chat where they're stored permanently in conversation history.\n\nWith this MCP server, the pattern becomes:\n\n1. User creates a note at [voltanotes.com](https://app.voltanotes.com) and sends the one-time URL\n2. Agent calls `read_volta_note` — secret returned, note permanently destroyed\n3. Nothing sensitive ever appears in chat history\n\nOr in reverse — an agent can use `create_volta_note` to send credentials to a user via a self-destructing link.\n\n## Quick Start\n\n### Claude Code (CLI & Desktop App)\n\n**Step 1 — Install globally:**\n\n```bash\nnpm install -g @voltanotes/mcp\n```\n\n**Step 2 — Register the server:**\n\n```bash\nclaude mcp add -s user volta -- node $(npm root -g)/@voltanotes/mcp/dist/index.js\n```\n\nThat's it. Restart Claude Code and the `create_volta_note` and `read_volta_note` tools will be available.\n\n> **Why `claude mcp add` instead of editing config files?** Claude Code reads MCP servers from its own registry, not from `~/.claude/mcp.json`. Using the CLI ensures the server is registered correctly. The `-s user` flag makes it available across all projects.\n\n> **`node` not found?** Use the full path: replace `node` with the output of `which node` (e.g. `/usr/local/bin/node`).\n\n### Claude Desktop (Standalone)\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"volta\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@voltanotes/mcp\"]\n    }\n  }\n}\n```\n\n### Other MCP-compatible clients\n\nThe `npx` config above works with any client that supports the standard `command`/`args` MCP format — including **Cursor**, **Windsurf**, **Cline**, **Continue.dev**, and others. Check your client's MCP documentation for where to add server config.\n\n### Hermes Agent (Nous Research)\n\nVolta MCP works with [Hermes Agent](https://hermes-agent.nousresearch.com) via its MCP integration. Add the server to your Hermes config (`~/.hermes/config.yaml`):\n\n```yaml\nmcp:\n  servers:\n    - name: volta\n      command: npx\n      args:\n        - \"-y\"\n        - \"@voltanotes/mcp\"\n```\n\nRestart Hermes and the `create_volta_note` and `read_volta_note` tools will be available to your agent.\n\n**Agent-to-agent use case:** Hermes agents running autonomously often need to pass credentials between workflows without exposing them in logs or memory. Volta Notes is purpose-built for this — one agent creates a note, passes the one-time URL to the next, and the secret is destroyed on read. Nothing persists in conversation history or tool output logs.\n\nSee [Hermes MCP documentation](https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp) for full configuration options.\n\n### Windows (Claude Code CLI)\n\nThe `$(npm root -g)` syntax doesn't work in PowerShell or CMD. Use this instead:\n\n```bash\nclaude mcp add -s user volta -- node \"%APPDATA%\\npm\\node_modules\\@voltanotes\\mcp\\dist\\index.js\"\n```\n\nOr use the Claude Desktop / npx method above, which works cross-platform.\n\n## Tools\n\n### `create_volta_note`\n\nCreates an encrypted note and returns a one-time URL.\n\n| Parameter | Type   | Description                          |\n|-----------|--------|--------------------------------------|\n| `content` | string | Secret content to encrypt (max 2 KB) |\n\n**Returns:** A `voltanotes.com` URL. The recipient opens it once, reads the content, and it's gone forever.\n\n### `read_volta_note`\n\nReads and permanently destroys a Volta note.\n\n| Parameter | Type   | Description                            |\n|-----------|--------|----------------------------------------|\n| `url`     | string | Full Volta URL including `#` fragment  |\n\n**Returns:** The decrypted note content. The note is permanently deleted from the canister — a second read will fail.\n\n## Agent Prompt Snippet\n\nAdd this to any agent's system prompt to enable secure credential handoff:\n\n```\nWhen you need a secret from the user (API key, password, credentials):\n1. Ask them to go to voltanotes.com and paste the secret into the note field\n2. They'll get a one-time URL — ask them to send it to you\n3. Use the read_volta_note tool with that URL to retrieve the secret\nThe secret is permanently destroyed after you read it — it never appears in chat history.\n```\n\n## Security Model\n\n- **AES-256-GCM** encryption happens locally before anything is sent to the canister\n- The encryption key exists only in the URL fragment (`#...`) — browsers and servers never transmit fragments\n- The ICP canister stores only ciphertext — even if compromised, all data is unreadable\n- Notes are destroyed on first read. Unread notes expire after 7 days.\n- No accounts, no login, no tracking\n\n## How It Works\n\n```\nAgent calls create_volta_note(\"secret-api-key-123\")\n  → Local: generate AES-256 key + encrypt\n  → ICP canister: store ciphertext → returns noteId\n  → Return URL: voltanotes.com/r/{noteId}#{key}\n\nUser opens URL → read gate → clicks \"Read note\"\n  → Browser: fetch ciphertext from canister (canister deletes it)\n  → Browser: decrypt using key from # fragment\n  → Display plaintext — note is gone forever\n```\n\n## Troubleshooting\n\n### Check if the server is connected\n\n```bash\nclaude mcp list\n```\n\nYou should see `volta: ... ✓ Connected`. If not, see below.\n\n### Server not showing up\n\n1. **Did you use `claude mcp add`?** Editing `~/.claude/mcp.json` manually won't work — Claude Code reads servers from its own registry. Always use `claude mcp add` to register servers.\n\n2. **Is `node` on your PATH?** Claude Code's shell has a minimal PATH. If `node` isn't found, use the full path:\n   ```bash\n   claude mcp add -s user volta -- $(which node) $(npm root -g)/@voltanotes/mcp/dist/index.js\n   ```\n\n3. **Restart required.** After adding or changing an MCP server, fully restart Claude Code (quit and reopen).\n\n### How do I know if the server started?\n\nThe server logs `Volta MCP server started` to stderr on successful startup. Run `claude mcp list` to check connection status.\n\n## Requirements\n\n- Node.js 18+ (uses built-in Web Crypto API)\n\n## License\n\nMIT — [Unprompted Labs](https://voltanotes.com)\n",
  "bytes": 6692,
  "sha": "7c1ff803f49326d470f3102ede8ae394b251f90e4c1278f5f69aecc29462d92a",
  "repo_slug": "iamredmh/volta-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_iamredmh_volta_mcp_server_c6b69ec5/readme"
}