@ostraagent/mcp 0.1.1 → 0.1.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
@@ -47,7 +47,7 @@ Keep the file and the passphrase off the machine. On a new machine, run `npx -y
47
47
  - **Privacy:** `shield`, `shield_status`, `auto_shield`, `unshield`, `private_withdraw`
48
48
  - **Recovery:** `recovery_status`, `set_guardian`, `set_recovery_policy`, `cancel_recovery`, `support_recovery`, `request_recovery`
49
49
  - **Trading:** `tokens`, `token_info`, `pool_info`, `quote_swap`, `buy`, `sell`, `token_vault`, `transfer_token`, `claim_dividends`, `claim_referral`
50
- - **Launching:** `pairs`, `launch` (paired with USDG, ETH or a listed Robinhood stock token, at a starting market cap in US dollars, with an optional dev buy and vesting), `launches`, `set_pool_setting`, `set_creator_share`, `release_creator_payout`, `airdrop_fund`, `airdrop_start`, `airdrop_claim`, `airdrop_close`, `vesting_info`, `vesting_release`, `vesting_claim_dividends`
50
+ - **Launching:** `pairs`, `launch` (paired with USDG, ETH, $OSTRA or a listed Robinhood stock token, at a starting market cap in US dollars, with an optional dev buy and vesting), `launches`, `set_pool_setting`, `set_creator_share`, `release_creator_payout`, `airdrop_fund`, `airdrop_start`, `airdrop_claim`, `airdrop_close`, `vesting_info`, `vesting_release`, `vesting_claim_dividends`
51
51
  - **Identity:** `profile`, `upload_image`, `publish_profile`, `set_profile`, `publish_token_metadata`, `set_token_metadata`, `register_agent`, `set_agent_uri`
52
52
 
53
53
  Every spend is simulated before its one-time key signs it. When a tool refuses, the error says whether it refused before anything was signed.
package/dist/ostra-mcp.js CHANGED
@@ -18,7 +18,7 @@ var __export = (target, all) => {
18
18
  var define_OSTRA_PACKAGED_default;
19
19
  var init_define_OSTRA_PACKAGED = __esm({
20
20
  "<define:OSTRA_PACKAGED>"() {
21
- define_OSTRA_PACKAGED_default = { version: "0.1.1", deployment: { version: 1, chainId: 4663, fromBlock: "91991509", token: "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168", batchSettlement: "0x4020074e9dF2ce1deE5A9C1b5c3f541D02a10003", vaultImplementation: "0xa455cbf5Aa10cE858f3b250dc791FCD900e950BC", vaultBeacon: "0xE9F525B9EaeE48d13AEd28fE146F48f2832a18a0", vaultFactory: "0x043a15c514CFE2c797d33520bFF91a5DCdbf2979", poolImplementation: "0xC04d4a222dC1C966640B977608bE29949b0648ec", poolBeacon: "0x30669Ca534921038a531BBE27116d85bB7406fFF", pool: "0x6ea80F2462e5Fd783B0Ec3B2c7BaC96795980CD6", splitFactory: "0xAAf54A483B2c7c2c5ecFc1eDED5ed1619C1bA882", beaconOwner: "0x55533a51d9bd9b06F2D179d919BB31995EF96E5e", launchpad: { hook: "0x63A784afb8905452aDceC471a45E555F5caE68cC", fees: "0x8e79671DC9729476614C78aFcf2345D4c1963801", launchpad: "0xfC57162C0e3f9773F97fEa8d276e957d7c43A6C5", creatorSplit: "0x987994dE6A1d5303B9e3F50977cB0321BA4D033B", dispatcher: "0x44Bb65164b2855f8E80B142d5Fb9bDb72E869986", locker: "0xb593812363bAd70Ee381c7B54c4FC82b0BA3A4A7", devBuy: "0x0e1Fd799E136dcfEcad5695B07Ac5DAc5B2fF4bc", vesting: "0xadD9C1995910457312c156E7D8120D1b447E179a", airdrop: "0xBC798D956aF4c2B104FFC6106d5322294Bc103bb", owner: "0x6569E27A95a6A3E92A311B4Cc6600fed56aA50A2" } }, relayerUrl: "https://relayer.ostraagent.xyz", keeperUrl: "https://keeper.ostraagent.xyz", aggregatorUrl: "https://aggregator.ostraagent.xyz" };
21
+ define_OSTRA_PACKAGED_default = { version: "0.1.2", deployment: { version: 1, chainId: 4663, fromBlock: "91991509", token: "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168", batchSettlement: "0x4020074e9dF2ce1deE5A9C1b5c3f541D02a10003", vaultImplementation: "0xa455cbf5Aa10cE858f3b250dc791FCD900e950BC", vaultBeacon: "0xE9F525B9EaeE48d13AEd28fE146F48f2832a18a0", vaultFactory: "0x043a15c514CFE2c797d33520bFF91a5DCdbf2979", poolImplementation: "0xC04d4a222dC1C966640B977608bE29949b0648ec", poolBeacon: "0x30669Ca534921038a531BBE27116d85bB7406fFF", pool: "0x6ea80F2462e5Fd783B0Ec3B2c7BaC96795980CD6", splitFactory: "0xAAf54A483B2c7c2c5ecFc1eDED5ed1619C1bA882", beaconOwner: "0x55533a51d9bd9b06F2D179d919BB31995EF96E5e", launchpad: { hook: "0x63A784afb8905452aDceC471a45E555F5caE68cC", fees: "0x8e79671DC9729476614C78aFcf2345D4c1963801", launchpad: "0xfC57162C0e3f9773F97fEa8d276e957d7c43A6C5", creatorSplit: "0x987994dE6A1d5303B9e3F50977cB0321BA4D033B", dispatcher: "0x44Bb65164b2855f8E80B142d5Fb9bDb72E869986", locker: "0xb593812363bAd70Ee381c7B54c4FC82b0BA3A4A7", devBuy: "0x0e1Fd799E136dcfEcad5695B07Ac5DAc5B2fF4bc", vesting: "0xadD9C1995910457312c156E7D8120D1b447E179a", airdrop: "0xBC798D956aF4c2B104FFC6106d5322294Bc103bb", owner: "0x6569E27A95a6A3E92A311B4Cc6600fed56aA50A2" } }, relayerUrl: "https://relayer.ostraagent.xyz", keeperUrl: "https://keeper.ostraagent.xyz", aggregatorUrl: "https://aggregator.ostraagent.xyz" };
22
22
  }
23
23
  });
24
24
 
@@ -11721,7 +11721,7 @@ var init_hash = __esm({
11721
11721
  });
11722
11722
 
11723
11723
  // ../sdk/src/constants.ts
11724
- var ROBINHOOD_CHAIN_ID, ROBINHOOD_PUBLIC_RPC, USDG, USDG_EIP712_DOMAIN, X402_BATCH_SETTLEMENT, X402_BATCH_SETTLEMENT_DOMAIN, X402_MIN_WITHDRAW_DELAY, X402_MAX_WITHDRAW_DELAY, UNISWAP_V4_POOL_MANAGER, CHAINLINK_ETH_USD, CHAINLINK_ETH_USD_DECIMALS, ERC8004_IDENTITY_REGISTRY, WETH, MULTICALL3, ARBITRUM_NODE_INTERFACE, MAX_FEE_BPS, DEPOSIT_TIMEOUT_SECONDS, VAULT_SWAP_GAS_RESERVE, VAULT_VERSION, VAULT_MAX_URI_LENGTH, VAULT_ACTION, MIN_RECOVERY_DELAY, MAX_RECOVERY_DELAY, POOL_SETTING, CIRCUIT_BREAKER, VAULT_SWAP_GAS, LAUNCHPAD, DEV_BUY, AIRDROP, CREATOR_SPLIT, DEPOSIT_STATUS, BATCH_STATUS;
11724
+ var ROBINHOOD_CHAIN_ID, ROBINHOOD_PUBLIC_RPC, USDG, USDG_EIP712_DOMAIN, X402_BATCH_SETTLEMENT, X402_BATCH_SETTLEMENT_DOMAIN, X402_MIN_WITHDRAW_DELAY, X402_MAX_WITHDRAW_DELAY, UNISWAP_V4_POOL_MANAGER, CHAINLINK_ETH_USD, CHAINLINK_ETH_USD_DECIMALS, ERC8004_IDENTITY_REGISTRY, WETH, OSTRA, OSTRA_DECIMALS, OSTRA_PONS_CURVE, MULTICALL3, ARBITRUM_NODE_INTERFACE, MAX_FEE_BPS, DEPOSIT_TIMEOUT_SECONDS, VAULT_SWAP_GAS_RESERVE, VAULT_VERSION, VAULT_MAX_URI_LENGTH, VAULT_ACTION, MIN_RECOVERY_DELAY, MAX_RECOVERY_DELAY, POOL_SETTING, CIRCUIT_BREAKER, VAULT_SWAP_GAS, LAUNCHPAD, DEV_BUY, AIRDROP, CREATOR_SPLIT, DEPOSIT_STATUS, BATCH_STATUS;
11725
11725
  var init_constants = __esm({
11726
11726
  "../sdk/src/constants.ts"() {
11727
11727
  "use strict";
@@ -11744,6 +11744,9 @@ var init_constants = __esm({
11744
11744
  CHAINLINK_ETH_USD_DECIMALS = 8;
11745
11745
  ERC8004_IDENTITY_REGISTRY = "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432";
11746
11746
  WETH = "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73";
11747
+ OSTRA = "0x68Ff81dFFF6eccefb74706fE1e0a86320CB2Eb96";
11748
+ OSTRA_DECIMALS = 18;
11749
+ OSTRA_PONS_CURVE = "0xef89C3a9832Ae6f8Dc5F785484b1B5cb1120F372";
11747
11750
  MULTICALL3 = "0xcA11bde05977b3631167028862bE2a173976CA11";
11748
11751
  ARBITRUM_NODE_INTERFACE = "0x00000000000000000000000000000000000000C8";
11749
11752
  MAX_FEE_BPS = 500;
@@ -12120,7 +12123,7 @@ var init_deployment = __esm({
12120
12123
 
12121
12124
  // ../sdk/src/external-abi.ts
12122
12125
  import { parseAbi } from "viem";
12123
- var usdgAbi, chainlinkAggregatorAbi, multicall3Abi, nodeInterfaceAbi;
12126
+ var usdgAbi, chainlinkAggregatorAbi, ponsCurveAbi, multicall3Abi, nodeInterfaceAbi;
12124
12127
  var init_external_abi = __esm({
12125
12128
  "../sdk/src/external-abi.ts"() {
12126
12129
  "use strict";
@@ -12147,6 +12150,13 @@ var init_external_abi = __esm({
12147
12150
  "function description() view returns (string)",
12148
12151
  "function latestRoundData() view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)"
12149
12152
  ]);
12153
+ ponsCurveAbi = parseAbi([
12154
+ "function token() view returns (address)",
12155
+ "function graduated() view returns (bool)",
12156
+ "function graduationThreshold() view returns (uint256)",
12157
+ "function getReserves() view returns (uint256 ethReserve, uint256 tokenReserve)",
12158
+ "function buy(uint256 ethIn, uint256 minTokensOut, address recipient) payable returns (uint256 tokensOut)"
12159
+ ]);
12150
12160
  multicall3Abi = parseAbi([
12151
12161
  "struct Call3 { address target; bool allowFailure; bytes callData; }",
12152
12162
  "struct Result { bool success; bytes returnData; }",
@@ -13631,6 +13641,17 @@ async function readPairUsdPrice(client, quote) {
13631
13641
  throw new Error(`the ${quote.symbol}/USD price was last updated ${Math.round((now3 - updatedAt) / 3600)} hours ago, older than ${Math.round(maxAge / 3600)} hours; try again once the feed updates`);
13632
13642
  }
13633
13643
  let priceE8 = answer;
13644
+ if (quote.kind === "ostra") {
13645
+ const [graduated, reserves] = await Promise.all([
13646
+ client.readContract({ address: OSTRA_PONS_CURVE, abi: ponsCurveAbi, functionName: "graduated" }),
13647
+ client.readContract({ address: OSTRA_PONS_CURVE, abi: ponsCurveAbi, functionName: "getReserves" })
13648
+ ]);
13649
+ if (graduated) throw new Error("OSTRA has graduated from its Pons curve and migrated; its price is not read from its new pool yet");
13650
+ const [ethReserve, tokenReserve] = reserves;
13651
+ if (ethReserve <= 0n || tokenReserve <= 0n) throw new Error(`the OSTRA Pons curve reports reserves of ${ethReserve} wei and ${tokenReserve} tokens`);
13652
+ priceE8 = answer * ethReserve / tokenReserve;
13653
+ if (priceE8 < 100n) throw new Error(`OSTRA's price (${priceE8} x 0.00000001 USD) is too small to set a market cap in within 1%`);
13654
+ }
13634
13655
  if (quote.kind === "stock") {
13635
13656
  const multiplier = await client.readContract({ address: quote.address, abi: stockTokenAbi, functionName: "uiMultiplier" });
13636
13657
  if (multiplier <= 0n) throw new Error(`${quote.symbol} reports a uiMultiplier of ${multiplier}`);
@@ -13663,6 +13684,7 @@ var init_pairs = __esm({
13663
13684
  LAUNCH_PAIRS = [
13664
13685
  { symbol: "USDG", name: "Global Dollar", kind: "usdg", address: USDG, decimals: 6, feed: null },
13665
13686
  { symbol: "ETH", name: "Ether", kind: "eth", address: zeroAddress6, decimals: 18, feed: CHAINLINK_ETH_USD },
13687
+ { symbol: "OSTRA", name: "Ostra Agent", kind: "ostra", address: OSTRA, decimals: OSTRA_DECIMALS, feed: CHAINLINK_ETH_USD },
13666
13688
  stock("AAPL", "Apple", "0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9", "0x6B22A786bAa607d76728168703a39Ea9C99f2cD0"),
13667
13689
  stock("AMZN", "Amazon", "0x12f190a9F9d7D37a250758b26824B97CE941bF54", "0xD5a1508ceD74c084eBf3cBe853e2C968fB2a651C"),
13668
13690
  stock("ASML", "ASML Holding", "0x47F93d52cBeC7C6D2CfC080e154002370a60dAEA", "0xB4106147E8cce40b7d46124090d373A71b70f87D"),
@@ -16624,8 +16646,8 @@ var init_launchpad = __esm({
16624
16646
  }
16625
16647
  /**
16626
16648
  * The agent's creator vault for `pairText` and the sender of its operations:
16627
- * for USDG the USDG creator vault and its own relayer client; for a stock
16628
- * token or ETH, the creator vault in that token (WETH for ETH), paid for by
16649
+ * for USDG the USDG creator vault and its own relayer client; for OSTRA, a
16650
+ * stock token or ETH, the creator vault in that token (WETH for ETH), paid for by
16629
16651
  * the buyer vault.
16630
16652
  */
16631
16653
  async pairCreator(pairText) {
@@ -16735,7 +16757,7 @@ var init_launchpad = __esm({
16735
16757
  throw new Error(`the pool of ${pool.token} trades against ETH: an Ostra vault holds one ERC-20 and cannot pay or take native ETH, so this pool is traded from a wallet; nothing was signed`);
16736
16758
  }
16737
16759
  const pair3 = findLaunchPair(quote);
16738
- if (pair3 === null) throw new Error(`the pool of ${pool.token} trades against ${quote}, not a pair Ostra offers (USDG, ETH or a listed stock token); nothing was signed`);
16760
+ if (pair3 === null) throw new Error(`the pool of ${pool.token} trades against ${quote}, not a pair Ostra offers (USDG, ETH, OSTRA or a listed stock token); nothing was signed`);
16739
16761
  const referrer = a.referrer === void 0 ? void 0 : address2(a.referrer, "referrer");
16740
16762
  const quoteIs0 = getAddress16(pool.key.currency0) === quote;
16741
16763
  const buying = a.side === "buy";
@@ -16781,7 +16803,7 @@ var init_launchpad = __esm({
16781
16803
  }
16782
16804
  throw new Error(`transaction ${txHash} has no Swap of ${vault}`);
16783
16805
  }
16784
- /** Buys `token` with `amount` of its pool's pair (USDG from the buyer vault, a stock token from its token vault), into the agent's token vault. */
16806
+ /** Buys `token` with `amount` of its pool's pair (USDG from the buyer vault, OSTRA or a stock token from its token vault), into the agent's token vault. */
16785
16807
  buy(a) {
16786
16808
  return this.#swap({ ...a, side: "buy" });
16787
16809
  }
@@ -16891,7 +16913,7 @@ var init_launchpad = __esm({
16891
16913
  /**
16892
16914
  * Moves `amount` into the creator vault of `pairText` (default USDG): USDG
16893
16915
  * from the buyer vault (a launch's dev buy and the USDG creator vault's
16894
- * relayer requests are paid from it); a stock token or WETH from the
16916
+ * relayer requests are paid from it); OSTRA, a stock token or WETH from the
16895
16917
  * agent's token vault of it (what a dev buy in that pair is paid from). The
16896
16918
  * creator vault is created first when it does not exist yet.
16897
16919
  */
@@ -16921,7 +16943,7 @@ var init_launchpad = __esm({
16921
16943
  async creatorWithdraw(a) {
16922
16944
  const { pair: pair3, vault: creator, sender } = await this.pairCreator(a.pair ?? "USDG");
16923
16945
  const token = this.#pairToken(pair3);
16924
- if (pair3.kind !== "usdg" && pair3.kind !== "stock" && a.destination === void 0) throw new RangeError(`a ${pair3.symbol} creator vault holds WETH: name the destination`);
16946
+ if (pair3.kind === "eth" && a.destination === void 0) throw new RangeError(`a ${pair3.symbol} creator vault holds WETH: name the destination`);
16925
16947
  const destination = a.destination === void 0 ? await this.tokenVault(token).vaultAddress() : address2(a.destination, "destination");
16926
16948
  await this.#notStranded(destination, token, `the ${pair3.symbol} creator vault's transfer`);
16927
16949
  if (pair3.kind === "usdg") return creator.withdraw(destination, a.amount);
@@ -17102,7 +17124,7 @@ var init_launchpad = __esm({
17102
17124
  // ---------------------------------------------------------------------------
17103
17125
  // Airdrops
17104
17126
  // ---------------------------------------------------------------------------
17105
- /** Buys `amount` of the pool's pair worth of the token from its creator vault into OstraAirdrop, for the pool's next round (USDG and stock pools). */
17127
+ /** Buys `amount` of the pool's pair worth of the token from its creator vault into OstraAirdrop, for the pool's next round (USDG, OSTRA and stock pools). */
17106
17128
  async airdropFund(a) {
17107
17129
  const lp = this.#lp();
17108
17130
  const { pool, pair: pair3, creator, sender } = await this.#ownPool(a.token);
@@ -19112,14 +19134,14 @@ function registerTools(server, agent) {
19112
19134
  tool("pool_info", "A token the Ostra launchpad launched: price, market cap, taxes, circuit breaker band, airdrop round, creator shares.", { token: address3 }, (a) => lp().poolInfo(a.token));
19113
19135
  tool(
19114
19136
  "quote_swap",
19115
- "Quotes a buy (the pool's pair in: USDG or a stock token) or sell (token in) as it would be signed now: expected and minimum output, the gas the swap reserves, the share of the circuit breaker's room used. Nothing is signed.",
19137
+ "Quotes a buy (the pool's pair in: USDG, OSTRA or a stock token) or sell (token in) as it would be signed now: expected and minimum output, the gas the swap reserves, the share of the circuit breaker's room used. Nothing is signed.",
19116
19138
  { side: z.enum(["buy", "sell"]), token: address3, amount: units, slippageBps: slippage2, referrer: address3.optional() },
19117
19139
  (a) => lp().quote({ side: a.side, token: a.token, amount: a.amount, ...a.slippageBps === void 0 ? {} : { slippageBps: a.slippageBps }, ...a.referrer === void 0 ? {} : { referrer: a.referrer } })
19118
19140
  );
19119
19141
  tool(
19120
19142
  "buy",
19121
- "Buys a launched token with its pool's pair: USDG from the vault, or a stock token from the agent's vault of that stock token (pairs: tradingVault). The tokens go to the agent's vault for that token (created in the same transaction). An ETH pool is traded from a wallet, not a vault.",
19122
- { token: address3, amount: units.describe("in the pool's pair: USDG (6 decimals) or the stock token (18)"), slippageBps: slippage2, referrer: address3.optional() },
19143
+ "Buys a launched token with its pool's pair: USDG from the vault, or OSTRA or a stock token from the agent's vault of that token (pairs: tradingVault). The tokens go to the agent's vault for that token (created in the same transaction). An ETH pool is traded from a wallet, not a vault.",
19144
+ { token: address3, amount: units.describe("in the pool's pair: USDG (6 decimals), OSTRA or the stock token (18)"), slippageBps: slippage2, referrer: address3.optional() },
19123
19145
  (a) => lp().buy({ token: a.token, amount: a.amount, ...a.slippageBps === void 0 ? {} : { slippageBps: a.slippageBps }, ...a.referrer === void 0 ? {} : { referrer: a.referrer } })
19124
19146
  );
19125
19147
  tool(
@@ -19139,14 +19161,14 @@ function registerTools(server, agent) {
19139
19161
  );
19140
19162
  tool(
19141
19163
  "pairs",
19142
- "The pairs a launch can take (USDG, ETH and the listed stock tokens), each with its USD price now, this agent's creator vault for it (what that pair's dev buys are paid from, and what owns its pools and receives their creator payouts) and the agent's vault of its token (what its pools are bought with).",
19164
+ "The pairs a launch can take (USDG, ETH, OSTRA and the listed stock tokens), each with its USD price now, this agent's creator vault for it (what that pair's dev buys are paid from, and what owns its pools and receives their creator payouts) and the agent's vault of its token (what its pools are bought with).",
19143
19165
  {},
19144
19166
  () => lp().pairs({ prices: true })
19145
19167
  );
19146
19168
  tool(
19147
19169
  "fund_creator_vault",
19148
- "Moves funds into the creator vault of a pair (default USDG): USDG from the vault (USDG launches, dev buys, airdrops and the USDG creator vault's relayer requests); a stock token or WETH from the agent's vault of it. Funds can also be sent straight to a pair's creator vault (pairs).",
19149
- { amount: units.describe("in the pair's token: USDG (6 decimals), WETH or the stock token (18)"), pair: pair2.optional() },
19170
+ "Moves funds into the creator vault of a pair (default USDG): USDG from the vault (USDG launches, dev buys, airdrops and the USDG creator vault's relayer requests); OSTRA, a stock token or WETH from the agent's vault of it. Funds can also be sent straight to a pair's creator vault (pairs).",
19171
+ { amount: units.describe("in the pair's token: USDG (6 decimals), WETH, OSTRA or the stock token (18)"), pair: pair2.optional() },
19150
19172
  (a) => lp().fundCreatorVault(a.amount, a.pair ?? "USDG")
19151
19173
  );
19152
19174
  tool(
@@ -19157,11 +19179,11 @@ function registerTools(server, agent) {
19157
19179
  );
19158
19180
  tool(
19159
19181
  "launch",
19160
- "Launches a token on the Ostra launchpad (1 billion supply) paired with USDG (default), ETH or a listed stock token (pairs), from the agent's creator vault of that pair, optionally with a dev buy in the pair's token paid by that creator vault in the same transaction and vesting to the agent's token vault. The market cap is in US dollars, set in the pair's token at its price now (Chainlink for ETH and stocks). The relayer fronts the 0.0002 ETH launch fee and charges it in USDG. The launch is simulated first; nothing is signed if it would fail. `options` sets LaunchParams fields (taxes, buckets, anti-snipe, limits, graduation, circuit breaker) beyond Ostra's defaults.",
19182
+ "Launches a token on the Ostra launchpad (1 billion supply) paired with USDG (default), ETH, OSTRA or a listed stock token (pairs), from the agent's creator vault of that pair, optionally with a dev buy in the pair's token paid by that creator vault in the same transaction and vesting to the agent's token vault. The market cap is in US dollars, set in the pair's token at its price now (Chainlink for ETH and stocks; OSTRA at Chainlink ETH/USD times its bonding curve's price). The relayer fronts the 0.0002 ETH launch fee and charges it in USDG. The launch is simulated first; nothing is signed if it would fail. `options` sets LaunchParams fields (taxes, buckets, anti-snipe, limits, graduation, circuit breaker) beyond Ostra's defaults.",
19161
19183
  {
19162
19184
  name: z.string().min(1).max(64),
19163
19185
  symbol: z.string().regex(/^[A-Za-z0-9]{1,11}$/),
19164
- pair: pair2.optional().describe("the pool's pair: USDG (default), ETH or a listed stock token's ticker"),
19186
+ pair: pair2.optional().describe("the pool's pair: USDG (default), ETH, OSTRA or a listed stock token's ticker"),
19165
19187
  marketCap: usdg.optional().describe("the starting market cap in US dollars (or startTick)"),
19166
19188
  startTick: z.number().int().optional(),
19167
19189
  devBuy: z.object({ amount: units.describe("in the pair's token"), cliffDays: z.number().min(7).max(365).optional(), vestingDays: z.number().min(0).max(365).optional() }).optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ostraagent/mcp",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Ostra Agent's MCP server: an AI agent's own post-quantum USDG vault on Robinhood Chain, with payments, a shielded pool and the Ostra launchpad. The agent needs no ETH.",
5
5
  "keywords": [
6
6
  "mcp",