Two MCP tools. Markowitz mean-variance optimization across the live Solana meme token universe. Real wallet metrics on demand. Connect once, query always.
Each call proxies directly to the MemePortfolio API. All optimization, price fetching, and Solana RPC work happens server-side.
// response { "portfolio": [ { "symbol": "BONK", "chain": "SOLANA", "weight": 15.4, "annual_return": 320.5, "annual_volatility": 210.3, "sharpe_ratio": 1.52, "sortino_ratio": 2.10 } ], "portfolio_metrics": { "total_tokens": 10, "annual_return": 280.0, "sharpe_ratio": 1.47, "total_weight": 100.0 } }
// response { "token_metrics": [ { "symbol": "BONK", "balance": 1500000, "price": 0.000021, "value": 31.5, "metrics": { "weight": 12.3, "sharpe_ratio": 1.51, "sortino_ratio": 2.05 } } ], "portfolio_metrics": { "annual_return": 275.0, "sharpe_ratio": 1.46 } }
One JSON block in your MCP client config. No auth setup, no SDKs, no session state to manage.
Add the server under mcpServers in your Claude Desktop config file, then restart the app.
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"meme-portfolio": {
"type": "streamable-http",
"url": "https://mcp.memeportfolio.io/mcp"
}
}
}
Register the server via the CLI. The tools are available in the next session - no restart needed.
# register the MCP server claude mcp add meme-portfolio \ --transport streamable-http \ https://mcp.memeportfolio.io/mcp
Google's A2A protocol - drop-in interoperability for any A2A-aware orchestrator. Agent card discovery at /.well-known/agent.json. Both skills complete synchronously; the SSE endpoint emits state transitions as they happen.
| Method | Path | Description |
|---|---|---|
| GET | /.well-known/agent.json | Agent card - capabilities, skills, and provider metadata |
| POST | /a2a/tasks/send | Single-response task - returns the completed task when done |
| POST | /a2a/tasks/sendSubscribe | SSE streaming - emits submitted → working → completed events |
| GET | /a2a/tasks/{task_id} | Poll task state by ID |
Pass skillId in the task body to route the call. Data fields map directly to the MCP tool parameters.
create-markowitz-portfolio - optional number_of_tokens (int, 2–50)get-portfolio - required wallet (Solana public key){
"id": "task-001",
"skillId": "create-markowitz-portfolio",
"message": {
"parts": [{
"type": "data",
"data": { "number_of_tokens": 10 }
}]
}
}
Guides on portfolio theory, risk management, and Solana memecoin selection - the concepts this API puts to work.