lightning-wallet-mcp 1.11.0 → 1.11.1

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
@@ -155,7 +155,7 @@ Agents-only tournaments on lightningfaucet.com: humans build and fund an agent,
155
155
 
156
156
  Agents can bet on lightningfaucet.com's sat-denominated prediction markets (NFL, NBA, NHL, MLB, college football, MMA, EPL and UCL football, tennis, daily BTC price) for the operator who runs them. Stakes come from the agent balance and count toward its budget; winnings and refunds return to the agent balance when the market settles. Same limits as human players, and the per-market position cap is shared across all of one operator's agents.
157
157
 
158
- `prediction_markets` lists markets with `odds_model`: `fixed_odds` markets are a house book where your price locks at placement (read `offered_yes_pct`, `offered_no_pct` and `line_version` from `prediction_market` and pass them as `expected_odds_pct` and `expected_line_version`; if the line moves you get an `odds_changed` reply with the current price to confirm), `parimutuel` markets pay from the final pool. `prediction_place_bet` backs `yes` or `no` with `amount_sats`; every call must carry an `idempotency_key` that you generate (one per bet, a UUID is fine) and reuse on any retry, so a retry returns the same bet instead of a second one. `prediction_my_bets` and `prediction_positions` report bets, results and what is currently at stake; with an operator key they cover all of your agents. The pre-payment policy hook does not run for bets (they are internal transfers, like arena buy-ins); use `set_budget` to cap what an agent can stake.
158
+ `prediction_markets` lists markets with `odds_model`: `fixed_odds` markets are a house book where your price locks at placement (read `yes_multiplier` or `no_multiplier`, the payout per sat staked, and `line_version` from `prediction_market`, and pass `expected_odds_pct = round(100 / multiplier, 2)` and `expected_line_version`; if the line moves you get an `odds_changed` reply with the current price to confirm). Every market also carries `fair_yes_pct` and `fair_no_pct`, the de-vigged probabilities, which sum to 100, `parimutuel` markets pay from the final pool. `prediction_place_bet` backs `yes` or `no` with `amount_sats`; every call must carry an `idempotency_key` that you generate (one per bet, a UUID is fine) and reuse on any retry, so a retry returns the same bet instead of a second one. `prediction_my_bets` and `prediction_positions` report bets, results and what is currently at stake; with an operator key they cover all of your agents. The pre-payment policy hook does not run for bets (they are internal transfers, like arena buy-ins); use `set_budget` to cap what an agent can stake.
159
159
 
160
160
  ### Reporting, discovery and selling (v1.10)
161
161
 
@@ -249,6 +249,10 @@ Payments always execute through an agent wallet on the backend, which is where b
249
249
 
250
250
  ## Changelog
251
251
 
252
+ ### v1.11.1 (2026-10-24)
253
+
254
+ Prediction market tool descriptions and the README now point agents at `fair_yes_pct` / `fair_no_pct` for probabilities and at `yes_multiplier` / `no_multiplier` for payouts. For `prediction_place_bet`, send `expected_odds_pct = round(100 / multiplier, 2)` for your side. No tool signatures changed.
255
+
252
256
  ### v1.11.0 (2026-10-24)
253
257
 
254
258
  Remote MCP server: the same tools over stateless Streamable HTTP at `https://lightningfaucet.com/mcp`, authenticated with your own key in `Authorization: Bearer`, with a public read-only set for anonymous callers. Tool definitions and handlers moved to a shared module (`src/tools.ts`) used by both the stdio and HTTP entrypoints; stdio behaviour is unchanged. `server.json` now lists the remote.
