mcpField
T
three.ws Solana Memo Media

three.ws Solana Memo Media

Local
three.wsMedia & Design255Updated today

About three.ws Solana Memo Media

three.ws Solana Memo Media is a keyless, read-only MCP server that extracts and displays images embedded in Solana SPL Memo transactions. It validates image formats and file signatures, then returns images as MCP image content blocks.

Key features

  1. 01Extract images embedded in transactions
  2. 02Scan recent signatures for an address
  3. 03Decode image data URIs locally
  4. 04Rebuild and verify multipart inscriptions
  5. 05Inspect safety policy and RPC settings

Use cases

  1. 01View an image embedded in a Solana transaction memo
  2. 02Find recent image-bearing memos for an address
  3. 03Rebuild an inscription from one transaction signature

MCP support

It provides MCP clients with tools to extract, search, and decode Solana Memo images, rebuild inscriptions, and inspect status, returning supported images inline. The server is read-only and does not sign, send, or modify chain data.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"nirholas-solana-memo-media": {
"command": "npx",
"args": [
"-y",
"@three-ws/solana-memo-media-mcp"
],
"env": {
"SOLANA_RPC_URLS": "<SOLANA_RPC_URLS>",
"SOLANA_RPC_URL": "<SOLANA_RPC_URL>"
}
}
}
}
Run commandnpx -y @three-ws/solana-memo-media-mcp
Environment variables to set
SOLANA_RPC_URLSOptional comma-separated Solana JSON-RPC failover endpoints. Public mainnet endpoints are used when omitted.
SOLANA_RPC_URLOptional primary Solana JSON-RPC endpoint.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@three-ws/solana-memo-media-mcp0.1.0

Tools

4

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
dataUristringYesA complete base64 image data URI from an SPL Memo instruction.

Details

From the project 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

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

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

{
  "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.
read_inscriptionRebuild and verify a multi-part inscription (first/1, firsts/1, spl404) from any one of its transaction signatures. Images inline; SVG, HTML and text as inert text.
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:

{ "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:

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

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

License: Apache-2.0.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.