Sui MCP SHIT Minter

Sui MCP SHIT Minter

MCP server for minting SHIT tokens on Sui blockchain, supporting self-sponsored and sponsored transaction flows.

Category
访问服务器

README

Sui MCP SHIT Minter

MCP server prototype for a Sui-native mint flow:

  1. Codex or another MCP client calls this server.
  2. Each tool is gated by an OAuth bearer token value.
  3. The server checks configured Sui package objects.
  4. The server prepares an unsigned Sui transaction block.
  5. In the standard flow, the user signs and broadcasts with their own Sui wallet.
  6. In the sponsored flow, the user signs as sender and the configured sponsor signs/broadcasts as gas owner.
  7. mint() sends 10,000,000 SHIT to the user's own Sui address and debits 1 SUI from the transaction gas coin.

This is intentionally Sui-native. It does not use EIP-7702, EOA delegation, or EVM transaction types.

Layout

  • move/ - Sui Move package defining the SHIT coin and mint function.
  • src/server.ts - MCP server with standard and sponsored mint tools.
  • src/sui.ts - Sui transaction builders.
  • src/sponsor.ts - sponsor signer loader for Sui CLI keystore or suiprivkey.
  • .env.example - Runtime configuration template.

MCP Tools

  • health - checks server and network config.
  • quote_mint_fee - returns the 1 SUI fee and 10M SHIT mint amount.
  • check_mint_status - checks configured package and shared mint config objects.
  • check_user_mint_status - checks a user's SHIT balance, mint count, remaining mints, and eligibility.
  • prepare_mint - returns base64 Sui transaction bytes for the user to sign and execute.
  • prepare_sponsored_mint - returns base64 Sui transaction bytes where the user signs and the sponsor pays gas/fee.
  • submit_sponsored_mint - adds the sponsor signature and broadcasts a sponsored mint signed by the user.
  • prepare_config - returns base64 Sui transaction bytes to create the shared MintConfig.

Every tool takes accessToken. In a production HTTP MCP deployment, replace this explicit argument with real OAuth middleware that validates the request Authorization header.

Setup

npm install
cp .env.example .env

Fill .env after publishing the Move package:

SUI_NETWORK=testnet
SUI_FULLNODE_URL=https://fullnode.testnet.sui.io:443
MCP_OAUTH_BEARER_TOKEN=replace-with-your-oauth-access-token
SUI_PACKAGE_ID=0x...
SHIT_MINT_CONFIG_ID=0x...
MINT_FEE_MIST=1000000000
FEE_RECIPIENT=0x...
LP_RECIPIENT=0x...
SPONSOR_KEYSTORE_PATH=C:\Users\you\.sui\sui_config\sui.keystore
SPONSOR_KEYSTORE_INDEX=0
# or:
# SPONSOR_PRIVATE_KEY=suiprivkey...

Deploy Move Package

From the repo root:

cd move
sui move build
sui client publish --gas-budget 100000000

Record the created package id, TreasuryCap<SHIT_COIN>, and AdminCap.

Then call prepare_config through MCP using the admin address, AdminCap id, TreasuryCap<SHIT_COIN> id, and LP recipient. Sign and execute the returned transaction bytes with the admin wallet. This mints the 500M SHIT LP allocation to LP_RECIPIENT and moves the treasury cap into the shared MintConfig, so future user mint transactions do not need to touch an admin-owned object.

Record the created shared MintConfig object id in .env as SHIT_MINT_CONFIG_ID.

Run MCP Server

npm run dev

For production:

npm run build
npm start

Run MCP HTTP Server

The HTTP entrypoint uses MCP Streamable HTTP at /mcp and a simple health endpoint at /healthz.

npm run build
npm run start:http

Default URL:

http://127.0.0.1:3000/mcp

Every /mcp request must include:

Authorization: Bearer replace-with-your-oauth-access-token

HTTP config:

MCP_HTTP_HOST=127.0.0.1
MCP_HTTP_PORT=3000
# Use this when binding to 0.0.0.0 behind a reverse proxy.
MCP_ALLOWED_HOSTS=your-domain.com,localhost

For a public deployment, run the Node process behind HTTPS, keep MCP_OAUTH_BEARER_TOKEN secret, and bind either to 127.0.0.1 behind Nginx/Caddy or to 0.0.0.0 with MCP_ALLOWED_HOSTS set to the public domain.

For permanent deployment with Docker and Caddy, see DEPLOY.md.

If you do not have a VPS or domain, use Render instead. See RENDER_DEPLOY.md.

Codex Public Mint Plugin

This repo includes a local Codex plugin scaffold at:

plugins/shit-sui-minter

It contains:

  • .codex-plugin/plugin.json - plugin metadata.
  • .mcp.json - Streamable HTTP MCP endpoint config.
  • skills/shit-sui-mint/SKILL.md - user-facing mint workflow for Codex.

The plugin points to the current public tunnel:

https://curvy-duck-31.loca.lt/mcp

Set MCP_OAUTH_BEARER_TOKEN in the Codex environment before using the plugin. Then a user can ask:

Use the delegated_mint tool 1 time for my Sui wallet 0x...

Codex should check eligibility, prepare a sponsored mint, ask the user to sign with their Sui wallet, submit the signature, and report the transaction digest.

Mint Flow

Call check_user_mint_status before preparing a mint:

{
  "accessToken": "replace-with-your-oauth-access-token",
  "userAddress": "0xUSER_SUI_ADDRESS"
}

The response includes the user's SHIT balance, mintCount, remainingMints, canMint, and mintBlockedReason.

Call prepare_mint with:

{
  "accessToken": "replace-with-your-oauth-access-token",
  "userAddress": "0xUSER_SUI_ADDRESS"
}

The response includes transactionBlock, a base64 Sui transaction block. The wallet should sign and execute it on the configured network. The signer and recipient are the same userAddress.

Sponsored Mint Flow

Call prepare_sponsored_mint with:

{
  "accessToken": "replace-with-your-oauth-access-token",
  "userAddress": "0xUSER_SUI_ADDRESS"
}

The response includes transactionBlock. The user wallet signs those bytes, then the MCP client calls submit_sponsored_mint:

{
  "accessToken": "replace-with-your-oauth-access-token",
  "userAddress": "0xUSER_SUI_ADDRESS",
  "transactionBlock": "BASE64_TRANSACTION_BLOCK",
  "userSignature": "SERIALIZED_USER_SIGNATURE"
}

The server rebuilds the expected transaction for userAddress, signs only if it exactly matches transactionBlock, then broadcasts both signatures. This lets users mint through Codex/MCP without needing SUI for gas, while the contract still counts the user's signer address for the 10-mint wallet limit.

Supply Rules

  • Max total supply: 1,000,000,000 SHIT.
  • LP allocation: 500,000,000 SHIT, minted once during create_config.
  • Public mint allocation: 500,000,000 SHIT.
  • Mint size: 10,000,000 SHIT per transaction.
  • Max wallet mints: 10 mints per signer address.
  • Contract enforces recipient == tx_context::sender, so a wallet cannot mint to another recipient to bypass the wallet counter.

Important Notes

  • The TreasuryCap is stored inside the shared MintConfig, which lets users mint through the shared object without requiring an admin signer in the mint transaction.
  • The Move contract requires the payment coin to equal fee_mist, currently 1_000_000_000 MIST, or 1 SUI.
  • The logo URL is a placeholder in move/sources/shit_coin.move; replace it before production.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选