<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Solana MCP Server</title>
<meta
name="description"
content="This page documents and helps you configure an MCP server for Solana blockchain with tools for accounts, transactions, blocks and wallet management."
/>
<link rel="icon" href="favicon.ico" />
<style>
:root {
--bg: #0b0d10;
--panel: #0f1318;
--muted: #9aa4b2;
--text: #e6edf3;
--brand: #14f195;
--brand-2: #9945ff;
--ring: 0 0 0 3px rgba(20, 241, 149, 0.35);
--radius: 12px;
--code-bg: #0a0d12;
--border: #1c232d;
--shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
}
@media (prefers-color-scheme: light) {
:root {
--bg: #f7fafc;
--panel: #ffffff;
--text: #0b1020;
--muted: #5b6777;
--border: #e8eef5;
--code-bg: #0b1020;
}
.code pre {
background: #0b1020;
color: #e6edf3;
}
}
* {
box-sizing: border-box;
}
html,
body {
height: 100%;
}
body {
margin: 0;
font:
16px/1.5 ui-sans-serif,
-apple-system,
"Segoe UI",
Roboto,
Inter,
system-ui,
Arial;
color: var(--text);
background: var(--bg);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
color: var(--brand);
text-decoration: none;
text-decoration: underline;
}
a:hover {
text-decoration: underline;
}
.container {
max-width: 1100px;
margin: 0 auto;
padding: 24px;
}
header.nav {
position: sticky;
top: 0;
z-index: 50;
backdrop-filter: saturate(120%) blur(10px);
background: color-mix(in oklab, var(--bg), transparent 60%);
border-bottom: 1px solid var(--border);
}
.nav-inner {
display: flex;
align-items: center;
gap: 18px;
padding: 16px 24px;
}
.brand {
display: flex;
align-items: center;
gap: 12px;
font-weight: 700;
letter-spacing: 0.2px;
}
.logo {
width: 60px;
height: 60px;
display: grid;
place-items: center;
border-radius: 8px;
}
.tabs {
margin-left: auto;
display: flex;
gap: 6px;
background: var(--panel);
padding: 6px;
border-radius: 999px;
border: 1px solid var(--border);
}
.tab {
border: 0;
padding: 8px 14px;
border-radius: 999px;
color: var(--muted);
background: transparent;
cursor: pointer;
font-weight: 600;
}
.tab.active {
color: #0b0f14;
background: linear-gradient(
135deg,
var(--brand),
var(--brand-2)
);
box-shadow: var(--shadow);
}
.hero {
padding: 40px 0 16px;
}
.hero h1 {
font-size: clamp(28px, 4vw, 40px);
margin: 4px 0;
}
.tagline {
color: var(--muted);
max-width: 60ch;
}
.pill {
border: 1px solid var(--border);
padding: 6px 10px;
border-radius: 999px;
background: color-mix(in oklab, var(--panel), transparent 20%);
display: inline-flex;
align-items: center;
gap: 8px;
}
.section {
margin: 28px 0;
}
.muted {
color: var(--muted);
}
.code {
position: relative;
border: 1px solid var(--border);
border-radius: 12px;
overflow: hidden;
background: color-mix(in oklab, var(--panel), transparent 0%);
}
.code .bar {
display: flex;
gap: 8px;
padding: 10px 12px;
align-items: center;
background: color-mix(in oklab, var(--panel), transparent 6%);
border-bottom: 1px solid var(--border);
}
.dot {
width: 10px;
height: 10px;
border-radius: 999px;
background: #ff5f57;
}
.dot:nth-child(2) {
background: #ffbd2e;
}
.dot:nth-child(3) {
background: #28c840;
}
pre {
margin: 0;
padding: 16px;
overflow: auto;
font:
13px/1.6 ui-monospace,
SFMono-Regular,
Menlo,
Monaco,
Consolas,
"Liberation Mono",
monospace;
background: var(--code-bg);
color: #cde3ff;
}
code {
font-family: inherit;
}
.copy {
position: absolute;
top: 8px;
right: 8px;
border: 1px solid var(--border);
background: color-mix(in oklab, var(--panel), transparent 10%);
color: var(--muted);
padding: 6px 10px;
border-radius: 10px;
cursor: pointer;
font-weight: 600;
}
.copy:focus {
outline: none;
box-shadow: var(--ring);
}
.kbd {
border: 1px solid #1f2937;
padding: 2px 6px;
border-radius: 6px;
background: #0e1621;
color: #d1e5ff;
font:
12px ui-monospace,
SFMono-Regular,
Menlo,
Monaco,
Consolas,
"Liberation Mono",
monospace;
}
.input,
select {
width: 100%;
padding: 10px 12px;
border-radius: 10px;
border: 1px solid var(--border);
background: color-mix(in oklab, var(--panel), transparent 10%);
color: var(--text);
}
.row {
display: grid;
grid-template-columns: 1fr 2fr;
gap: 12px;
align-items: center;
}
@media (max-width: 720px) {
.row {
grid-template-columns: 1fr;
}
}
.btn {
appearance: none;
border: 0;
padding: 10px 14px;
border-radius: 10px;
background: linear-gradient(
135deg,
var(--brand),
var(--brand-2)
);
color: #0b0f14;
font-weight: 700;
cursor: pointer;
}
.btn.secondary {
background: color-mix(in oklab, var(--panel), transparent 10%);
color: var(--text);
border: 1px solid var(--border);
}
details {
border: 1px solid var(--border);
border-radius: 12px;
padding: 12px 14px;
background: color-mix(in oklab, var(--panel), transparent 10%);
}
summary {
cursor: pointer;
font-weight: 700;
}
footer {
padding: 40px 24px;
color: var(--muted);
}
#playground section {
margin-top: 14px;
}
#playground ul {
margin: 8px 0 0 60px;
padding: 0;
}
#playground code {
background: rgba(0, 0, 0, 0.12);
padding: 2px 6px;
border-radius: 6px;
font-size: 0.95em;
color: var(--text);
}
#playground h4 {
margin-left: 20px;
}
</style>
</head>
<body>
<header class="nav">
<div class="nav-inner container">
<div class="brand">
<img
src="./images/Solana.jpeg"
alt="Solana Logo"
class="logo"
style="
width: 60px;
height: 60px;
border-radius: 8px;
object-fit: cover;
"
/>
<div>Solana MCP Server</div>
</div>
<nav class="tabs" role="tablist" aria-label="Primary">
<button
class="tab active"
data-tab="docs"
role="tab"
aria-selected="true"
>
Docs
</button>
</nav>
<a
href="https://github.com/fozagtx/SolanaAiTerminal"
target="_blank"
rel="noopener noreferrer"
style="
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--text);
text-decoration: none;
padding: 8px 14px;
border-radius: 8px;
border: 1px solid var(--border);
background: var(--panel);
transition: all 0.2s;
"
onmouseover="this.style.borderColor='var(--brand)'; this.style.background='color-mix(in oklab, var(--panel), var(--brand) 10%)'"
onmouseout="this.style.borderColor='var(--border)'; this.style.background='var(--panel)'"
>
<svg
width="20"
height="20"
viewBox="0 0 16 16"
fill="currentColor"
>
<path
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"
/>
</svg>
GitHub
</a>
</div>
</header>
<main class="container">
<section class="hero">
<p class="pill">
MCP • Model Context Protocol
<span class="muted">for Solana</span>
</p>
<h1>Solana MCP Server</h1>
<p class="tagline">
This page documents and helps you configure an MCP server
for Solana blockchain with tools for accounts, transactions,
blocks, and wallet management on Devnet and Testnet.
</p>
</section>
<div id="tab-docs" role="tabpanel">
<div id="integration" class="section">
<h2>Integrations</h2>
<p class="muted">
Register the server in your MCP-aware host
configuration.
</p>
<details
style="
margin: 16px 0;
padding: 12px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--panel);
"
>
<summary
style="
cursor: pointer;
font-weight: 600;
color: var(--brand);
"
>
Important: Wallet Configuration Required
</summary>
<div style="margin-top: 12px; line-height: 1.6">
<p>
This MCP server requires a Solana wallet private
key to perform on-chain operations (signing
messages, transactions, etc.).
</p>
<p style="margin-top: 8px">
<strong
>⚠️ You must provide your own private
key:</strong
>
</p>
<ul style="margin-left: 20px; margin-top: 8px">
<li>
For <strong>local use</strong>: Set
<code>AGENT_SECRET_KEY</code> in your
<code>.env</code> file
</li>
<li>
For <strong>Claude Desktop</strong>: Add
<code>AGENT_SECRET_KEY</code> to the env
section in your config
</li>
<li>
For <strong>hosted deployment</strong>:
Configure as environment variable in your
platform
</li>
</ul>
<p
style="
margin-top: 8px;
color: var(--muted);
font-size: 0.9em;
"
>
Format:
<code
>AGENT_SECRET_KEY=your_base58_private_key</code
>
(base58-encoded Solana keypair)<br />
Security: Never share your private key. Use a
test wallet for Devnet/Testnet development.
</p>
</div>
</details>
<div class="code" data-copy>
<div class="bar">
<span class="dot"></span><span class="dot"></span
><span class="dot"></span>
</div>
<pre><code class="language-json">{
"mcpServers": {
"solanaMcp": {
"url": "https://server.smithery.ai/@fozagtx/solanaaiterminal/mcp",
"type": "streamable-http",
"env": {
"AGENT_SECRET_KEY": "your_base58_private_key_here",
"ENVIRONMENT": "DEVNET"
}
}
}
}</code></pre>
<button class="copy" title="Copy">Copy</button>
</div>
<div
style="
margin-top: 16px;
padding: 12px;
border-left: 3px solid var(--brand);
background: color-mix(
in oklab,
var(--panel),
transparent 20%
);
"
>
<p style="margin: 0; font-size: 0.9em">
<strong>Note:</strong> Replace
<code>your_base58_private_key_here</code> with your
actual Solana private key in base58 format. Set
<code>ENVIRONMENT</code> to <code>DEVNET</code> or
<code>TESTNET</code> depending on which network you
want to use.
</p>
</div>
</div>
<div class="section" id="playground">
<h2>Tool list</h2>
<p class="muted">
A read-only list of the available tools. Use these names
when constructing MCP requests.
</p>
<section>
<h3>Solana Documentation</h3>
<ul>
<li>
<code>search_documentation</code> — Search
Solana Documentation.
</li>
</ul>
</section>
<section>
<h3>Solana RPC Methods</h3>
<h4>Accounts</h4>
<ul>
<li>
<code>get_account_info</code> — Get Solana
account information including balance, owner,
and data.
</li>
<li>
<code>get_balance</code> — Get SOL balance of an
account in lamports and SOL.
</li>
</ul>
<h4>Transactions</h4>
<ul>
<li>
<code>get_transaction</code> — Retrieve details
of a Solana transaction by signature.
</li>
</ul>
<h4>Blocks</h4>
<ul>
<li>
<code>get_block</code> — Get Solana block
information by slot number.
</li>
<li>
<code>get_slot</code> — Get the current slot
that the node is processing.
</li>
</ul>
<h4>Devnet/Testnet Tools</h4>
<ul>
<li>
<code>request_airdrop</code> — Request SOL
airdrop on Devnet or Testnet (max 5 SOL per
request).
</li>
</ul>
</section>
<section>
<h3>Wallet Management</h3>
<ul>
<li>
<code>create_wallet</code> — Generate a new
Solana wallet with mnemonic phrase (12 or 24
words).
</li>
<li>
<code>get_wallet_address</code> — Get the public
key of the currently configured wallet.
</li>
<li>
<code>sign_message</code> — Sign an arbitrary
message with the wallet's private key.
</li>
</ul>
</section>
</div>
</div>
</main>
<footer class="container">
<p>
Built for Solana Devnet & Testnet •
<a
href="https://docs.solana.com"
target="_blank"
rel="noopener noreferrer"
>Solana Docs</a
>
•
<a
href="https://explorer.solana.com/?cluster=devnet"
target="_blank"
rel="noopener noreferrer"
>Devnet Explorer</a
>
•
<a
href="https://faucet.solana.com"
target="_blank"
rel="noopener noreferrer"
>Faucet</a
>
</p>
</footer>
<script>
document.querySelectorAll("[data-copy] .copy").forEach((btn) => {
btn.addEventListener("click", async () => {
try {
const pre = btn.parentElement.querySelector("pre");
if (!pre) return;
const text = pre.innerText || pre.textContent || "";
await navigator.clipboard.writeText(text);
const prev = btn.textContent;
btn.textContent = "Copied!";
setTimeout(
() => (btn.textContent = prev || "Copy"),
1600,
);
} catch {}
});
});
</script>
</body>
</html>