# three.ws Solana Memo Media

Pulls images embedded in Solana SPL Memo instructions and hands them to your assistant inline. Useful when you have a transaction signature instead of a file.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 249
- Author: nirholas
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/nirholas/three.ws/tree/HEAD/packages/solana-memo-media-mcp
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/mcp/threews-solana-memo-media

## What it does

This MCP server reads memo instructions on Solana and extracts the data URI payloads that hold images. It runs over stdio, needs no key, and stays read-only: it never signs, sends, uploads, or caches anything. You pass a transaction signature and get a validated image back, so there is no need to paste a base64 blob into a browser converter.

Five tools ship with it. `extract_solana_memo_media` walks one legacy, v0, or v1 transaction and returns every supported image found in top-level and inner memos, along with signer, slot, and version. `find_solana_memo_media` scans recent signatures for an address and fetches only those whose memo summary carries a data URI. The rest cover local decoding of an already-copied URI, rebuilding a multi-part inscription from a single signature, and printing the current policy without touching the network.

The safety rules are strict. Only PNG, JPEG, WebP, and GIF pass, and the declared MIME type has to match the file signature. SVG and anything executable is dropped, and decoded content is capped at 262,144 bytes. Each asset comes with a SHA-256 digest so callers can keep an exact reference. A memo is arbitrary signed text, so verify the signer and transaction context yourself before trusting what an image means. No key is required for normal use: the server tries `SOLANA_RPC_URLS`, then `SOLANA_RPC_URL`, then public mainnet endpoints.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `SOLANA_RPC_URLS`, `SOLANA_RPC_URL` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env SOLANA_RPC_URLS=<SOLANA_RPC_URLS> --env SOLANA_RPC_URL=<SOLANA_RPC_URL> --transport stdio solana-memo-media-mcp -- npx -y @three-ws/solana-memo-media-mcp
```
Replace <…> with your own values

### Codex

**Platform CLI**
```bash
codex mcp add solana-memo-media-mcp --env SOLANA_RPC_URLS=<SOLANA_RPC_URLS> --env SOLANA_RPC_URL=<SOLANA_RPC_URL> -- npx -y @three-ws/solana-memo-media-mcp
```
Replace <…> with your own values

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "solana-memo-media-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "@three-ws/solana-memo-media-mcp"
            ],
            "env": {
                "SOLANA_RPC_URLS": "<SOLANA_RPC_URLS>",
                "SOLANA_RPC_URL": "<SOLANA_RPC_URL>"
            }
        }
    }
}
```
Replace <…> with your own values

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "solana-memo-media-mcp": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@three-ws/solana-memo-media-mcp"
            ],
            "env": {
                "SOLANA_RPC_URLS": "<SOLANA_RPC_URLS>",
                "SOLANA_RPC_URL": "<SOLANA_RPC_URL>"
            }
        }
    }
}
```
Replace <…> with your own values

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e SOLANA_RPC_URLS=<SOLANA_RPC_URLS> -e SOLANA_RPC_URL=<SOLANA_RPC_URL> solana-memo-media-mcp npx -y @three-ws/solana-memo-media-mcp
```
Replace <…> with your own values

## When to use it
- pull an image out of a memo using its transaction signature
- check that a declared MIME type matches the actual file bytes
- rebuild a multi-part inscription from one transaction
- scan an address for recent memos that carry images
- decode a data URI locally without a network call

## Example prompts
- Show any image embedded in Solana transaction `<signature>`.
- Find memos with images for address `<address>`.
- Rebuild the `first/1` inscription from signature `<signature>`.

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 386989
- [GitHub](https://affpapa.org/en/nevibecode/mcp/github.md) — MCP server · ★ 33918
- [Netdata](https://affpapa.org/en/nevibecode/mcp/netdata.md) — MCP server · ★ 81115
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47392
- [mcp-server](https://affpapa.org/en/nevibecode/mcp/mcp-server.md) — MCP server · ★ 43872

From the same set: [nirholas/three.ws](https://affpapa.org/en/nevibecode/by/nirholas/three.ws.md) — 29 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