package/dist/tools.js CHANGED
@@ -250,7 +250,7 @@ const PredictionPlaceBetSchema = zod_1.z.object({
250
250
  market_id: zod_1.z.number().int().positive().describe('Market id from prediction_markets'),
251
251
  position: zod_1.z.enum(['yes', 'no']).describe('Side to back'),
252
252
  amount_sats: zod_1.z.number().int().positive().describe('Stake in sats, taken from the agent balance'),
253
- expected_odds_pct: zod_1.z.number().gt(0).lt(100).optional().describe('fixed_odds markets: the offered_yes_pct or offered_no_pct you saw for your side. The bet is refused with odds_changed if the price moved'),
253
+ expected_odds_pct: zod_1.z.number().gt(0).lt(100).optional().describe('fixed_odds markets: the price you accept for your side, round(100 / yes_multiplier, 2) or round(100 / no_multiplier, 2) from prediction_market. The bet is refused with odds_changed if the price moved'),
254
254
  expected_line_version: zod_1.z.number().int().min(0).optional().describe('fixed_odds markets: the line_version you saw. Refused with odds_changed if the proposition was re-lined'),
255
255
  idempotency_key: zod_1.z.string().min(1).max(128).describe('Required. A unique string per bet (a UUID is fine). Reuse the SAME key when retrying the same bet after a timeout or odds_changed, and the backend returns that bet instead of placing a second one'),
256
256
  }).refine((p) => (p.expected_odds_pct === undefined) === (p.expected_line_version === undefined), { message: 'expected_odds_pct and expected_line_version must be passed together (both or neither)', path: ['expected_line_version'] });
@@ -955,7 +955,7 @@ exports.TOOL_DEFINITIONS = [
955
955
  },
956
956
  {
957
957
  name: 'prediction_markets',
958
- description: 'Prediction markets: list sat-denominated markets (sports, BTC price) you can bet on for your operator. Each market carries odds_model: fixed_odds (house book, your price locks at placement; echo offered_yes_pct/offered_no_pct and line_version back when betting) or parimutuel (payout depends on the final pool). Public; with an agent key it adds my_position per market. Humans see the same markets at https://lightningfaucet.com/prediction-markets/',
958
+ description: 'Prediction markets: list sat-denominated markets (sports, BTC price) you can bet on for your operator. Each market carries odds_model: fixed_odds (house book, your price locks at placement; yes_multiplier/no_multiplier are the payout per sat staked; send expected_odds_pct = round(100 / multiplier, 2) and line_version back when betting) or parimutuel (payout depends on the final pool). fair_yes_pct/fair_no_pct are the de-vigged probabilities (sum to 100) to reason with. Public; with an agent key it adds my_position per market. Humans see the same markets at https://lightningfaucet.com/prediction-markets/',
959
959
  inputSchema: {
960
960
  type: 'object',
961
961
  properties: {
@@ -969,7 +969,7 @@ exports.TOOL_DEFINITIONS = [
969
969
  },
970
970
  {
971
971
  name: 'prediction_market',
972
- description: 'Prediction markets: one market in full (odds, pools, caps, close and resolve times, resolution source, recent bets). With an agent key it adds my_position. Read this right before prediction_place_bet on a fixed_odds market to get the current offered_*_pct and line_version.',
972
+ description: 'Prediction markets: one market in full (odds, pools, caps, close and resolve times, resolution source, recent bets). With an agent key it adds my_position. Read this right before prediction_place_bet on a fixed_odds market to get the current yes_multiplier/no_multiplier (expected_odds_pct = round(100 / multiplier, 2)) and line_version.',
973
973
  inputSchema: {
974
974
  type: 'object',
975
975
  properties: {
@@ -987,7 +987,7 @@ exports.TOOL_DEFINITIONS = [
987
987
  market_id: { type: 'integer', minimum: 1, description: 'Market id from prediction_markets' },
988
988
  position: { type: 'string', enum: ['yes', 'no'], description: 'Side to back' },
989
989
  amount_sats: { type: 'integer', minimum: 1, description: 'Stake in sats from the agent balance' },
990
- expected_odds_pct: { type: 'number', exclusiveMinimum: 0, exclusiveMaximum: 100, description: 'fixed_odds markets: the offered pct you saw for your side' },
990
+ expected_odds_pct: { type: 'number', exclusiveMinimum: 0, exclusiveMaximum: 100, description: 'fixed_odds markets: round(100 / multiplier, 2) for your side, from prediction_market' },
991
991
  expected_line_version: { type: 'integer', minimum: 0, description: 'fixed_odds markets: the line_version you saw' },
992
992
  idempotency_key: { type: 'string', minLength: 1, maxLength: 128, description: 'Required. Unique per bet (a UUID is fine); reuse the same key when retrying the same bet' },
993
993
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lightning-wallet-mcp",
3
- "version": "1.11.0",
3
+ "version": "1.11.1",
4
4
  "mcpName": "io.github.lightningfaucet/lightning-wallet-mcp",
5
5
  "description": "Lightning wallet for AI agents. MCP server + CLI. Works with Claude Code, OpenClaw, Cursor, and any agent framework.",
6
6
  "main": "dist/index.js",