@coinrithm/mcp-trading 0.7.17 → 0.7.18

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
@@ -3,7 +3,25 @@
3
3
  All notable changes to `@coinrithm/mcp-trading` are documented here. The package
4
4
  ships two binaries — `coinrithm-mcp` (the MCP server) and `coinrithm-agent` (the
5
5
  self-host agent runner) — versioned together. The CoinRithm **API contract** is
6
- versioned separately (see `openapi.yaml` `info.version`, currently `1.8.0`).
6
+ versioned separately (see `openapi.yaml` `info.version`, currently `1.9.0`).
7
+
8
+ ## 0.7.18 (2026-10-15)
9
+
10
+ MCP server:
11
+
12
+ - `get_arena_leaderboard` and `get_arena_agent` describe `arena-ranking-v2`
13
+ (live since 2026-10-14): the score is realized PnL plus open losses
14
+ (min(0, unrealized)); open gains never raise a rank; an agent with more
15
+ than 10% of its start balance in unpriced open positions is rank pending.
16
+ A decided trade is one futures position or one spot round trip.
17
+ - Prediction-market comparison output ranks rows that are not traded on both
18
+ legs (`bothSidesTraded: false`) last, so an untraded pair is never the
19
+ headline gap.
20
+ - Tool descriptions name consensus probability v3 (open-interest weights
21
+ where every venue reports open interest, else the liquidity rule; the
22
+ basis is returned as `weightBasis`).
23
+
24
+ The default surface stays at 41 tools. Generated against API contract 1.9.0.
7
25
 
8
26
  ## 0.7.17 (2026-10-13)
9
27
 
package/README.md CHANGED
@@ -10,7 +10,7 @@ future returns or live execution performance.
10
10
 
11
11
  **Plus a free prediction-market data surface — no key at all.** The same server
12
12
  ships twelve keyless `pm_data_*` tools serving CoinRithm's public cross-venue
13
- dataset: odds, cross-venue matches with a liquidity-aware reference probability,
13
+ dataset: odds, cross-venue matches with a size-weighted reference probability,
14
14
  a whale-trade tape, and market-wide volume statistics. Availability and freshness
15
15
  vary by source; inspect the returned source-health and observation metadata.
16
16
  The catalog covers 12 venues: Polymarket, Kalshi, Smarkets, Limitless, Manifold,
@@ -266,7 +266,8 @@ The twelve `pm_data_*` tools wrap CoinRithm's free public cross-venue dataset
266
266
  (all 12 venues: Polymarket, Kalshi, Smarkets, Limitless, Manifold,
267
267
  Metaculus, PredictIt, Rothera, Futuur, Myriad, ForecastEx, Gemini). They require no API key, never attach yours, and
268
268
  are research surfaces: `pm_data_events` list rows carry `referenceProbability`
269
- (a liquidity-aware cross-venue consensus on matched questions); `pm_data_event`
269
+ (a size-weighted cross-venue consensus on matched questions, weighted by
270
+ open interest or else liquidity); `pm_data_event`
270
271
  includes `crossSourceMatches` (the same real-world question priced on other
271
272
  venues), `referenceProbability`, `volumeHistory`, and resolution evidence.
272
273
  Discovery calls deliberately omit heavyweight descriptions, full outcome
@@ -415,9 +416,10 @@ least that long before retrying.
415
416
  Opted-in agents are publicly listed at
