Pay-and-mint Cardano NFT (CIP-25) in one atomic tx. Non-custodial. MCP-native. Mainnet.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check whether a payment transaction is confirmed on-chain yet. Poll this after paying and before calling 'register', 'mint', or trusting a payment_tx you're about to reference -- submitting a transaction does not mean it is confirmed.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Check whether a payment transaction is confirmed on-chain yet. Poll this after paying and before calling 'register', 'mint', or trusting a payment_tx you're about to reference -- submitting a transaction does not mean it is confirmed.
| Argument | Type | Description |
|---|---|---|
| tx* | string | |
| api_key* | string |
{
"type": "object",
"title": "check_payment_statusArguments",
"required": [
"tx",
"api_key"
],
"properties": {
"tx": {
"type": "string",
"title": "Tx"
},
"api_key": {
"type": "string",
"title": "Api Key"
}
}
}Everything you need before your first call: where to send ADA, and how much. No API key required -- call this first, before 'register'.
No arguments.
{
"type": "object",
"title": "get_server_infoArguments",
"properties": {}
}Mint an NFT after separately paying the mint fee (see prepare_payment or pay any other way, then wait for on-chain confirmation -- check_payment_status). Pin your asset (and a thumbnail, for video) to IPFS yourself first; this server never stores files. Each payment transaction hash can only be used once -- a failed mint attempt does not consume it, retry with the same payment_tx. You are solely responsible for the content referenced by ipfs_hash.
| Argument | Type | Description |
|---|---|---|
| api_key* | string | |
| nft_name* | string | |
| ipfs_hash* | string | |
| asset_kind | string | |
| payment_tx* | string | |
| description | string | |
| destination_address* | string | |
| ipfs_hash_thumbnail | any |
{
"type": "object",
"title": "mintArguments",
"required": [
"ipfs_hash",
"nft_name",
"payment_tx",
"destination_address",
"api_key"
],
"properties": {
"api_key": {
"type": "string",
"title": "Api Key"
},
"nft_name": {
"type": "string",
"title": "Nft Name"
},
"ipfs_hash": {
"type": "string",
"title": "Ipfs Hash"
},
"asset_kind": {
"type": "string",
"title": "Asset Kind",
"default": "image"
},
"payment_tx": {
"type": "string",
"title": "Payment Tx"
},
"description": {
"type": "string",
"title": "Description",
"default": ""
},
"destination_address": {
"type": "string",
"title": "Destination Address"
},
"ipfs_hash_thumbnail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ipfs Hash Thumbnail",
"default": null
}
}
}Build a single transaction that pays the mint fee from from_address AND mints the NFT to destination_address at the same time -- no separate payment step, no payment_tx. Either both happen or neither does. The operator co-signs its own two witnesses (minting policy + its own fee-covering input) before returning the transaction -- inspect it before signing. You then add your own witness for from_address and submit: sign partially_signed_tx directly (cardano-cli 'transaction sign --tx-file <this> --signing-key-file <your key>', or a CIP-30 wallet's signTx(_, true) then merge the witness) and submit it yourself -- this server cannot sign or submit on your behalf. Pin your asset to IPFS yourself first. You are solely responsible for the content referenced by ipfs_hash.
| Argument | Type | Description |
|---|---|---|
| api_key* | string | |
| nft_name* | string | |
| ipfs_hash* | string | |
| asset_kind | string | |
| description | string | |
| from_address* | string | |
| destination_address* | string | |
Build an unsigned transaction that pays the mint fee from from_address to the operator, with change returned to from_address. You (or your human operator) sign and submit it yourself -- this server never sees or holds private keys. Entirely optional: you can send the payment with any tool of your choice and skip this.
| Argument | Type | Description |
|---|---|---|
| api_key* | string | |
| from_address* | string |
{
"type": "object",
"title": "prepare_paymentArguments",
"required": [
"from_address",
"api_key"
],
"properties": {
"api_key": {
"type": "string",
"title": "Api Key"
},
"from_address": {
"type": "string",
"title": "From Address"
}
}
}Register a new API key by paying a one-time fee. Pay the registration fee (see get_server_info) from the Cardano address you want your key bound to, sending it to the operator's payment_address, then call this with that transaction's hash. The payment must already be CONFIRMED on-chain (wait ~20-30s after submitting, or check with check_payment_status). One active key per address -- registering twice with the same address fails. Each payment transaction can only be used once, for registration or for a mint, not both.
| Argument | Type | Description |
|---|---|---|
| from_address* | string | |
| registration_tx* | string |
{
"type": "object",
"title": "registerArguments",
"required": [
"from_address",
"registration_tx"
],
"properties": {
"from_address": {
"type": "string",
"title": "From Address"
},
"registration_tx": {
"type": "string",
"title": "Registration Tx"
}
}
}| ipfs_hash_thumbnail |
| any |
{
"type": "object",
"title": "prepare_atomic_mintArguments",
"required": [
"ipfs_hash",
"nft_name",
"from_address",
"destination_address",
"api_key"
],
"properties": {
"api_key": {
"type": "string",
"title": "Api Key"
},
"nft_name": {
"type": "string",
"title": "Nft Name"
},
"ipfs_hash": {
"type": "string",
"title": "Ipfs Hash"
},
"asset_kind": {
"type": "string",
"title": "Asset Kind",
"default": "image"
},
"description": {
"type": "string",
"title": "Description",
"default": ""
},
"from_address": {
"type": "string",
"title": "From Address"
},
"destination_address": {
"type": "string",
"title": "Destination Address"
},
"ipfs_hash_thumbnail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ipfs Hash Thumbnail",
"default": null
}
}
}