@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 +57 -33
- package/dist/coins.d.ts +2 -1
- package/dist/coins.js.map +1 -1
- package/dist/docs.js +3 -2
- package/dist/docs.js.map +1 -1
- package/dist/parabolic.d.ts +49 -1
- package/dist/parabolic.js +62 -6
- package/dist/parabolic.js.map +1 -1
- package/dist/restapi.d.ts +66 -1
- package/dist/restapi.js +83 -3
- package/dist/restapi.js.map +1 -1
- package/dist/routed.d.ts +50 -2
- package/dist/routed.js +81 -17
- package/dist/routed.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +18 -2
- package/dist/server.js.map +1 -1
- package/dist/venue-history.d.ts +19 -0
- package/dist/venue-history.js +63 -0
- package/dist/venue-history.js.map +1 -0
- package/dist/venues.d.ts +49 -0
- package/dist/venues.js +28 -0
- package/dist/venues.js.map +1 -1
- package/package.json +1 -1
- package/src/coins.ts +2 -1
- package/src/docs.ts +3 -2
- package/src/parabolic.ts +61 -7
- package/src/restapi.ts +76 -5
- package/src/routed.ts +74 -15
- package/src/server.ts +23 -2
- package/src/venue-history.ts +69 -0
- package/src/venues.ts +43 -0
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
|
|
22
|
-
unique symbol
|
|
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
|
|
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
|
|
122
|
-
|
|
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
|
|
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
|
|
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
|
|
154
|
-
every `build_*` tool read the chain directly
|
|
155
|
-
|
|
156
|
-
`
|
|
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,
|
|
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
|
|
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
|
|
332
|
-
server.ts
|
|
333
|
-
parabolic.ts
|
|
334
|
-
curve.ts
|
|
335
|
-
tx.ts
|
|
336
|
-
agents.ts
|
|
337
|
-
chain.ts
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
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
|
|
366
|
-
- Protocol parameters, deployed addresses and the public read API
|
|
367
|
-
- Questions and bug reports
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAgB,MAAM,MAAM,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAE/F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,CAAU,CAAC;
|
|
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
|
|
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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"}
|
package/dist/parabolic.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|