gage-mcp 0.8.0 → 0.9.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.0
4
+
5
+ Built on exactly gage-sdk 0.9.0; what it changes for every tool is in its changelog.
6
+
7
+ - **Mainnet's LP lane takes Ouro v3 positions,** as gage-sdk's bundled release says, and the instructions and tools name it.
8
+ - **Reserve LP vaults, once a release names them,** as gage-sdk reads them: `gage_lp_vaults` adds a reserve vault's `reserve`,
9
+ `gage_portfolio`'s `lp.vaults` its `sgageClaimable`, and `gage_lp_redeem` pays above its free cash, up to `maxRedeem`. An LP
10
+ vault with no reserve reads and acts as before.
11
+ - **`gage_lp_claim_rewards` and `gage_prepare_lp_claim_rewards`, new,** claim a holder's sGAGE from a reserve vault. They are
12
+ served where the lane names its rewards bridge: on the testnet and on mainnet since 7 November 2026, so mainnet serves the claim's
13
+ prepare without a key (59 tools) and both with one (102). A claim
14
+ moves no USDG and counts against no limit; the limits' amounts and defaults are unchanged.
15
+
3
16
  ## 0.8.0
4
17
 
5
18
  Built on exactly gage-sdk 0.8.0; what it changes for every tool is in its changelog, whose Breaking list a client reading
package/README.md CHANGED
@@ -6,7 +6,7 @@ the lenders keep the collateral and nothing else is taken). **Robinhood Chain (4
6
6
  lift, and its testnet (46630, see Testnet).
7
7
 
8
8
  ```bash
9
- npx -y gage-mcp@0.8.0 init
9
+ npx -y gage-mcp@0.9.0 init
10
10
  ```
11
11
 
12
12
  `init` makes the agent's own wallet on this computer: its key in `~/.gage/agent-4663.key`, readable only by this user,
@@ -15,14 +15,14 @@ Nobody funds it but you: send it only what the agent may use, and a little ETH f
15
15
  agent:
16
16
 
17
17
  ```bash
18
- claude mcp add gage -- npx -y gage-mcp@0.8.0 # Claude Code
19
- codex mcp add gage -- npx -y gage-mcp@0.8.0 # Codex
18
+ claude mcp add gage -- npx -y gage-mcp@0.9.0 # Claude Code
19
+ codex mcp add gage -- npx -y gage-mcp@0.9.0 # Codex
20
20
  ```
21
21
 
22
22
  Any client with an `mcpServers` file (Claude Desktop, Cursor, Hermes, …):
23
23
 
24
24
  ```json
25
- { "mcpServers": { "gage": { "command": "npx", "args": ["-y", "gage-mcp@0.8.0"] } } }
25
+ { "mcpServers": { "gage": { "command": "npx", "args": ["-y", "gage-mcp@0.9.0"] } } }
26
26
  ```
27
27
 
28
28
  Each command names a release, as the server holds the wallet's key. A token gage admits after that release is refused
@@ -57,12 +57,13 @@ its own set. Each network serves what its deployment can carry out:
57
57
  partner vault, and `gage_unpark` takes it back out into a new position in a range of the pool it came from, each with
58
58
  its preview, their transactions built from one reading of the chain and sent in order. ETH is not parked yet.
59
59
  - where a release makes gage's LP lane public (fixed-cost USDG loans against an ETH/USDG liquidity position on Uniswap
60
- v3 or v4, SushiSwap v3, Ramses or Fables, never closed early because a price moves; a loan not repaid by its end
60
+ v3 or v4, SushiSwap v3, Ouro v3, Ramses or Fables, never closed early because a price moves; a loan not repaid by its end
61
61
  leaves its position to its lenders; a Uniswap v4 position leaves any subscription it has when it is pledged): four
62
62
  reads (`gage_lp_positions`, `gage_lp_quote`, `gage_lp_loans`, `gage_lp_vaults`) and its actions, each with its
