@parabolicfamily/mcp 0.2.1 → 0.2.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 CHANGED
@@ -18,10 +18,19 @@ The ABIs ship with the package, so it works offline against any Arc RPC you poin
18
18
 
19
19
  One tool, `parabolic.check_ticker`, and nothing else moved: every call that worked in 0.1.7 works unchanged.
20
20
  Given a ticker it asks the Parabolic site whether a coin already carries it on **any** chain the site serves
21
- and whether `<ticker>.parabolic.family` is free. It is advice and not a gate — nothing on chain enforces a
22
- unique symbol — and the hostname is the one exclusive thing, held by the oldest coin with that ticker. The
21
+ and whether `<ticker>.parabolic.family` is free. It is advice and not a gate (nothing on chain enforces a
22
+ unique symbol), and the hostname is the one exclusive thing, held by the oldest coin with that ticker. The
23
23
  ticker is normalised the way the site normalises it, so an impossible one is refused before a request is spent.
24
24
 
25
+ ## What changed in 0.2.2
26
+
27
+ Coins on other launchpads read as ours do. `list_coins` pages by cursor (`after`, answering `next`), through the
28
+ indexer or the site's API. `get_coin` answers a venue ref (`rhc:pons:0x…`), and `list_venue_coins` lists from
29
+ the site's own index of that launchpad when no subgraph is set. A new tool, `parabolic.venue_history`, reads a
30
+ launchpad coin's candles, tape, holders and positions from the site (19 tools in all). A venue coin's price is
31
+ taken from its own supply, an unnamed quote asset is published as such (never as fiat), a missing creator is
32
+ `null`, and the fee split respects a coin whose buyback is off.
33
+
25
34
  ## What changed in 0.2.1
26
35
 
27
36
  No tool changed. The dependency tree is refreshed (`@modelcontextprotocol/sdk` 1.32.1, and the patched
@@ -73,7 +82,7 @@ unchanged and means the same chain it meant: an unqualified address is still Arc
73
82
  chain it meant**, because an unqualified identifier means Arc, permanently (`docs/20-multichain.md` §3).
74
83
 
75
84
  - **Added, optional, on every tool: `chain`.** A chain key (`"arc"`) or an id (`5042`). Left out, it is the
76
- chain the server is configured for — Arc with no configuration at all. Arguments are strict, so this had
85
+ chain the server is configured for: Arc with no configuration at all. Arguments are strict, so this had
77
86
  to be declared rather than tolerated; passing nothing is what every existing caller does.
78
87
  - **Added: `address` accepts a reference.** `0x…` is still a coin on this server's chain. `rhc:0x…` names a
79
88
  coin on another one and is **refused by name** ("…is on Robinhood Chain (chain 4663); this server is
@@ -103,6 +112,9 @@ mainnet by mistake, and `protocol_stats` reports the chain and RPC host the serv
103
112
  | `PARABOLIC_MEMO_ROUTER` | `ParabolicMemoRouter`: the atomic launch-and-buy and the referral-carrying buy. Refused on a chain whose record deploys `ParabolicRouter` and no memo router, because the two share no function selector and a routed build against that address would revert | the deployment for the chain id |
104
113
  | `PARABOLIC_EURC` | EURC address, only for EURC-quoted coins | the deployment for the chain id |
105
114
  | `PARABOLIC_SUBGRAPH_URL` | Subgraph endpoint: richer listings, holders, 24h volume, protocol stats | unset (the public API is used instead) |
115
+ | `PARABOLIC_API_URL` | Parabolic's public read API: listings, `check_ticker`, `referral_status`, `venue_history` and another launchpad's coins when no venue subgraph is set; `""` turns it off | the site that serves the chain (see below) |
116
+ | `PARABOLIC_SUBGRAPH_URL_<VENUE>_<CHAIN>` | Another launchpad's subgraph for `list_venue_coins`: `PARABOLIC_SUBGRAPH_URL_PONS_RHC`, `PARABOLIC_SUBGRAPH_URL_SOLONPAD_ARC`, `PARABOLIC_SUBGRAPH_URL_AKA_ARC` | unset (the site's own index of that launchpad is read instead) |
117
+ | `PARABOLIC_AGGREGATOR_ROUTER` | `ParabolicAggregatorRouter` for the four routed tools. Honoured only on Anvil (31337) and the testnets, and only where the chain's deployment record names no router; ignored on Arc (5042) and Robinhood Chain (4663), where the record's router is the only one | the router in the chain's deployment record (`aggregator`), none until it is deployed |
106
118
  | `PARABOLIC_EXPLORER_URL` | Block explorer the address and transaction links are built from | the explorer for the chain id |
107
119
  | `PARABOLIC_HOOK` | `ParabolicHook` address | read from `factory.memeHook()` |
108
120
  | `PARABOLIC_ARC_MEMO` | Arc `Memo` system contract | `0x5294E9927c3306DcBaDb03fe70b92e01cCede505` |
@@ -118,8 +130,9 @@ built-in address for the chain or `PARABOLIC_RPC_URL` points anywhere but the ch
118
130
  reads the chain instead. To force that for any other reason, set `PARABOLIC_API_URL=""`.
119
131
 
120
132
  Call `parabolic.docs` to print the exact addresses this server is using, including the memo router
121
- every launch with an opening buy is sent to. Check each one on Arcscan, where all of them are verified
122
- with source, before you sign anything:
133
+ every launch with an opening buy is sent to, and check each one before you sign anything. The Arc
134
+ Testnet contracts below are on Arc's testnet explorer; the mainnet and Robinhood Chain contracts match
135
+ their source on Sourcify (graded `match`), because Arc's mainnet explorer was behind a login when they deployed:
123
136
 
124
137
  | Contract | Arc Testnet (5042002) |
125
138
  |---|---|
@@ -135,12 +148,12 @@ reads it (and builds the registration for your wallet to sign); nothing on the l
135
148
 
136
149
  Arc mainnet (5042), deployed 16 September 2026 at block 21,105,294: factory
137
150
  `0x27EAeC564fd049E6920C73323ffA7eb6a32A4B1e`, memo router `0x7d642150A222D0F6c98e2fC6bBe86E8Bb6DC90d0`,
138
- source verified on Sourcify. Arc has published no identity registry for mainnet, so on chain 5042
151
+ both matching their source on Sourcify. Arc has published no identity registry for mainnet, so on chain 5042
139
152
  `agent_status` says there is no registry rather than reporting a wallet as unregistered.
140
153
 
141
154
  Robinhood Chain (4663), deployed 19 September 2026: factory
142
155
  `0x25c9cFa179256A29f84b9Fd0DcF7cB2ff24b473d`, quoted in USDG (`0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168`,
143
- six decimals, Paxos), gas paid in ETH, source verified on Sourcify. Gas there is not a dollar, so a launch
156
+ six decimals, Paxos), gas paid in ETH, the factory matching its source on Sourcify. Gas there is not a dollar, so a launch
144
157
  fee or a balance on that chain is never a figure in dollars, and no identity registry exists. The chain's
