Skip to main content

Souvenir

finance.souvenir/coinsVersion 1.3.0

Souvenir prize coins on Solana: search coins and rounds, launch and trade coins, claim wins.

Status

Responds610 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:30 UTC
Latency
610 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://souvenir.finance/mcpResponds610 ms
No sign-in

Claude Code

claude mcp add --transport http coins https://souvenir.finance/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: coins
Remote MCP server URL: https://souvenir.finance/mcp

Cursor

{
  "mcpServers": {
    "coins": {
      "url": "https://souvenir.finance/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"coins","type":"http","url":"https://souvenir.finance/mcp"}'

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

25 tools

Tools of Souvenir
Read-only
Idempotent
Open world
award_prizeA coin in prizes mode: gives winner an item, bought now from the coin's open pot at its fresh price plus a round's margin, as a round of the coin's: { round }. item is an id from search_prizes. The same idempotencyKey again answers the same round, whatever changed since. Refused when the pot is short, the item can't be bought now, or the winner is one of the coin's pools, Souvenir's wallets or its creator. Takes a coin key from create_coin_key as coinKey or as the request's Authorization: Bearer ck_live_… header; it works for every coin its wallet created. Refused with "The coin API's keys and writes are not open yet." while they are not open.YesNoYesYes
build_tradeThe trade's transaction for your wallet to sign, as the coin's page builds it: { transaction, out, minOut }, the transaction base64 (unsigned, version 0, paid by your wallet). It changes nothing until your wallet signs it and it is sent. Trading a coin, in order: (1) quote_trade to see what you would get; (2) build_trade with your wallet's address; (3) sign the transaction it answers with your wallet; (4) send_transaction, or send it yourself through any Solana RPC. No sign-in: your wallet's signature is the approval, and Souvenir never needs its private key. The same fees and limits as the coin's page on souvenir.finance. An agent helping a person, which can't sign with their wallet, uses request_trade instead and gives them the link to approve it with their own wallet.Not declaredYesNot declaredYes
claim_solTakes a won prize's SOL instead of the prize now, as the prizes page does, through the site's own route for that kind of prize: its share of the prize's worth (my_wins solOffer: 75% for a skin or a case, 66% for most others, 60% for a store's piece), or an xStocks prize's full worth. Paid to your wallet within minutes. Final: the prize can't be claimed after. Only while the win waits for you and only where the site offers it; hold to claim applies (your wallet must still hold 90% of the coins that counted for the win). Answers { ok } (and bps, the share). Takes the token from sign_in (sign_in_challenge with your wallet's address, sign its message with the wallet, sign_in), as token or as the request's Authorization: Bearer header. Refused with "Wins through the API are not open yet." while they are not open to your wallet, as launching is.YesNoNoYes
create_coin_keyA coin key for the coins your wallet created, as the coin page's Developers dialog makes one: { key, id, webhookSecret, view }. The key (ck_live_…) and the webhook secret are shown this once: keep them. It works for set_coin_mode and award_prize and the coin API (souvenir.finance/api/v2/openapi.json), on every coin the wallet created. At most 5 live keys a wallet; revoke one with revoke_coin_key (or DELETE /api/v2/me/coinkeys/{id}, or on the coin's page). Only a coin's creator makes keys. Takes the token from sign_in, as token or as the request's Authorization: Bearer header. Refused with "Coin keys are not open yet." while the coin API's keys are not open.NoNoNoNo
get_coinOne coin by its mint address, as search_coins lists it: mint, symbol, name, image, venue (pump, meteora or bags), origin (launched on Souvenir or brought), mode (full: its rounds draw an item; draws: they pay drawSol in SOL; prizes: its creator awards prizes), potSol (the open pot), prize (full mode: id, image, priceUsd), round (the latest unfinished one: number, state, targetSol, potSol), holders (at the latest snapshot) and links. A coin that is not on Souvenir is not found.Not declaredYesNot declaredNo
get_holdersA coin's holders now, as its page shows them: { slot, total, streak, holdHours, holders }, the 50 with the most draw tickets: owner, amount (the coins held now, raw units), tickets, multiplier (1 to 2 with holding streaks, to 3 with staked coins), odds (of its next draw, 0 to 1) and locked (staked coins, raw) when there are any. Its pools, Souvenir's own wallets and the coin's creator are left out: they never win its draws. total is every ticket counted.Not declaredYesNot declaredYes
get_roundOne round in full: { round } with its mode, target and pot, its state in words (stateText), and its proof: the holder snapshot's slot, the ticket total, the Merkle root, the drand round and randomness, and the winning ticket (SHA-256 of the randomness, as a number, modulo the total). A prize the creator awarded has proof { awardedBy: "creator" }; a round not drawn yet has none.Not declaredYesNot declaredNo
get_roundsA coin's rounds, newest first, 50 a page. Answers { rounds, next }; each round: number, state, prize, winner, drawnAt, deliveredAt, paidSol (SOL paid to the winner, else null). For older rounds, pass next back as cursor; it is null on the last page.Not declaredYesNot declaredNo
launch_optionsWhat launching takes now for your wallet, as the site's launch form reads it: allowed and its reason, venues (meteora: Souvenir's own curve; pump: pump.fun), feeLevels and shareLevels in basis points, defaults, tickets (the ticket rules), holdHours, which prize kinds are open, basket, pump (pump.fun's fees; on BTC pairs its feeLevels, and shield and devBuy: whether the launch shield and a dev buy are open to you) and more. Takes the token from sign_in, as token or as the request's Authorization: Bearer header. Refused with "Launching through the API is not open yet." while it is not open to your wallet. Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.Not declaredYesNot declaredNo
launch_statusWhere your launch stands, as the site's page follows it: { status, mint } with status pending (ask again in a few seconds), split (a pump.fun launch landed: transaction is the second approval, the split of its creator fee, for your wallet to sign; then submit_split), confirmed (the coin is on Souvenir) or failed (with reason). Takes the token from sign_in, as token or as the request's Authorization: Bearer header. Refused with "Launching through the API is not open yet." while it is not open to your wallet. Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.NoNoNot declaredYes
my_winsYour wallet's wins, as the site's prizes page reads them: { wins, link, evmAddress }, the newest first. Each win: mint, symbol, number (its round), skin (the prize), state (drawn: waiting for you; buying, sent, delivered; owed_sol, paid_sol; forfeited), stateText, linkDeadline (claim by then), keep (the coins you must still hold to claim, raw units), and its kind's details (goods, gift, stars, trip, stock, nft, evm, offer, pack). solOffer, when not null, is what claim_sol pays: bps of its worth, and lamports. An xStocks prize (stock) not claimed yet can be taken at its full worth in SOL. Every other claim (a shipping address, a gift card's code, a Steam trade link, a hotel) is on souvenir.finance/prizes. Takes the token from sign_in (sign_in_challenge with your wallet's address, sign its message with the wallet, sign_in), as token or as the request's Authorization: Bearer header. Refused with "Wins through the API are not open yet." while they are not open to your wallet, as launching is.Not declaredYesNot declaredNo
prepare_launchPrepares your launch, as the site's launch form does (the same checks, fees and rules): stores the picture and the coin's metadata and answers { mint, transaction, summary }, the transaction base64 for your wallet to sign (a pump.fun launch adds venue and transactions, the same one in a list). Sign it with your wallet without sending it and give it to submit_launch within the hour. The picture is imageUrl: an https address on a public host, fetched once, held to the site's picture rules (png, jpg, gif or webp, at most 4 MB). A coin with a prize names one: skin (an id from search_prizes), case, or basket (2 to 10 ids). With a dev buy your wallet's WBTC does not cover, it answers devSwap instead: sign its transaction and send it (send_transaction, or any Solana RPC), then prepare_launch again with devBuySats as given. Takes the token from sign_in, as token or as the request's Authorization: Bearer header. Refused with "Launching through the API is not open yet." while it is not open to your wallet. Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.NoNoNot declaredYes
quote_tradeWhat a buy or a sell of a Souvenir coin gives now, as the coin's page quotes it: { out, minOut, feeLamports, partial, venue }. out and minOut are the coin's raw units for a buy, lamports for a sell; minOut is the least you get at slippageBps. feeLamports is the trading fee (null on a pump.fun coin, where pump.fun takes it); partial, a buy larger than the curve has left (spent and refund say how much goes in). Trading a coin, in order: (1) quote_trade to see what you would get; (2) build_trade with your wallet's address; (3) sign the transaction it answers with your wallet; (4) send_transaction, or send it yourself through any Solana RPC. No sign-in: your wallet's signature is the approval, and Souvenir never needs its private key. The same fees and limits as the coin's page on souvenir.finance. An agent helping a person, which can't sign with their wallet, uses request_trade instead and gives them the link to approve it with their own wallet.Not declaredYesNot declaredYes
recent_winsThe latest wins on Souvenir, newest first, as the site's Recent winners lists them: { wins }, each with mint, symbol, coinImage, skin (the prize), skinImage, winner, winnerShort, round, at, state, ordered, claimRule, lastCall, solLamports (a last call's SOL), offer and worthUsd. Wins of adult (NSFW) prizes are left out, as on the site, unless nsfw is true: from the latest 200, so a page may hold fewer than limit.Not declaredYesNot declaredNo
request_tradeFor an agent helping a person who holds their own wallet: a link (url) for them to open, see this trade with a fresh quote, and approve it with their own wallet on souvenir.finance. Answers { id, url, state, expiresAt, side, amount, slippageBps, coin, quote }: quote is what the trade gives now (out, minOut, feeLamports, partial, venue), and the page quotes again when it is opened. Show the person the url and say what the trade is (buy or sell, the coin, the amount). Nothing happens until they approve it in their wallet: Souvenir and you never sign for them. The link lasts an hour, makes at most one trade, and asks for at most 10% slippage (slippageBps 10 to 1000, 300 by default). Then read how it ended with trade_request.NoNoNot declaredNo
revoke_coin_keyEnds one of your coin keys now, as the coin page's Developers dialog does: { ok }. It is refused from then on and its webhook stops; it can't be made live again. id is the key's id, as create_coin_key answered it (GET /api/v2/me/coinkeys lists your keys with their ids). Works whatever the coin API's switch, so a leaked key can always be ended. 404 for an id that is not one of your live keys. Takes the token from sign_in, as token or as the request's Authorization: Bearer header.YesNoYesNo
search_coinsLists coins on Souvenir, searched and sorted. Answers { coins, nextCursor }. Each coin: mint, symbol, name, image, venue (pump, meteora or bags), origin (launched on Souvenir or brought), mode (full: its rounds draw an item; draws: they pay drawSol in SOL; prizes: its creator awards prizes), potSol (the open pot), prize (full mode: id, image, priceUsd), round (the latest unfinished one: number, state, targetSol, potSol), holders (at the latest snapshot) and links. For the next page, pass nextCursor back as cursor; it is null on the last page. Coins whose prize is adult (NSFW) are left out, as on the site, unless nsfw is true.Not declaredYesNot declaredNo
search_prizesPrizes a coin can be launched with now, from Souvenir's catalogue: { prizes, total, next }. Each prize: id (what prepare_launch takes as skin), title, kind, priceUsd, from (true: a family priced from its smallest, which id names), image, and store, sizes or note when it has them. For the next page, pass next back as offset; it is null on the last page. No sign-in needed. CS2 skins are not listed here: a launch names one by its market name, such as "AK-47 | Redline (Field-Tested)". Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.Not declaredYesNot declaredNo
send_transactionSends a transaction your wallet signed (base64, every signature in place) to Solana, as the site sends what a wallet signs: { signature }. Only one Souvenir built for you in the last few minutes (build_trade, or prepare_launch's devSwap), signed as it was built; any other is refused (not_built): send it through a Solana RPC. A trade can't be undone once it lands. With no answer from the network in time it may still land: its signature is answered the same. Trading a coin, in order: (1) quote_trade to see what you would get; (2) build_trade with your wallet's address; (3) sign the transaction it answers with your wallet; (4) send_transaction, or send it yourself through any Solana RPC. No sign-in: your wallet's signature is the approval, and Souvenir never needs its private key. The same fees and limits as the coin's page on souvenir.finance. An agent helping a person, which can't sign with their wallet, uses request_trade instead and gives them the link to approve it with their own wallet.YesNoYesYes
set_coin_modeYour coin's mode from its next round (the round filling keeps its own): full (its rounds draw its prize), draws (each round pays drawSol in SOL to its winner) or prizes (you give prizes from its pot with award_prize; only a coin nobody but you holds can switch to it, has_holders otherwise). Answers the coin, as get_coin does. Takes a coin key from create_coin_key as coinKey or as the request's Authorization: Bearer ck_live_… header; it works for every coin its wallet created. Refused with "The coin API's keys and writes are not open yet." while they are not open.YesNoYesNo
sign_inThe signed challenge: { token, wallet, expiresAt }, a token for an hour (then sign in again) that the launch tools take as token, or that the request sends as Authorization: Bearer <token>. Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.NoNoNot declaredNo
sign_in_challengeThe first step of launching: { id, message, expiresAt } for your Solana wallet. Sign message (its UTF-8 bytes) with the wallet's ed25519 key and give id and the signature (base64) to sign_in within 5 minutes. Signing it authorizes no transaction or transfer. Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.NoNoNot declaredNo
submit_launchYour wallet's signed launch: Souvenir checks it is the prepared one (your wallet may only add its compute budget or guard instructions), adds the coin's own signature and sends it. Answers { signature }. Then launch_status. Takes the token from sign_in, as token or as the request's Authorization: Bearer header. Refused with "Launching through the API is not open yet." while it is not open to your wallet. Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.NoNoNot declaredYes
submit_splitThe split launch_status handed over, approved by your wallet: either the signature of the transaction your wallet signed and sent itself, or the signed transaction (base64) for Souvenir to send. Answers { signature }. Then launch_status until confirmed. Takes the token from sign_in, as token or as the request's Authorization: Bearer header. Refused with "Launching through the API is not open yet." while it is not open to your wallet. Launching a coin, in order: (1) sign_in_challenge with your wallet's address, sign its message with that wallet, then sign_in for a token; (2) launch_options, and search_prizes for the prize; (3) prepare_launch; (4) sign the transaction it answers with your wallet, without sending it, and give it to submit_launch; (5) launch_status until it answers confirmed: a pump.fun launch first answers split with a second transaction, which you sign (or sign and send) and give to submit_split, then launch_status again. Your wallet pays and signs everything: Souvenir never needs or asks for its private key.NoNoNot declaredYes
trade_requestHow an approval link from request_trade stands: { id, url, state, expiresAt, side, amount, slippageBps, coin, wallet, signature, out }. state: open (waiting for the person), sent (they approved and the trade is on its way to Solana), confirmed (it landed: signature is the transaction, wallet the one that traded), failed (it landed and failed on chain), dropped (the network dropped it, so it never landed), declined (they declined it), expired (an hour passed with no approval) or stopped (the approval stopped partway, so Souvenir can't tell whether the trade went out: the person should check their wallet before asking for a new link). A link that ended never comes back: ask for a new one. wallet and out are given once the trade was sent; out is what the trade was built to give (coins for a buy, lamports for a sell); the exact amount is on chain under signature. Read it every few seconds while it is open or sent.Not declaredYesNot declaredNo

Details

Registry status
Active
Published
Nov 13, 2026
Updated
Nov 13, 2026
Repository
Not given
Categories
Uncategorized
GDPR
Not declared

Are you the operator? Claim this listing