A solana MCP server.
To install and use the @cubie-ai/solana-mcp
package use the following command:
npm i @cubie-ai/solana-mcp
Read the docs: DOCUMENTATION
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { solanaMCPServer } from "../../dist";
import { SOLANA_RPC_URL } from "./contants";
async function main() {
await solanaMCPServer({
transport: new StdioServerTransport(),
config: {
solanaRpcUrl: SOLANA_RPC_URL,
commitment: "confirmed",
},
});
}
main();
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
import { solanaMCPClient } from "../../dist";
const CUBIE_MINT = "2MH8ga3TuLvuvX2GUtVRS2BS8B9ujZo3bj5QeAkMpump";
async function main() {
const transport = new StdioClientTransport({
args: ["dist/server.js"],
command: "node",
});
const client = await solanaMCPClient({
name: "Solana MCP Client",
version: "1.0.0",
transport: transport,
});
const tools = await client.listTools();
console.dir(tools, { depth: null });
const supply = await client.callTool({
name: "getTokenSupply",
arguments: {
mint: CUBIE_MINT,
},
});
console.dir(supply, { depth: null });
}
main();
Running the example will produce the following output
{
tools: [
{
name: "getTokenHolders",
description: "Get token holders for a specific mint address",
inputSchema: {
type: "object",
properties: { mint: { type: "string" } },
required: ["mint"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
{
name: "getTokenSupply",
description: "Get the total supply of a specific token",
inputSchema: {
type: "object",
properties: { mint: { type: "string" } },
required: ["mint"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
{
name: "getTokenProgramByMintAddress",
description: "Get the token program by mint address",
inputSchema: {
type: "object",
properties: { mint: { type: "string" } },
required: ["mint"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
{
name: "getAddressBalance",
description: "Get the balance of a specific address",
inputSchema: {
type: "object",
properties: { address: { type: "string" } },
required: ["address"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
{
name: "getAddressHoldings",
description: "Get the holdings of a specific address",
inputSchema: {
type: "object",
properties: { address: { type: "string" } },
required: ["address"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
{
name: "getSignaturesForAddress",
description: "Get the signatures for a specific address",
inputSchema: {
type: "object",
properties: { address: { type: "string" } },
required: ["address"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
{
name: "getJupiterQuote",
description: "Get a quote from Jupiter for a specific swap",
inputSchema: {
type: "object",
properties: {
inputMint: { type: "string" },
outputMint: { type: "string" },
amount: { type: "string" },
slippage: { type: "string" },
},
required: ["inputMint", "outputMint", "amount"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
{
name: "getPrice",
description: "Get the price of a specific token",
inputSchema: {
type: "object",
properties: {
inputMint: { type: "string" },
outputMint: {
type: "string",
default: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
},
},
required: ["inputMint"],
additionalProperties: false,
$schema: "http://json-schema.org/draft-07/schema#",
},
},
];
}
{
content: [
{
type: "text",
text: '{"amount":"999725949874932","decimals":6,"uiAmount":999725949.874932,"uiAmountString":"999725949.874932"}',
},
];
}