145
158
  `ParabolicRouter` is deliberately not configured here; see 0.1.9 above.
146
159
 
@@ -150,10 +163,11 @@ fee or a balance on that chain is never a figure in dollars, and no identity reg
150
163
  claude mcp add parabolic -- npx -y @parabolicfamily/mcp
151
164
  ```
152
165
 
153
- That is enough to launch, quote and trade on Arc Testnet: `get_coin`, `quote_buy`, `quote_sell` and
154
- every `build_*` tool read the chain directly. `list_coins` is the exception — with no subgraph it can
155
- only scan the most recent blocks, because public Arc RPCs cap log queries, so it marks its result
156
- `partial` and names the range it covered. Point it at a subgraph for the full board:
166
+ That is enough to launch, quote and trade on Arc mainnet (5042), the default: `get_coin`, `quote_buy`,
167
+ `quote_sell` and every `build_*` tool read the chain directly, and `list_coins` reads Parabolic's public
168
+ read API. Only when neither a subgraph nor that API is available does `list_coins` fall back to scanning
169
+ `TokenLaunched` logs, which public Arc RPCs cap, so it then marks its result `partial` and names the range
170
+ it covered. Point it at a subgraph for holders, 24h volume and 24h change:
157
171
 
158
172
  ```sh
159
173
  claude mcp add parabolic \
@@ -200,7 +214,7 @@ Arguments are strict: a key a tool does not know fails with `Unrecognized key` i
200
214
 
201
215
  | Tool | Purpose |
202
216
  |---|---|
203
- | `parabolic.list_coins` | `{ status?: "climbing" \| "graduated", sort?: "trending" \| "new" \| "near_graduation" \| "market_cap", limit?, pair?: "USDC" \| "EURC" \| "Agents" }`. Subgraph when configured, otherwise Parabolic's public read API; a `TokenLaunched` log scan only when both are unavailable. `pair` is the quote asset, except `"Agents"`, which means the coin's creator holds an ERC-8004 identity: that is read from Arc's registry (one `balanceOf` per creator, over the top 100 of the sort) whatever the listing source is. Without a registry for the chain the result sets `pairFilterApplied: false` and the `source` line says the filter did not run. |
217
+ | `parabolic.list_coins` | `{ status?: "climbing" \| "graduated", sort?: "trending" \| "new" \| "near_graduation" \| "market_cap", limit?, after?, pair?: "USDC" \| "EURC" \| "Agents" }`. Pages by cursor: pass an earlier answer's `next` as `after` (or `""` to start at the newest coin); `next` is null on the last page. Subgraph when configured, otherwise Parabolic's public read API; a `TokenLaunched` log scan only when both are unavailable. `pair` is the quote asset, except `"Agents"`, which means the coin's creator holds an ERC-8004 identity: that is read from Arc's registry (one `balanceOf` per creator, over the top 100 of the sort) whatever the listing source is. Without a registry for the chain the result sets `pairFilterApplied: false` and the `source` line says the filter did not run. |
204
218
  | `parabolic.get_coin` | `{ address }` (token or curve). Name, ticker, creator, curve, status/phase, raised/threshold/progress, price, market cap, holders, pool id, fee terms and the coin's own split (creator / protocol / buyback as the curve snapshotted them at launch, the buyback leg only while the creator's `buybackEnabled` switch is on), snipe-tax window and `currentSnipeTaxBps()`. |
