@candledottv/mcp 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +13 -10
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ tools, getting a key, funding the embedded wallet, and idempotent retries, see
|
|
|
97
97
|
| `candle_get_wallets` | The account's embedded wallets, one per chain, with delegation state | `GET /api/v1/agent/wallets/embedded` | `CANDLE_AGENT_API_KEY` |
|
|
98
98
|
| `candle_get_profile_wallets` | Which wallets an agent profile may spend from, and whether it is scoped | `GET /api/v1/agent/keys/:prefix/wallets` | `CANDLE_AGENT_API_KEY` |
|
|
99
99
|
| `candle_set_profile_wallets` | Replace the wallets an agent profile may spend from | `PUT /api/v1/agent/keys/:prefix/wallets` | `CANDLE_AGENT_API_KEY` |
|
|
100
|
-
| `candle_get_profile_pnl` | An agent profile's realized P&L, fees, and open positions at cost basis | `GET /api/v1/agent/keys/:prefix/pnl` | `CANDLE_AGENT_API_KEY` |
|
|
100
|
+
| `candle_get_profile_pnl` | An agent profile's realized P&L, fees, and open positions at cost basis, marked at current prices (unpriced positions counted, not zeroed) | `GET /api/v1/agent/keys/:prefix/pnl` | `CANDLE_AGENT_API_KEY` |
|
|
101
101
|
| `candle_get_profile_trades` | An agent profile's orders, fills, fees and transaction hashes | `GET /api/v1/agent/keys/:prefix/trades` | `CANDLE_AGENT_API_KEY` |
|
|
102
102
|
| `candle_execution_status` | One call before trading: wallets to spend from, tier, and whether trading is possible | Composes the wallet and tier reads | `CANDLE_AGENT_API_KEY` |
|
|
103
103
|
| `candle_get_operation` | Look up a trade or launch by the id its write used, and whether it landed | `GET /api/v1/trade/agent/jobs/:clientId` or `/api/v1/launch/headless/jobs/:clientId` | `CANDLE_AGENT_API_KEY` |
|
package/dist/index.js
CHANGED
|
@@ -106,7 +106,7 @@ function percentOfBalance(balanceRaw, percent) {
|
|
|
106
106
|
import { randomUUID } from "node:crypto";
|
|
107
107
|
|
|
108
108
|
// src/version.ts
|
|
109
|
-
var SERVER_VERSION = "0.10.
|
|
109
|
+
var SERVER_VERSION = "0.10.2";
|
|
110
110
|
|
|
111
111
|
// src/update-notice.ts
|
|
112
112
|
var PLAIN_VERSION = /^\d+\.\d+\.\d+$/;
|
|
@@ -809,7 +809,7 @@ var swapShape = {
|
|
|
809
809
|
amount: z.string().optional().describe('Decimal amount of `from` to spend, e.g. "0.5". Preferred. Pass exactly one of amount or amountRaw.'),
|
|
810
810
|
amountRaw: z.string().optional().describe("Raw base units of `from`, as a positive integer string. Kept for callers that already " + "compute raw units; new callers should use `amount`."),
|
|
811
811
|
maxSlippageBps: z.number().optional().describe("Slippage bound in bps, 0-10000. Server defaults to 100 (1%)"),
|
|
812
|
-
clientSwapId: z.string().optional().describe("
|
|
812
|
+
clientSwapId: z.string().optional().describe("Durable idempotency key. Same id + same from/to/amountRaw/effective slippage (omitted means " + "100 bps) replays the stored result, including an indeterminate SWAP_FAILED with the " + "signature in the message. A different body is rejected. Omit it and nothing is coalesced. " + "Pass one so a timeout retry returns that stored result.")
|
|
813
813
|
};
|
|
814
814
|
var tradeShape = {
|
|
815
815
|
mint: z.string().describe("Token mint (solana) or contract address (hood)"),
|
|
@@ -860,9 +860,9 @@ function registerTools(server, env = process.env) {
|
|
|
860
860
|
}, async (args) => callAndRelay("candle_get_market", args, cfg));
|
|
861
861
|
register("candle_token_forensics", {
|
|
862
862
|
title: "Token forensics",
|
|
863
|
-
description: `Gate a buy before making it: who launched it (resolved on-chain; pump.fun's shared updateAuthority is never the developer), their went-to-zero rate and last coins, who bought in the deploy window (the creator's own wallets are marked disclosed; strangers in the same slot are the bundle signal), same-funder insider share, same-funder deployer cluster, and safety.summary with six sourced flags (mintAuthority, freezeAuthority, tokenExtensions, lpLock, sellability, liquidityDrain). Refuse an unprompted buy when flagged; incomplete or unknown is not clearance. launch.deployerLaunches is an inclusive informational count, never a warning. Every measurement carries a coverage note -- 'unavailable' is not 'clean'. No key needed.
|
|
863
|
+
description: `Gate a buy before making it: who launched it (resolved on-chain; pump.fun's shared updateAuthority is never the developer; when no developer is on chain, deployer.attribution names the launchpad or issuer instead, e.g. launched via stonk.fun or issued by xStocks), their went-to-zero rate and last coins, who bought in the deploy window (the creator's own wallets are marked disclosed; strangers in the same slot are the bundle signal), same-funder insider share, same-funder deployer cluster, and safety.summary with six sourced flags (mintAuthority, freezeAuthority, tokenExtensions, lpLock, sellability, liquidityDrain). Refuse an unprompted buy when flagged; incomplete or unknown is not clearance. launch.deployerLaunches is an inclusive informational count, never a warning. Every measurement carries a coverage note -- 'unavailable' is not 'clean'. No key needed.
|
|
864
864
|
|
|
865
|
-
MARKET_NOT_FOUND means Candle has no market for that token and this could not run. That is also not 'clean': report that you could not check it, rather than reporting the token as safe. That refusal now carries error.coverage -- covered:false, a reason ('external_launchpad' when the token launched somewhere else, 'unknown_mint' when nobody has indexed it), the launchpad when known, and every check that consequently did not run. Read it instead of guessing. Most of the feed now answers with a partial report instead.`,
|
|
865
|
+
MARKET_NOT_FOUND means Candle has no market for that token and this could not run. That is also not 'clean': report that you could not check it, rather than reporting the token as safe. That refusal now carries error.coverage -- covered:false, a reason ('external_launchpad' when the token launched somewhere else, 'unknown_mint' when nobody has indexed it), the launchpad when known, and every check that consequently did not run. Read it instead of guessing. Most of the feed, and any Solana mint Jupiter's index knows, now answers with a partial report instead.`,
|
|
866
866
|
inputSchema: tokenForensicsShape
|
|
867
867
|
}, async (args) => callAndRelay("candle_token_forensics", args, cfg));
|
|
868
868
|
register("candle_get_feed", {
|
|
@@ -913,8 +913,8 @@ MARKET_NOT_FOUND means Candle has no market for that token and this could not ru
|
|
|
913
913
|
inputSchema: setProfileWalletsShape
|
|
914
914
|
}, async (args) => callAndRelay("candle_set_profile_wallets", args, cfg));
|
|
915
915
|
register("candle_get_profile_pnl", {
|
|
916
|
-
title: "Read an agent profile's
|
|
917
|
-
description: "Realized profit for this profile's own fills, the Candle fees charged against it, and the " + "positions it still holds with their
|
|
916
|
+
title: "Read an agent profile's P&L",
|
|
917
|
+
description: "Realized profit for this profile's own fills, the Candle fees charged against it, and the " + "positions it still holds with their cost basis, each MARKED at Candle's current price where one " + "exists: `markPriceUsd`, `marketValueUsd` and `unrealizedUsd` per position, and `unrealizedUsd` " + "overall. A position with no price is counted in `unmarkedPositions` and left out of unrealized, " + "never valued at zero; `oldestMarkAt` says how old the marks are. Deposits, withdrawals and " + "transfers are excluded: funding a wallet is not profit. Check `unvalued` and `truncated` before " + "quoting the number; they mean the total is partial. Reads only.",
|
|
918
918
|
inputSchema: profilePnlShape
|
|
919
919
|
}, async (args) => callAndRelay("candle_get_profile_pnl", args, cfg));
|
|
920
920
|
register("candle_get_profile_trades", {
|
|
@@ -947,9 +947,12 @@ MARKET_NOT_FOUND means Candle has no market for that token and this could not ru
|
|
|
947
947
|
` + `A bridge behaves differently and the difference matters:
|
|
948
948
|
` + `- It is several transactions, not one, and it takes time rather than settling on the call.
|
|
949
949
|
` + "- A confirmed source transaction is NOT proof the destination was credited. Read the " + "returned status before treating the funds as arrived; the response carries the venue's " + `own status URLs for the cross-chain fill.
|
|
950
|
-
` + "-
|
|
950
|
+
` + "- A timeout is unknown, not failed. Pass a `clientSwapId` and retry the SAME request, " + "including the same slippage. The replay returns the stored result: the original success, " + "or a stored error. An indeterminate first leg comes back as SWAP_FAILED, retryable false, " + "with the signature in the message -- verify that on-chain before a new id. A swap that is " + "still running, with no stored outcome, is a retryable conflict. A different body under the " + "same id is rejected. A confirmed first leg is replayed with its hash, retryable false, and " + "is not run again. retryable true on the first LEG2_FAILED means send leg 2 as a new request. " + `Omitting the id never coalesces -- do not retry a timed-out call that had no id.
|
|
951
|
+
` + "- If a bridge times out, check the returned status URLs rather than treating the funds " + `as arrived or lost.
|
|
951
952
|
|
|
952
|
-
` + 'Amounts are decimal (`amount`, e.g. "0.5"); `amountRaw` still accepts raw base units for ' + "callers that already compute them. Test-environment keys are refused: every leg settles " +
|
|
953
|
+
` + 'Amounts are decimal (`amount`, e.g. "0.5"); `amountRaw` still accepts raw base units for ' + "callers that already compute them. Test-environment keys are refused: every leg settles " + `on a live venue.
|
|
954
|
+
|
|
955
|
+
` + "This tool spends the embedded wallets. A TEE wallet also bridges, from SOL or USDC to ETH " + "or USDG or back, but only into the same key's TEE wallet on the other chain, with no Candle " + "fee: that runs through `candle swap` with the wallet's bound key, not this tool.",
|
|
953
956
|
inputSchema: swapShape
|
|
954
957
|
}, async (args) => callAndRelay("candle_swap", args, cfg));
|
|
955
958
|
register("candle_transfer", {
|
|
@@ -1003,7 +1006,7 @@ START HERE — five tools need NO credential. Call these first to confirm the se
|
|
|
1003
1006
|
candle_get_market price, market cap, volume, curve state for one token
|
|
1004
1007
|
candle_get_feed the roster: hot streak, new pairs, graduated, blue chip
|
|
1005
1008
|
candle_resolve_token a ticker or partial name -> mint address + chain
|
|
1006
|
-
candle_token_forensics call this before quoting or buying. Returns the on-chain developer (never a launchpad shared authority), their went-to-zero rate and last coins, who bought in the deploy window (strangers in the same slot are the bundle signal), same-funder insider share, same-funder cluster, and safety.summary with six sourced flags. Refuse an unprompted buy when flagged; incomplete or unknown is not clearance. launch.deployerLaunches is an inclusive informational count, never a warning
|
|
1009
|
+
candle_token_forensics call this before quoting or buying. Returns the on-chain developer (never a launchpad shared authority; deployer.attribution names the launchpad or issuer when no developer is on chain), their went-to-zero rate and last coins, who bought in the deploy window (strangers in the same slot are the bundle signal), same-funder insider share, same-funder cluster, and safety.summary with six sourced flags. Refuse an unprompted buy when flagged; incomplete or unknown is not clearance. launch.deployerLaunches is an inclusive informational count, never a warning
|
|
1007
1010
|
candle_get_agent_profile your own tier, caps and verified activity
|
|
1008
1011
|
|
|
1009
1012
|
COVERAGE — read this before you treat an error as a broken server.
|
|
@@ -1019,7 +1022,7 @@ General quotes use POST /api/v1/trade/agent/quote; curve quotes/lifecycle descri
|
|
|
1019
1022
|
Stored eligibility is not a successful quote or permission. MARKET_NOT_FOUND remains a legacy
|
|
1020
1023
|
code: read error.routing.reason, error.discovery and sibling error.retryable. A curve-only
|
|
1021
1024
|
404 is endpoint guidance, not a verdict that Candle cannot trade external tokens.
|
|
1022
|
-
candle_token_forensics also answers for Solana tokens the feed
|
|
1025
|
+
candle_token_forensics also answers for Solana tokens the feed or Jupiter's index knows, with a partial
|
|
1023
1026
|
report: on-chain developer (never a launchpad shared authority), went-to-zero record, token
|
|
1024
1027
|
safety flags, same-funder insiders and cluster. Deploy-window stays unavailable without a
|
|
1025
1028
|
Candle launch record. Indexed external Hood tokens also answer, with unknown hacc flags.
|