
Launch, buy, stake and claim on bonding-curve token markets across five chains, with your own key.
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.
Free. Returns the exact EIP-191 message an address signs (personal_sign) to prove it is the address asking. ask_agent accepts it for 10 minutes. Signing it moves nothing and costs nothing.
Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it.
Wallet that will sign and ask.
Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.
Free. Returns the exact EIP-191 message an address signs (personal_sign) to prove it is the address asking. ask_agent accepts it for 10 minutes. Signing it moves nothing and costs nothing.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| address* | string | Wallet that will sign and ask. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol",
"address"
],
"properties": {
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"address": {
"type": "string",
"description": "Wallet that will sign and ask."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
}
}
}Asks the market's own agent a question about that market. Open to an address whose stake in the market's stake contract is active (check_stake), proven with a signed access_message. The answer comes from glm-5.3 on the 0G router and is limited to facts read on-chain for this call; the tool returns those facts next to the answer. Refused without an active stake, and nothing is charged either way.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| address* | string | The asking wallet. Must hold an active stake. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
| message* | string | The exact message from access_message. |
| question* | string | What to ask the agent about this market. |
| signature* | string | personal_sign signature of message by address. |
Executes the buy. Called without xPayment it returns the HTTP 402 challenge, which is the correct first response and not an error. Called with a signed x402 payload in xPayment it settles on Base and the curve on the destination chain sends the tokens straight to `to`. You never need native gas on the destination chain and never need to bridge.
| Argument | Type | Description |
|---|---|---|
| to* | string | Address that receives the tokens. The curve sends them here directly; we never custody them. |
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
| xPayment | string | Base64-encoded x402 payment payload containing the signed EIP-3009 authorization. Omit it to receive the 402 challenge first. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol",
"to"
],
"properties": {
"to": {
"type": "string",
"description": "Address that receives the tokens. The curve sends them here directly; we never custody them."
},
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
},
"xPayment": {
"type": "string",
"description": "Base64-encoded x402 payment payload containing the signed EIP-3009 authorization. Omit it to receive the 402 challenge first."
}
}
}Free. Reads the market's stake contract on its own chain: its own AdextoAgentStake where it has one, otherwise the chain's AdextoStakeHub, which accepts every other market launched through ADEXTO from its first block. Returns how much an address has staked, the minimum, whether the position is active (at or above the minimum), and the totals. An active stake opens ask_agent for that market and an Agent Compute API key (see get_market staking.unlocks). There is no lock and no reward: unstake works at any time.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| address* | string | Wallet whose stake to read. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol",
"address"
],
"properties": {
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"address": {
"type": "string",
"description": "Wallet whose stake to read."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
}
}
}Full detail for a single market: chain, curve address, supply, fee rates, current price in the chain's native asset, and which read path serves its trade history. Free.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
}
}
}The exact steps to turn a 402 challenge into a settled cross-chain buy: what to sign, which chain settles, and which header carries the payment. Free. Read this if you have never paid an x402 endpoint before.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Every bonding-curve market this gateway can sell, across all chains it serves, with its ticker, chain, curve address and whether it is currently tradable. Free. Start here: the buy tools require a ticker and deliberately have no default.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Buys a market for real, completing the step an LLM cannot do alone: signing the EIP-3009 USDC authorisation. IMPORTANT for honest reporting — the signature is made by the operator's wallet on the server, not by a wallet you control, so describe the result as 'executed the purchase', not 'paid from my own funds'. Refuses unless the caller carries the agent key, and refuses any quote whose asset, network, recipient or amount does not match the hard-coded limits. Delivery always goes to the signer.
| Argument | Type | Description |
|---|---|---|
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
}
}
}Unsigned transactions that collect the creator fee owed to an address across its markets: one claimCreatorFees() call per curve, or one Multicall3 batch per chain when several are owed. The curve always pays its immutable creator, whoever sends the transaction.
| Argument | Type | Description |
|---|---|---|
| address* | string | Creator address whose owed fees to collect. |
| chainId | integer | Only this chain. Omit for every chain. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "Creator address whose owed fees to collect."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only this chain. Omit for every chain.",
"exclusiveMinimum": 0
}
}
}Launch a new ADEXTO market without handing over a key. Call it once without a signature: it checks the ticker, the chain and an optional ERC-8004 agent you own, and returns an attestation message for the deployer to sign (EIP-191). Call it again with the same arguments plus attestationMessage and attestationSignature: it anchors the launch metadata and returns the unsigned deployTrinity transaction (value 0, gas only), simulated from your address, with a gas estimate. Fee preset: 1.00% per trade, 0.70% to the creator. All supply goes into the curve; the creator gets no allocation. After the transaction is mined, call register_launch. The attestation message ends with an acceptance of the ADEXTO Terms and Acceptable Use Policy (adexto.xyz/terms): signing it is the deployer's acceptance, and markets that break the policy are removed from ADEXTO.
| Argument | Type | Description |
|---|---|---|
| x | string | X handle or URL. |
| docs | string | Documentation URL, shown on the market page. |
| name* | string | Token name, up to 64 bytes. |
| image | string | Logo as a base64 data URI (image/png, image/jpeg or image/webp). Omit for the default logo. |
| github | string | GitHub URL of the project, shown on the market page. |
| symbol* | string | Ticker, 2 to 12 letters A-Z or digits. Permanent on chain. |
| agentId |
Unsigned transactions that stake a market's token in its stake contract or its chain's stake hub: an approval for the exact amount (only if the allowance is short), then the stake. Checks balance, minimum and hub eligibility first, so a stake that would revert is refused before any gas is spent. No lock: unstake works at any time. A stake opens ask_agent for that market.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Whole tokens to stake, for example "10000". |
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| address* | string | Wallet that holds the tokens and will sign. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol",
"address",
"amount"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,18})?$",
"description": "Whole tokens to stake, for example \"10000\"."
},
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"address": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "Wallet that holds the tokens and will sign."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
}
}
}Reads the gateway's HTTP 402 challenge for a market and returns the quote and payment requirements without spending anything. The challenge carries the exact amount, the asset, the payTo address and the EIP-3009 domain, so an agent can decide before it signs. Free. This is the tool to call before buy_token.
| Argument | Type | Description |
|---|---|---|
| to | string | Recipient address for the tokens. Optional for a quote; the curve delivers straight to it on a real buy. |
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol"
],
"properties": {
"to": {
"type": "string",
"description": "Recipient address for the tokens. Optional for a quote; the curve delivers straight to it on a real buy."
},
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
}
}
}After the prepare_launch transaction is mined, lists the new market on adexto.xyz, in list_markets and on the x402 gateway. Reads the TrinityProjectDeployed event from the ADEXTO factory in the receipt; every value it registers comes from that event, not from the caller. Calling it again for the same transaction returns the existing listing.
| Argument | Type | Description |
|---|---|---|
| txHash* | string | Hash of the mined launch transaction. |
| chainId* | integer | Chain the launch transaction was sent on. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chainId",
"txHash"
],
"properties": {
"txHash": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{64}$",
"description": "Hash of the mined launch transaction."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain the launch transaction was sent on.",
"exclusiveMinimum": 0
}
}
}Trade history for a market, newest first, with an explicit statement of whether it reaches the launch block. Free. Monad, Robinhood Chain and Arc are served by our Envio indexer and Base and Arbitrum One by our subgraph, both complete from the launch block; every market is also covered by our per-market index of every swap since launch, joined to a live log scan for the newest fills. When a market's index is still catching up or a read fails, the answer says so instead of presenting a shortened list as the whole history. Treasury buybacks are not trades and are not listed, although the curve's swapCount counts them.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Rows to return, newest first. Default 50, maximum 400. |
| symbol* | string | Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it. |
| chainId | integer | Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 400,
"minimum": 1,
"description": "Rows to return, newest first. Default 50, maximum 400."
},
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"symbol",
"address",
"message",
"signature",
"question"
],
"properties": {
"symbol": {
"type": "string",
"minLength": 1,
"description": "Market ticker, for example PARCEL or ADEXTO. Required and has no default: the gateway refuses a missing ticker rather than quoting one, so a typo can never bill you for a token you did not ask for. Call list_markets first if you do not know it."
},
"address": {
"type": "string",
"description": "The asking wallet. Must hold an active stake."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain id of the market, for a ticker that trades on more than one chain (list_markets shows chainId). Without it the oldest market for that ticker is used.",
"exclusiveMinimum": 0
},
"message": {
"type": "string",
"maxLength": 400,
"description": "The exact message from access_message."
},
"question": {
"type": "string",
"maxLength": 500,
"minLength": 3,
"description": "What to ask the agent about this market."
},
"signature": {
"type": "string",
"description": "personal_sign signature of message by address."
}
}
}| string |
| ERC-8004 agent id on this chain to bind to the token, owned by the deployer. Omit to launch unbound. |
| chainId* | integer | Chain to launch on: 143 Monad, 42161 Arbitrum One, 4663 Robinhood Chain, 8453 Base, 5042 Arc, 16661 0G. |
| website | string | Project website URL, shown on the market page. https:// is assumed when no scheme is given. |
| category | string | Market category shown on the explorer. |
| deployer* | string | Address that signs the attestation and sends the launch transaction. It becomes the market's creator and receives the creator fee. |
| description | string | One-line pitch shown on the market page. |
| attestationMessage | string | Second call only: the message the first call returned. |
| attestationSignature | string | Second call only: the deployer's EIP-191 signature of it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chainId",
"name",
"symbol",
"deployer"
],
"properties": {
"x": {
"type": "string",
"maxLength": 200,
"description": "X handle or URL."
},
"docs": {
"type": "string",
"maxLength": 200,
"description": "Documentation URL, shown on the market page."
},
"name": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Token name, up to 64 bytes."
},
"image": {
"type": "string",
"maxLength": 200000,
"description": "Logo as a base64 data URI (image/png, image/jpeg or image/webp). Omit for the default logo."
},
"github": {
"type": "string",
"maxLength": 200,
"description": "GitHub URL of the project, shown on the market page."
},
"symbol": {
"type": "string",
"maxLength": 12,
"minLength": 2,
"description": "Ticker, 2 to 12 letters A-Z or digits. Permanent on chain."
},
"agentId": {
"type": "string",
"pattern": "^\\d{1,78}$",
"description": "ERC-8004 agent id on this chain to bind to the token, owned by the deployer. Omit to launch unbound."
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Chain to launch on: 143 Monad, 42161 Arbitrum One, 4663 Robinhood Chain, 8453 Base, 5042 Arc, 16661 0G.",
"exclusiveMinimum": 0
},
"website": {
"type": "string",
"maxLength": 200,
"description": "Project website URL, shown on the market page. https:// is assumed when no scheme is given."
},
"category": {
"enum": [
"defi",
"agents",
"meme",
"gaming",
"infra",
"rwa",
"social",
"other"
],
"type": "string",
"description": "Market category shown on the explorer."
},
"deployer": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "Address that signs the attestation and sends the launch transaction. It becomes the market's creator and receives the creator fee."
},
"description": {
"type": "string",
"maxLength": 280,
"description": "One-line pitch shown on the market page."
},
"attestationMessage": {
"type": "string",
"maxLength": 400,
"description": "Second call only: the message the first call returned."
},
"attestationSignature": {
"type": "string",
"maxLength": 200,
"description": "Second call only: the deployer's EIP-191 signature of it."
}
}
}