205
219
  | `parabolic.quote_buy` | `{ address, quoteIn, buyer?, slippageBps? }`. Exact curve math on live reserves: fee, creator tax and snipe tax legs, spot vs effective price, price impact, whether the buy graduates the coin, suggested `minTokensOut`. `buyer` checks the snipe-tax exemption. |
206
220
  | `parabolic.quote_sell` | `{ address, tokensIn, slippageBps? }`. Gross, fee, creator tax, effective price, price impact, suggested `minQuoteOut`. |
@@ -212,16 +226,17 @@ Arguments are strict: a key a tool does not know fails with `Unrecognized key` i
212
226
  | `parabolic.protocol_stats` | Subgraph totals (launches, graduations, trades, volume, fees, daily series) plus the factory's live launch fee, curve preset, snipe-tax terms and contract addresses. |
213
227
  | `parabolic.check_ticker` | `{ ticker }`. Whether a Parabolic coin already carries the ticker on **any** chain the site serves, and whether `<ticker>.parabolic.family` is free, read from the site's own route (`/api/v1/studio/ticker` on `PARABOLIC_API_URL`'s site). **Advice, not a gate**: nothing on chain enforces a unique symbol, so `free: false` lists what exists (`taken[]`, each with a `ref` for `get_coin`) and does not stop a launch. The hostname is the one exclusive thing and belongs to the oldest coin carrying the ticker (`hostFree`). A name on the site's reserved list comes back as `reserved` and is not a coin. The ticker is normalised the way the site does it (A-Z and 0-9, case and punctuation ignored, 2 to 10 characters); one outside that is refused before the site is asked. Call it before `build_launch_tx`. |
214
228
  | `parabolic.referral_status` | `{ account }`. One wallet's referral payouts on this server's chain, read from the site (`GET /api/v1/referrals/{account}`): per asset, what the indexer has credited, what the latest weekly root publishes, what the referral distributor has paid and what is claimable now, with the `claim(asset, account, cumulative, proof)` arguments when there is a leaf. Read-only; figures are never summed across assets. On a chain with no distributor recorded, referrals are paid by hand and the answer says so. |
