@coinrithm/mcp-trading 0.7.4 → 0.7.5
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 +26 -0
- package/README.md +9 -7
- package/dist/agent/client.js +4 -0
- package/dist/agent/indicators.d.ts +1 -0
- package/dist/agent/indicators.js +3 -0
- package/dist/agent/manifest.d.ts +1 -0
- package/dist/agent/manifest.js +3 -0
- package/dist/agent/observationReceipt.d.ts +6 -0
- package/dist/agent/observationReceipt.js +10 -0
- package/dist/agent/runner.js +28 -8
- package/dist/agent/types.d.ts +4 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.js +6 -0
- package/dist/tools.js +35 -6
- package/package.json +86 -86
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,32 @@ ships two binaries — `coinrithm-mcp` (the MCP server) and `coinrithm-agent` (t
|
|
|
5
5
|
self-host agent runner) — versioned together. The CoinRithm **API contract** is
|
|
6
6
|
versioned separately (see `openapi.yaml` `info.version`, currently `1.6.0`).
|
|
7
7
|
|
|
8
|
+
## 0.7.5
|
|
9
|
+
|
|
10
|
+
**Release-hygiene bump. Everything below was already merged but never
|
|
11
|
+
reached npm** — the 0.7.4 tarball was published 2026-07-26T23:01:11Z and
|
|
12
|
+
five commits landed after that instant without a version bump, so the
|
|
13
|
+
repository's 0.7.4 and the published 0.7.4 were different code under one
|
|
14
|
+
version number. This release makes the published artifact match the
|
|
15
|
+
source again.
|
|
16
|
+
|
|
17
|
+
- **Security.** MCP dependency audit fixes, 6 findings to 0 (`da65e9e`).
|
|
18
|
+
Anyone on published 0.7.4 is running the pre-audit dependency set.
|
|
19
|
+
- **`pm_data` Gemini exposure** for agents (`3ab04ae`).
|
|
20
|
+
- **Venue methodology and health** exposed as tools (`74cc495`).
|
|
21
|
+
- **Reproducible decision receipts** persisted by the agent runner
|
|
22
|
+
(`8bebc9e`).
|
|
23
|
+
- **Docs.** Contract version drift corrected and the placeholder SDK
|
|
24
|
+
README replaced, so the docs stop advertising an install that 404s
|
|
25
|
+
(`6d61b92`).
|
|
26
|
+
|
|
27
|
+
No tool was renamed or removed; this is additive plus a dependency
|
|
28
|
+
refresh.
|
|
29
|
+
|
|
30
|
+
⚠ Publishing this package is a **manual** step — `publish-mcp.yml` only
|
|
31
|
+
pushes `server.json` to the MCP registry, it does not run `npm publish`.
|
|
32
|
+
That asymmetry is exactly how the drift above accumulated unnoticed.
|
|
33
|
+
|
|
8
34
|
## 0.7.4
|
|
9
35
|
|
|
10
36
|
Docs-only. No tool behavior change, no API-surface change.
|
package/README.md
CHANGED
|
@@ -8,9 +8,9 @@ no risk — a proving ground to show an agent works *before* anything is on the
|
|
|
8
8
|
line, with a public **Agent Arena** leaderboard ranked by realized paper PnL.
|
|
9
9
|
|
|
10
10
|
**Plus a free prediction-market data surface — no key at all.** The same server
|
|
11
|
-
ships
|
|
12
|
-
dataset: live odds across
|
|
13
|
-
Manifold, Metaculus, PredictIt, Rothera, Futuur, Myriad, ForecastEx), cross-venue matches with a
|
|
11
|
+
ships ten keyless `pm_data_*` tools serving CoinRithm's public cross-venue
|
|
12
|
+
dataset: live odds across 12 venues (Polymarket, Kalshi, Smarkets, Limitless,
|
|
13
|
+
Manifold, Metaculus, PredictIt, Rothera, Futuur, Myriad, ForecastEx, Gemini), cross-venue matches with a
|
|
14
14
|
liquidity-aware reference probability, a whale-trade tape, and market-wide
|
|
15
15
|
volume stats ($60B+ all-time tracked). Point any MCP client at the hosted
|
|
16
16
|
endpoint `https://mcp.coinrithm.com/mcp` and call them anonymously — the API
|
|
@@ -80,7 +80,7 @@ DB-driven runtime.
|
|
|
80
80
|
The hosted HTTP server holds **no** key: each request brings its own
|
|
81
81
|
`crk_live_…` in the Authorization header, and the server forwards exactly that
|
|
82
82
|
key upstream. The Authorization header is **optional** on the hosted endpoint —
|
|
83
|
-
the
|
|
83
|
+
the ten keyless `pm_data_*` market-data tools work anonymously; every other
|
|
84
84
|
tool requires it. See [`DEPLOY.md`](./DEPLOY.md).
|
|
85
85
|
|
|
86
86
|
## Configure (stdio)
|
|
@@ -137,6 +137,8 @@ tool requires it. See [`DEPLOY.md`](./DEPLOY.md).
|
|
|
137
137
|
| `close_futures_position` | trade:futures | `POST /api/agent/futures/close` |
|
|
138
138
|
| `open_pm_position` | trade:pm | `POST /api/agent/pm/open` ¹ |
|
|
139
139
|
| `pm_data_overview` | none (public) | compact `GET /api/prediction-markets/overview` |
|
|
140
|
+
| `pm_data_sources` | none (public) | venue methodology, coverage, and comparable volume bases |
|
|
141
|
+
| `pm_data_sources_health` | none (public) | per-venue freshness, lag, and degraded reasons |
|
|
140
142
|
| `pm_data_events` | none (public) | compact `GET /api/prediction-markets/events` |
|
|
141
143
|
| `pm_data_event` (source, slug, detail?) | none (public) | bounded event evidence by default; `detail: "full"` returns the untouched API record |
|
|
142
144
|
| `pm_data_whales` (limit, default 10) | none (public) | compact `GET /api/prediction-markets/whales` |
|
|
@@ -145,9 +147,9 @@ tool requires it. See [`DEPLOY.md`](./DEPLOY.md).
|
|
|
145
147
|
| `pm_data_canonical` (key?, limit, cursor) | none (public) | `GET /api/prediction-markets/canonical` (+ `/:key` detail) |
|
|
146
148
|
| `pm_data_volume_history` | none (public) | `GET /api/prediction-markets/volume-history` |
|
|
147
149
|
|
|
148
|
-
The
|
|
149
|
-
(all
|
|
150
|
-
Metaculus, PredictIt, Rothera, Futuur, Myriad, ForecastEx). They require no API key, never attach yours, and
|
|
150
|
+
The ten `pm_data_*` tools wrap CoinRithm's free public cross-venue dataset
|
|
151
|
+
(all 12 venues: Polymarket, Kalshi, Smarkets, Limitless, Manifold,
|
|
152
|
+
Metaculus, PredictIt, Rothera, Futuur, Myriad, ForecastEx, Gemini). They require no API key, never attach yours, and
|
|
151
153
|
are research surfaces: `pm_data_events` list rows carry `referenceProbability`
|
|
152
154
|
(a liquidity-aware cross-venue consensus on matched questions); `pm_data_event`
|
|
153
155
|
includes `crossSourceMatches` (the same real-world question priced on other
|
package/dist/agent/client.js
CHANGED
|
@@ -18,6 +18,10 @@ function traceHeaders(trace) {
|
|
|
18
18
|
h["X-CoinRithm-Strategy-Label"] = trace.strategyLabel;
|
|
19
19
|
if (typeof trace.confidence === "number")
|
|
20
20
|
h["X-CoinRithm-Confidence"] = String(trace.confidence);
|
|
21
|
+
if (trace.observationHash)
|
|
22
|
+
h["X-CoinRithm-Observation-Hash"] = trace.observationHash;
|
|
23
|
+
if (trace.indicatorVersion)
|
|
24
|
+
h["X-CoinRithm-Indicator-Version"] = trace.indicatorVersion;
|
|
21
25
|
return h;
|
|
22
26
|
}
|
|
23
27
|
export class CoinRithmClient {
|
package/dist/agent/indicators.js
CHANGED
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
//
|
|
11
11
|
// Every function returns null when there are too few candles, so callers can
|
|
12
12
|
// omit an indicator from the observation rather than emit a misleading number.
|
|
13
|
+
// Bump whenever indicator inputs, defaults, formulas, rounding, or output
|
|
14
|
+
// semantics change. Stored beside each observation hash and in manifest.lock.
|
|
15
|
+
export const INDICATOR_VERSION = "coinrithm.indicators.v1";
|
|
13
16
|
const closesOf = (c) => c.map((x) => x.close);
|
|
14
17
|
const finite = (n) => Number.isFinite(n);
|
|
15
18
|
// Simple moving average of the last `period` values.
|
package/dist/agent/manifest.d.ts
CHANGED
package/dist/agent/manifest.js
CHANGED
|
@@ -6,12 +6,14 @@ import { writeFileSync, mkdirSync } from "node:fs";
|
|
|
6
6
|
import { join } from "node:path";
|
|
7
7
|
import { sha256, stableStringify, toPosix } from "./util.js";
|
|
8
8
|
import { RESOLVER_VERSION, RUNNER_VERSION, MANIFEST_SCHEMA, } from "./version.js";
|
|
9
|
+
import { INDICATOR_VERSION } from "./indicators.js";
|
|
9
10
|
export function buildManifest(resolved, spec) {
|
|
10
11
|
// configHash binds the RESOLVED spec to the resolver + schema version, so a
|
|
11
12
|
// run reproduces only against the same compile (not just the same files).
|
|
12
13
|
const configHash = sha256(stableStringify({
|
|
13
14
|
resolvedSpec: spec,
|
|
14
15
|
resolverVersion: RESOLVER_VERSION,
|
|
16
|
+
indicatorVersion: INDICATOR_VERSION,
|
|
15
17
|
schema: MANIFEST_SCHEMA,
|
|
16
18
|
}));
|
|
17
19
|
return {
|
|
@@ -19,6 +21,7 @@ export function buildManifest(resolved, spec) {
|
|
|
19
21
|
spec: spec.spec || "coinrithm.agent.v1",
|
|
20
22
|
resolverVersion: RESOLVER_VERSION,
|
|
21
23
|
runnerVersion: RUNNER_VERSION,
|
|
24
|
+
indicatorVersion: INDICATOR_VERSION,
|
|
22
25
|
resolvedConfig: resolved.rawFrontmatter,
|
|
23
26
|
resolvedSpec: spec,
|
|
24
27
|
provenance: resolved.provenance,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// A compact, privacy-safe receipt for the exact structured observation used by
|
|
2
|
+
// one decision. We persist the digest, never the full prompt or model output.
|
|
3
|
+
import { INDICATOR_VERSION } from "./indicators.js";
|
|
4
|
+
import { sha256, stableStringify } from "./util.js";
|
|
5
|
+
export function buildObservationReceipt(observation) {
|
|
6
|
+
return {
|
|
7
|
+
observationHash: sha256(stableStringify(observation)),
|
|
8
|
+
indicatorVersion: INDICATOR_VERSION,
|
|
9
|
+
};
|
|
10
|
+
}
|
package/dist/agent/runner.js
CHANGED
|
@@ -17,6 +17,7 @@ import { makeDecisionId, makeTrace, exportRunEvidence } from "./runEvidence.js";
|
|
|
17
17
|
import { rollDay, checkKillSwitch, accrueRealized, saveState, } from "./state.js";
|
|
18
18
|
import { asObj, asNum, asStr } from "./extract.js";
|
|
19
19
|
import { parseCadenceMs, sleep } from "./util.js";
|
|
20
|
+
import { buildObservationReceipt } from "./observationReceipt.js";
|
|
20
21
|
// Independent-forecast kill-switch. Default ON: the fleet elicits + submits its
|
|
21
22
|
// OWN forecastProbability on PM opens. Set HOUSE_AGENT_FORECAST_ENABLED to
|
|
22
23
|
// "false"/"0"/"no"/"off" to ship pm/open requests WITHOUT the field, byte-identical
|
|
@@ -371,6 +372,10 @@ export async function runCycle(deps) {
|
|
|
371
372
|
// OBSERVE
|
|
372
373
|
const obs = await observe(client, spec, state, baseTrace);
|
|
373
374
|
const observation = obs.observation;
|
|
375
|
+
const observationReceipt = buildObservationReceipt(observation);
|
|
376
|
+
// Reads build the observation, so its hash cannot exist before they finish.
|
|
377
|
+
// From this point every durable write carries the exact decision-input receipt.
|
|
378
|
+
Object.assign(baseTrace, observationReceipt);
|
|
374
379
|
accrueRealized(state, observation.newClosedTrades);
|
|
375
380
|
state.cursor = observation.syncCursor;
|
|
376
381
|
for (const t of observation.newClosedTrades) {
|
|
@@ -419,13 +424,20 @@ export async function runCycle(deps) {
|
|
|
419
424
|
disabled: true,
|
|
420
425
|
disabledReason: state.disabledReason,
|
|
421
426
|
live,
|
|
427
|
+
...observationReceipt,
|
|
422
428
|
};
|
|
423
429
|
}
|
|
424
430
|
if (obs.skip) {
|
|
425
431
|
state.consecutiveRejectCycles += 1;
|
|
426
432
|
saveState(stateFile, state);
|
|
427
433
|
log(`skip: ${obs.skip}`);
|
|
428
|
-
return {
|
|
434
|
+
return {
|
|
435
|
+
decision: "skip",
|
|
436
|
+
skipReason: obs.skip,
|
|
437
|
+
planned: [],
|
|
438
|
+
live,
|
|
439
|
+
...observationReceipt,
|
|
440
|
+
};
|
|
429
441
|
}
|
|
430
442
|
// GATE (slice 2): only SPEND an LLM call when a deterministic trigger fires — a
|
|
431
443
|
// flagged entry setup or an open position to manage. No trigger => a cheap
|
|
@@ -451,6 +463,7 @@ export async function runCycle(deps) {
|
|
|
451
463
|
estimatedCostUsd: 0,
|
|
452
464
|
writeAttempted: 0,
|
|
453
465
|
writeAccepted: 0,
|
|
466
|
+
...observationReceipt,
|
|
454
467
|
};
|
|
455
468
|
}
|
|
456
469
|
// DECIDE. Two paths share the same downstream validate+act loop:
|
|
@@ -519,6 +532,7 @@ export async function runCycle(deps) {
|
|
|
519
532
|
decisionType: "model_error",
|
|
520
533
|
writeAttempted: 0,
|
|
521
534
|
writeAccepted: 0,
|
|
535
|
+
...observationReceipt,
|
|
522
536
|
};
|
|
523
537
|
}
|
|
524
538
|
const parsed = parseDecision(res.text);
|
|
@@ -539,6 +553,7 @@ export async function runCycle(deps) {
|
|
|
539
553
|
decisionType: "model_error",
|
|
540
554
|
writeAttempted: 0,
|
|
541
555
|
writeAccepted: 0,
|
|
556
|
+
...observationReceipt,
|
|
542
557
|
};
|
|
543
558
|
}
|
|
544
559
|
state.consecutiveModelFailures = 0;
|
|
@@ -578,6 +593,7 @@ export async function runCycle(deps) {
|
|
|
578
593
|
writeAttempted: decision.actions.length,
|
|
579
594
|
writeAccepted: 0,
|
|
580
595
|
...(postedOpportunity ? { opportunity: postedOpportunity } : {}),
|
|
596
|
+
...observationReceipt,
|
|
581
597
|
};
|
|
582
598
|
}
|
|
583
599
|
// VALIDATE (+ ACT when live). Quote evidence is fetched by the runner.
|
|
@@ -778,13 +794,16 @@ export async function runCycle(deps) {
|
|
|
778
794
|
const seq = state.intentSeq[intentKey] ?? 0;
|
|
779
795
|
const idem = `${runId}:${intentKey}:${seq}`;
|
|
780
796
|
const meta = action;
|
|
781
|
-
const trace =
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
797
|
+
const trace = {
|
|
798
|
+
...makeTrace(runId, decisionId, spec, meta.confidence ?? decision.confidence,
|
|
799
|
+
// The trade's "why" on the Arena live floor. Prefer the model's per-action
|
|
800
|
+
// summary; else the decision rationale, but kept HONEST about this action's
|
|
801
|
+
// market (a multi-action decision's rationale can be about a DIFFERENT market
|
|
802
|
+
// than a secondary trade — see rationaleForAction). Sanitized short reasoning
|
|
803
|
+
// only — never raw chain-of-thought.
|
|
804
|
+
rationaleForAction(action, decision.rationale, meta.rationaleSummary, decision.actions.length)),
|
|
805
|
+
...observationReceipt,
|
|
806
|
+
};
|
|
788
807
|
const r = await executeAction(client, action, observation, trace, idem, provenance);
|
|
789
808
|
planned.push({
|
|
790
809
|
action,
|
|
@@ -868,6 +887,7 @@ export async function runCycle(deps) {
|
|
|
868
887
|
writeAttempted: decision.actions.length,
|
|
869
888
|
writeAccepted: planned.filter((p) => p.accepted).length,
|
|
870
889
|
...(postedOpportunity ? { opportunity: postedOpportunity } : {}),
|
|
890
|
+
...observationReceipt,
|
|
871
891
|
};
|
|
872
892
|
}
|
|
873
893
|
export async function runLoop(deps, opts = {}) {
|
package/dist/agent/types.d.ts
CHANGED
|
@@ -301,6 +301,8 @@ export interface AgentTrace {
|
|
|
301
301
|
strategyLabel?: string;
|
|
302
302
|
confidence?: number;
|
|
303
303
|
rationaleSummary?: string;
|
|
304
|
+
observationHash?: string;
|
|
305
|
+
indicatorVersion?: string;
|
|
304
306
|
}
|
|
305
307
|
export interface ApiResult {
|
|
306
308
|
ok: boolean;
|
|
@@ -330,6 +332,8 @@ export interface CycleResult {
|
|
|
330
332
|
disabled?: boolean;
|
|
331
333
|
disabledReason?: string;
|
|
332
334
|
live: boolean;
|
|
335
|
+
observationHash?: string;
|
|
336
|
+
indicatorVersion?: string;
|
|
333
337
|
triggerCodes?: string[];
|
|
334
338
|
llmCallMade?: boolean;
|
|
335
339
|
tokensIn?: number;
|
package/dist/client.d.ts
CHANGED
|
@@ -48,6 +48,10 @@ export declare class CoinRithmClient {
|
|
|
48
48
|
getPublicPmOverview(query?: {
|
|
49
49
|
fiat?: string;
|
|
50
50
|
}): Promise<ApiResult>;
|
|
51
|
+
getPublicPmSources(query?: {
|
|
52
|
+
fiat?: string;
|
|
53
|
+
}): Promise<ApiResult>;
|
|
54
|
+
getPublicPmSourcesHealth(): Promise<ApiResult>;
|
|
51
55
|
listPublicPmEvents(query?: {
|
|
52
56
|
q?: string;
|
|
53
57
|
source?: string;
|
package/dist/client.js
CHANGED
|
@@ -203,6 +203,12 @@ export class CoinRithmClient {
|
|
|
203
203
|
getPublicPmOverview(query) {
|
|
204
204
|
return this.publicRequest("/api/prediction-markets/overview", query);
|
|
205
205
|
}
|
|
206
|
+
getPublicPmSources(query) {
|
|
207
|
+
return this.publicRequest("/api/prediction-markets/sources", query);
|
|
208
|
+
}
|
|
209
|
+
getPublicPmSourcesHealth() {
|
|
210
|
+
return this.publicRequest("/api/prediction-markets/sources/health");
|
|
211
|
+
}
|
|
206
212
|
listPublicPmEvents(query) {
|
|
207
213
|
return this.publicRequest("/api/prediction-markets/events", query);
|
|
208
214
|
}
|
package/dist/tools.js
CHANGED
|
@@ -1426,8 +1426,8 @@ export function registerTools(server, client) {
|
|
|
1426
1426
|
title: "Cross-venue prediction-market statistics",
|
|
1427
1427
|
description: "Free public cross-venue prediction-market statistics: total/open/" +
|
|
1428
1428
|
"closed market counts, total volume, 24h volume, and liquidity " +
|
|
1429
|
-
"aggregated across all
|
|
1430
|
-
"Limitless, Smarkets, Manifold, Metaculus, PredictIt, Futuur, Myriad, ForecastEx), plus market " +
|
|
1429
|
+
"aggregated across all 12 venues (Polymarket, Kalshi, Rothera, " +
|
|
1430
|
+
"Limitless, Smarkets, Manifold, Metaculus, PredictIt, Futuur, Myriad, ForecastEx, Gemini), plus market " +
|
|
1431
1431
|
"highlights in a compact discovery shape. Use pm_data_event for full " +
|
|
1432
1432
|
"event evidence. Freshness is SOURCE-AWARE — each venue ingests " +
|
|
1433
1433
|
"independently; per-venue health (freshness tier, lag, stale reason) " +
|
|
@@ -1445,11 +1445,40 @@ export function registerTools(server, client) {
|
|
|
1445
1445
|
outputSchema: API_RESULT_OUTPUT_SCHEMA,
|
|
1446
1446
|
annotations: readOnlyAnnotations("Cross-venue prediction-market statistics"),
|
|
1447
1447
|
}, async ({ fiat }) => present(mapSuccessfulBody(await client.getPublicPmOverview({ fiat }), compactPublicPmOverview)));
|
|
1448
|
+
server.registerTool("pm_data_sources", {
|
|
1449
|
+
title: "Prediction-market venue methodology and coverage",
|
|
1450
|
+
description: "Free public methodology and comparable coverage for every CoinRithm " +
|
|
1451
|
+
"prediction-market venue: source kind, supported metrics, market counts, " +
|
|
1452
|
+
"explicit 24h/cumulative volume bases, currency basis, comparability, " +
|
|
1453
|
+
"and as-of timestamps. Use this before comparing venue totals so a " +
|
|
1454
|
+
"completed-day figure is never described as rolling 24h and play-money " +
|
|
1455
|
+
"points are never described as USD. No API key required.",
|
|
1456
|
+
inputSchema: {
|
|
1457
|
+
fiat: z
|
|
1458
|
+
.string()
|
|
1459
|
+
.optional()
|
|
1460
|
+
.describe("Fiat currency code for monetary figures (default usd)."),
|
|
1461
|
+
},
|
|
1462
|
+
outputSchema: API_RESULT_OUTPUT_SCHEMA,
|
|
1463
|
+
annotations: readOnlyAnnotations("Prediction-market venue methodology and coverage"),
|
|
1464
|
+
}, async ({ fiat }) => present(await client.getPublicPmSources({ fiat })));
|
|
1465
|
+
server.registerTool("pm_data_sources_health", {
|
|
1466
|
+
title: "Prediction-market venue freshness and health",
|
|
1467
|
+
description: "Free public per-venue ingest health across all CoinRithm sources: " +
|
|
1468
|
+
"freshness tier, observed lag, stale/degraded reason, coverage counts, " +
|
|
1469
|
+
"and current health timestamps. Check this before using a quote or " +
|
|
1470
|
+
"claiming cross-venue coverage; a venue being in the catalogue does " +
|
|
1471
|
+
"not by itself prove its hot prices meet the live freshness target. " +
|
|
1472
|
+
"No API key required.",
|
|
1473
|
+
inputSchema: {},
|
|
1474
|
+
outputSchema: API_RESULT_OUTPUT_SCHEMA,
|
|
1475
|
+
annotations: readOnlyAnnotations("Prediction-market venue freshness and health"),
|
|
1476
|
+
}, async () => present(await client.getPublicPmSourcesHealth()));
|
|
1448
1477
|
server.registerTool("pm_data_events", {
|
|
1449
1478
|
title: "Search prediction markets across all venues",
|
|
1450
|
-
description: "Free public search over prediction-market events across ALL
|
|
1479
|
+
description: "Free public search over prediction-market events across ALL 12 " +
|
|
1451
1480
|
"venues (Polymarket, Kalshi, Rothera, Limitless, Smarkets, " +
|
|
1452
|
-
"Manifold, Metaculus, PredictIt, Futuur, Myriad, ForecastEx) — broader than discover_pm_markets, which is " +
|
|
1481
|
+
"Manifold, Metaculus, PredictIt, Futuur, Myriad, ForecastEx, Gemini) — broader than discover_pm_markets, which is " +
|
|
1453
1482
|
"scoped to the paper-tradeable venues. Returns titles, probabilities, " +
|
|
1454
1483
|
"volume/liquidity, status, and source per event, plus " +
|
|
1455
1484
|
"the five highest-probability outcomes and the full outcome count. " +
|
|
@@ -1468,7 +1497,7 @@ export function registerTools(server, client) {
|
|
|
1468
1497
|
.string()
|
|
1469
1498
|
.optional()
|
|
1470
1499
|
.describe("Optional venue filter: polymarket, kalshi, rothera, limitless, " +
|
|
1471
|
-
"smarkets, manifold, metaculus, predictit, futuur, myriad, or
|
|
1500
|
+
"smarkets, manifold, metaculus, predictit, futuur, myriad, forecastex, or gemini."),
|
|
1472
1501
|
status: z
|
|
1473
1502
|
.string()
|
|
1474
1503
|
.optional()
|
|
@@ -1525,7 +1554,7 @@ export function registerTools(server, client) {
|
|
|
1525
1554
|
source: z
|
|
1526
1555
|
.string()
|
|
1527
1556
|
.describe("Venue slug: polymarket, kalshi, rothera, limitless, smarkets, " +
|
|
1528
|
-
"manifold, metaculus, predictit, futuur, myriad, or
|
|
1557
|
+
"manifold, metaculus, predictit, futuur, myriad, forecastex, or gemini."),
|
|
1529
1558
|
slug: z.string().describe("Event slug on that venue."),
|
|
1530
1559
|
fiat: z
|
|
1531
1560
|
.string()
|
package/package.json
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@coinrithm/mcp-trading",
|
|
3
|
-
"version": "0.7.
|
|
4
|
-
"mcpName": "io.github.CoinRithm/mcp-trading",
|
|
5
|
-
"description": "CoinRithm paper-trading toolkit: an MCP server (coinrithm-mcp) AND a self-host agent runner (coinrithm-agent) for spot, futures, and prediction markets with a user-minted API key.",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"author": "CoinRithm",
|
|
8
|
-
"homepage": "https://coinrithm.com/agentic-trading",
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/CoinRithm/coinrithm-agent-trading.git",
|
|
12
|
-
"directory": "packages/mcp-trading"
|
|
13
|
-
},
|
|
14
|
-
"bugs": {
|
|
15
|
-
"url": "https://github.com/CoinRithm/coinrithm-agent-trading/issues"
|
|
16
|
-
},
|
|
17
|
-
"publishConfig": {
|
|
18
|
-
"access": "public"
|
|
19
|
-
},
|
|
20
|
-
"bin": {
|
|
21
|
-
"coinrithm-mcp": "dist/index.js",
|
|
22
|
-
"coinrithm-agent": "dist/agent/index.js"
|
|
23
|
-
},
|
|
24
|
-
"main": "dist/index.js",
|
|
25
|
-
"files": [
|
|
26
|
-
"dist",
|
|
27
|
-
"README.md",
|
|
28
|
-
"CHANGELOG.md"
|
|
29
|
-
],
|
|
30
|
-
"scripts": {
|
|
31
|
-
"build": "tsc -p tsconfig.json",
|
|
32
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
33
|
-
"test": "vitest run",
|
|
34
|
-
"lint": "eslint src",
|
|
35
|
-
"lint:fix": "eslint src --fix",
|
|
36
|
-
"format": "prettier --write \"src/**/*.ts\"",
|
|
37
|
-
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
38
|
-
"start": "node dist/index.js",
|
|
39
|
-
"start:http": "node dist/http.js",
|
|
40
|
-
"smoke:agent": "npm run build && node scripts/agent-smoke.mjs",
|
|
41
|
-
"prepare": "npm run build"
|
|
42
|
-
},
|
|
43
|
-
"engines": {
|
|
44
|
-
"node": ">=18"
|
|
45
|
-
},
|
|
46
|
-
"keywords": [
|
|
47
|
-
"mcp",
|
|
48
|
-
"mcp-server",
|
|
49
|
-
"model-context-protocol",
|
|
50
|
-
"ai-agent",
|
|
51
|
-
"agent-trading",
|
|
52
|
-
"trading",
|
|
53
|
-
"paper-trading",
|
|
54
|
-
"crypto",
|
|
55
|
-
"futures",
|
|
56
|
-
"prediction-markets",
|
|
57
|
-
"polymarket",
|
|
58
|
-
"kalshi",
|
|
59
|
-
"claude",
|
|
60
|
-
"chatgpt",
|
|
61
|
-
"gemini",
|
|
62
|
-
"cursor",
|
|
63
|
-
"open-knowledge-format",
|
|
64
|
-
"okf",
|
|
65
|
-
"model-agnostic",
|
|
66
|
-
"leaderboard",
|
|
67
|
-
"coinrithm"
|
|
68
|
-
],
|
|
69
|
-
"license": "MIT",
|
|
70
|
-
"dependencies": {
|
|
71
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
72
|
-
"express": "^4.21.0",
|
|
73
|
-
"yaml": "^2.5.0",
|
|
74
|
-
"zod": "^3.23.8"
|
|
75
|
-
},
|
|
76
|
-
"devDependencies": {
|
|
77
|
-
"@eslint/js": "^9.13.0",
|
|
78
|
-
"@types/express": "^4.17.21",
|
|
79
|
-
"@types/node": "^20.14.0",
|
|
80
|
-
"eslint": "^9.13.0",
|
|
81
|
-
"prettier": "^3.3.3",
|
|
82
|
-
"typescript": "^5.5.0",
|
|
83
|
-
"typescript-eslint": "^8.11.0",
|
|
84
|
-
"vitest": "^2.1.0"
|
|
85
|
-
}
|
|
86
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@coinrithm/mcp-trading",
|
|
3
|
+
"version": "0.7.5",
|
|
4
|
+
"mcpName": "io.github.CoinRithm/mcp-trading",
|
|
5
|
+
"description": "CoinRithm paper-trading toolkit: an MCP server (coinrithm-mcp) AND a self-host agent runner (coinrithm-agent) for spot, futures, and prediction markets with a user-minted API key.",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"author": "CoinRithm",
|
|
8
|
+
"homepage": "https://coinrithm.com/agentic-trading",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/CoinRithm/coinrithm-agent-trading.git",
|
|
12
|
+
"directory": "packages/mcp-trading"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/CoinRithm/coinrithm-agent-trading/issues"
|
|
16
|
+
},
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"bin": {
|
|
21
|
+
"coinrithm-mcp": "dist/index.js",
|
|
22
|
+
"coinrithm-agent": "dist/agent/index.js"
|
|
23
|
+
},
|
|
24
|
+
"main": "dist/index.js",
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"README.md",
|
|
28
|
+
"CHANGELOG.md"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -p tsconfig.json",
|
|
32
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"lint": "eslint src",
|
|
35
|
+
"lint:fix": "eslint src --fix",
|
|
36
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
37
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
38
|
+
"start": "node dist/index.js",
|
|
39
|
+
"start:http": "node dist/http.js",
|
|
40
|
+
"smoke:agent": "npm run build && node scripts/agent-smoke.mjs",
|
|
41
|
+
"prepare": "npm run build"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18"
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"mcp",
|
|
48
|
+
"mcp-server",
|
|
49
|
+
"model-context-protocol",
|
|
50
|
+
"ai-agent",
|
|
51
|
+
"agent-trading",
|
|
52
|
+
"trading",
|
|
53
|
+
"paper-trading",
|
|
54
|
+
"crypto",
|
|
55
|
+
"futures",
|
|
56
|
+
"prediction-markets",
|
|
57
|
+
"polymarket",
|
|
58
|
+
"kalshi",
|
|
59
|
+
"claude",
|
|
60
|
+
"chatgpt",
|
|
61
|
+
"gemini",
|
|
62
|
+
"cursor",
|
|
63
|
+
"open-knowledge-format",
|
|
64
|
+
"okf",
|
|
65
|
+
"model-agnostic",
|
|
66
|
+
"leaderboard",
|
|
67
|
+
"coinrithm"
|
|
68
|
+
],
|
|
69
|
+
"license": "MIT",
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
72
|
+
"express": "^4.21.0",
|
|
73
|
+
"yaml": "^2.5.0",
|
|
74
|
+
"zod": "^3.23.8"
|
|
75
|
+
},
|
|
76
|
+
"devDependencies": {
|
|
77
|
+
"@eslint/js": "^9.13.0",
|
|
78
|
+
"@types/express": "^4.17.21",
|
|
79
|
+
"@types/node": "^20.14.0",
|
|
80
|
+
"eslint": "^9.13.0",
|
|
81
|
+
"prettier": "^3.3.3",
|
|
82
|
+
"typescript": "^5.5.0",
|
|
83
|
+
"typescript-eslint": "^8.11.0",
|
|
84
|
+
"vitest": "^2.1.0"
|
|
85
|
+
}
|
|
86
|
+
}
|