mint-day
v0.4.6
Published
Agent-native minting on Base. One tool call, any token type.
Maintainers
Readme
What is mint.day?
mint.day is an MCP server that gives any AI agent the ability to mint permanent, verifiable NFTs on Base. Identity cards, attestations, credentials, receipts, access passes — or any custom token you can describe in plain language.
Gas is sponsored. Wallets are optional. It works whether you are a seasoned Solidity developer or someone who just discovered Claude Code last month.
Get started in 60 seconds
Option A: You use Claude Code, Cursor, Windsurf, or any MCP client
Copy this prompt and paste it into your AI assistant:
Install mint.day for me.
mint.day is an MCP server that lets you mint NFTs on Base with natural language.
Identity, attestations, credentials, receipts, access passes, and visual tokens with images.
Add this MCP config:
{
"mcpServers": {
"mint-day": {
"command": "npx",
"args": ["mint-day"]
}
}
}
That's it. No API keys. No wallet. Gas is sponsored. Just tell me what to mint.Your assistant will handle the rest.
Option B: Add it manually
Drop this into your MCP config file (~/.cursor/mcp.json, claude_desktop_config.json, etc.):
{
"mcpServers": {
"mint-day": {
"command": "npx",
"args": ["-y", "mint-day"]
}
}
}Restart your AI client. Done.
Option C: npm package
npm install mint-dayimport { encodeMetadata } from 'mint-day';
const tokenURI = encodeMetadata({
name: "Audit complete: Protocol XYZ",
tokenType: "Attestation",
soulbound: true,
recipient: "0xABC..."
});Try it now
Once installed, tell your agent anything like:
"Proof I shipped the v2 API today"
"Mint me an identity token with my agent name and capabilities"
"Issue an access pass to 0xABC... for the beta"
"Receipt for 0.1 ETH paid to 0xDEF... on March 15"
Your agent classifies the intent, builds the metadata, and returns a ready-to-sign transaction. Confirm, and it is on-chain.
Live feed
Browse all minted tokens at mint.day/feed.
Token types
| Type | Default | Use for | |------|---------|---------| | Identity | transferable | Agent ID card, on-chain registration, DID | | Attestation | soulbound | Proof of action, task completion, audit trail | | Credential | soulbound | Reputation anchor, certification, earned status | | Receipt | transferable | Payment record, transaction proof between parties | | Pass | transferable | API access, capability unlock, membership |
All types support image and animation_url for visual NFTs — PFPs, art, screenshots, generative visuals.
MCP tools
mint
Create a permanent on-chain record.
Natural language (agent classifies intent automatically):
mint({ description: "Proof I completed the security audit for 0xABC" })Structured (skip classification):
mint({
description: "Task completion attestation",
tokenType: "Attestation",
recipient: "0xABC...",
soulbound: true
})With an image:
mint({
description: "My agent identity",
tokenType: "Identity",
image: "https://..." // or data:image/png;base64,...
})Every mint returns a preview first. Confirm with mintId to execute:
mint({ mintId: "a3f8c1e90b2d" })mint_check
Look up tokens by address, tx hash, or get global stats.
mint_check({ address: "0xABC..." }) // all tokens for a wallet
mint_check({ txHash: "0x230b..." }) // specific mint
mint_check({}) // global statsmint_resolve
Resolve an agent's on-chain identity. Returns their Identity token with ERC-8004 agent card metadata — DID, capabilities, endpoints.
mint_resolve({ address: "0xABC..." })Signing transactions
Option A: Built-in signing (recommended)
Generate a key, fund it with a small amount of ETH on Base (gas is less than $0.01), and mint.day handles signing and submission:
mkdir -p ~/.mint-day
node -e "
const w = require('ethers').Wallet.createRandom();
console.log(w.privateKey);
console.error('Address: ' + w.address);
" 2>&1 | head -1 > ~/.mint-day/credentials
chmod 600 ~/.mint-day/credentialsOr set PRIVATE_KEY in your MCP env config.
Option B: Bring your own signer
No private key needed. mint.day returns calldata you can submit with Coinbase AgentKit, Privy, Lit Protocol, or any EVM wallet.
How it works
Agent -> mint tool -> classifier (Groq Llama) -> metadata builder -> calldata
|
[if PRIVATE_KEY] sign + submit -> tx hash, explorer link |
[if no key] return calldata for your own signer -----|
|
MintFactory.sol on Base mainnetConfiguration
All optional. mint.day works with zero config.
| Variable | Default | Purpose |
|----------|---------|---------|
| PRIVATE_KEY | ~/.mint-day/credentials | Signs and submits transactions |
| BASE_RPC_URL | https://mainnet.base.org | RPC endpoint |
| CHAIN_ID | 8453 | Base Mainnet |
| MINT_FACTORY_ADDRESS | see below | Override contract address |
| CLASSIFY_URL | hosted endpoint | Intent classifier service |
Contracts
| Network | Address |
|---------|---------|
| Base Mainnet | 0x12a1c11a0b2860f64e7d8df20989f97d40de7f2c |
| Base Sepolia | 0x16e0072Eb4131106e266035E98Cfd07532B88EAa |
Permissionless. Anyone can call mint() directly without the MCP server.
Development
npm install
npm run dev # run with tsx
npm run build # compile to dist/
npm start # run compiledLinks
- mint.day — live site
- mint.day/feed — live feed of all minted tokens
- npm — npm package
- OpenSea — collection
- X — @mintdotday
MIT — built by @jordanlyall
