Skip to main content
Glama

Plan a new pool on LoomDesk's hooks, with the creator's choices

plan_open_pool
Read-onlyIdempotent

Plans a new Uniswap v4 pool for a token on LoomDesk's open hook, where LoomDesk's share is a tenth of the base fee, taken in the quote, a royalty or burn the creator sets (blocks) comes out of the fee too, and the liquidity keeps the rest. Use when ladder_pools shows no pool of the token against the quote wanted, or none that pays liquidity; when a position is wanted in it right away, prefer plan_build, which opens the pool and builds in one transaction. Returns: transactions[] (to, data, value in wei, gas), check (simulated, ok, failedStep, reason, ethNeeded, ethHeld), sendWithin, ifItReverts, slippagePct, the pool's key and opening price, then (the key and price for plan_ladder with newPool). The pool opens at the price of the token's existing market and holds nothing until liquidity is added; one-off cost about a dollar. Behavior: read-only on our side; nothing is signed or sent. The plan is laid out from the chain at this block and simulated from the owner; send it within check.sendWithin, and plan again rather than resend one that reverted. Costs quota units (agent_quota). Errors: refused when the pair already has a pool on the hook, the quote has no exit (under 2,000 USDG of liquidity on the chain), or the token has no market to price from.

Input Schema

NameRequiredDescriptionDefault
hookNoWhich hook the pool goes on and with what, when it has to be opened. Left out: the plain ranges pool at feePct; the answer then lists the presets under options. A full-range pool, a launch fee or the volatility fee are opened by the hook's own call in a transaction before the build (plan_build returns both, in order).
ownerYesThe wallet that signs, sends, and pays the opening cost.
quoteYesWhat the token trades against: ETH, USDG, or a quote token's address (a tokenized stock, LOOM, any token with a real exit).
tokenYesThe token's address.
feePctNoThe pool's swap fee in percent: 0.1 (rungs from 0.01% wide), 0.5 (from 0.1%), or 1 to 5 (from 2%); a full-range pool takes 1 to 5. Left out: the preset's, else 1.
startPriceUsdNoFor a token that has never traded: the price the pool opens at, in dollars per token, instead of startMarketCapUsd.
startMarketCapUsdNoFor a token that has never traded (not in the index): the market cap the pool opens at, in dollars; the price is it over the token's supply. Ignored for a token with a market.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • removedInput schema / properties / hook / properties / blocks / properties / sellLockMinutes
      Removed value: -{
      -  "description": "Sell lock: no sells for the first so many minutes. Liquidity can always be removed.",
      -  "maximum": 1440,
      -  "minimum": 1,
      -  "type": "integer"
      -}
  2. Changed2 schema fields changed
    • addedInput schema / properties / startMarketCapUsd
      Added value: +{
      +  "description": "For a token that has never traded (not in the index): the market cap the pool opens at, in dollars; the price is it over the token's supply. Ignored for a token with a market.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / startPriceUsd
      Added value: +{
      +  "description": "For a token that has never traded: the price the pool opens at, in dollars per token, instead of startMarketCapUsd.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / hook / properties / blocks
      Added value: +{
      +  "description": "ranges only: the creator's blocks, each enforced by the hook in every swap and fixed at opening. A trader always pays the pool's fee and no more: the royalty and the burn come out of it.",
      +  "properties": {
      +    "antiSnipeMaxQuote": {
      +      "description": "Anti-snipe: the most a single buy may spend of the quote (ETH or USDG, in whole units) during the first antiSnipeMinutes.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "antiSnipeMinutes": {
      +      "maximum": 1440,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "burnPct": {
      +      "description": "Auto burn: this percent of the base fee is burned in the token on every sell. At most 20.",
      +      "exclusiveMinimum": 0,
      +      "maximum": 20,
      +      "type": "number"
      +    },
      +    "managedFee": {
      +      "description": "Managed fee: the creator may later move the base fee between these tiers (same spacing as the fee: 1 to 5 together), an hour apart, with the hook's setFee.",
      +      "properties": {
      +        "ceilPct": {
      +          "type": "number"
      +        },
      +        "floorPct": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "floorPct",
      +        "ceilPct"
      +      ],
      +      "type": "object"
      +    },
      +    "offHoursFeePct": {
      +      "description": "Market hours: outside NYSE hours (weekdays 13:30 to 20:00 UTC) the base fee is this tier instead.",
      +      "type": "number"
      +    },
      +    "royaltyPct": {
      +      "description": "Royalty: this percent of the base fee goes to the pool's creator in the quote, every swap. At most 30.",
      +      "exclusiveMinimum": 0,
      +      "maximum": 30,
      +      "type": "number"
      +    },
      +    "sellLockMinutes": {
      +      "description": "Sell lock: no sells for the first so many minutes. Liquidity can always be removed.",
      +      "maximum": 1440,
      +      "minimum": 1,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed3 schema fields changed
    • changedInput schema / properties / feePct / description
      Previous value: -"The pool's swap fee in percent: 0.1 (rungs from 0.01% wide), 0.5 (from 0.1%), or 1 to 5 (from 2%)."New value: +"The pool's swap fee in percent: 0.1 (rungs from 0.01% wide), 0.5 (from 0.1%), or 1 to 5 (from 2%); a full-range pool takes 1 to 5. Left out: the preset's, else 1."
    • addedInput schema / properties / hook
      Added value: +{
      +  "description": "Which hook the pool goes on and with what, when it has to be opened. Left out: the plain ranges pool at feePct; the answer then lists the presets under options. A full-range pool, a launch fee or the volatility fee are opened by the hook's own call in a transaction before the build (plan_build returns both, in order).",
      +  "properties": {
      +    "kind": {
      +      "description": "ranges: LoomOpenHookV2, any band, the fee in the asset paid in (default). full: LoomFullHook, one full-range position only, every fee in the quote (ETH or USDG), and a swap that closes a gap of 3%+ to the token's Uniswap v3 market pays for the gap instead.",
      +      "enum": [
      +        "ranges",
      +        "full"
      +      ],
      +      "type": "string"
      +    },
      +    "launchFeePct": {
      +      "description": "The fee the pool opens at, percent, above the swap fee and at most 50; it falls in a straight line to the swap fee over launchMinutes. Needs launchMinutes.",
      +      "maximum": 50,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "launchMinutes": {
      +      "description": "How long the launch fee takes to fall to the swap fee: 1 to 1440 minutes.",
      +      "maximum": 1440,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "preset": {
      +      "description": "A named set: steady (1%, plain), volatile (3%, volatility fee on), launch (5%, opens at 50% and falls to 5% over an hour, volatility fee on), full (full range, 1% in the quote, opens at 10% for ten minutes). A field given beside it wins.",
      +      "enum": [
      +        "steady",
      +        "volatile",
      +        "launch",
      +        "full"
      +      ],
      +      "type": "string"
      +    },
      +    "volatility": {
      +      "description": "ranges only: a fee that rises for a while after the price moves (a move under 3% adds nothing; the add fades within minutes).",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "token",
      -  "quote",
      -  "feePct",
      -  "owner"
      -]New value: +[
      +  "token",
      +  "quote",
      +  "owner"
      +]
  5. Changed4 schema fields changed
    • changedInput schema / properties / feePct / description
      Previous value: -"the pool's swap fee in percent: 0.1 (rungs at least 0.01% wide), 0.5 (0.1%), or 1 to 5 (2%)"New value: +"The pool's swap fee in percent: 0.1 (rungs from 0.01% wide), 0.5 (from 0.1%), or 1 to 5 (from 2%)."
    • addedInput schema / properties / owner / description
      Added value: +"The wallet that signs, sends, and pays the opening cost."
    • changedInput schema / properties / quote / description
      Previous value: -"\"ETH\", \"USDG\", or the address of the quote token: a tokenized stock, LOOM, or any token with an exit"New value: +"What the token trades against: ETH, USDG, or a quote token's address (a tokenized stock, LOOM, any token with a real exit)."
    • addedInput schema / properties / token / description
      Added value: +"The token's address."
  6. Changed3 schema fields changed
    • changedInput schema / properties / feePct / description
      Previous value: -"the pool's swap fee in percent: 1, 2, 3, 4 or 5"New value: +"the pool's swap fee in percent: 0.1 (rungs at least 0.01% wide), 0.5 (0.1%), or 1 to 5 (2%)"
    • changedInput schema / properties / feePct / minimum
      Previous value: -1New value: +0.1
    • changedInput schema / properties / feePct / type
      Previous value: -"integer"New value: +"number"
  7. Changed1 schema field changed
    • changedInput schema / properties / feePct / maximum
      Previous value: -5New value: +10
  8. Changed6 schema fields changed
    • removedInput schema / properties / feePct / anyOf
      Removed value: -[
      -  {
      -    "const": 1,
      -    "type": "number"
      -  },
      -  {
      -    "const": 3,
      -    "type": "number"
      -  }
      -]
    • addedInput schema / properties / feePct / description
      Added value: +"the pool's swap fee in percent: 1, 2, 3, 4 or 5"
    • addedInput schema / properties / feePct / maximum
      Added value: +5
    • addedInput schema / properties / feePct / minimum
      Added value: +1
    • addedInput schema / properties / feePct / type
      Added value: +"integer"
    • changedInput schema / properties / quote / description
      Previous value: -"\"ETH\", \"USDG\", or the address of a token the hook allows as a quote (a tokenized stock, so that NVDA/SPY is a pool; any token when the owner has switched that on)"New value: +"\"ETH\", \"USDG\", or the address of the quote token: a tokenized stock, LOOM, or any token with an exit"
  9. Changed4 schema fields changed
    • addedInput schema / properties / quote / anyOf
      Added value: +[
      +  {
      +    "enum": [
      +      "ETH",
      +      "USDG"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^0x[0-9a-fA-F]{40}$",
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / quote / description
      Added value: +"\"ETH\", \"USDG\", or the address of a token the hook allows as a quote (a tokenized stock, so that NVDA/SPY is a pool; any token when the owner has switched that on)"
    • removedInput schema / properties / quote / enum
      Removed value: -[
      -  "ETH",
      -  "USDG"
      -]
    • removedInput schema / properties / quote / type
      Removed value: -"string"
  10. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare read-only/idempotent/non-destructive, and the description goes well beyond them: it discloses that the plan is laid out from the chain at the current block and simulated from the owner, that it must be sent within check.sendWithin and re-planned (not resent) after a revert, that it consumes agent_quota, and the ~$1 one-off opening cost. It also enumerates failure modes (pair already has a pool, quote lacks a 2,000 USDG exit, token has no market), and its 'read-only, nothing is signed or sent' claim is consistent with readOnlyHint=true.

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?

Purpose and the sibling routing are front-loaded, and the dense content (returns, behavior, errors) is packed into a single efficient block with no filler. It is long and the run-on fee-split sentence takes effort to parse, but nearly every clause carries operational information.

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 no output schema, the description carries the full return contract (transactions[] with to/data/value/gas, check with simulated/ok/failedStep/reason/ethNeeded/ethHeld, sendWithin, ifItReverts, slippagePct, pool key and opening price, and the key/price for a follow-up plan_ladder). For a 7-param nested-object tool it also covers cost, quota, and the error surface, leaving nothing an agent needs to call it correctly.

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 description coverage is 100%, so the schema already documents each parameter, setting a baseline of 3. The description adds real meaning beyond it by explaining the fee split (LoomDesk's tenth of the base fee in the quote, royalty/burn out of the fee, liquidity keeps the rest) and that the pool opens at the token's existing market price, which contextualizes feePct, hook.blocks, and the start-price params.

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 ('Plans a new Uniswap v4 pool for a token on LoomDesk's open hook') and immediately contrasts with sibling plan_build, which opens and builds in one transaction. An agent can distinguish it from plan_ladder, ladder_pools, and plan_build without opening any 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 trigger ('Use when ladder_pools shows no pool of the token against the quote wanted, or none that pays liquidity') and a named alternative with its selecting condition ('when a position is wanted in it right away, prefer plan_build'). It also lists the three refusal conditions, which effectively define when-not-to-use.

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.

Resources