three.ws Solana Memo Media

io.github.nirholasv0.1.0Updated Oct 10, 2026

Extract validated image data URIs from Solana SPL Memos and return them inline to MCP clients.

VerifiedSTDIODesktop onlyFinanceMedia & Design

Overview

AI-generated overview

Reads Solana SPL Memo instructions and returns any embedded image data URIs inline to an MCP client.

What it does
The server fetches a Solana transaction by signature and returns every supported image found in its top-level and inner Memo instructions, along with signer, slot, and transaction version. It can also scan up to 1,000 recent signatures for an address to find memos containing data URIs, decode a data URI locally without network access, and report its local policy, recognized memo programs, and RPC failover hosts. Responses include a JSON record plus one image content block per asset, with MIME type, byte length, SHA-256 digest, and dimensions.
When to use it
Useful when you want an assistant to display an image stored in a Solana memo without manually copying a base64 data URI into a converter. It fits read-only inspection of memo media tied to a known transaction signature or address.
Requirements
Runs locally over stdio, typically via npx with Node.js. No account or API key is required; optional SOLANA_RPC_URL and SOLANA_RPC_URLS environment variables can point to your own JSON-RPC endpoints, otherwise public Solana mainnet endpoints are used. Network access is needed for the fetch and scan tools.
Before you install
Read-only and keyless: it does not sign, send, upload, cache, or modify chain data. Memo text is arbitrary signed content, so a data URI is only a convention and not an endorsement; verify the signer, program, and transaction context independently before trusting what an image means. Only PNG, JPEG, WebP, and GIF are accepted, SVG and executable or document media are rejected, and decoded content is capped at 262,144 bytes.

Installation

In SourceWeft

  1. Open three.ws Solana Memo Media in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@three-ws/solana-memo-media-mcp

Read and display image data URIs embedded in Solana SPL Memo instructions. Instead of copying a data:image/...;base64,... memo payload into a browser converter, give an AI assistant the transaction signature and receive the validated image inline.

This is a keyless, read-only stdio MCP server. It never signs, sends, uploads, caches, or modifies chain data.

Install

bash
claude mcp add solana-memo-media -- npx -y @three-ws/solana-memo-media-mcp

For Cursor, Claude Desktop, or another stdio MCP client:

json
{  "mcpServers": {    "solana-memo-media": {      "command": "npx",      "args": ["-y", "@three-ws/solana-memo-media-mcp"]    }  }}

Tools

ToolPurpose
extract_solana_memo_mediaFetch one legacy, v0, or v1 transaction and return every supported image in its top-level and inner Memo instructions, with signer, slot, and version.
find_solana_memo_mediaScan up to 1,000 recent signatures for an address (pageable with before). Only signatures whose memo summary holds a data URI are fetched, so a scan costs a handful of RPC calls.
decode_solana_memo_data_uriDecode one already-copied data URI locally. No network call.
get_solana_memo_media_statusShow the local policy, recognized memo programs, and RPC failover hosts. No network call.

Recognized memo programs: SPL Memo v1 (Memo1UhkJRfHyvLMcVLMbLJYfW2tfU8G8H4PqvV6v8), SPL Memo v2 (MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr), and the newer program carried by version 1 transactions (Memo4c2pN8afCj432Lb7RMVKi9PbQnnW7ewFFaV3oAH).

Example

Ask an MCP client: "Show any image embedded in Solana transaction <signature>." It calls extract_solana_memo_media with:

json
{ "signature": "<base58 Solana transaction signature>" }

The response is a JSON record plus one MCP image content block per asset. The record carries the signature, fee payer, slot, transaction version, and for each asset its MIME type, byte length, SHA-256, and dimensions. The raw data URI is intentionally not echoed into text output.

Use it from your own code:

js
import { decodeDataUri } from '@three-ws/solana-memo-media-mcp/src/lib/media.js';
const media = decodeDataUri('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAFgwJ/lwV8YQAAAABJRU5ErkJggg==');console.log(media.mimeType, media.byteLength, media.dimensions, media.sha256);

Full guide: docs/mcp-solana-memo-media.md.

Safety and provenance

An SPL Memo is arbitrary signed text. A data URI is only a convention inside that text, not a Solana media standard and not an endorsement by a wallet, explorer, or this package.

  • Only image/png, image/jpeg, image/webp, and image/gif are accepted.
  • SVG and all executable or document media are rejected.
  • Decoded content is capped at 262,144 bytes.
  • The declared MIME type must match PNG, JPEG, WebP, or GIF file signatures before an image is returned.
  • The server reports a SHA-256 digest so callers can preserve an exact reference.
  • Verify the transaction signer, program, and surrounding transaction context independently before trusting what an image means.

RPC configuration

The server tries SOLANA_RPC_URLS, then SOLANA_RPC_URL, then public Solana mainnet endpoints. You do not need a key for normal use.

VariableRequiredMeaning
SOLANA_RPC_URLSnoComma-separated ordered JSON-RPC failover endpoints.
SOLANA_RPC_URLnoOne primary JSON-RPC endpoint.

Development

bash
npm test --prefix packages/solana-memo-media-mcpnpx -y @modelcontextprotocol/inspector node packages/solana-memo-media-mcp/src/index.js

License: Apache-2.0.

Source: packages/solana-memo-media-mcp/README.md at commit 0e68f46

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v0.1.0LatestOct 10, 2026