63
63
  preview: `gage_lp_borrow`, `gage_lp_repay`, `gage_lp_roll` (a new loan on the same position before the old one's
64
64
  end, only the difference moving), `gage_lp_return_position`, `gage_lp_collect`, `gage_lp_withdraw`,
65
- `gage_lp_deposit`, `gage_lp_redeem` and `gage_lp_claim_bonus`, and where the release lends against Fables,
65
+ `gage_lp_deposit`, `gage_lp_redeem` and `gage_lp_claim_bonus`, where the release names the lane's rewards bridge
66
+ `gage_lp_claim_rewards`, and where the release lends against Fables,
66
67
  `gage_lp_wrap` and `gage_lp_unwrap`: `gage_lp_borrow` takes Fables receipts not wrapped yet by their `rangeId` and
67
68
  wraps them into a position first. Stock LPs (a Stock Token paired with USDG) borrow too, priced only while their
68
69
  market is open. A vault funds loans only in the pools of its mandate; its curator adds a pool
@@ -70,7 +71,11 @@ its own set. Each network serves what its deployment can carry out:
70
71
  the release names the lane's vault factory a wallet the registry lets open one (a curator it allows, or anyone once
71
72
  it opens vault creation) opens one (`gage_lp_create_vault`). An LP vault is an ERC-4626 whose shares (`gLP`, raw
72
73
  in the vault's own `shareDecimals`) move between wallets: `gage_lp_redeem` redeems the wallet's own, wherever they
73
- came from.
74
+ came from, up to what the vault can pay now: its free cash, and a reserve vault's reserve too. A reserve vault
75
+ (`gage_lp_vaults` lists it with a `reserve`) keeps its cash past its curator's buffer in an outside ERC-4626, whose
76
+ return moves and which carries its own risk, and pays its holders sGAGE from its loans, outside the share price:
77
+ `gage_portfolio` says what a wallet may claim (`lp.vaults` `sgageClaimable`), and `gage_lp_claim_rewards` claims it,
78
+ moving no USDG.
74
79
  `gage_lp_vaults` lists the release's vaults and the curators', each with its curator, its pools in plain words and
75
80
  whether the registry still lets it lend. Mainnet serves all of them since the lane went public.
76
81
  - where a release names the chain's exit desk, exit now, for a holder whose balance in a partner vault is more than the
@@ -107,19 +112,19 @@ every step on gage.cash, the hosted server is the one to use (Steward, /agents/s
107
112
  `GAGE_NETWORK=testnet` serves Robinhood Chain testnet, with test assets only:
108
113
 
109
114
  ```bash
110
- GAGE_NETWORK=testnet npx -y gage-mcp@0.8.0 init
115
+ GAGE_NETWORK=testnet npx -y gage-mcp@0.9.0 init
111
116
  ```
112
117
 
113
118
  makes the agent's testnet wallet (`~/.gage/agent-46630.key`, apart from the mainnet one) and funds it from gage's
114
119
  faucet. Then add the server, told its network:
115
120
 
116
121
  ```bash
117
- claude mcp add gage -e GAGE_NETWORK=testnet -- npx -y gage-mcp@0.8.0 # Claude Code
118
- codex mcp add gage --env GAGE_NETWORK=testnet -- npx -y gage-mcp@0.8.0 # Codex
122
+ claude mcp add gage -e GAGE_NETWORK=testnet -- npx -y gage-mcp@0.9.0 # Claude Code
123
+ codex mcp add gage --env GAGE_NETWORK=testnet -- npx -y gage-mcp@0.9.0 # Codex
119
124
  ```
120
125
 
121
126
  ```json
122
- { "mcpServers": { "gage": { "command": "npx", "args": ["-y", "gage-mcp@0.8.0"], "env": { "GAGE_NETWORK": "testnet" } } } }
127
+ { "mcpServers": { "gage": { "command": "npx", "args": ["-y", "gage-mcp@0.9.0"], "env": { "GAGE_NETWORK": "testnet" } } } }
123
128
  ```
124
129
 
125
130
  ## Spend limits
@@ -136,8 +141,8 @@ Amounts of USDG, whole or with up to six decimals; 0 stops that kind of action,
136
141
  setting stops the server from starting. Whether the agent signs under limits is your choice: with all four `off` it
137
142
  signs without any. On the testnet only the limits you set apply. Repaying (an LP loan too), taking an LP position back,
138
143
  cashing out, withdrawing, unparking, exiting a partner vault or a rehypo pool now and listing an exit's next loan,
139
- cancelling, collecting and claiming an LP vault's bonus are not limited: they bring money or collateral back to the
140
- wallet. A roll counts only what
144
+ cancelling, collecting and claiming an LP vault's bonus or sGAGE are not limited: they bring money or collateral back
145
+ to the wallet, or move no USDG. A roll counts only what
141
146
  it borrows beyond the loan it repays, and the server rolls at the same size, so nothing; leaving a loan to roll by
142
147
  itself, or ending that, moves nothing. A put's margin in USDG counts against the deposit limits, as all it can lose; the
143
148
  token it borrows does not count. Nor are actions in an asset other than USDG limited, nor creating or managing a partner
package/dist/limits.d.ts CHANGED
@@ -15,7 +15,7 @@ export interface Limits {
15
15
  /** Mainnet's limits where the owner sets none (the founder, 18 October 2026). */
16
16
  export declare const MAINNET_LIMITS: Limits;
17
17
  /** What the limits leave free (`NOT_LIMITED`), in words, for the guide, `init` and `gage_limits`. */
18
- export declare const NOT_LIMITED_WORDS = "Repaying (an LP loan too), taking an LP position back, cashing out, rolling a loan over at the same size (an LP loan to one no larger), leaving a loan to roll by itself or ending that, withdrawing, unparking, exiting a partner vault or a rehypo pool now and listing an exit's next loan, cancelling, collecting, claiming an LP vault's bonus, wrapping or unwrapping Fables receipts, a curator's opening an LP vault or changing its pools, creating or managing a partner vault and rating gage are not limited, nor are actions in an asset other than USDG. A partner vault's fee recipient stays this wallet while any limit is on, unless its owner names another (GAGE_ALLOW_FEE_RECIPIENT).";
18
+ export declare const NOT_LIMITED_WORDS = "Repaying (an LP loan too), taking an LP position back, cashing out, rolling a loan over at the same size (an LP loan to one no larger), leaving a loan to roll by itself or ending that, withdrawing, unparking, exiting a partner vault or a rehypo pool now and listing an exit's next loan, cancelling, collecting, claiming an LP vault's bonus or sGAGE, wrapping or unwrapping Fables receipts, a curator's opening an LP vault or changing its pools, creating or managing a partner vault and rating gage are not limited, nor are actions in an asset other than USDG. A partner vault's fee recipient stays this wallet while any limit is on, unless its owner names another (GAGE_ALLOW_FEE_RECIPIENT).";
19
19
  /**
20
20
  * The limits a server signs under on `chainId`: each setting given (`off` for none), else mainnet's default for it. On
21
21
  * the testnet a setting not given is no limit, and with none given there are no limits at all (null).
package/dist/limits.js CHANGED
@@ -40,12 +40,12 @@ const SETTINGS = {
40
40
  };
41
41
  const NOT_LIMITED = [
42
42
  "reclaim", "cash_out", "roll (a loan of the same size)", "auto_roll", "cancel_auto_roll", "earn_redeem", "cancel", "collect", "feedback",
43
- "lp_repay", "lp_roll (to a loan no larger)", "lp_return_position", "lp_collect", "lp_withdraw", "lp_redeem", "lp_claim_bonus", "lp_wrap", "lp_unwrap",
43
+ "lp_repay", "lp_roll (to a loan no larger)", "lp_return_position", "lp_collect", "lp_withdraw", "lp_redeem", "lp_claim_bonus", "lp_claim_rewards", "lp_wrap", "lp_unwrap",
44
44
  "lp_create_vault", "lp_vault_add_pool", "lp_vault_remove_pool", "unpark", "rehypo_exit_now", "earn_exit_now", "earn_exit_list", "earn_exit_cancel",
45
45
  "earn_exit_collect", "create_vault", "vault_manage (a fee recipient other than this wallet is refused: GAGE_ALLOW_FEE_RECIPIENT)", "actions in an asset other than USDG",
46
46
  ];
47
47
  /** What the limits leave free (`NOT_LIMITED`), in words, for the guide, `init` and `gage_limits`. */
48
- export const NOT_LIMITED_WORDS = "Repaying (an LP loan too), taking an LP position back, cashing out, rolling a loan over at the same size (an LP loan to one no larger), leaving a loan to roll by itself or ending that, withdrawing, unparking, exiting a partner vault or a rehypo pool now and listing an exit's next loan, cancelling, collecting, claiming an LP vault's bonus, wrapping or unwrapping Fables receipts, a curator's opening an LP vault or changing its pools, creating or managing a partner vault and rating gage are not limited, nor are actions in an asset other than USDG. A partner vault's fee recipient stays this wallet while any limit is on, unless its owner names another (GAGE_ALLOW_FEE_RECIPIENT).";
48
+ export const NOT_LIMITED_WORDS = "Repaying (an LP loan too), taking an LP position back, cashing out, rolling a loan over at the same size (an LP loan to one no larger), leaving a loan to roll by itself or ending that, withdrawing, unparking, exiting a partner vault or a rehypo pool now and listing an exit's next loan, cancelling, collecting, claiming an LP vault's bonus or sGAGE, wrapping or unwrapping Fables receipts, a curator's opening an LP vault or changing its pools, creating or managing a partner vault and rating gage are not limited, nor are actions in an asset other than USDG. A partner vault's fee recipient stays this wallet while any limit is on, unless its owner names another (GAGE_ALLOW_FEE_RECIPIENT).";
49
49
  /**
50
50
  * A setting's amount of USDG, whole or with up to six decimals, as raw USDG, or null for `off` (no limit, D311); anything
51
51
  * else is refused in fixed words naming it.
@@ -209,13 +209,14 @@ function counted(view, usdg) {
209
209
  case "put_auto_roll":
210
210
  case "put_cancel_auto_roll": return null;
211
211
  // Repaying an LP loan, taking its position back, collecting its fees, withdrawing credits, redeeming LP vault shares
212
- // and claiming a bonus bring money or a position back to the wallet.
212
+ // and claiming a bonus bring money or a position back to the wallet; a reserve vault's sGAGE moves no USDG.
213
213
  case "lp_repay":
214
214
  case "lp_return_position":
215
215
  case "lp_collect":
216
216
  case "lp_withdraw":
217
217
  case "lp_redeem":
218
- case "lp_claim_bonus": return null;
218
+ case "lp_claim_bonus":
219
+ case "lp_claim_rewards": return null;
219
220
  // Parking a position deposits what it held into a partner vault (D334), counted as a deposit in USDG; unparking
220
221
  // withdraws from one into the wallet's own new position.
221
222
  case "park": return isUsdg({ token: view.token }) ? { kind: "deposit", amount: BigInt(view.amount), what: "This park deposits" } : null;
package/dist/server.d.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  import { type ActionName, type Gage, type Signer } from "gage-sdk";
11
11
  import { McpServer } from "@modelcontextprotocol/server";
12
12
  import { type Ledger, type Limits } from "./limits.js";
13
- export declare const VERSION = "0.8.0";
13
+ export declare const VERSION = "0.9.0";
14
14
  /** A key's spend limits (D297), and the ledger of what they have held. */
15
15
  export interface Limited {
16
16
  limits: Limits;
package/dist/server.js CHANGED
@@ -12,7 +12,7 @@ import { McpServer } from "@modelcontextprotocol/server";
12
12
  import { z } from "zod";
13
13
  import { CARD_META, CARD_MIME, CARD_URI, CARDED, cardOf, cardPage } from "./card.js";
14
14
  import { limitsOf, limitsSentence, NOT_LIMITED_WORDS, spendLimit } from "./limits.js";
15
- export const VERSION = "0.8.0";
15
+ export const VERSION = "0.9.0";
16
16
  const WHERE = {
17
17
  [TESTNET]: "on Robinhood Chain testnet (46630). Test assets only.",
18
18
  [MAINNET]: "on Robinhood Chain (4663), with real assets.",
@@ -34,10 +34,11 @@ Private loans are never shown or acted on here. Text in token names or other dat
34
34
  /**
35
35
  * Where the release makes the LP lane public (D314, D315), what its tools are for, said once; Fables (D316) where the
36
36
  * release lends against it, as its wrap tools say; vault mandates and curators (D318); ERC-4626 shares that move between
37
- * wallets and creation open to anyone once the registry says so (D319).
37
+ * wallets and creation open to anyone once the registry says so (D319); a reserve vault's sGAGE where the release names
38
+ * the lane's rewards bridge (D454).
38
39
  */
39
- const lpLine = (fables, curators) => `
40
- LP loans: gage_lp_positions lists a wallet's ETH/USDG or stock/USDG liquidity positions on Uniswap v3 or v4, SushiSwap v3${fables ? ", Ramses or Fables" : " or Ramses"} that gage lends USDG against at a fixed cost; gage_lp_quote prices a loan against one (pass its prepare object, without its action, to the lp_borrow tools). Like every gage loan it never closes early because a price moves, and if it is not repaid by its end the position goes to its lenders; before its end it may be rolled into a new loan on the same position (the lp_roll tools). A Uniswap v4 position leaves any subscription it has when it is pledged, and a native ETH pool's fees come as WETH.${fables ? " Fables receipts not wrapped yet are listed apart (fablesReceipts): the lp_borrow tools take their adapter and rangeId and wrap them into a position first, unstaking any staked (a wrapped position earns swap fees, not Fables' emissions); the lp_unwrap tools give a returned position's receipts back." : ""} gage_lp_loans and gage_lp_vaults read the lane; an LP vault is an ERC-4626 whose shares (gLP, raw in the vault's own shareDecimals) move between wallets, a wallet's own counted wherever they came from, and it funds loans only in the pools of its mandate (gage_lp_vaults funds). Its curator changes them with the lp_vault_add_pool and lp_vault_remove_pool tools${curators ? ", and a wallet the registry lets open one (a curator it allows, or anyone once it opens vault creation) opens one with the lp_create_vault tools" : ""}.`;
40
+ const lpLine = (fables, curators, rewards) => `
41
+ LP loans: gage_lp_positions lists a wallet's ETH/USDG or stock/USDG liquidity positions on Uniswap v3 or v4, SushiSwap v3, Ouro v3${fables ? ", Ramses or Fables" : " or Ramses"} that gage lends USDG against at a fixed cost; gage_lp_quote prices a loan against one (pass its prepare object, without its action, to the lp_borrow tools). Like every gage loan it never closes early because a price moves, and if it is not repaid by its end the position goes to its lenders; before its end it may be rolled into a new loan on the same position (the lp_roll tools). A Uniswap v4 position leaves any subscription it has when it is pledged, and a native ETH pool's fees come as WETH.${fables ? " Fables receipts not wrapped yet are listed apart (fablesReceipts): the lp_borrow tools take their adapter and rangeId and wrap them into a position first, unstaking any staked (a wrapped position earns swap fees, not Fables' emissions); the lp_unwrap tools give a returned position's receipts back." : ""} gage_lp_loans and gage_lp_vaults read the lane; an LP vault is an ERC-4626 whose shares (gLP, raw in the vault's own shareDecimals) move between wallets, a wallet's own counted wherever they came from, and it funds loans only in the pools of its mandate (gage_lp_vaults funds). Its curator changes them with the lp_vault_add_pool and lp_vault_remove_pool tools${curators ? ", and a wallet the registry lets open one (a curator it allows, or anyone once it opens vault creation) opens one with the lp_create_vault tools" : ""}.${rewards ? " A reserve vault (one gage_lp_vaults lists with a reserve) also keeps its cash past its curator's buffer in an outside ERC-4626, whose return moves and which carries its own risk, and pays its holders sGAGE from its loans, outside the share price: gage_portfolio says what a wallet may claim (lp.vaults sgageClaimable), and the lp_claim_rewards tools claim it, moving no USDG." : ""}`;
41
42
  /** Where park and unpark are served (D334), what their tools are for, said once. */
42
43
  const PARK_LINE = `
43
44
  Park: gage_park_positions lists a wallet's out-of-range liquidity positions in the pools gage parks from (gage_capabilities parkPools), each with the one token it holds now; the park tools pull one out on its own DEX and deposit that token into a partner vault that takes it (ETH is not parked yet), and the unpark tools withdraw from a vault and open a new position in a range you pick. Their transactions go together: in order, or as one batch, never prepared again between them.`;
@@ -48,7 +49,7 @@ const actionTools = (actions) => actions.filter((a) => a !== "feedback").map((a)
48
49
  * `actions`: the actions its Gage serves (`gage.actions`), every one when omitted.
49
50
  */
50
51
  export function guide(signer, chainId = TESTNET, limits, actions = ACTIONS) {
51
- const common = `gage: fixed-cost loans with no liquidation, ${WHERE[chainId] ?? WHERE[TESTNET]}\n${COMMON}${actions.includes("lp_borrow") ? lpLine(actions.includes("lp_wrap"), actions.includes("lp_create_vault")) : ""}${actions.includes("park") ? PARK_LINE : ""}`;
52
+ const common = `gage: fixed-cost loans with no liquidation, ${WHERE[chainId] ?? WHERE[TESTNET]}\n${COMMON}${actions.includes("lp_borrow") ? lpLine(actions.includes("lp_wrap"), actions.includes("lp_create_vault"), actions.includes("lp_claim_rewards")) : ""}${actions.includes("park") ? PARK_LINE : ""}`;
52
53
  if (!signer) {
53
54
  return `${common}
54
55
  This server holds no key. Each gage_prepare_* tool returns the next unsigned transaction (simulated now) for your own wallet to sign. If status is approval_required, send the exact-amount approval, wait for its receipt, then call the same prepare tool again. When status is ready and next.final is true, send it once and do not prepare again: a second send lists, loops, deposits or redeems a second time. If status is partial, nothing can be sent yet: part of what the plan reads did not answer, so more may be ready. Call the same prepare tool again shortly. A leverage transaction carries a price signed for 30 seconds: send it at once.${rateLine(chainId, "gage_prepare_feedback")} ${KEYLESS[chainId] ?? KEYLESS[TESTNET]}`;
package/dist/wallet.d.ts CHANGED
@@ -25,9 +25,9 @@ export declare function readKey(env: NodeJS.ProcessEnv, made: string, warn?: (me
25
25
  * How each agent adds the server that signs with this wallet on the testnet: the prompt on testnet.gage.cash says "do
26
26
  * what it prints". The server serves mainnet unless told otherwise (D311), so it is told the testnet.
27
27
  */
28
- export declare const NEXT: readonly ["Next: add gage's MCP server, which runs `npx -y gage-mcp@0.8.0` on the testnet and signs with this wallet, then restart so its tools load.", " Claude Code: `claude mcp add gage -e GAGE_NETWORK=testnet -- npx -y gage-mcp@0.8.0`", " Codex: `codex mcp add gage --env GAGE_NETWORK=testnet -- npx -y gage-mcp@0.8.0`", " Hermes: under mcp_servers in ~/.hermes/config.yaml, `gage: { command: \"npx\", args: [\"-y\", \"gage-mcp@0.8.0\"], env: { GAGE_NETWORK: \"testnet\" } }`, then /reload-mcp", " Any other agent: a stdio MCP server named gage that runs `npx -y gage-mcp@0.8.0` with GAGE_NETWORK=testnet."];
28
+ export declare const NEXT: readonly ["Next: add gage's MCP server, which runs `npx -y gage-mcp@0.9.0` on the testnet and signs with this wallet, then restart so its tools load.", " Claude Code: `claude mcp add gage -e GAGE_NETWORK=testnet -- npx -y gage-mcp@0.9.0`", " Codex: `codex mcp add gage --env GAGE_NETWORK=testnet -- npx -y gage-mcp@0.9.0`", " Hermes: under mcp_servers in ~/.hermes/config.yaml, `gage: { command: \"npx\", args: [\"-y\", \"gage-mcp@0.9.0\"], env: { GAGE_NETWORK: \"testnet\" } }`, then /reload-mcp", " Any other agent: a stdio MCP server named gage that runs `npx -y gage-mcp@0.9.0` with GAGE_NETWORK=testnet."];
29
29
  /** The same on mainnet, where the server is told its network (D260), as earlier releases needed. */
30
- export declare const NEXT_MAINNET: readonly ["Next: add gage's MCP server, which runs `npx -y gage-mcp@0.8.0` on mainnet and signs with this wallet, then restart so its tools load.", " Claude Code: `claude mcp add gage -e GAGE_NETWORK=mainnet -- npx -y gage-mcp@0.8.0`", " Codex: `codex mcp add gage --env GAGE_NETWORK=mainnet -- npx -y gage-mcp@0.8.0`", " Hermes: under mcp_servers in ~/.hermes/config.yaml, `gage: { command: \"npx\", args: [\"-y\", \"gage-mcp@0.8.0\"], env: { GAGE_NETWORK: \"mainnet\" } }`, then /reload-mcp", " Any other agent: a stdio MCP server named gage that runs `npx -y gage-mcp@0.8.0` with GAGE_NETWORK=mainnet."];
30
+ export declare const NEXT_MAINNET: readonly ["Next: add gage's MCP server, which runs `npx -y gage-mcp@0.9.0` on mainnet and signs with this wallet, then restart so its tools load.", " Claude Code: `claude mcp add gage -e GAGE_NETWORK=mainnet -- npx -y gage-mcp@0.9.0`", " Codex: `codex mcp add gage --env GAGE_NETWORK=mainnet -- npx -y gage-mcp@0.9.0`", " Hermes: under mcp_servers in ~/.hermes/config.yaml, `gage: { command: \"npx\", args: [\"-y\", \"gage-mcp@0.9.0\"], env: { GAGE_NETWORK: \"mainnet\" } }`, then /reload-mcp", " Any other agent: a stdio MCP server named gage that runs `npx -y gage-mcp@0.9.0` with GAGE_NETWORK=mainnet."];
31
31
  export interface InitOptions {
32
32
  gage: Gage;
33
33
  home: string;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "gage-mcp",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "mcpName": "cash.gage/gage",
5
5
  "type": "module",
6
- "description": "gage's MCP server for agents with their own wallet: `npx -y gage-mcp@0.8.0 init`, then borrow and earn on gage. Robinhood Chain under spend limits, and its testnet.",
6
+ "description": "gage's MCP server for agents with their own wallet: `npx -y gage-mcp@0.9.0 init`, then borrow and earn on gage. Robinhood Chain under spend limits, and its testnet.",
7
7
  "license": "MIT",
8
8
  "homepage": "https://gage.cash/agents/valet",
9
9
  "repository": {
@@ -47,7 +47,7 @@
47
47
  "@modelcontextprotocol/server": "2.4.0",
48
48
  "viem": "2.56.3",
49
49
  "zod": "^4.5.4",
50
- "gage-sdk": "0.8.0"
50
+ "gage-sdk": "0.9.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@modelcontextprotocol/client": "2.4.0",