416
417
  [coinrithm.com](https://coinrithm.com/agentic-trading) — set `agentName` /
417
418
  `agentPublic` / `agentModel` on your key to join, then check your standing
418
- with `get_arena_leaderboard` / `get_arena_agent`. Under `arena-ranking-v1`,
419
- five decided trades qualify an agent for normal ordering. Positive realized
420
- PnL is weighted by the 95% Wilson win-confidence lower bound; non-positive PnL
419
+ with `get_arena_leaderboard` / `get_arena_agent`. Under `arena-ranking-v2`,
420
+ five decided trades qualify an agent for normal ordering. The score is
421
+ realized PnL plus open losses (open gains never count); a positive score is
422
+ weighted by the 95% Wilson win-confidence lower bound; a non-positive score
421
423
  is used directly. Agents below five remain listed after qualified agents, and
422
424
  fewer than 20 decided trades carries a separate small-sample warning. The API
423
425
  returns the full machine-readable `contract` with every board response.
@@ -5,7 +5,7 @@ export declare const COINRITHM_API: {
5
5
  readonly kind: "coinrithm-agent-api";
6
6
  readonly baseUrl: "https://api.coinrithm.com";
7
7
  readonly mcpUrl: "https://mcp.coinrithm.com/mcp";
8
- readonly openapiVersion: "1.8.0";
8
+ readonly openapiVersion: "1.9.0";
9
9
  readonly mcpPackage: "@coinrithm/mcp-trading";
10
10
  readonly mcpVersion: string;
11
11
  };
@@ -20,7 +20,7 @@ export const COINRITHM_API = {
20
20
  mcpUrl: "https://mcp.coinrithm.com/mcp",
21
21
  // The API CONTRACT version (openapi.yaml info.version). Versioned independently
22
22
  // from the npm package below — hand-bump this when the OpenAPI contract changes.
23
- openapiVersion: "1.8.0",
23
+ openapiVersion: "1.9.0",
24
24
  mcpPackage: "@coinrithm/mcp-trading",
25
25
  mcpVersion: PACKAGE_VERSION,
26
26
  };
package/dist/tools.js CHANGED
@@ -422,9 +422,17 @@ function compactComparison(value) {
422
422
  (outcome.isShared === true ||
423
423
  (outcome.presentInA === true && outcome.presentInB === true)));
424
424
  const candidates = shared.length > 0 ? shared : outcomes;
425
+ // The API headline (summary.maxSharedOutcome*) skips a row whose legs do
426
+ // not both show trading (`bothSidesTraded: false`). Such a row is still
427
+ // listed, but ranks after every other row so it never leads as the largest
428
+ // gap. Older APIs omit the field, which ranks exactly as before.
429
+ const untraded = (outcome) => isJsonRecord(outcome) && outcome.bothSidesTraded === false ? 1 : 0;
425
430
  const ranked = candidates
426
431
  .map((outcome, index) => ({ outcome, index }))
427
432
  .sort((left, right) => {
433
+ const evidence = untraded(left.outcome) - untraded(right.outcome);
434
+ if (evidence !== 0)
435
+ return evidence;
428
436
  const a = isJsonRecord(left.outcome)
429
437
  ? Math.abs(probability(left.outcome.deltaPoints) ?? -1)
430
438
  : -1;
@@ -446,6 +454,8 @@ function compactComparison(value) {
446
454
  "presentInA",
447
455
  "presentInB",
448
456
  "isShared",
457
+ "bothSidesTraded",
458
+ "pairing",
449
459
  ])
450
460
  : outcome);
451
461
  return {
@@ -1178,10 +1188,11 @@ export function registerTools(server, client) {
1178
1188
  server.registerTool("get_arena_leaderboard", {
1179
1189
  title: "Get Agent Arena leaderboard",
1180
1190
  description: "The public Agent Arena across spot, futures, and prediction markets. " +
1181
- "The response publishes the arena-ranking-v1 contract: five decided " +
1182
- "trades qualify an agent for normal ordering; positive realized PnL is " +
1183
- "weighted by the 95% Wilson win-confidence lower bound; non-positive " +
1184
- "PnL is used directly. Agents below five remain listed after qualified " +
1191
+ "The response publishes the arena-ranking-v2 contract: five decided " +
1192
+ "trades qualify an agent for normal ordering; the score is realized " +
1193
+ "PnL plus open losses (open gains never count); a positive score is " +
1194
+ "weighted by the 95% Wilson win-confidence lower bound; a non-positive " +
1195
+ "score is used directly. Agents below five remain listed after qualified " +
1185
1196
  "agents; fewer than 20 decided trades is a separate small-sample " +
1186
1197
  "warning. Rows carry per-venue results, a 90-day sparkline, badges, " +
1187
1198
  "rankDelta, biggestWinMusd, and a self-reported model label. Pass " +
@@ -1865,8 +1876,10 @@ export function registerTools(server, client) {
1865
1876
  "crossSourceMatches (the SAME real-world question priced on other " +
1866
1877
  "venues — read probability divergence directly from it), " +
1867
1878
  "referenceProbability when present (CoinRithm's canonical cross-venue " +
1868
- "number: the liquidity-weighted median Yes probability across matched " +
1869
- "real-money venues, with venueCount and spreadPoints — quote all " +
1879
+ "number: the size-capped weighted median Yes probability across " +
1880
+ "matched real-money venues, weighted by open interest or else " +
1881
+ "liquidity as weightBasis states, with venueCount and spreadPoints " +
1882
+ "and methodologyVersion — quote all " +
1870
1883
  "three together, venues disagree and the spread says by how much), " +
1871
1884
  "recent whale trades on the event, related events, related news, and " +
1872
1885
  "volumeHistory when present (daily volume points captured since " +
@@ -2004,8 +2017,9 @@ export function registerTools(server, client) {
2004
2017
  "deltaPoints (points, 0-100 scale) plus a summary (matchedOutcomeCount, " +
2005
2018
  "overallDeltaPoints, maxSharedOutcomeDeltaPoints); maxOverallGap/" +
2006
2019
  "maxOutcomeGap/maxConfidence are the cluster's headline numbers, and " +
2007
- "referenceProbability (when present) is CoinRithm's own liquidity-" +
2008
- "weighted median across matched venues. Orientation between matched " +
2020
+ "referenceProbability (when present) is CoinRithm's own size-capped " +
2021
+ "weighted median across matched venues (weightBasis: open_interest or " +
2022
+ "liquidity). Orientation between matched " +
2009
2023
  "markets is human/aggregator-reviewed — NEVER price-inferred — so every " +
2010
2024
  "delta is orientation-proven disagreement, not noise. requirePriced " +
2011
2025
  "(default true) drops any pair where a side is an unpriced/untraded " +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coinrithm/mcp-trading",
3
- "version": "0.7.17",
3
+ "version": "0.7.18",
4
4
  "mcpName": "io.github.CoinRithm/mcp-trading",
5
5
  "description": "CoinRithm MCP server (coinrithm-mcp) and self-host agent runner (coinrithm-agent): keyless prediction-market data across 12 venues, plus paper trading of crypto spot, futures, and prediction markets with a user-minted API key.",
6
6
  "type": "module",