Skip to main content
Glama

Prepare or place a user-signed limit order. Union on `requiresSignature`: true → sign the returned EIP-712 typedData and resubmit; else the order was placed.

kellian_place_limit_order

Prepare or place a limit order. Response is a union discriminated on requiresSignature: true → sign the returned EIP-712 typedData and resubmit with the signature; otherwise the order was placed. The user wallet signs the EIP-712 order; the protocol operator key is never used as user identity. Reusing a live clOrdId with different (market, side, price, amount, kind) returns 409 CLORDID_CONFLICT.

Examples: First call without signature — server returns EIP-712 typedData to sign; Signing branch — sign typedData exactly as returned, then resubmit with orderSignature + nonce; Resubmit with wallet signature and the nonce from the signing payload

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": {
      "marketAddress": "<marketAddress>",
      "side": "<side>",
      "amount": "<amount>",
      "walletAddress": "<walletAddress>",
      "idempotencyKey": "<idempotencyKey>",
      "walletSignature": "<walletSignature>",
      "signatureTimestamp": "<signatureTimestamp>",
      "proofNonce": "<proofNonce>"
    },
    "name": "kellian_place_limit_order"
  }
}

Input Schema

NameRequiredDescriptionDefault
kindNo0=buy/bid, 1=sell/ask
sideYes0=outcome 1, 1=outcome 2
nonceNoOrder nonce for a user-signed EIP-712 order
priceNoLimit price in basis points. Must land on this market's price grid, published as tradingRules.priceBands: default markets are BANDED — 10-bps rungs below 500 and above 9500, 100-bps rungs in between — and an off-grid price is refused with 400 PRICE_OFF_TICK naming the two nearest legal prices. Resting orders (GTC or postOnly) meet tradingRules.minRestingShares and minRestingExpirySeconds. Passive postOnly orders have no collateral-notional minimum (minRestingNotional is 0). Active BUY orders (postOnly absent or false) retain the book snapshot's effectiveMinBuyAmount: principal notional for GTC, total budget including fees for IOC/FOK. IOC/FOK SELL meets minSellShares. A verified entire-position SELL is exempt from size floors. There is no longer a per-fill collateral floor: settlement stopped asserting the market's minBuyAmount in the 2026-08-31 beacon upgrade, so that field is a deprecated, unenforced record and no size need be checked against it. Provide either price or priceDecimal.
amountYesOrder size in OUTCOME-TOKEN smallest units, using the market collateral's decimals (PM: 6 — always read decimals from market metadata). One whole outcome token redeems for one whole collateral token; this field is NOT a collateral amount. Collateral locked = price × amount ÷ 10000.
expiryNoUnix timestamp expiry
chainIdNoChain id for the market address. Required when the same market address exists on multiple chains.
clOrdIdNoClient-supplied order id (maximum 200 characters; optional at placement; off-chain and not part of the EIP-712 Order / orderHash). Used for reconciliation, cancel-by-clOrdId, and live-order idempotency: the same (wallet, clOrdId) with matching (market, side, price, amount, kind) returns the existing open/partially-filled order; a divergent body yields 409 CLORDID_CONFLICT. After the order reaches a terminal status the id may be reused. Orthogonal to the HTTP Idempotency-Key header (transport-level).
postOnlyNoMaker-only (off-chain, not signed): reject the order if any part would cross the book on placement, so it can never pay taker.
proofNonceYesRequired single-use nonce for the wallet proof. Fetch from POST /api/auth/nonce; consumed on verification so the proof cannot be replayed.
timeInForceNoTime-in-force (off-chain, not signed): GTC rests until filled/cancelled (default); IOC fills what crosses now and cancels the remainder; FOK fills the full amount or is rejected.
priceDecimalNoLimit price as a 0–1 decimal probability (agent convention): 0.55 = 5500 bps. Converted by rounding to the nearest whole BPS; the result must then land on this market's price grid (tradingRules.priceBands) or placement returns PRICE_OFF_TICK with the two nearest legal prices — a stated limit price is never silently moved. Provide either price (bps) or priceDecimal — not both.
marketAddressYesOrderbook market address
walletAddressYesWallet address placing the order
idempotencyKeyYesRequired write-safety key. Use a new key after signing because the signed submission is a different request.
orderSignatureNoUser EIP-712 signature over the order. Omit to receive signing payload.
walletSignatureYesAction-bound wallet proof. Sign the canonical 'problee-mcp-auth:…' challenge (binds agent, apiKey, tool, scope, chain, resource, payloadHash, nonce, timestamp).
signatureTimestampYesUnix timestamp (seconds) used in the signed challenge message

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A3.9/5.0
Behavior4/5

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

Adds substantial context beyond the annotations: the user wallet signs the EIP-712 order, the operator key is never used as user identity, and a divergent body on a live clOrdId yields 409 CLORDID_CONFLICT. Note the mild tension with annotation idempotentHint=false — the description implies live-order dedupe by clOrdId, which the annotations do not convey — but this is additive rather than contradictory.

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

Conciseness5/5

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

The union branch is front-loaded in the first sentence, followed by the auth model and conflict rule, then concrete examples. Some overlap exists between the prose flow and the examples, but every element reinforces an operational step the agent must execute correctly.

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

Completeness4/5

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

For an 18-parameter, two-phase, signature-gated mutation with a union response, the description covers the flow, auth identity model, and conflict semantics; the output schema carries the return shape and the schema carries pricing/size rules. It omits prerequisites such as fetching a proofNonce and trading setup, which an agent needs before the first call.

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; the description earns one extra point by explaining how `orderSignature` and `nonce` are combined on the second call, a cross-parameter relationship no single schema field documents. It still adds nothing about the eight required auth parameters (walletSignature, proofNonce, idempotencyKey), which the schema covers on its own.

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

Purpose4/5

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

States a specific verb+resource ('Prepare or place a limit order') and immediately explains the two-phase nature of the operation via the `requiresSignature` union. It does not, however, distinguish itself from close siblings such as kellian_batch_place_orders, kellian_prepare_trade, or kellian_plan_pm_order, leaving the agent to infer which to choose.

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

Usage Guidelines3/5

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

The description clearly sequences the two call branches (call without signature to get typedData, then resubmit with orderSignature + nonce), which is real when-to-use guidance internal to the tool. But it offers no guidance on when to use this tool versus the many sibling order-entry tools (batch placement, trade intents, PM planning), and no explicit exclusions.

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