Skip to main content
Glama

Prepare a market launch for your own key to sign

prepare_launch

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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "chainId": "<chainId>",
      "name": "<name>",
      "symbol": "<symbol>",
      "deployer": "<deployer>"
    },
    "name": "prepare_launch"
  }
}

Input Schema

NameRequiredDescriptionDefault
xNoX handle or URL.
docsNoDocumentation URL, shown on the market page.
nameYesToken name, up to 64 bytes.
imageNoLogo as a base64 data URI (image/png, image/jpeg or image/webp). Omit for the default logo.
githubNoGitHub URL of the project, shown on the market page.
symbolYesTicker, 2 to 12 letters A-Z or digits. Permanent on chain.
agentIdNoERC-8004 agent id on this chain to bind to the token, owned by the deployer. Omit to launch unbound.
chainIdYesChain to launch on: 143 Monad, 42161 Arbitrum One, 4663 Robinhood Chain, 8453 Base, 5042 Arc, 16661 0G.
websiteNoProject website URL, shown on the market page. https:// is assumed when no scheme is given.
categoryNoMarket category shown on the explorer.
deployerYesAddress that signs the attestation and sends the launch transaction. It becomes the market's creator and receives the creator fee.
descriptionNoOne-line pitch shown on the market page.
attestationMessageNoSecond call only: the message the first call returned.
attestationSignatureNoSecond call only: the deployer's EIP-191 signature of it.

Output Schema

