Skip to main content
Glama

cpu_create_lot

Create an on-chain sale lot at a Hub by shipping resources from your source cell, setting a per-unit price, and choosing the maximum sale fee you accept. Buyers can buy once escrow arrives.

Instructions

List units of a resource for sale at a Hub, on-chain (needs a session — cpu_authenticate first). One atomic tx: ships the goods from your source cell to the listing Hub (chain = [source, ...waypoints, hub]) and opens a lot at pricePerUnit $CPU, plus gas. A route through a foreign Hub costs a $CPU transit fee (auto-approved once); over only your own cells it is free. The hub owner charges a sale fee on every sale, carved out of the seller proceeds (the buyer still pays exactly price × value). maxSaleFeePercent is your tolerance: the highest rate you accept — omit it to lock in the live rate at listing (read on-chain). The hub settles its live rate each sale (never above your tolerance); if it later rises above the tolerance the lot freezes and buys revert until the hub lowers it — you can send the unsold remainder home at any time, which owes no sale fee but still owes transit for the route you pick. Read the live window, your live-lot count and any evicted remainder you owe with cpu_get_lot_terms first: this tool re-reads the same terms and refuses before any approval or transaction. The lot is DELIVERING and becomes buyable (OPEN) only after its escrow arrives — call cpu_finalize_delivery on the returned deliveryId (or wait). Returns the lotId and the locked-in maxSaleFeePercent; track with cpu_list_my_lots / cpu_get_lot.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
chainYesWaypoint tokenIds [source, ...waypoints, hub] — first node is your source cell, last is the listing Hub. A route through a foreign Hub is paid in $CPU. Scout waypoints with cpu_next_hops.
valueYesUnits to list, as a positive integer string.
resourceIdYesResource type id to list (must have a balance at the source cell).
pricePerUnitYesAsking price per unit in $CPU (positive decimal string, e.g. "0.5"). Must be > 0.
maxSaleFeePercentNoOptional seller tolerance: the highest sale-fee percent (0–100) you accept the hub charging on each sale. Omit to lock in the hub's live rate at listing time as the tolerance. The hub settles its live rate on every sale (never more than the tolerance); if the owner later raises it above the tolerance the lot freezes — buys revert until the rate drops back to the tolerance or below. Sending a frozen lot home costs no sale fee, but still costs transit for the route you choose.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed2 schema fields changedv0.10.0
    • changedInput schema / properties / chain / items / maximum
      Previous value: -48990New value: +29150
    • changedInput schema / properties / maxSaleFeePercent / description
      Previous value: -"Optional seller tolerance: the highest sale-fee percent (0–100) you accept the hub charging on each sale. Omit to lock in the hub's live rate at listing time as the tolerance. The hub settles its live rate on every sale (never more than the tolerance); if the owner later raises it above the tolerance the lot freezes — buys revert until the rate drops back to the tolerance or below — and cpu_cancel_lot is always fee-free."New value: +"Optional seller tolerance: the highest sale-fee percent (0–100) you accept the hub charging on each sale. Omit to lock in the hub's live rate at listing time as the tolerance. The hub settles its live rate on every sale (never more than the tolerance); if the owner later raises it above the tolerance the lot freezes — buys revert until the rate drops back to the tolerance or below. Sending a frozen lot home costs no sale fee, but still costs transit for the route you choose."
  2. First observedv0.8.0

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers richly: it discloses the atomic-transaction nature, the DELIVERING-to-OPEN state transition gated on escrow arrival, the freezing/revert behavior when the hub's live fee exceeds maxSaleFeePercent, transit-fee auto-approval, and the pre-transaction refusal safeguard. These are non-obvious behaviors an agent could not infer from the schema alone.

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?

The description is long but every sentence earns its place given the tool's complexity: atomic tx, layered fees, freezing logic, delivery state, and prerequisites. It is front-loaded with the core action and the session requirement before diving into mechanics. It is one dense paragraph and would benefit from light structural breaks, but there is no fluff or repetition.

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?

For a high-complexity tool with no annotations and no output schema, the description is remarkably complete: prerequisites, the refusal safeguard, the post-call delivery step, return values (lotId, locked-in maxSaleFeePercent), fee and freezing edge cases, and tracking tools are all covered. An agent has everything needed to invoke it correctly and to handle the states that follow.

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 baseline is 3, but the description adds genuine meaning: the chain parameter's cost model (foreign-hub transit fee, auto-approval once, free over own cells), the sale-fee carve-out meaning the buyer still pays exactly price × value, and how maxSaleFeePercent drives lot freezing. The maxSaleFeePercent prose partly duplicates the schema's own detailed description, which keeps this from a 5.

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?

The opening sentence states a specific action — 'List units of a resource for sale at a Hub, on-chain' — and the rest confirms it opens a lot in one atomic transaction. The creation role is unmistakable against sibling tools like cpu_buy_lot, cpu_return_lot, and cpu_evict_lot, even without naming them, because the description centers on opening a listing and shipping goods to the hub.

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?

Explicitly sequences the calling flow: authenticate first, read cpu_get_lot_terms before calling (the tool re-reads the same terms and refuses before any approval or transaction), then call cpu_finalize_delivery on the returned deliveryId, and track with cpu_list_my_lots / cpu_get_lot. The when-to-use context is concrete and the adjacent/alternative tools are named in context.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/projectcpu/project-cpu-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server