Server definition
- Hash
- sha256:b94e24560e7c5978bab2b85b2d66bd176880aa6d1876319c07d8447401ba59f3
- What it is
- What a remote MCP server returned when asked what it offers: 29 tools
The blob, as servednamed by its sha256
{
"instructions": "TronSave MCP — buy/sell/extend TRON resources (ENERGY, BANDWIDTH) on the TronSave market.\n\nNetworks (by endpoint): POST /mcp = mainnet, POST /testnet/mcp = testnet.\n\nAuth: call `tronsave_login` first, then send the returned `sessionId` as the `mcp-session-id` header on every later request. Two modes — (1) wallet SIGNATURE (preferred; required for platform tools): get a message via `tronsave_get_sign_message`, sign it client-side, submit `<signature>_<timestamp>`; (2) API KEY (`apiKey` param). Never send private keys to the server — signing is always client-side.\n\nTwo tool families:\n- Platform (`tronsave_*`, GraphQL market): public discovery (list/estimate/order book/min price) plus signature-session mutations (create/cancel/update order, auto-sell, API keys).\n- Internal (`tronsave_internal_*` + `tronsave_get_internal_account`, REST, api-key account): estimate, create order, history, details, order book, extend — scoped to your deposited internal balance.\n\nUnits: all prices are in SUN (1 TRX = 1,000,000 SUN). Durations are in seconds.\n\nFRESHNESS: market prices/availability change roughly every 3 seconds (one TRON block). Re-run an estimate/order-book read IMMEDIATELY before creating or updating an order; never reuse a quote more than a few seconds old.",
"tools": [
{
"description": "Cancel an open order by `orderId`. Returns the cancelled order payload after the status flip. Side effect: marks the order non-matchable and refunds locked balance per backend rules; effectively destructive on the live order. Idempotent — cancelling an already-cancelled order is a no-op success. Fails for fulfilled orders or unauthorized callers. Requires a signature session and `mcp-session-id`. Verify state with `tronsave_get_order` first; prefer `tronsave_update_order` when only price/receiver should change.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"orderId": {
"description": "Target order id (`MObjectId`) to cancel. Must be an active order owned/authorized by the current session; already-fulfilled or already-cancelled orders are expected to fail.",
"minLength": 1,
"type": "string"
}
},
"required": [
"orderId"
],
"type": "object"
},
"name": "tronsave_cancel_order",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message"
],
"type": "object"
}
},
{
"description": "Create a new buy order on the TronSave market. Key inputs: `orderResourceType` (ENERGY|BANDWIDTH), `orderReceiver` (TRON base58), `orderUnitPrice` in SUN (NOT TRX), `orderDurationSec`, `orderResourceAmount`, and `paymentMethod`: (1) `onchain` — requires a signed payment tx in `paymentSignedTx`; (2) `internal` — deducts from internal balance. Side effect: creates a live order matchable by the market. Requires a signature session and `mcp-session-id`. Always derive `orderUnitPrice` and `paymentPaymentAmount` from the latest `tronsave_estimate_buy_resource` for the same receiver, amount, and duration to avoid reverts. FRESHNESS: re-quote immediately before submitting — estimates older than a few seconds (one TRON block ≈ 3s) may be stale and cause the order to revert or fill at the wrong price.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"orderDurationSec": {
"description": "Delegation duration in seconds. Must match the `durationSec` used in `tronsave_estimate_buy_resource`.",
"exclusiveMinimum": 0,
"type": "number"
},
"orderReceiver": {
"description": "TRON base58 address (starts with T) that receives delegated resource. Same as `receiver` passed to `tronsave_estimate_buy_resource`.",
"minLength": 1,
"type": "string"
},
"orderResourceAmount": {
"description": "Amount of ENERGY or BANDWIDTH units to purchase. Same as `buyResourceAmount` in estimate when applicable.",
"exclusiveMinimum": 0,
"type": "number"
},
"orderResourceType": {
"description": "Resource to buy: ENERGY (smart contracts) or BANDWIDTH (transactions). Must match `tronsave_estimate_buy_resource`.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"orderUnitPrice": {
"description": "Unit price in SUN. Prefer aligning with `minResourcePrice` or `buyResourcePrice` from the latest `tronsave_estimate_buy_resource` for the same receiver, amount, and duration.",
"exclusiveMinimum": 0,
"type": "number"
},
"paymentMethod": {
"description": "Payment method for this order: `onchain` (wallet signed tx) or `internal` (internal balance).",
"enum": [
"onchain",
"internal"
],
"type": "string"
},
"paymentPaymentAmount": {
"description": "Payment amount in SUN. Prefer deriving from `tronsave_estimate_buy_resource`; if converting to TRX, divide SUN by `1e6`.",
"minimum": 0,
"type": "number"
},
"paymentSignedTx": {
"additionalProperties": {},
"description": "Required when `paymentMethod=onchain`. TronWeb-shaped signed TRON transaction (`{ txID, raw_data, raw_data_hex, signature[] }`). Must be produced client-side by the user's wallet; never fabricate or hand-edit.",
"properties": {
"raw_data": {
"additionalProperties": {},
"description": "Raw transaction body produced by TronWeb (`raw_data`).",
"properties": {
"contract": {
"description": "At least one TRON contract entry; shape varies by contract type.",
"items": {},
"minItems": 1,
"type": "array"
},
"expiration": {
"description": "Tx expiration (Unix epoch ms).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"ref_block_bytes": {
"description": "Reference block bytes (hex).",
"type": "string"
},
"ref_block_hash": {
"description": "Reference block hash (hex).",
"type": "string"
},
"timestamp": {
"description": "Tx timestamp (Unix epoch ms).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"contract",
"ref_block_bytes",
"ref_block_hash",
"expiration",
"timestamp"
],
"type": "object"
},
"raw_data_hex": {
"description": "Hex-encoded `raw_data` body.",
"pattern": "^[0-9a-fA-F]+$",
"type": "string"
},
"signature": {
"description": "Wallet signatures over `raw_data_hex`; usually a single hex string (130 chars for 65-byte secp256k1).",
"items": {
"minLength": 1,
"pattern": "^[0-9a-fA-F]+$",
"type": "string"
},
"minItems": 1,
"type": "array"
},
"txID": {
"description": "Transaction hash (64 hex chars, lowercase, no `0x` prefix).",
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-fA-F]+$",
"type": "string"
},
"visible": {
"description": "Whether addresses inside `raw_data.contract` are base58 (`true`) vs hex (`false`).",
"type": "boolean"
}
},
"required": [
"txID",
"raw_data",
"raw_data_hex",
"signature"
],
"type": "object"
}
},
"required": [
"orderResourceType",
"orderReceiver",
"orderUnitPrice",
"orderDurationSec",
"orderResourceAmount",
"paymentMethod",
"paymentPaymentAmount"
],
"type": "object"
},
"name": "tronsave_create_order",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"orderId": {
"description": "Newly created order id (`MObjectId`); pass to `tronsave_get_order` to inspect status.",
"type": "string"
}
},
"required": [
"orderId"
],
"type": "object"
},
{
"type": "null"
}
]
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message"
],
"type": "object"
}
},
{
"description": "Permanently delete one auto-buy rule by `id` (`MObjectId`). Side effect: stops all future executions matching that rule; the rule cannot be restored. Idempotent — deleting a non-existent or already-removed id returns success. Requires a signature session and `mcp-session-id`. Use `tronsave_get_user_auto_setting` to list current rules first; prefer disabling/updating instead when reversibility is desired.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "Auto-buy setting id (`MObjectId`) to delete.",
"minLength": 1,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "tronsave_delete_auto_buy_setting",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message"
],
"type": "object"
}
},
{
"description": "Quote price and availability for buying ENERGY or BANDWIDTH for a receiver address before placing an order. Returns estimated `unitPrice` (SUN per resource unit), `paymentAmount`, and availability fields used to populate `tronsave_create_order` inputs (`orderUnitPrice`, `paymentPaymentAmount`). Read-only and safe to call repeatedly; no session is required, but backend rate limits apply. FRESHNESS: this is live market data — `unitPrice`/availability can change roughly every 3 seconds (one TRON block). Re-run this estimate immediately before `tronsave_create_order` and never reuse a quote more than a few seconds old. For order-book depth use `tronsave_list_order_books`; for the minimum unit price only use `tronsave_get_min_price`.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"allowPartialFill": {
"description": "Allow partial fill of the order.",
"type": "boolean"
},
"buyResourceAmount": {
"description": "Amount of resource to buy. Default 100000 for ENERGY and 1000 for BANDWIDTH",
"type": "number"
},
"durationSec": {
"description": "Duration of the order in seconds. Default 15 minutes",
"type": "number"
},
"minResourceDelegateRequiredAmount": {
"description": "Minimum amount of resource to delegate.",
"type": "number"
},
"receiver": {
"description": "receiver address.",
"type": "string"
},
"resourceType": {
"default": "ENERGY",
"description": "Resource type to buy. Default ENERGY",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"unitPrice": {
"description": "Unit price in SUN.",
"type": "number"
}
},
"type": "object"
},
"name": "tronsave_estimate_buy_resource",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"availableResource": {
"description": "Available resource amount",
"type": "number"
},
"durationSec": {
"description": "Delegated duration in seconds",
"type": "number"
},
"estimateTrx": {
"description": "Estimated TRX cost in SUN",
"type": "number"
},
"systemDepositAddress": {
"description": "System deposit address for onchain payment",
"type": "string"
},
"unitPrice": {
"description": "Unit price in SUN",
"type": "number"
}
},
"required": [
"systemDepositAddress",
"unitPrice",
"durationSec",
"estimateTrx",
"availableResource"
],
"type": "object"
}
},
{
"description": "Generate a new internal API key credential for the current user. Returns `data` containing the issued key — store it securely and pass it to `tronsave_login` (`apiKey` mode) for internal-tool access. Side effect: issues secret material; not idempotent — each call mints a fresh key. If a previous key existed, treat it as rotated and stop using the old key once the new one is wired up. Requires a signature session and `mcp-session-id`. Sensitive output — never log raw keys; unauthorized sessions or policy checks may reject issuance.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "tronsave_generate_api_key",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"description": "For `generateApiKey`: the freshly issued internal API key — treat as SECRET, store securely. For `revokeApiKey`: server-defined confirmation string (no key material).",
"type": "string"
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message",
"data"
],
"type": "object"
}
},
{
"description": "Fetches the specific deposit address for the TronSave internal account. Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Trigger this tool if the user asks for a deposit address or needs to top up their TronSave TRX balance. Constraints: 1) TRX only; 2) Minimum deposit amount is 10 TRX; 3) Read-only operation.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"amountTrx": {
"description": "Amount of TRX to deposit",
"minimum": 10,
"type": "number"
}
},
"required": [
"amountTrx"
],
"type": "object"
},
"name": "tronsave_get_deposit_address",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"amountTrx": {
"description": "Amount of TRX to deposit",
"type": "number"
},
"depositAddress": {
"description": "TRON base58 deposit address, used for deposit TRX to TronSave internal account",
"type": "string"
}
},
"required": [
"depositAddress",
"amountTrx"
],
"type": "object"
}
},
{
"description": "Retrieve the TronSave internal account profile for the current session: represent address, deposit address, and balance (SUN). Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Use when the user needs their linked address, deposit address, or internal balance. This is the api-key internal account, not the on-chain wallet. Read-only; does not submit orders or change chain state. FRESHNESS: balance reflects live state and can change within seconds after deposits/orders.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "tronsave_get_internal_account",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"balance": {
"description": "Account balance in SUN (string).",
"type": "string"
},
"depositAddress": {
"description": "TRON base58 deposit address for funding the internal balance.",
"type": "string"
},
"id": {
"type": "string"
},
"representAddress": {
"description": "TRON base58 represent address (used as order requester).",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Quote the minimum unit price for a buy. Returns `{ minPrice }` (SUN per resource unit) from GraphQL `market.estimateMinPrice` for the given `resourceType`, `buyAmount`, and `durationSec`. Optional `address` scopes context when the API supports it. No login required; an optional session forwards auth like `tronsave_list_order_books`. Read-only and idempotent. FRESHNESS: live market data — `minPrice` can change roughly every 3 seconds; re-fetch right before placing an order and do not reuse a stale value. Pair with `tronsave_estimate_buy_resource` for full buy quotes and `tronsave_list_order_books` for depth buckets.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"address": {
"description": "Optional TRON base58 address (`TronAddress`). When omitted, the server uses anonymous/global market context.",
"type": "string"
},
"buyAmount": {
"description": "Resource amount to price (same units as order book / delegate amounts for that resource type). Default 100000 for ENERGY and 1000 for BANDWIDTH",
"exclusiveMinimum": 0,
"type": "number"
},
"durationSec": {
"default": 900,
"description": "Delegation window in seconds; must match the duration you plan to use on a real order for comparable quotes. Default 15 minutes",
"exclusiveMinimum": 0,
"type": "number"
},
"resourceType": {
"default": "ENERGY",
"description": "Market leg: `ENERGY` or `BANDWIDTH`. Default ENERGY",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
}
},
"type": "object"
},
"name": "tronsave_get_min_price",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"minPrice": {
"description": "Estimated minimum unit price in SUN for the given `resourceType`, `buyAmount`, and `durationSec`; align with `tronsave_estimate_buy_resource` and order `unitPrice` conventions (same as GraphQL `market.estimateMinPrice`).",
"type": "number"
}
},
"required": [
"minPrice"
],
"type": "object"
}
},
{
"description": "Read one order by `id` and return its full snapshot for NORMAL, FAST, or EXTEND order types. Use this as the source of truth before `tronsave_update_order`, `tronsave_sell_order_manual`, or `tronsave_cancel_order` to avoid acting on stale state. FRESHNESS: order state can change within seconds as the market matches — re-read immediately before each mutation instead of reusing an earlier snapshot. Requires a signature session and `mcp-session-id`. Read-only and idempotent.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "Target order id (`MObjectId`) to inspect. Use this to confirm current status/price before update, sell, or cancel actions.",
"minLength": 1,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "tronsave_get_order",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"order": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"apy": {
"description": "Annualized yield hint as returned by the API (see TronSave semantics).",
"type": "number"
},
"createdAt": {
"description": "Order creation time (ISO-8601).",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"durationSec": {
"description": "Delegation duration in seconds.",
"type": "number"
},
"id": {
"description": "Order id (`MObjectId`); use with `tronsave_get_order` or mutate tools.",
"type": "string"
},
"isMatching": {
"description": "Whether this order matches the viewer/matching filter used in the query.",
"type": "boolean"
},
"isOwner": {
"description": "Whether the list query’s viewer context treats this row as owned by `myAddress`.",
"type": "boolean"
},
"receiver": {
"additionalProperties": false,
"description": "Receiver wallet and related party info for the delegation leg.",
"properties": {
"address": {
"description": "TRON base58 address for this party.",
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
"remainAmount": {
"description": "Resource not yet consumed or remaining to fulfill.",
"type": "number"
},
"requester": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"address": {
"description": "TRON base58 address for this party.",
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "Requester party when present."
},
"resourceAmount": {
"description": "Original resource amount on the order.",
"type": "number"
},
"resourceType": {
"description": "`ENERGY` or `BANDWIDTH`.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"typeOrder": {
"description": "Market order flavor.",
"enum": [
"NORMAL",
"FAST",
"EXTEND"
],
"type": "string"
},
"unitPrice": {
"description": "Unit price in SUN.",
"type": "number"
}
},
"required": [
"id",
"receiver",
"resourceType",
"resourceAmount",
"remainAmount",
"durationSec",
"isOwner",
"isMatching",
"apy",
"unitPrice",
"createdAt",
"typeOrder"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"order"
],
"type": "object"
}
},
{
"description": "Issue a wallet-signable timestamp message helper for signature login. Returns `{ message, timestamp }`: sign `message` exactly client-side, then submit `<signature>_<timestamp>` to `tronsave_login` (signature mode). Optional helper only — clients may also sign their own timestamp payload directly as long as it matches the `signature_timestamp` format expected by `tronsave_login`.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "tronsave_get_sign_message",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"message": {
"description": "Hex-encoded nonce message to sign client-side with the user's TRON wallet. The signature must be produced over THIS exact message (case-sensitive).",
"type": "string"
},
"timestamp": {
"description": "Unix epoch seconds corresponding to `message`. Pair it with the wallet signature in `<signature>_<timestamp>` form when calling `tronsave_login` (signature mode). This endpoint is a convenience helper; clients may provide their own timestamp payload as well.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"message",
"timestamp"
],
"type": "object"
}
},
{
"description": "Read the current user's auto-sell configuration (`autoSettings`). Returns the full `autoSettings` object — call this before `tronsave_register_auto_sell` or `tronsave_update_auto_sell_setting` to avoid overwriting fields you do not intend to change. Requires a signature session and `mcp-session-id`. Read-only and idempotent.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "tronsave_get_user_auto_setting",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bandwidth": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"isAcceptExtended": {
"description": "Whether incoming extend-style matches are accepted for this leg.",
"type": "boolean"
},
"isActive": {
"description": "Whether auto-sell is currently active for this resource leg.",
"type": "boolean"
},
"maintainUnDelegate": {
"description": "Buffer of undelegated resource the seller keeps reserved.",
"type": "number"
},
"maxDelegateDurationSec": {
"description": "Upper bound of accepted delegation duration in seconds.",
"type": "number"
},
"minDelegateAmount": {
"description": "Minimum per-delegation resource amount accepted by auto matches.",
"type": "number"
},
"minDelegateDurationSec": {
"description": "Lower bound of accepted delegation duration in seconds.",
"type": "number"
},
"minPrice": {
"description": "Minimum unit price the seller accepts for auto matches (SUN per resource unit).",
"type": "number"
},
"profitShare": {
"description": "Profit share percentage for this resource leg.",
"type": "number"
}
},
"required": [
"isActive",
"minPrice",
"minDelegateAmount",
"maintainUnDelegate",
"profitShare",
"minDelegateDurationSec",
"maxDelegateDurationSec",
"isAcceptExtended"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "Bandwidth auto-sell pool snapshot; null when bandwidth automation is disabled."
},
"energy": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"isAcceptExtended": {
"description": "Whether incoming extend-style matches are accepted for this leg.",
"type": "boolean"
},
"isActive": {
"description": "Whether auto-sell is currently active for this resource leg.",
"type": "boolean"
},
"maintainUnDelegate": {
"description": "Buffer of undelegated resource the seller keeps reserved.",
"type": "number"
},
"maxDelegateDurationSec": {
"description": "Upper bound of accepted delegation duration in seconds.",
"type": "number"
},
"minDelegateAmount": {
"description": "Minimum per-delegation resource amount accepted by auto matches.",
"type": "number"
},
"minDelegateDurationSec": {
"description": "Lower bound of accepted delegation duration in seconds.",
"type": "number"
},
"minPrice": {
"description": "Minimum unit price the seller accepts for auto matches (SUN per resource unit).",
"type": "number"
},
"profitShare": {
"description": "Profit share percentage for this resource leg.",
"type": "number"
}
},
"required": [
"isActive",
"minPrice",
"minDelegateAmount",
"maintainUnDelegate",
"profitShare",
"minDelegateDurationSec",
"maxDelegateDurationSec",
"isAcceptExtended"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "Energy auto-sell pool snapshot; null when energy automation is disabled."
},
"permitOperations": {
"anyOf": [
{
"items": {
"additionalProperties": false,
"properties": {
"id": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Backend-assigned permission row id; null when not yet persisted."
},
"operations": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Numeric operation codes enabled for this row; semantics defined by the backend."
},
"permissionName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable permission name; meant for display rather than equality checks."
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Permission category as labelled by the backend (e.g. role/scope tag)."
}
},
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Permission rows enabled for this user; null/empty when no automation has been configured."
},
"reclaimOnlyTronSave": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Reclaim flag — when `true`, only TronSave-managed delegations are reclaimed automatically."
},
"suggestSell": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Whether suggest-sell UX hints are enabled."
},
"vote": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Whether vote-related automation is enabled for the wallet."
},
"withdrawVote": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Withdraw-vote configuration as a backend-defined string; semantics from TronSave docs."
}
},
"type": "object"
}
},
{
"description": "Read the current authenticated user's profile and linked TronSave internal account. Returns `{ caller, address, balance (SUN string), info, internalAccount }` — `info` carries referral/contact metadata and may be null; `internalAccount` is null when the wallet has not provisioned a TronSave internal balance yet. Requires a signature session from `tronsave_login` and `mcp-session-id`. Read-only and idempotent. Use `tronsave_get_user_auto_setting` for the auto-sell config or `tronsave_get_user_permissions` for permission flags when the full profile is unnecessary.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "tronsave_get_user_info",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"address": {
"description": "TRON base58 address",
"type": "string"
},
"balance": {
"description": "Amount in SUN, onchain balance of the address",
"type": "string"
},
"caller": {
"description": "TRON base58 address of the caller",
"type": "string"
},
"info": {
"anyOf": [
{
"additionalProperties": false,
"description": "user information",
"properties": {
"contacts": {
"items": {
"additionalProperties": false,
"properties": {
"contactId": {
"description": "Contact id",
"type": "string"
},
"isActive": {
"description": "Whether the contact is active",
"type": "boolean"
},
"isVerify": {
"description": "Whether the contact is verified",
"type": "boolean"
},
"type": {
"enum": [
"EMAIL",
"PHONE",
"TELEGRAM",
"WECHAT"
],
"type": "string"
},
"username": {
"description": "Username",
"type": "string"
}
},
"required": [
"type",
"contactId",
"isActive",
"isVerify",
"username"
],
"type": "object"
},
"type": "array"
},
"createdBotCount": {
"description": "Number of bots created by the user",
"type": "number"
},
"pendingRefCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Pending ref code"
},
"rank": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Rank"
},
"remainRefBonus": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Remain ref bonus"
},
"sponsor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Sponsor"
},
"totalPendingRef": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Total pending ref"
},
"totalRef": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Total ref"
},
"totalRefBonus": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Total ref bonus"
},
"userRefCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "User ref code"
},
"whitelistLevel": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Whitelist level"
}
},
"required": [
"createdBotCount",
"contacts",
"whitelistLevel",
"userRefCode",
"sponsor",
"pendingRefCode",
"totalRef",
"totalPendingRef",
"totalRefBonus",
"remainRefBonus",
"rank"
],
"type": "object"
},
{
"type": "null"
}
]
},
"internalAccount": {
"anyOf": [
{
"additionalProperties": false,
"description": "Internal account information; null when the wallet has not provisioned a TronSave internal account yet.",
"properties": {
"apiKey": {
"description": "Current internal API key associated with this account; treat as sensitive credential material.",
"type": "string"
},
"balance": {
"description": "Internal-account balance as a decimal string in SUN (BigInt-safe; TRX = SUN / 1e6).",
"type": "string"
},
"depositAddress": {
"description": "TRON base58 deposit address used for depositing TRX to the TronSave internal balance.",
"type": "string"
}
},
"required": [
"depositAddress",
"balance",
"apiKey"
],
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"caller",
"address",
"balance",
"info",
"internalAccount"
],
"type": "object"
}
},
{
"description": "Read the enabled permission operations (`autoSettings.permitOperations`) for the authenticated user. Returns `{ permitOperations: string[] }` — use it before mutating auto-sell or auto-buy rules to confirm the action is allowed for the wallet. Requires a signature session and `mcp-session-id`. Read-only and idempotent.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "tronsave_get_user_permissions",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"permitOperations": {
"default": [],
"description": "Permission rows enabled for this user; defaults to `[]` when nothing is configured.",
"items": {
"additionalProperties": false,
"properties": {
"id": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Backend-assigned permission row id; null when not yet persisted."
},
"operations": {
"anyOf": [
{
"items": {
"type": "number"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Numeric operation codes enabled for this row; semantics defined by the backend."
},
"permissionName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable permission name; meant for display rather than equality checks."
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Permission category as labelled by the backend (e.g. role/scope tag)."
}
},
"type": "object"
},
"type": "array"
}
},
"required": [
"permitOperations"
],
"type": "object"
}
},
{
"description": "Submit an extension request for existing delegated resources on TronSave, paid from the internal account. Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Side effect: SPENDS internal TRX and creates an extension order; not idempotent. Use as STEP 2 after `tronsave_internal_extend_delegates` — pass its `extendData` rows unchanged. Returns `{ orderId }` for the new extension order.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"extendData": {
"description": "Rows copied from `extendData` returned by `tronsave_internal_extend_delegates`.",
"items": {
"properties": {
"delegator": {
"description": "TRON base58 delegator address.",
"minLength": 1,
"type": "string"
},
"extendTo": {
"description": "Target end time as Unix epoch milliseconds, matching internal.extend.delegates.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"extraAmount": {
"description": "Additional resource amount to add (resource units).",
"minimum": 0,
"type": "number"
},
"isExtend": {
"description": "Whether to extend this delegation row.",
"type": "boolean"
}
},
"required": [
"delegator",
"isExtend",
"extraAmount",
"extendTo"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"receiver": {
"description": "TRON base58 address of the account that receives the delegated resource.",
"minLength": 1,
"type": "string"
},
"resourceType": {
"description": "Resource type. Default ENERGY when omitted.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
}
},
"required": [
"receiver",
"extendData"
],
"type": "object"
},
"name": "tronsave_internal_create_extend_request",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"orderId": {
"description": "TronSave order ID (hex string) of the created/extension order.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Return extendable delegations for a receiver plus an `extendData` payload for the extension flow. Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Use as STEP 1 before `tronsave_internal_create_extend_request` when the user wants to extend existing delegation time. Read-only; does not submit anything. FRESHNESS: pricing/availability change within seconds — run immediately before extending and pass the returned `extendData` unchanged.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"extendTo": {
"description": "Target end time as Unix epoch milliseconds (UTC) for the extended delegation.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"maxPriceAccepted": {
"description": "Maximum unit price in SUN you are willing to pay for the extension.",
"minimum": 0,
"type": "number"
},
"receiver": {
"description": "TRON base58 address of the account that receives the delegated resource.",
"minLength": 1,
"type": "string"
},
"requester": {
"description": "TRON base58 requester; defaults to the API key account when omitted.",
"type": "string"
},
"resourceType": {
"description": "Resource type. Default ENERGY when omitted.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
}
},
"required": [
"receiver",
"extendTo"
],
"type": "object"
},
"name": "tronsave_internal_extend_delegates",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"extendData": {
"anyOf": [
{
"items": {
"additionalProperties": false,
"properties": {
"delegator": {
"description": "TRON base58 delegator address.",
"minLength": 1,
"type": "string"
},
"extendTo": {
"description": "Target end time as Unix epoch milliseconds, matching internal.extend.delegates.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"extraAmount": {
"description": "Additional resource amount to add (resource units).",
"minimum": 0,
"type": "number"
},
"isExtend": {
"description": "Whether to extend this delegation row.",
"type": "boolean"
}
},
"required": [
"delegator",
"isExtend",
"extraAmount",
"extendTo"
],
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Delegations to extend; pass unchanged into internal_create_extend_request `extendData`."
},
"extendOrderBook": {
"description": "Order book for extend.",
"items": {
"additionalProperties": {},
"properties": {
"availableResourceAmount": {
"description": "Available resource amount at this price level.",
"type": "number"
},
"price": {
"description": "Price in SUN.",
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"isAbleToExtend": {
"description": "Whether balance is sufficient to extend.",
"type": "boolean"
},
"totalAvailableExtendAmount": {
"description": "Total available amount to extend.",
"type": "number"
},
"totalDelegateAmount": {
"description": "Total delegated resource amount.",
"type": "number"
},
"totalEstimateTrx": {
"description": "Total estimated TRX cost in SUN.",
"type": "number"
},
"yourBalance": {
"description": "Current account balance in SUN.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Return the current TronSave market depth/price tiers for ENERGY or BANDWIDTH via the api-key REST endpoint. Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Use before `tronsave_internal_order_create` or `tronsave_internal_order_estimate` when the user needs live prices or liquidity. Read-only. FRESHNESS: live market depth can change roughly every 3 seconds (one TRON block) — re-read immediately before placing an order.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"address": {
"description": "Optional TRON base58 address filter for the receiver.",
"type": "string"
},
"durationSec": {
"description": "Delegation duration window in seconds for the quote.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"minDelegateAmount": {
"description": "Minimum resource amount per offer level to include (resource units, not SUN).",
"minimum": 0,
"type": "number"
},
"resourceType": {
"description": "Resource type. Default ENERGY when omitted.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
}
},
"type": "object"
},
"name": "tronsave_internal_order_book",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"availableResource": {
"description": "Available resource at the quoted tiers.",
"type": "number"
},
"data": {
"description": "Order book entries sorted by price.",
"items": {
"additionalProperties": {},
"properties": {
"availableResourceAmount": {
"description": "Available resource amount at this price level.",
"type": "number"
},
"price": {
"description": "Price in SUN.",
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"fast": {
"description": "FAST price tier (SUN).",
"type": "number"
},
"medium": {
"description": "MEDIUM price tier (SUN).",
"type": "number"
},
"slow": {
"description": "SLOW price tier (SUN).",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Place a new buy order for ENERGY or BANDWIDTH on TronSave, paid from the internal account balance. Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Side effect: SPENDS internal TRX balance and creates a live order; not idempotent — each call places a new order. This is the api-key/internal path; for the signature-session market path use `tronsave_create_order`. Always derive `unitPrice` from the latest `tronsave_internal_order_estimate` (re-estimate immediately before submitting — quotes older than a few seconds may be stale and revert). Returns `{ orderId }`.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"durationSec": {
"description": "Delegation duration in seconds. Default 259200 (3 days) when omitted.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"options": {
"description": "Optional execution guards and fill behavior.",
"properties": {
"allowPartialFill": {
"description": "Allow partial fill. Default true when omitted.",
"type": "boolean"
},
"maxPriceAccepted": {
"description": "Maximum unit price in SUN you accept.",
"minimum": 0,
"type": "number"
},
"minResourceDelegateRequiredAmount": {
"description": "Minimum resource amount per matching provider (resource units).",
"minimum": 0,
"type": "number"
},
"onlyCreateWhenFulfilled": {
"description": "Only create if the order can be 100% fulfilled. Default false when omitted.",
"type": "boolean"
},
"preventDuplicateIncompleteOrders": {
"description": "Skip if an identical pending order already exists. Default false when omitted.",
"type": "boolean"
}
},
"type": "object"
},
"receiver": {
"description": "TRON base58 address that will receive the resource.",
"minLength": 1,
"type": "string"
},
"resourceAmount": {
"description": "Amount of resource to purchase (resource units).",
"exclusiveMinimum": 0,
"type": "number"
},
"resourceType": {
"description": "Resource type. Default ENERGY when omitted.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"sponsor": {
"description": "Optional sponsor or referral code.",
"type": "string"
},
"unitPrice": {
"anyOf": [
{
"enum": [
"FAST",
"MEDIUM",
"SLOW"
],
"type": "string"
},
{
"type": "number"
}
],
"description": "Pricing: FAST | MEDIUM | SLOW strategy, or exact unit price in SUN per resource unit. Default MEDIUM when omitted."
}
},
"required": [
"resourceAmount",
"receiver"
],
"type": "object"
},
"name": "tronsave_internal_order_create",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"orderId": {
"description": "TronSave order ID (hex string) of the created/extension order.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Fetch full details for one internal-account order by order ID. Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Use when monitoring fulfillment after `tronsave_internal_order_create`, or when the user asks for status on a specific order id. Read-only. FRESHNESS: order state changes within seconds as the market matches — re-read immediately before acting.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"orderId": {
"description": "TronSave order ID (hex string), e.g. value returned in internal.order.create response data.orderId.",
"minLength": 1,
"type": "string"
}
},
"required": [
"orderId"
],
"type": "object"
},
"name": "tronsave_internal_order_details",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"allowPartialFill": {
"description": "Whether partial fill is allowed.",
"type": "boolean"
},
"createdAt": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"description": "Order created time (Unix epoch ms or ISO-8601, endpoint-dependent)."
},
"delegates": {
"description": "Delegations fulfilling this order.",
"items": {
"additionalProperties": {},
"properties": {
"amount": {
"description": "Delegated resource amount.",
"type": "number"
},
"delegator": {
"description": "TRON base58 address of delegator.",
"type": "string"
},
"txid": {
"description": "Transaction ID on TRON network.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"durationSec": {
"description": "Delegated duration in seconds.",
"type": "number"
},
"fulfilledPercent": {
"description": "0 = pending, 1-99 = partial, 100 = fully matched.",
"type": "number"
},
"id": {
"description": "TronSave order ID (hex string).",
"type": "string"
},
"orderType": {
"description": "Order type (NORMAL | FAST | EXTEND).",
"type": "string"
},
"payoutAmount": {
"description": "Payout amount in SUN.",
"type": "number"
},
"price": {
"description": "Unit price in SUN.",
"type": "number"
},
"receiver": {
"description": "TRON base58 receiver address.",
"type": "string"
},
"remainAmount": {
"description": "Remaining unfulfilled amount.",
"type": "number"
},
"requester": {
"description": "TRON base58 requester address.",
"type": "string"
},
"resourceAmount": {
"description": "Resource amount of order.",
"type": "number"
},
"resourceType": {
"description": "Resource type.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"status": {
"description": "Order status.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Estimate the TRX cost and availability for a buy order before submitting it (api-key internal account). Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Use when the user wants a quote or price check; feed the result into `tronsave_internal_order_create`. Read-only. FRESHNESS: `unitPrice`/`estimateTrx` are live and can change roughly every 3 seconds — re-estimate immediately before creating the order.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"durationSec": {
"description": "Delegation duration in seconds. Default 259200 (3 days) when omitted.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"options": {
"description": "Optional flags that affect matching behavior for the estimate.",
"properties": {
"allowPartialFill": {
"description": "Allow partial fill so the order can match partially. Default true when omitted.",
"type": "boolean"
}
},
"type": "object"
},
"receiver": {
"description": "TRON base58 address that will receive the resource.",
"type": "string"
},
"requester": {
"description": "TRON base58 requester; defaults to the API key account when omitted.",
"type": "string"
},
"resourceAmount": {
"description": "Amount of resource to purchase (resource units).",
"exclusiveMinimum": 0,
"type": "number"
},
"resourceType": {
"description": "Resource type. Default ENERGY when omitted.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"unitPrice": {
"anyOf": [
{
"enum": [
"FAST",
"MEDIUM",
"SLOW"
],
"type": "string"
},
{
"type": "number"
}
],
"description": "Pricing: FAST | MEDIUM | SLOW strategy, or exact unit price in SUN per resource unit. Default MEDIUM when omitted."
}
},
"required": [
"resourceAmount"
],
"type": "object"
},
"name": "tronsave_internal_order_estimate",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"availableResource": {
"description": "Available resource amount.",
"type": "number"
},
"durationSec": {
"description": "Delegated duration in seconds.",
"type": "number"
},
"estimateTrx": {
"description": "Estimated TRX cost in SUN.",
"type": "number"
},
"unitPrice": {
"description": "Unit price in SUN.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "List paginated order history for the internal account linked to the API key, newest first. Requires a logged-in MCP session created by the `tronsave_login` tool: include `mcp-session-id: <sessionId>` returned by `tronsave_login` on subsequent MCP requests. Internal tools never accept API keys via tool arguments; signature sessions resolve the latest internal API key on demand, while api-key sessions reuse the validated key from login. Use when the user asks about past purchases, fulfillment, payouts, or delegates on their internal account. Read-only. Pair with `tronsave_internal_order_details` for a single order's full snapshot.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"page": {
"description": "Page index, 0-based. Omit for first page (default 0).",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"pageSize": {
"description": "Orders per page. Default 10 when omitted. Typical range 1–100.",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "tronsave_internal_order_history",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {},
"properties": {
"data": {
"description": "Orders on this page, newest first.",
"items": {
"additionalProperties": {},
"properties": {
"allowPartialFill": {
"description": "Whether partial fill is allowed.",
"type": "boolean"
},
"createdAt": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"description": "Order created time (Unix epoch ms or ISO-8601, endpoint-dependent)."
},
"delegates": {
"description": "Delegations fulfilling this order.",
"items": {
"additionalProperties": {},
"properties": {
"amount": {
"description": "Delegated resource amount.",
"type": "number"
},
"delegator": {
"description": "TRON base58 address of delegator.",
"type": "string"
},
"txid": {
"description": "Transaction ID on TRON network.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"durationSec": {
"description": "Delegated duration in seconds.",
"type": "number"
},
"fulfilledPercent": {
"description": "0 = pending, 1-99 = partial, 100 = fully matched.",
"type": "number"
},
"id": {
"description": "TronSave order ID (hex string).",
"type": "string"
},
"orderType": {
"description": "Order type (NORMAL | FAST | EXTEND).",
"type": "string"
},
"payoutAmount": {
"description": "Payout amount in SUN.",
"type": "number"
},
"price": {
"description": "Unit price in SUN.",
"type": "number"
},
"receiver": {
"description": "TRON base58 receiver address.",
"type": "string"
},
"remainAmount": {
"description": "Remaining unfulfilled amount.",
"type": "number"
},
"requester": {
"description": "TRON base58 requester address.",
"type": "string"
},
"resourceAmount": {
"description": "Resource amount of order.",
"type": "number"
},
"resourceType": {
"description": "Resource type.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"status": {
"description": "Order status.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"total": {
"description": "Total orders matching the query (for pagination).",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "List extendable delegate candidates for a `receiver` and `resourceType` (ENERGY|BANDWIDTH). Optional `suggestData` scores an extend-and-buy scenario for planning purposes. Read-only; does NOT create orders or change on-chain state. Works without `mcp-session-id`; when a session is present, auth is forwarded so results can reflect the logged-in account where supported. NOTE: this is GraphQL market data for discovery only. To actually submit an extension, call the authenticated REST `POST /v2/get-extendable-delegates` with `extendData` (payload shape differs from this GraphQL response).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"receiver": {
"description": "TRON base58 address (typically starts with `T`) that currently receives or will receive the delegated resource. This is the primary filter: the response describes delegates relevant to extending that account's delegation.",
"minLength": 1,
"type": "string"
},
"requester": {
"description": "Optional TRON base58 address of the viewing/requesting party. When an MCP session is active, the server may still derive identity from auth headers; use this when the API expects an explicit requester string distinct from the receiver.",
"type": "string"
},
"resourceType": {
"description": "Which resource market leg to query: `ENERGY` for contract execution headroom, `BANDWIDTH` for transaction bandwidth. Must match how you plan to extend or buy.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"suggestData": {
"description": "Optional nested scenario for extend-and-buy suggestion scoring. If omitted, the query returns delegate rows without that hypothetical. If provided, supply all four fields together; partial objects are invalid for typical GraphQL input shapes.",
"properties": {
"extendAmount": {
"description": "Hypothetical amount of existing delegation to extend (resource units matching `resourceType`).",
"type": "number"
},
"extendTo": {
"description": "Target end time for the extended delegation window, as Unix epoch milliseconds (UTC); align with TronSave REST extend flows when comparing suggest windows.",
"type": "number"
},
"extraBuyAmount": {
"description": "Hypothetical extra ENERGY or BANDWIDTH units to buy beyond simple extension; units match `resourceType`, not SUN.",
"type": "number"
},
"maxPrice": {
"description": "Maximum unit price in SUN the user is willing to pay for the suggested extend/buy path; used for server-side scoring, not a live order placement by itself.",
"type": "number"
}
},
"required": [
"extendTo",
"extraBuyAmount",
"extendAmount",
"maxPrice"
],
"type": "object"
}
},
"required": [
"receiver",
"resourceType"
],
"type": "object"
},
"name": "tronsave_list_extendable_delegates",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"extendableDelegates": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"data": {
"anyOf": [
{
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Delegate amount associated with this row (resource units)."
},
"availableExtendAt": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Earliest time at which extension becomes available for this row."
},
"availableResource": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Resource still available from this delegate for matching/extension."
},
"extendPrice": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Indicative unit price or price component for extending this row (SUN unless API documents otherwise)."
},
"isExtendable": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Whether this delegate entry can be extended under current rules."
},
"minTimeExtendTo": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Minimum end time boundary required before extension is allowed."
},
"reason": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Human-readable reasons when extension is blocked or conditional."
},
"reclaimTime": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Timestamp related to reclaim/unlock timing when relevant."
}
},
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Per-delegator or per-offer rows backing the aggregates above; may be empty when nothing is extendable."
},
"maxExtendAmount": {
"description": "Largest extendable resource amount (units) aggregated for this query.",
"type": "number"
},
"minExtendRequired": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Minimum resource amount the market requires to treat an extension as valid, if applicable."
},
"overBuyAmount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Amount considered in excess of a simple extend-only path when `suggestData` implies extra buy."
},
"overBuyAmountAvailable": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "How much of the over-buy amount is currently matchable."
},
"overBuyAmountMaxAvailable": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Upper cap for over-buy availability under current book conditions."
},
"overBuyPrice": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Price facet associated with the over-buy leg (SUN-related aggregate; exact semantics from TronSave API)."
},
"totalAvailableExtraBuyAmount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Capacity hint for additional buy amount on top of extension under current market state."
}
},
"required": [
"maxExtendAmount"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "Null when the market has no payload or GraphQL returned no branch; check tool-level errors for hard failures."
}
},
"required": [
"extendableDelegates"
],
"type": "object"
}
},
{
"description": "Read market depth buckets for `ENERGY` or `BANDWIDTH`. Returns price buckets `{ min, max, value }` optionally scoped by viewer address, minimum delegate amount, and duration. No login required; read-only and idempotent. FRESHNESS: live market depth — buckets can shift roughly every 3 seconds; re-read immediately before acting on a price. Use this to estimate market ranges before create/update decisions; pair with `tronsave_estimate_buy_resource` for quote-style buy estimation and `tronsave_get_order` for one concrete order.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"address": {
"description": "Optional viewer/requester wallet context.",
"type": "string"
},
"durationSec": {
"description": "Optional delegation duration filter in seconds.",
"type": "number"
},
"minDelegateAmount": {
"description": "Optional minimum delegate amount floor for bucket filtering.",
"type": "number"
},
"resourceType": {
"description": "Order-book side to query (`ENERGY` or `BANDWIDTH`).",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
}
},
"required": [
"resourceType"
],
"type": "object"
},
"name": "tronsave_list_order_books",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"orderBook": {
"items": {
"additionalProperties": false,
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"value": {
"type": "number"
}
},
"required": [
"min",
"max",
"value"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"orderBook"
],
"type": "object"
}
},
{
"description": "Query the order list with paging. Returns `{ orders: [{ id, requester?.address, receiver.address, resourceType, resourceAmount, remainAmount, durationSec, unitPrice (SUN), isOwner, isMatching, apy, createdAt, typeOrder (NORMAL|FAST|EXTEND) }] }`. Filter `status` maps to GraphQL `isFulfilled`: `ACTIVE` → `UNFULFILLED`, `COMPLETED` → `FULFILLED`. Set `onlyMyOrder=true` (requires signature login + `mcp-session-id`) to scope to the caller's wallet as requester. Paging uses `offset`/`limit`. Use `tronsave_get_order` with an `id` for one full snapshot before mutating an order.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"isOnlyMyOrder": {
"description": "When `true`, only orders whose `requester` is the wallet from the signature session; include `mcp-session-id`. Api-key-only sessions have no wallet address and cannot use this filter. When `false` or omitted, return all orders on the market (no requester filter).",
"type": "boolean"
},
"limit": {
"description": "Maximum rows to return in one call. Prefer modest limits to avoid huge payloads; page with `offset`.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Zero-based row offset for page N (skip first `offset` matches). Omit when starting from the first page.",
"maximum": 200,
"minimum": 0,
"type": "integer"
},
"resourceType": {
"description": "Restrict to `ENERGY` or `BANDWIDTH` orders; omit for both.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"status": {
"description": "Lifecycle filter mapped to GraphQL `isFulfilled`: `ACTIVE` → `UNFULFILLED` (not yet fulfilled), `COMPLETED` → `FULFILLED`.",
"enum": [
"ACTIVE",
"COMPLETED"
],
"type": "string"
}
},
"type": "object"
},
"name": "tronsave_list_orders",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"orders": {
"description": "Matching orders for this page; may be large—use pagination inputs to chunk.",
"items": {
"additionalProperties": false,
"properties": {
"apy": {
"description": "Annualized yield hint as returned by the API (see TronSave semantics).",
"type": "number"
},
"createdAt": {
"description": "Order creation time (ISO-8601).",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"durationSec": {
"description": "Delegation duration in seconds.",
"type": "number"
},
"id": {
"description": "Order id (`MObjectId`); use with `tronsave_get_order` or mutate tools.",
"type": "string"
},
"isMatching": {
"description": "Whether this order matches the viewer/matching filter used in the query.",
"type": "boolean"
},
"isOwner": {
"description": "Whether the list query’s viewer context treats this row as owned by `myAddress`.",
"type": "boolean"
},
"receiver": {
"additionalProperties": false,
"description": "Receiver wallet and related party info for the delegation leg.",
"properties": {
"address": {
"description": "TRON base58 address for this party.",
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
"remainAmount": {
"description": "Resource not yet consumed or remaining to fulfill.",
"type": "number"
},
"requester": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"address": {
"description": "TRON base58 address for this party.",
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "Requester party when present."
},
"resourceAmount": {
"description": "Original resource amount on the order.",
"type": "number"
},
"resourceType": {
"description": "`ENERGY` or `BANDWIDTH`.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
},
"typeOrder": {
"description": "Market order flavor.",
"enum": [
"NORMAL",
"FAST",
"EXTEND"
],
"type": "string"
},
"unitPrice": {
"description": "Unit price in SUN.",
"type": "number"
}
},
"required": [
"id",
"receiver",
"resourceType",
"resourceAmount",
"remainAmount",
"durationSec",
"isOwner",
"isMatching",
"apy",
"unitPrice",
"createdAt",
"typeOrder"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"orders"
],
"type": "object"
}
},
{
"description": "Authenticate with TronSave and create a server session. Returns `{ sessionId, walletAddress?, expiresAt }` — pass `sessionId` as the `mcp-session-id` header on every subsequent MCP request. `walletAddress` is set only for signature-mode logins. Two modes: (1) wallet signature (preferred for platform tools) — call this tool with `signature_timestamp` formatted as `<signature>_<timestamp>`, where `<signature>` must be produced client-side by signing the timestamp message; you may optionally call `tronsave_get_sign_message` to obtain a helper message/timestamp pair; (2) API key (internal tools) — pass `apiKey` (raw key, no prefix). Side effect: creates a new session on the server. Wallet signing must happen client-side; never send private keys to the server.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"apiKey": {
"description": "Raw API key for internal-tools login. Provide EXACTLY ONE of `apiKey` or `signature`.",
"minLength": 1,
"type": "string"
},
"signature": {
"description": "Signature token in `signature_timestamp` format (timestamp is the signed message). Provide EXACTLY ONE of `apiKey` or `signature`.",
"minLength": 1,
"type": "string"
}
},
"type": "object"
},
"name": "tronsave_login",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"expiresAt": {
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"type": "string"
},
"sessionId": {
"description": "Session id to pass as mcp-session-id in subsequent calls.",
"type": "string"
},
"walletAddress": {
"type": "string"
}
},
"required": [
"sessionId",
"expiresAt"
],
"type": "object"
}
},
{
"description": "Create the initial auto-sell configuration for the authenticated user. Returns the persisted `autoSettings` payload. Side effect: persists automation settings that affect future delegation/sell behavior; not idempotent — calling twice may reset fields. Requires a signature session and `mcp-session-id`. Use for FIRST-TIME setup only; for subsequent edits use `tronsave_update_auto_sell_setting`, and always read the current state with `tronsave_get_user_auto_setting` first to avoid overwriting unknown fields. Fails for invalid config combinations, unauthorized sessions, or backend policy restrictions.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"addOnFeature": {
"properties": {
"stake": {
"description": "Optional auto-stake policy.",
"properties": {
"minAmount": {
"description": "Minimum TRX (sun semantics per API) for auto-stake trigger.",
"type": "number"
},
"remainBalance": {
"description": "TRX balance floor to preserve after staking.",
"type": "number"
},
"resourceStake": {
"description": "Whether auto-stake targets ENERGY or BANDWIDTH.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
}
},
"required": [
"minAmount",
"remainBalance",
"resourceStake"
],
"type": "object"
},
"suggestSell": {
"description": "Enable suggest-sell UX hints.",
"type": "boolean"
},
"vote": {
"description": "Enable vote-related automation when supported.",
"type": "boolean"
},
"withdrawVote": {
"description": "GraphQL Float input for withdraw-vote configuration.",
"type": "number"
}
},
"type": "object"
},
"paymentConfig": {
"properties": {
"paymentAddress": {
"description": "TRON address that receives payouts.",
"minLength": 1,
"type": "string"
},
"paymentFrequency": {
"description": "DAILY vs IMMEDIATE settlement rhythm.",
"enum": [
"DAILY",
"IMMEDIATE"
],
"type": "string"
},
"paymentMode": {
"description": "FIXED vs RANDOM payout mode when applicable.",
"enum": [
"FIXED",
"RANDOM"
],
"type": "string"
},
"paymentTimeWindow": {
"description": "Optional daily time window for scheduled payouts.",
"properties": {
"end": {
"description": "Window end as a non-negative GraphQL `Int` (same unit as `start`); end > start is enforced server-side, not by this schema.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"start": {
"description": "Window start as a non-negative GraphQL `Int` (TronSave commonly uses minutes from midnight UTC, `0..1439`).",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"start",
"end"
],
"type": "object"
}
},
"type": "object"
},
"poolSetting": {
"properties": {
"bandwidth": {
"properties": {
"isAcceptExtended": {
"description": "Whether incoming extend-style matches are accepted.",
"type": "boolean"
},
"maintainUnDelegate": {
"description": "Buffer of undelegated resource the seller keeps.",
"type": "number"
},
"maxDelegateDurationSec": {
"description": "Upper bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minDelegateAmount": {
"description": "Minimum per-delegation resource amount.",
"type": "number"
},
"minDelegateDurationSec": {
"description": "Lower bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minPrice": {
"description": "Minimum unit price accepted for auto matches.",
"type": "number"
},
"profitShare": {
"description": "Profit share percentage for this resource leg.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"energy": {
"properties": {
"isAcceptExtended": {
"description": "Whether incoming extend-style matches are accepted.",
"type": "boolean"
},
"maintainUnDelegate": {
"description": "Buffer of undelegated resource the seller keeps.",
"type": "number"
},
"maxDelegateDurationSec": {
"description": "Upper bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minDelegateAmount": {
"description": "Minimum per-delegation resource amount.",
"type": "number"
},
"minDelegateDurationSec": {
"description": "Lower bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minPrice": {
"description": "Minimum unit price accepted for auto matches.",
"type": "number"
},
"profitShare": {
"description": "Profit share percentage for this resource leg.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"reclaim": {
"description": "Reclaim behaviour: ALL resources vs ONLY_TRONSAVE-managed delegations.",
"enum": [
"ALL",
"ONLY_TRONSAVE"
],
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"name": "tronsave_register_auto_sell",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"description": "Opaque server-defined payload (tx id, setting id, or status text). Treat as identifier-or-message; rely on `message` for human routing.",
"type": "string"
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message",
"data"
],
"type": "object"
}
},
{
"description": "Revoke the caller's current internal API key. Side effect: any future request using the previous key is rejected. Existing in-flight sessions cached by the server may continue serving until their TTL expires — treat the effect as 'best-effort immediate' rather than guaranteed instantaneous cutoff. Idempotent — revoking an already-revoked key returns success. Requires a signature session and `mcp-session-id`. Call `tronsave_generate_api_key` afterwards to mint a replacement when continued internal access is needed.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "tronsave_revoke_api_key",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"description": "For `generateApiKey`: the freshly issued internal API key — treat as SECRET, store securely. For `revokeApiKey`: server-defined confirmation string (no key material).",
"type": "string"
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message",
"data"
],
"type": "object"
}
},
{
"description": "Manually execute seller-side fulfillment of an existing order with a wallet `signedTx`. Returns the updated order payload after sell. Side effect: broadcasts a market/delegation transaction and may consume balances/resources; not idempotent — each call re-executes. Backend requires a signature session and `mcp-session-id`; the MCP gate is `public` to allow anonymous read-fallthrough, but the GraphQL helper rejects api-key-only sessions. Use only when explicit manual sell is intended; call `tronsave_get_order` first to verify order state before signing.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"orderId": {
"description": "Target order id (`MObjectId`) to manually fulfill. Should be an order eligible for seller-side manual execution.",
"minLength": 1,
"type": "string"
},
"paymentAddress": {
"description": "Optional payout/payment address override when settlement flow requires it.",
"type": "string"
},
"signedTx": {
"additionalProperties": {},
"description": "Required wallet-signed transaction payload (TronWeb shape: `{ txID, raw_data, raw_data_hex, signature[] }`). Must come from client-side signing; never fabricate.",
"properties": {
"raw_data": {
"additionalProperties": {},
"description": "Raw transaction body produced by TronWeb (`raw_data`).",
"properties": {
"contract": {
"description": "At least one TRON contract entry; shape varies by contract type.",
"items": {},
"minItems": 1,
"type": "array"
},
"expiration": {
"description": "Tx expiration (Unix epoch ms).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"ref_block_bytes": {
"description": "Reference block bytes (hex).",
"type": "string"
},
"ref_block_hash": {
"description": "Reference block hash (hex).",
"type": "string"
},
"timestamp": {
"description": "Tx timestamp (Unix epoch ms).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"contract",
"ref_block_bytes",
"ref_block_hash",
"expiration",
"timestamp"
],
"type": "object"
},
"raw_data_hex": {
"description": "Hex-encoded `raw_data` body.",
"pattern": "^[0-9a-fA-F]+$",
"type": "string"
},
"signature": {
"description": "Wallet signatures over `raw_data_hex`; usually a single hex string (130 chars for 65-byte secp256k1).",
"items": {
"minLength": 1,
"pattern": "^[0-9a-fA-F]+$",
"type": "string"
},
"minItems": 1,
"type": "array"
},
"txID": {
"description": "Transaction hash (64 hex chars, lowercase, no `0x` prefix).",
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-fA-F]+$",
"type": "string"
},
"visible": {
"description": "Whether addresses inside `raw_data.contract` are base58 (`true`) vs hex (`false`).",
"type": "boolean"
}
},
"required": [
"txID",
"raw_data",
"raw_data_hex",
"signature"
],
"type": "object"
}
},
"required": [
"orderId",
"signedTx"
],
"type": "object"
},
"name": "tronsave_sell_order_manual",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"delegatedId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "On-chain delegate id created by the manual sell when the underlying transaction is confirmed; null until confirmation lands."
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message"
],
"type": "object"
}
},
{
"description": "Update the existing auto-sell configuration with partial fields. Returns the updated `autoSettings` payload. Side effect: overwrites stored automation settings for the current user; not idempotent across different field sets. Requires a signature session and `mcp-session-id`. Use for INCREMENTAL changes after registration; read the baseline via `tronsave_get_user_auto_setting` to avoid accidental resets, and use `tronsave_register_auto_sell` only for first-time setup. Fails for invalid field combinations, unauthorized sessions, or policy constraints.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"addOnFeature": {
"properties": {
"stake": {
"description": "Optional auto-stake policy.",
"properties": {
"minAmount": {
"description": "Minimum TRX (sun semantics per API) for auto-stake trigger.",
"type": "number"
},
"remainBalance": {
"description": "TRX balance floor to preserve after staking.",
"type": "number"
},
"resourceStake": {
"description": "Whether auto-stake targets ENERGY or BANDWIDTH.",
"enum": [
"ENERGY",
"BANDWIDTH"
],
"type": "string"
}
},
"required": [
"minAmount",
"remainBalance",
"resourceStake"
],
"type": "object"
},
"suggestSell": {
"description": "Enable suggest-sell UX hints.",
"type": "boolean"
},
"vote": {
"description": "Enable vote-related automation when supported.",
"type": "boolean"
},
"withdrawVote": {
"description": "GraphQL Float input for withdraw-vote configuration.",
"type": "number"
}
},
"type": "object"
},
"paymentConfig": {
"properties": {
"paymentAddress": {
"description": "TRON address that receives payouts.",
"minLength": 1,
"type": "string"
},
"paymentFrequency": {
"description": "DAILY vs IMMEDIATE settlement rhythm.",
"enum": [
"DAILY",
"IMMEDIATE"
],
"type": "string"
},
"paymentMode": {
"description": "FIXED vs RANDOM payout mode when applicable.",
"enum": [
"FIXED",
"RANDOM"
],
"type": "string"
},
"paymentTimeWindow": {
"description": "Optional daily time window for scheduled payouts.",
"properties": {
"end": {
"description": "Window end as a non-negative GraphQL `Int` (same unit as `start`); end > start is enforced server-side, not by this schema.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"start": {
"description": "Window start as a non-negative GraphQL `Int` (TronSave commonly uses minutes from midnight UTC, `0..1439`).",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"start",
"end"
],
"type": "object"
}
},
"type": "object"
},
"poolSetting": {
"properties": {
"bandwidth": {
"properties": {
"isAcceptExtended": {
"description": "Whether incoming extend-style matches are accepted.",
"type": "boolean"
},
"maintainUnDelegate": {
"description": "Buffer of undelegated resource the seller keeps.",
"type": "number"
},
"maxDelegateDurationSec": {
"description": "Upper bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minDelegateAmount": {
"description": "Minimum per-delegation resource amount.",
"type": "number"
},
"minDelegateDurationSec": {
"description": "Lower bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minPrice": {
"description": "Minimum unit price accepted for auto matches.",
"type": "number"
},
"profitShare": {
"description": "Profit share percentage for this resource leg.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"energy": {
"properties": {
"isAcceptExtended": {
"description": "Whether incoming extend-style matches are accepted.",
"type": "boolean"
},
"maintainUnDelegate": {
"description": "Buffer of undelegated resource the seller keeps.",
"type": "number"
},
"maxDelegateDurationSec": {
"description": "Upper bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minDelegateAmount": {
"description": "Minimum per-delegation resource amount.",
"type": "number"
},
"minDelegateDurationSec": {
"description": "Lower bound delegation duration (seconds).",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"minPrice": {
"description": "Minimum unit price accepted for auto matches.",
"type": "number"
},
"profitShare": {
"description": "Profit share percentage for this resource leg.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"reclaim": {
"description": "Reclaim behaviour: ALL resources vs ONLY_TRONSAVE-managed delegations.",
"enum": [
"ALL",
"ONLY_TRONSAVE"
],
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"name": "tronsave_update_auto_sell_setting",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"description": "Opaque server-defined payload (tx id, setting id, or status text). Treat as identifier-or-message; rely on `message` for human routing.",
"type": "string"
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message",
"data"
],
"type": "object"
}
},
{
"description": "Update an open order by `orderId` with partial fields (`receiver`, `newPrice`). Returns the updated order payload. Side effect: overwrites live order parameters; not idempotent — each call with a different `newPrice` produces a new state. Backend requires a signature session and `mcp-session-id`; the MCP gate is `public` to allow anonymous read-fallthrough, but the GraphQL helper rejects api-key-only sessions. Prefer this over cancel+recreate when only price/receiver should change. Verify state with `tronsave_get_order` first; fails for already-fulfilled, already-cancelled, or non-editable orders.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"newPrice": {
"description": "Optional replacement unit price in SUN.",
"type": "number"
},
"orderId": {
"description": "Target order id (`MObjectId`) to update. Order must still be open and editable.",
"minLength": 1,
"type": "string"
},
"receiver": {
"description": "Optional replacement receiver TRON address.",
"type": "string"
}
},
"required": [
"orderId"
],
"type": "object"
},
"name": "tronsave_update_order",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"code": {
"description": "GraphQL mutation status code (HTTP-like; `0`/`200` indicates success). Always pair with `success` for routing.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"description": "Human-readable status text. Populated even on success; localized error messages may appear here on failure.",
"type": "string"
},
"success": {
"description": "Whether the mutation succeeded at the backend level. Always check this before reading `data`.",
"type": "boolean"
}
},
"required": [
"code",
"success",
"message"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b94e24560e7c5978bab2b85b2d66bd176880aa6d1876319c07d8447401ba59f3 | sha256sum