215
- | `parabolic.list_venue_coins` | `{ venue: "pons" \| "solonpad", status?, sort?, limit? }`. Coins made on another launchpad, read from that launchpad's subgraph when `PARABOLIC_SUBGRAPH_URL_<VENUE>_<CHAIN>` is set, with the figures `list_coins` returns plus `venue`, the site's `ref` and whether they can be routed here. They live on that launchpad's contracts, not Parabolic's. |
229
+ | `parabolic.list_venue_coins` | `{ venue: "pons" \| "solonpad" \| "aka", status?, sort?, limit? }`. Coins made on another launchpad (pons on Robinhood Chain; SolonPad and aka.fun on Arc), read from that launchpad's subgraph when `PARABOLIC_SUBGRAPH_URL_<VENUE>_<CHAIN>` is set and otherwise from the site's own index of it, with the figures `list_coins` returns plus `venue`, the site's `ref` and whether they can be routed here (`routedHere`). They live on that launchpad's contracts, not Parabolic's. `aka` is known and listed, and the four routed tools refuse it by name: the router is proved on aka.fun's pools, but this server does not build that trade. |
230
+ | `parabolic.venue_history` | `{ part: "chart" \| "holders" \| "claimable" \| "position", coin?, wallet?, tf?, limit? }`. Another launchpad's coin as the Parabolic site reads it from the chain's logs: its candles from every fill read and its newest fills, its holders folded from its transfers since launch, its fee recipient's balance on that launchpad's own escrow (claimed there), or a wallet's positions across the launchpads the site indexes itself. Every answer says how far back it reaches. Read from the site (`PARABOLIC_API_URL`), never from a chain. |
216
231
  | `parabolic.quote_routed_buy` | `{ venue, address, quoteIn, from?, slippageBps? }`. Tokens received for `quoteIn` of the coin's own quote asset, bought through `ParabolicAggregatorRouter` on the launchpad's curve (the router's quote view) or its graduated v4 pool (the chain's V4Quoter), read now, with the launchpad's fee and Parabolic's routed fee (the router's `defaultFeeBps`) both shown. |
217
232
  | `parabolic.quote_routed_sell` | `{ venue, address, tokensIn, from?, slippageBps? }`. Money received, after Parabolic's routed fee, for `tokensIn` sold through the router, read now. |
218
233
  | `parabolic.build_routed_buy_tx` | `{ venue, address, quoteIn, from, slippageBps?, maxSnipeTaxBps? }` → unsigned `ParabolicAggregatorRouter.buy(trade, noVoucher, "0x", noPermit)`, encoded as the site encodes it: `minOut` from a fresh quote less slippage, recipient = `from`, a five-minute deadline; an ETH-quoted coin sends `quoteIn` as value, a USDG-quoted one returns an exact-amount approval of the router first. Inside a launch window the build is refused and names the tax unless `maxSnipeTaxBps` accepts it. |
219
234
  | `parabolic.build_routed_sell_tx` | `{ venue, address, tokensIn, from, slippageBps? }` → unsigned exact-amount approval of the router plus `ParabolicAggregatorRouter.sell(...)`; `minOut` is the money after Parabolic's fee. The four routed tools refuse, by name, until the chain's record carries the router (`aggregator`), when the router has the launchpad off, when the coin is not that launchpad's, and when any read fails. |
220
- | `parabolic.docs` | The adopted parameters, curve mechanics, verified Arc facts and this server's configuration, as text. |
235
+ | `parabolic.docs` | The adopted parameters, curve mechanics, confirmed Arc facts and this server's configuration, as text. |
221
236
 
222
237
  Every tool above also takes an optional `chain` (see "What changed in 0.1.7"), and every coin argument
223
238
  takes a reference: `0x…` for a coin on this server's chain, `rhc:0x…` for one elsewhere. A wallet argument
224
- (`recipient`, `buyer`, `creator`, `from`, `agent_status`'s `address`) stays a plain address — a wallet is
239
+ (`recipient`, `buyer`, `creator`, `from`, `agent_status`'s `address`) stays a plain address: a wallet is
225
240
  the same person on every EVM chain. `check_ticker` accepts `chain` like the others and its verdict still
226
241
  covers every chain the site serves, because a ticker taken elsewhere is a collision the moment a link is shared.
227
242
 
@@ -328,21 +343,30 @@ asking, and it lags the site's indexer by however far that is behind.
328
343
 
329
344
  ```
330
345
  src/
331
- index.ts stdio entry point (bin: parabolic-mcp)
332
- server.ts createServer(): tools + resources on @modelcontextprotocol/sdk McpServer
333
- parabolic.ts the service: reads (RPC + subgraph) and unsigned tx builders
334
- curve.ts ported curve math
335
- tx.ts viem encodeFunctionData builders (buy, sell, approve, launchToken, memo buy)
336
- agents.ts ERC-8004 identity registry: balanceOf / ownerOf / tokenURI reads, register builder
337
- chain.ts viem RPC wrapper (batched HTTP) behind a small Rpc interface
338
- subgraph.ts GraphQL client and Coin/Protocol shapes
339
- coins.ts coin summaries, sorting
340
- ticker.ts check_ticker's rule: the site's normalisation, its verdict shape, the sentence
341
- config.ts PARABOLIC_* environment
342
- abi.ts loads abi/*.json
343
- docs.ts parameters + Arc facts text
344
- test/ vitest (curve parity, calldata decode, tools over an in-memory MCP transport)
345
- scripts/ sync-abis.mjs, smoke.mjs
346
+ index.ts stdio entry point (bin: parabolic-mcp)
347
+ server.ts createServer(): the 19 tools + resources on @modelcontextprotocol/sdk McpServer
348
+ parabolic.ts the service: reads (RPC + subgraph + API) and unsigned tx builders
349
+ curve.ts ported curve math
350
+ tx.ts viem encodeFunctionData builders (buy, sell, approve, launchToken, memo buy)
351
+ agents.ts ERC-8004 identity registry: balanceOf / ownerOf / tokenURI reads, register builder
352
+ chain.ts viem RPC wrapper (batched HTTP) behind a small Rpc interface
353
+ chains.ts the chain registry and chain-qualified references (`rhc:0x…`)
354
+ deployed.ts the shipped deployment records (abi/deployments.json): addresses, start blocks, routers
355
+ subgraph.ts GraphQL client and Coin/Protocol shapes
356
+ restapi.ts Parabolic's public read API client (listings when no subgraph is set)
357
+ coins.ts coin summaries, sorting
358
+ quote-unit.ts the money a coin is counted in, so no figure reads as dollars when it is not
359
+ format.ts JSON with bigints as decimal strings, short addresses
360
+ ticker.ts check_ticker's rule: the site's normalisation, its verdict shape, the sentence
361
+ referrals.ts referral_status, read from the site's /api/v1/referrals route
362
+ venues.ts the other launchpads: factories, hooks, proofs, venue subgraph variables
363
+ routed.ts list_venue_coins and the four routed tools through ParabolicAggregatorRouter
364
+ venue-history.ts venue_history, read from the site's /api/v1/coins views
365
+ config.ts PARABOLIC_* environment
366
+ abi.ts loads abi/*.json
367
+ docs.ts parameters + Arc facts text
368
+ test/ vitest (curve parity, calldata decode, tools over an in-memory MCP transport)
369
+ scripts/ sync-abis.mjs, smoke.mjs
346
370
  ```
347
371
 
348
372
  Scripts: `npm run build`, `npm test`, `npm start` (stdio), `npm run smoke`, `npm run sync-abis`, `npm run typecheck`.
@@ -362,6 +386,6 @@ npm run sync-abis # re-copy abi/*.json from ../contracts/out after a forge bu
362
386
 
363
387
  ## Links
364
388
 
365
- - Parabolic — <https://www.parabolic.family>
366
- - Protocol parameters, deployed addresses and the public read API — <https://www.parabolic.family/docs>
367
- - Questions and bug reports — contact@parabolic.family
389
+ - Parabolic: <https://www.parabolic.family>
390
+ - Protocol parameters, deployed addresses and the public read API: <https://www.parabolic.family/docs>
391
+ - Questions and bug reports: contact@parabolic.family
package/dist/coins.d.ts CHANGED
@@ -9,7 +9,8 @@ export type CoinSummary = {
9
9
  curve: Address;
10
10
  name: string;
11
11
  ticker: string;
12
- creator: Address;
12
+ /** The launching wallet; null for another launchpad's coin whose launch named none (the site publishes null). */
13
+ creator: Address | null;
13
14
  /**
14
15
  * What the coin's money is called — the asset's own symbol, whatever it is.
15
16
  *
package/dist/coins.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"coins.js","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coins.js","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"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"}
package/dist/docs.js CHANGED
@@ -85,7 +85,7 @@ export function docsText(config) {
85
85
  // Read from the registry and the deployment table rather than written again (23 Sep 2026, F36):
86
86
  // this line said mainnet's id was "unofficial until Circle publishes it" for a week after the
87
87
  // public launch, on the one surface whose whole job is to be a model's system prompt.
88
- `- Mainnet: chain id 5042, RPC ${DEPLOYMENTS[5042].rpcUrl}, explorer ${chainFor(5042)?.explorer}, live since 16 Sep 2026 (nine contracts, source verified on Sourcify). Testnet: chain id 5042002, RPC ${DEPLOYMENTS[5042002].rpcUrl}, explorer ${chainFor(5042002)?.explorer}.`,
88
+ `- Mainnet: chain id 5042, RPC ${DEPLOYMENTS[5042].rpcUrl}, explorer ${chainFor(5042)?.explorer}, live since 16 Sep 2026 (nine contracts, each source-matched on Sourcify). Testnet: chain id 5042002, RPC ${DEPLOYMENTS[5042002].rpcUrl}, explorer ${chainFor(5042002)?.explorer}.`,
89
89
  `- USDC is the native gas asset (18-decimal native accounting); its 6-decimal ERC-20 view is ${USDC_VIEW}. Base fee target ≈ $0.01, floor 20 Gwei, ceiling 20,000 Gwei (EWMA-smoothed).`,
90
90
  "- Malachite BFT consensus, deterministic finality < 1 s, proof of authority with 12 institutional validators. Osaka EVM on Reth. PREVRANDAO = 0 (no on-chain randomness). Mempool not observable.",
91
91
  `- System contracts on testnet: Memo (${ARC_MEMO_DEFAULT}; EOA-only, no value forwarding), Multicall3From, Permit2 (canonical), CREATE2, CCTP v2 (domain 26), Gateway, EURC, USYC, StableFX FxEscrow.`,
@@ -108,7 +108,7 @@ export function docsText(config) {
108
108
  "THIS SERVER",
109
109
  `- Chain: ${chainName(config.chainId)} (${config.chainId}), RPC ${endpointHost(config.rpcUrl)}.`,
110
110
  `- Factory: ${set(config.factory)} · Memo router: ${set(config.memoRouter)} · Subgraph: ${config.subgraphUrl ? endpointHost(config.subgraphUrl) : "(not configured)"} · EURC: ${set(config.eurc)} · Hook: ${config.hook ?? "(read from factory)"} · Launch config id: ${config.launchConfigId}.`,
111
- "- Tools: parabolic.list_coins, parabolic.get_coin, parabolic.quote_buy, parabolic.quote_sell, parabolic.build_buy_tx, parabolic.build_sell_tx, parabolic.build_launch_tx, parabolic.protocol_stats, parabolic.agent_status, parabolic.build_register_agent_tx, parabolic.check_ticker, parabolic.referral_status, parabolic.list_venue_coins, parabolic.quote_routed_buy, parabolic.quote_routed_sell, parabolic.build_routed_buy_tx, parabolic.build_routed_sell_tx, parabolic.docs. Resources: parabolic://docs/parameters, parabolic://coins/{address}.",
111
+ "- Tools: parabolic.list_coins, parabolic.get_coin, parabolic.quote_buy, parabolic.quote_sell, parabolic.build_buy_tx, parabolic.build_sell_tx, parabolic.build_launch_tx, parabolic.protocol_stats, parabolic.agent_status, parabolic.build_register_agent_tx, parabolic.check_ticker, parabolic.referral_status, parabolic.list_venue_coins, parabolic.venue_history, parabolic.quote_routed_buy, parabolic.quote_routed_sell, parabolic.build_routed_buy_tx, parabolic.build_routed_sell_tx, parabolic.docs. Resources: parabolic://docs/parameters, parabolic://coins/{address}.",
112
112
  "- check_ticker asks the Parabolic site (PARABOLIC_API_URL's site, route /api/v1/studio/ticker) whether a coin already carries a symbol on any chain the site serves and whether <ticker>.parabolic.family is free. Advice, not a gate: nothing on chain enforces a unique symbol. The hostname is the one exclusive thing and belongs to the oldest coin with the ticker.",
113
113
  "- referral_status reads one wallet's referral payouts from the Parabolic site (route /api/v1/referrals/{account}): credited, published in the latest weekly root, claimed and claimable per asset, never summed, and the claim(asset, account, cumulative, proof) arguments. The referral distributor pays the account and nobody else. Read-only.",
114
114
  "- It never holds keys, signs, sends or broadcasts. build_* tools return unsigned { to, data, value, chainId } for the caller's wallet. Quotes are read from chain at call time and can move before a transaction lands.",
@@ -135,6 +135,7 @@ function routedSection(config) {
135
135
  return [
136
136
  "OTHER LAUNCHPADS' COINS (routed through Parabolic)",
137
137
  "- list_venue_coins lists coins made on another launchpad from that launchpad's subgraph; quote_routed_buy / quote_routed_sell and build_routed_buy_tx / build_routed_sell_tx trade them through ParabolicAggregatorRouter.",
138
+ "- venue_history reads one such coin as the Parabolic site reads it from the chain's logs: its candles and fills, its holders since launch, its fee recipient's escrow balance on that launchpad, or a wallet's positions across the launchpads the site indexes; every answer says how far back it reaches.",
138
139
  "- Such a coin lives on the other launchpad's contracts, not Parabolic's: its curve or pool, its own fee and creator tax, and its snipe tax (keyed on the RECIPIENT on pons) are that launchpad's. Parabolic's own coins never go through the router.",
139
140
  "- The routed fee: the router takes Parabolic's fee on top of the launchpad's own, from the input of a buy and from the venue's payout on a sell, and pushes it to the treasury in the same call. It is the router's `defaultFeeBps`, read at every call: 60 bps (0.6%) at deploy, the Free tier's; Pro (30) and Ultra (10) are vouchers the Parabolic site signs for one wallet, and this server sends none. No owner call can raise it above 100 bps.",
140
141
  "- A build sends minOut from a fresh quote less slippage, maxSnipeTaxBps 0 unless raised to the tax the launchpad charges now, recipient = from, and a deadline five minutes past the chain's head block. An ERC-20 input (a USDG-quoted buy, every sell) comes with an approval of the router for exactly the amount, because the site's one-shot Permit2 transfer is a signature this server cannot make.",
package/dist/docs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"}
@@ -43,11 +43,17 @@ export type Launch = {
43
43
  phase?: number;
44
44
  source: "factory" | "subgraph";
45
45
  };
46
+ /**
47
+ * `after` pages by cursor (docs/53 §1 S1, 7 Oct 2026): the `next` an earlier listing answered, or the empty string to
48
+ * start at the newest coin. With it the listing is the coins newest launch first, one page of `limit` read from the
49
+ * indexer after the cursor (the status applied there), and `sort` orders inside the page; `next` is null on the last.
50
+ */
46
51
  export type ListInput = {
47
52
  status?: StatusKey;
48
53
  sort?: SortKey;
49
54
  limit?: number;
50
55
  pair?: PairFilter;
56
+ after?: string;
51
57
  };
52
58
  export type AgentStatusInput = {
53
59
  address: string;
@@ -168,6 +174,7 @@ export declare class Parabolic {
168
174
  private liveTerms;
169
175
  private assertOpen;
170
176
  listCoins(input?: ListInput): Promise<{
177
+ next?: string | null | undefined;
171
178
  source: string;
172
179
  chain: {
173
180
  id: number;
@@ -186,7 +193,7 @@ export declare class Parabolic {
186
193
  curve: Address;
187
194
  name: string;
188
195
  ticker: string;
189
- creator: Address;
196
+ creator: Address | null;
190
197
  pair: string;
191
198
  pairToken: Address;
192
199
  quoteDecimals: number;
@@ -228,6 +235,47 @@ export declare class Parabolic {
228
235
  private recentLaunchLogs;
229
236
  private chainCoins;
230
237
  getCoin(address: string): Promise<{
238
+ chain: {
239
+ id: number;
240
+ key: string;
241
+ name: string;
242
+ };
243
+ venue: string;
244
+ venueName: string;
245
+ ref: string;
246
+ address: `0x${string}`;
247
+ curve: string | null;
248
+ name: string;
249
+ ticker: string;
250
+ creator: string | null;
251
+ pair: string;
252
+ pairToken: string | null;
253
+ quoteDecimals: number | null;
254
+ quoteDollar: boolean | null;
255
+ status: "climbing" | "graduated";
256
+ price: number;
257
+ marketCap: number;
258
+ raised: number;
259
+ threshold: number;
260
+ progressPct: number;
261
+ holders: number | null;
262
+ volume24h: number | null;
263
+ change24h: number | null;
264
+ tradeCount: number | null;
265
+ createdAt: number | null;
266
+ lastTradeAt: number | null;
267
+ graduatedAt: number | null;
268
+ poolId: string | null;
269
+ logo: string;
270
+ description: string;
271
+ routedHere: boolean;
272
+ source: string;
273
+ links: {
274
+ app: string | null;
275
+ token: string | null;
276
+ };
277
+ notes: string[];
278
+ } | {
231
279
  holders: number | null;
232
280
  volume24h: number | null;
233
281
  change24h: number | null;
package/dist/parabolic.js CHANGED
@@ -12,8 +12,9 @@ import { docsText } from "./docs.js";
12
12
  import { addrOf, amount, big, bool, endpointHost, num, parseAddress, parseAmount, safeMessage, shortAddr, str } from "./format.js";
13
13
  import { quoteBlock, quoteUnitOf, defaultQuoteOf } from "./quote-unit.js";
14
14
  import { RestApi } from "./restapi.js";
15
+ import { parseVenueRefInput } from "./venues.js";
15
16
  import { RoutedTrades } from "./routed.js";
16
- import { Subgraph } from "./subgraph.js";
17
+ import { COIN_FIELDS as SUBGRAPH_COIN_FIELDS, Subgraph } from "./subgraph.js";
17
18
  import { siteOf, takenRow, tickerToCheck, verdictLine } from "./ticker.js";
18
19
  import { encodeApprove, encodeBuy, encodeLaunch, encodeLaunchAndBuy, encodeMemoBuy, encodeMemoLaunch, encodeSell, MCP_LAUNCH_NOTE } from "./tx.js";
19
20
  /**
@@ -59,6 +60,10 @@ const slippageOf = (bps) => {
59
60
  return BigInt(v);
60
61
  };
61
62
  const bytesOf = (s) => new TextEncoder().encode(s).length;
63
+ /** The site's cursor (web/lib/data/queries.ts `cursorOf`): the launch second and the token address. */
64
+ const LIST_CURSOR = /^(\d{1,15})-(0x[0-9a-f]{40})$/;
65
+ /** One page of coins newest launch first, narrowed by `where` (the status, and the cursor's two branches). */
66
+ const COINS_PAGE = (fields) => `query CoinsPage($first: Int!, $where: Coin_filter) { coins(first: $first, where: $where, orderBy: createdAt, orderDirection: desc) { ${fields} } }`;
62
67
  /**
63
68
  * The chains this server can read with no configuration, named from the deployment records rather than
64
69
  * written out. Both refusals below offered "Arc mainnet opens on 16 September 2026" until 23 Sep 2026,
@@ -282,6 +287,15 @@ export class Parabolic {
282
287
  let coins;
283
288
  let source;
284
289
  let partial = false;
290
+ /* Paging by cursor reads the indexer page by page, so it needs one; the site's own list answers the same cursor
291
+ (`GET /api/v1/coins?after=`) for a client that reads it directly. A cursor that is not one is refused rather
292
+ than read as the first page, which a pager would loop on. */
293
+ let next;
294
+ const cursor = input.after === undefined ? undefined : input.after.trim().toLowerCase();
295
+ if (cursor !== undefined) {
296
+ if (cursor !== "" && !LIST_CURSOR.test(cursor))
297
+ throw new Error("after must be the `next` of an earlier list_coins answer, or empty to start at the newest coin");
298
+ }
285
299
  // Preferred over the log scan whenever there is no subgraph: one cached request instead of the
286
300
  // forty rate-limited eth_getLogs calls the scan needs, and it carries holders and volume.
287
301
  // The site's API describes the official deployment. Anyone who pointed PARABOLIC_FACTORY at a
@@ -298,7 +312,11 @@ export class Parabolic {
298
312
  // below against Arc's registry, which needs the unfiltered window to work from.
299
313
  const apiPair = input.pair === "Agents" ? undefined : input.pair;
300
314
  const apiLimit = input.pair === "Agents" ? Math.max(limit, AGENT_LOOKUP_MAX) : limit;
301
- const fromApi = this.subgraph === undefined && apiApplies ? await this.api.coins(input.status, apiLimit, sort, apiPair) : undefined;
315
+ if (cursor !== undefined && this.subgraph === undefined && !apiApplies)
316
+ throw new Error("Paging list_coins with `after` needs the indexer (PARABOLIC_SUBGRAPH_URL) or the site's API for this deployment");
317
+ const fromApi = this.subgraph === undefined && apiApplies ? await this.api.coins(input.status, apiLimit, sort, apiPair, cursor) : undefined;
318
+ if (cursor !== undefined && fromApi !== undefined)
319
+ next = fromApi.next ?? null;
302
320
  // "Agents" is not a property of the coin anywhere: not on the curve, not in the subgraph, not in
303
321
  // the API's JSON. It is read per creator from the registry, and where there is no registry the
304
322
  // answer is that the filter did not run, never a list that looks filtered.
@@ -309,7 +327,19 @@ export class Parabolic {
309
327
  // made-up scale, the same rule src/restapi.ts applies to the API's rows. Silence is the failure mode
310
328
  // the whole 20 September round is written against (docs/20-multichain.md §3).
311
329
  const unscalable = [];
312
- coins = (await this.subgraph.coins(where, 200)).flatMap((g) => {
330
+ let rows;
331
+ if (cursor !== undefined) {
332
+ const m = LIST_CURSOR.exec(cursor);
333
+ const base = where ?? {};
334
+ const paged = m ? { or: [{ ...base, createdAt_lt: m[1] }, { ...base, createdAt: m[1], id_lt: m[2] }] } : where ?? null;
335
+ rows = (await this.subgraph.query(COINS_PAGE(SUBGRAPH_COIN_FIELDS), { first: limit, where: paged })).coins;
336
+ const last = rows[rows.length - 1];
337
+ next = rows.length >= limit && last ? `${last.createdAt}-${last.id.toLowerCase()}` : null;
338
+ }
339
+ else {
340
+ rows = await this.subgraph.coins(where, 200);
341
+ }
342
+ coins = rows.flatMap((g) => {
313
343
  try {
314
344
  return [summaryFromGql(g, undefined, this.config.chainId)];
315
345
  }
@@ -355,7 +385,11 @@ export class Parabolic {
355
385
  if (input.pair === "USDC" || input.pair === "EURC")
356
386
  coins = coins.filter((c) => c.pair === input.pair);
357
387
  const ended = (s) => (s.endsWith(".") ? s : `${s}.`);
358
- let sorted = sortCoins(coins, sort);
388
+ // An Agents page read from the API by cursor keeps the API's own order (newest launch first), so the rows this
389
+ // answer consumes are a prefix of the page the API answered and `next` can follow the last of them (W1-8).
390
+ const agentPage = input.pair === "Agents" && cursor !== undefined && fromApi !== undefined && this.subgraph === undefined;
391
+ let sorted = agentPage ? coins : sortCoins(coins, sort);
392
+ let checkedTo;
359
393
  if (input.pair === "Agents") {
360
394
  const registry = this.config.agentRegistry;
361
395
  if (!registry) {
@@ -365,9 +399,11 @@ export class Parabolic {
365
399
  // Checked over the top of the sort rather than the whole window: one eth_call per creator is
366
400
  // cheap, a few hundred is not, and the coins that matter to a sorted list are at the top of it.
367
401
  const head = sorted.slice(0, AGENT_LOOKUP_MAX);
368
- const { agents, checked, failed } = await readAgentOwners(this.rpc, registry, head.map((c) => c.creator));
402
+ if (sorted.length > head.length)
403
+ checkedTo = head.at(-1);
404
+ const { agents, checked, failed } = await readAgentOwners(this.rpc, registry, head.flatMap((c) => (c.creator === null ? [] : [c.creator])));
369
405
  const unchecked = sorted.length - head.length;
370
- sorted = head.filter((c) => agents.has(c.creator.toLowerCase()));
406
+ sorted = head.filter((c) => c.creator !== null && agents.has(c.creator.toLowerCase()));
371
407
  // A registry that answered for nobody has not filtered anything, so the list stays empty and
372
408
  // says why: an empty board and an unreachable registry must not read the same.
373
409
  pairApplied = checked === 0 || failed < checked;
@@ -379,6 +415,20 @@ export class Parabolic {
379
415
  }
380
416
  }
381
417
  const out = sorted.slice(0, limit);
418
+ /* W1-8: the API was asked for a hundred rows to find `limit` agents in, so its `next` points past all hundred;
419
+ agent coins after the last one answered here, or past the last row the registry was asked about, were never
420
+ reachable by following it. `next` now follows the last row this answer consumed. */
421
+ if (agentPage && fromApi !== undefined) {
422
+ const consumed = out.length >= limit ? out.at(-1) : checkedTo;
423
+ const page = fromApi.coins;
424
+ const at = consumed === undefined ? -1 : page.indexOf(consumed);
425
+ if (consumed !== undefined && at >= 0 && at < page.length - 1) {
426
+ if (typeof consumed.createdAt === "number")
427
+ next = `${Math.max(0, Math.floor(consumed.createdAt))}-${consumed.address.toLowerCase()}`;
428
+ else
429
+ partial = true;
430
+ }
431
+ }
382
432
  // `chain` names the one chain this listing is about (a board is one chain at a time,
383
433
  // docs/20-multichain.md §3) and each coin carries the reference to name it anywhere else. Both are
384
434
  // added fields: `coins[].address` is what it always was.
@@ -393,6 +443,8 @@ export class Parabolic {
393
443
  count: out.length,
394
444
  partial,
395
445
  coins: out.map((c) => ({ ...c, ref: formatRef({ chainId, address: c.address }) })),
446
+ // Only when paging by `after`: the cursor for the following page, null on the last.
447
+ ...(next !== undefined ? { next } : {}),
396
448
  };
397
449
  }
398
450
  /**
@@ -479,6 +531,10 @@ export class Parabolic {
479
531
  }
480
532
  // ---- coin detail --------------------------------------------------------------------------------------------
481
533
  async getCoin(address) {
534
+ // Another launchpad's coin (`rhc:pons:0x…`): read through the site, which reads that launchpad (docs/52 P-D).
535
+ const venueRef = parseVenueRefInput(address);
536
+ if (venueRef)
537
+ return this.routed.getVenueCoin(venueRef);
482
538
  const launch = await this.resolveLaunch(address);
483
539
  const [chain, gql] = await Promise.all([this.chainDetail(launch), this.subgraph ? this.subgraph.coin(launch.token).catch(() => null) : Promise.resolve(null)]);
484
540
  /* `summaryFromGql` THROWS on an indexed row this package cannot scale (src/coins.ts), and this line sits