NameRequiredDescriptionDefault
codeNoOn prepare_failed: error code of the preparation stage.
nameNoToken name.
nextNoWhat to do next.
stepNosign_attestation on the first call, sign_and_send on the second.
chainNoChain name.
errorNoPresent only when the tool refused, as a stable code such as unknown_market. Nothing was spent.
quotaNoOn creator_ticker_limit: this address's ticker quota.
checksNoStep one: ticker and agent checks already passed.
detailNoWhy it refused, or extra context on a successful answer.
marketNoThe market the launch creates: supply, fee split, opening market cap, agent.
statusNoOn prepare_failed: HTTP status of the preparation stage.
symbolNoTicker.
chainIdNoChain to launch on.
deployerNoAddress that signs and sends.
signWithNoStep one: how to sign.
gasSourceNoestimateGas or measured.
simulationNoThe transaction simulated from the deployer.
gasEstimateNoStep two: estimated gas.
gasPriceWeiNoCurrent gas price.
transactionNoStep two: the unsigned launch transaction.
nativeSymbolNoNative asset that pays the gas.
attestationRootNoMetadata root written on chain.
fundsSufficientNoWhether the balance covers the transaction's gas limit at the current price, which the node requires.
validForSecondsNoStep one: how long the attestation is accepted.
estimatedCostWeiNoEstimated cost in wei: gas used times the gas price, or the gas limit times the price on Monad, which bills the whole limit.
launchableChainsNoOn unsupported_chain: the chains that can launch.
retryAfterSecondsNoOn a rate limit: seconds to wait.
unavailableChainsNoChains the preparation stage could not open.
attestationMessageNoStep one: the message to sign with personal_sign.
deployerBalanceWeiNoDeployer balance.
metadataAnchoredTo0GNoTrue when the metadata was stored on 0G DA.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / estimatedCostWei / description
      Previous value: -"Estimated cost in wei."New value: +"Estimated cost in wei: gas used times the gas price, or the gas limit times the price on Monad, which bills the whole limit."
    • changedOutput schema / properties / fundsSufficient / description
      Previous value: -"Whether the balance covers the estimate."New value: +"Whether the balance covers the transaction's gas limit at the current price, which the node requires."
  2. Changed1 schema field changed
    • changedInput schema / properties / chainId / description
      Previous value: -"Chain to launch on: 143 Monad, 42161 Arbitrum One, 4663 Robinhood Chain, 8453 Base, 16661 0G."New value: +"Chain to launch on: 143 Monad, 42161 Arbitrum One, 4663 Robinhood Chain, 8453 Base, 5042 Arc, 16661 0G."
  3. Changed4 schema fields changed
    • addedInput schema / properties / docs / description
      Added value: +"Documentation URL, shown on the market page."
    • addedInput schema / properties / github / description
      Added value: +"GitHub URL of the project, shown on the market page."
    • addedInput schema / properties / website / description
      Added value: +"Project website URL, shown on the market page. https:// is assumed when no scheme is given."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "attestationMessage": {
      +      "description": "Step one: the message to sign with personal_sign.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "attestationRoot": {
      +      "description": "Metadata root written on chain.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "chain": {
      +      "description": "Chain name.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "chainId": {
      +      "description": "Chain to launch on.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "checks": {
      +      "description": "Step one: ticker and agent checks already passed."
      +    },
      +    "code": {
      +      "description": "On prepare_failed: error code of the preparation stage.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "deployer": {
      +      "description": "Address that signs and sends.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "deployerBalanceWei": {
      +      "description": "Deployer balance.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "detail": {
      +      "description": "Why it refused, or extra context on a successful answer."
      +    },
      +    "error": {
      +      "description": "Present only when the tool refused, as a stable code such as unknown_market. Nothing was spent.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "estimatedCostWei": {
      +      "description": "Estimated cost in wei.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "fundsSufficient": {
      +      "description": "Whether the balance covers the estimate.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "gasEstimate": {
      +      "description": "Step two: estimated gas.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "gasPriceWei": {
      +      "description": "Current gas price.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "gasSource": {
      +      "description": "estimateGas or measured.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "launchableChains": {
      +      "description": "On unsupported_chain: the chains that can launch."
      +    },
      +    "market": {
      +      "description": "The market the launch creates: supply, fee split, opening market cap, agent."
      +    },
      +    "metadataAnchoredTo0G": {
      +      "description": "True when the metadata was stored on 0G DA.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "name": {
      +      "description": "Token name.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "nativeSymbol": {
      +      "description": "Native asset that pays the gas.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "next": {
      +      "description": "What to do next.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "quota": {
      +      "description": "On creator_ticker_limit: this address's ticker quota."
      +    },
      +    "retryAfterSeconds": {
      +      "description": "On a rate limit: seconds to wait.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "signWith": {
      +      "description": "Step one: how to sign.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "simulation": {
      +      "additionalProperties": {},
      +      "description": "The transaction simulated from the deployer.",
      +      "properties": {
      +        "ok": {
      +          "description": "True when the simulation did not revert.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "revert": {
      +          "description": "Revert reason, if any.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "status": {
      +      "description": "On prepare_failed: HTTP status of the preparation stage.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "step": {
      +      "description": "sign_attestation on the first call, sign_and_send on the second.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "symbol": {
      +      "description": "Ticker.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "transaction": {
      +      "additionalProperties": {},
      +      "description": "Step two: the unsigned launch transaction.",
      +      "properties": {
      +        "chainId": {
      +          "description": "Chain id.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "data": {
      +          "description": "deployTrinity calldata.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "from": {
      +          "description": "Deployer.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "gas": {
      +          "description": "Gas limit to send with.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "to": {
      +          "description": "ADEXTO launch factory.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "value": {
      +          "description": "Always 0: a launch costs gas only.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "unavailableChains": {
      +      "description": "Chains the preparation stage could not open."
      +    },
      +    "validForSeconds": {
      +      "description": "Step one: how long the attestation is accepted.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the fee structure (1.00% per trade, 0.70% to creator), that all supply goes into the curve with no creator allocation, that the second call returns an unsigned simulated deployTrinity transaction with gas estimate, and that signing constitutes acceptance of the Terms with delisting consequences. This is exactly the mutation/authorization context annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but front-loaded, leading with the non-custodial hook before the mechanics. Every sentence carries operational or policy information; the only minor cost is density that could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not explain return values, yet it still summarizes them (attestation message, unsigned tx, gas estimate). Combined with annotations and full schema coverage, the agent has everything needed to invoke correctly and chain into register_launch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine cross-parameter meaning: that attestationMessage/attestationSignature are second-call-only and must be the values returned by the first call, and that deployer becomes creator and receives the creator fee. That relational context is not in the schema property text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Launch a new ADEXTO market') and immediately adds the distinguishing trait 'without handing over a key', which separates it from siblings like register_launch or buy_token. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit two-phase protocol: call once unsigned to get the attestation, then call again with the same arguments plus attestationMessage/attestationSignature, then call register_launch after mining. The when-to-use for each invocation is fully specified with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.