@coinrithm/mcp-trading 0.5.0 → 0.7.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/CHANGELOG.md +28 -0
- package/README.md +26 -1
- package/dist/client.d.ts +17 -0
- package/dist/client.js +56 -0
- package/dist/http.js +26 -0
- package/dist/tools.js +116 -0
- package/package.json +78 -78
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,34 @@ 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.5.0`).
|
|
7
7
|
|
|
8
|
+
## 0.7.1
|
|
9
|
+
|
|
10
|
+
Docs + registry-metadata release; no tool behavior changes.
|
|
11
|
+
|
|
12
|
+
- **README refresh**: the keyless `pm_data_*` data surface is now front and
|
|
13
|
+
center — 8 venues (Polymarket, Kalshi, Smarkets, Limitless, Manifold,
|
|
14
|
+
Metaculus, Futuur, Rothera; an earlier line wrongly listed PredictIt), the
|
|
15
|
+
anonymous hosted-endpoint path, and the `referenceProbability` /
|
|
16
|
+
`volumeHistory` fields the data tools return.
|
|
17
|
+
- **`server.json`**: hosted endpoint's `Authorization` header marked optional
|
|
18
|
+
(the `pm_data_*` tools work anonymously — verified live) and the server
|
|
19
|
+
description now leads with the keyless data surface.
|
|
20
|
+
- Ships the post-0.7.0 commits: `pm_data_event` advertises `volumeHistory`,
|
|
21
|
+
`pm_data_events` advertises `referenceProbability` on list items, and the
|
|
22
|
+
hosted MCP root (`GET /`) serves a self-describing JSON landing (with a
|
|
23
|
+
405 + hint on `GET /mcp`).
|
|
24
|
+
|
|
25
|
+
## 0.7.0
|
|
26
|
+
|
|
27
|
+
(Retroactive entry — released 2026-07-05 without a changelog note.)
|
|
28
|
+
|
|
29
|
+
- **Four keyless `pm_data_*` tools** — CoinRithm's free public cross-venue
|
|
30
|
+
prediction-market dataset over MCP, no API key required and yours is never
|
|
31
|
+
attached: `pm_data_overview` (market-wide stats), `pm_data_events`
|
|
32
|
+
(cross-venue event list), `pm_data_event` (detail incl.
|
|
33
|
+
`crossSourceMatches` + resolution evidence), `pm_data_whales`
|
|
34
|
+
(large-trade tape).
|
|
35
|
+
|
|
8
36
|
## 0.5.0
|
|
9
37
|
|
|
10
38
|
Agent-runner quality + reliability release. `coinrithm-agent` got materially
|
package/README.md
CHANGED
|
@@ -7,6 +7,15 @@ spot, futures, and prediction markets on
|
|
|
7
7
|
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
|
+
**Plus a free prediction-market data surface — no key at all.** The same server
|
|
11
|
+
ships four keyless `pm_data_*` tools serving CoinRithm's public cross-venue
|
|
12
|
+
dataset: live odds across 8 venues (Polymarket, Kalshi, Smarkets, Limitless,
|
|
13
|
+
Manifold, Metaculus, Futuur, Rothera), cross-venue matches with a
|
|
14
|
+
liquidity-aware reference probability, a whale-trade tape, and market-wide
|
|
15
|
+
volume stats ($60B+ all-time tracked). Point any MCP client at the hosted
|
|
16
|
+
endpoint `https://mcp.coinrithm.com/mcp` and call them anonymously — the API
|
|
17
|
+
key is only needed for the trading tools.
|
|
18
|
+
|
|
10
19
|
Agents are **OKF bundles** — an open, model-agnostic folder of markdown + YAML
|
|
11
20
|
(strategy, persona, hard caps) that any runtime can read. Two ways to run the
|
|
12
21
|
**same** bundle:
|
|
@@ -70,7 +79,9 @@ DB-driven runtime.
|
|
|
70
79
|
|
|
71
80
|
The hosted HTTP server holds **no** key: each request brings its own
|
|
72
81
|
`crk_live_…` in the Authorization header, and the server forwards exactly that
|
|
73
|
-
key upstream.
|
|
82
|
+
key upstream. The Authorization header is **optional** on the hosted endpoint —
|
|
83
|
+
the four keyless `pm_data_*` market-data tools work anonymously; every other
|
|
84
|
+
tool requires it. See [`DEPLOY.md`](./DEPLOY.md).
|
|
74
85
|
|
|
75
86
|
## Configure (stdio)
|
|
76
87
|
|
|
@@ -125,6 +136,20 @@ key upstream. See [`DEPLOY.md`](./DEPLOY.md).
|
|
|
125
136
|
| `set_futures_sl_tp` | trade:futures | `POST /api/agent/futures/sl-tp` ² |
|
|
126
137
|
| `close_futures_position` | trade:futures | `POST /api/agent/futures/close` |
|
|
127
138
|
| `open_pm_position` | trade:pm | `POST /api/agent/pm/open` ¹ |
|
|
139
|
+
| `pm_data_overview` | none (public) | `GET /api/prediction-markets/overview` |
|
|
140
|
+
| `pm_data_events` | none (public) | `GET /api/prediction-markets/events` |
|
|
141
|
+
| `pm_data_event` (source, slug) | none (public) | `GET /api/prediction-markets/events/:source/:slug` |
|
|
142
|
+
| `pm_data_whales` | none (public) | `GET /api/prediction-markets/whales` |
|
|
143
|
+
|
|
144
|
+
The four `pm_data_*` tools wrap CoinRithm's free public cross-venue dataset
|
|
145
|
+
(all eight venues: Polymarket, Kalshi, Smarkets, Limitless, Manifold,
|
|
146
|
+
Metaculus, Futuur, Rothera). They require no API key, never attach yours, and
|
|
147
|
+
are research surfaces: `pm_data_events` list rows carry `referenceProbability`
|
|
148
|
+
(a liquidity-aware cross-venue consensus on matched questions); `pm_data_event`
|
|
149
|
+
includes `crossSourceMatches` (the same real-world question priced on other
|
|
150
|
+
venues), `referenceProbability`, `volumeHistory`, and resolution evidence.
|
|
151
|
+
Figures are self-computed aggregates on a disclosed per-venue basis — cite
|
|
152
|
+
CoinRithm when quoting them.
|
|
128
153
|
|
|
129
154
|
¹ Server-flag gated; live now. Returns `403 … not enabled` only if CoinRithm later disables it.
|
|
130
155
|
|
package/dist/client.d.ts
CHANGED
|
@@ -29,6 +29,23 @@ export declare class CoinRithmClient {
|
|
|
29
29
|
private readonly baseUrl;
|
|
30
30
|
constructor(config: ClientConfig);
|
|
31
31
|
private request;
|
|
32
|
+
private publicRequest;
|
|
33
|
+
getPublicPmOverview(query?: {
|
|
34
|
+
fiat?: string;
|
|
35
|
+
}): Promise<ApiResult>;
|
|
36
|
+
listPublicPmEvents(query?: {
|
|
37
|
+
q?: string;
|
|
38
|
+
source?: string;
|
|
39
|
+
status?: string;
|
|
40
|
+
sort?: string;
|
|
41
|
+
limit?: number;
|
|
42
|
+
offset?: number;
|
|
43
|
+
fiat?: string;
|
|
44
|
+
}): Promise<ApiResult>;
|
|
45
|
+
getPublicPmEvent(source: string, slug: string, query?: {
|
|
46
|
+
fiat?: string;
|
|
47
|
+
}): Promise<ApiResult>;
|
|
48
|
+
getPublicPmWhales(): Promise<ApiResult>;
|
|
32
49
|
whoami(apiKey?: string, agentTrace?: AgentTrace): Promise<ApiResult>;
|
|
33
50
|
getPortfolio(query?: {
|
|
34
51
|
fiat?: string;
|
package/dist/client.js
CHANGED
|
@@ -157,6 +157,62 @@ export class CoinRithmClient {
|
|
|
157
157
|
data,
|
|
158
158
|
};
|
|
159
159
|
}
|
|
160
|
+
// Public, keyless GET against the free cross-venue data API
|
|
161
|
+
// (/api/prediction-markets/*). No Authorization header is ever attached:
|
|
162
|
+
// these endpoints require no key, and the caller's trading key must not
|
|
163
|
+
// leak into them. No ledger headers exist on this surface either.
|
|
164
|
+
async publicRequest(path, query) {
|
|
165
|
+
const url = new URL(this.baseUrl + path);
|
|
166
|
+
if (query) {
|
|
167
|
+
for (const [k, v] of Object.entries(query)) {
|
|
168
|
+
if (v !== undefined && v !== null && v !== "") {
|
|
169
|
+
url.searchParams.set(k, String(v));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
let res;
|
|
174
|
+
try {
|
|
175
|
+
res = await fetch(url.toString(), {
|
|
176
|
+
method: "GET",
|
|
177
|
+
headers: { Accept: "application/json" },
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
log(`network error calling GET ${path}:`, err);
|
|
182
|
+
return {
|
|
183
|
+
ok: false,
|
|
184
|
+
status: 0,
|
|
185
|
+
data: {
|
|
186
|
+
error: "network_error",
|
|
187
|
+
message: err instanceof Error ? err.message : String(err),
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const text = await res.text();
|
|
192
|
+
let data = text;
|
|
193
|
+
if (text) {
|
|
194
|
+
try {
|
|
195
|
+
data = JSON.parse(text);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// leave as text
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return { ok: res.ok, status: res.status, data };
|
|
202
|
+
}
|
|
203
|
+
// ---- public PM data (no key required) ----
|
|
204
|
+
getPublicPmOverview(query) {
|
|
205
|
+
return this.publicRequest("/api/prediction-markets/overview", query);
|
|
206
|
+
}
|
|
207
|
+
listPublicPmEvents(query) {
|
|
208
|
+
return this.publicRequest("/api/prediction-markets/events", query);
|
|
209
|
+
}
|
|
210
|
+
getPublicPmEvent(source, slug, query) {
|
|
211
|
+
return this.publicRequest(`/api/prediction-markets/events/${encodeURIComponent(source)}/${encodeURIComponent(slug)}`, query);
|
|
212
|
+
}
|
|
213
|
+
getPublicPmWhales() {
|
|
214
|
+
return this.publicRequest("/api/prediction-markets/whales");
|
|
215
|
+
}
|
|
160
216
|
// Every method takes an optional trailing `apiKey` (the per-request key for
|
|
161
217
|
// the multi-user HTTP path). When omitted, the constructor key (stdio) is used.
|
|
162
218
|
// ---- reads (scope: read) ----
|
package/dist/http.js
CHANGED
|
@@ -49,6 +49,32 @@ async function main() {
|
|
|
49
49
|
app.get("/healthz", (_req, res) => {
|
|
50
50
|
res.json({ ok: true, service: "coinrithm-mcp", transport: "streamable-http" });
|
|
51
51
|
});
|
|
52
|
+
// Self-describing landing for humans and validate-before-recommend agents.
|
|
53
|
+
// GET / and GET /mcp used to 404, which reads as a dead service to anyone
|
|
54
|
+
// probing the published URL (GEO audit 2026-07-07). The MCP endpoint itself
|
|
55
|
+
// is POST-only streamable HTTP — say so instead of 404ing.
|
|
56
|
+
app.get("/", (_req, res) => {
|
|
57
|
+
res.json({
|
|
58
|
+
service: "CoinRithm MCP",
|
|
59
|
+
version: SERVER_VERSION,
|
|
60
|
+
description: "Model Context Protocol server for CoinRithm: keyless public prediction-market data tools (pm_data_*) plus paper-trading tools (spot, futures, prediction markets) with a crk_live_ API key. Paper only — never real money.",
|
|
61
|
+
endpoint: { url: "https://mcp.coinrithm.com/mcp", method: "POST", transport: "streamable-http" },
|
|
62
|
+
connect: "Point any MCP client at the endpoint above. Data tools need no key; trading tools take Authorization: Bearer crk_live_… (mint one at coinrithm.com → Settings → API Keys).",
|
|
63
|
+
localAlternative: "npx -y @coinrithm/mcp-trading",
|
|
64
|
+
docs: {
|
|
65
|
+
quickstart: "https://www.coinrithm.com/en/agentic-trading",
|
|
66
|
+
openapi: "https://www.coinrithm.com/openapi.yaml",
|
|
67
|
+
repo: "https://github.com/CoinRithm/coinrithm-agent-trading",
|
|
68
|
+
dataApi: "https://www.coinrithm.com/en/prediction-markets/api",
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
app.get("/mcp", (_req, res) => {
|
|
73
|
+
res.status(405).json({
|
|
74
|
+
error: "method_not_allowed",
|
|
75
|
+
message: "This is a POST-only streamable-HTTP MCP endpoint. Connect with an MCP client, or GET / for service info.",
|
|
76
|
+
});
|
|
77
|
+
});
|
|
52
78
|
app.post("/mcp", async (req, res) => {
|
|
53
79
|
// Per-request auth: read THIS caller's key from the Authorization header,
|
|
54
80
|
// or from Smithery's non-reserved forwarding header.
|
package/dist/tools.js
CHANGED
|
@@ -852,4 +852,120 @@ export function registerTools(server, client) {
|
|
|
852
852
|
idempotencyKey,
|
|
853
853
|
agentTrace,
|
|
854
854
|
}, requestKey(extra))));
|
|
855
|
+
// ---- Public cross-venue PM data (no API key required) ----
|
|
856
|
+
// These wrap the free /api/prediction-markets/* endpoints — CoinRithm's
|
|
857
|
+
// citable cross-venue dataset. They never attach the caller's key.
|
|
858
|
+
server.registerTool("pm_data_overview", {
|
|
859
|
+
title: "Cross-venue prediction-market statistics",
|
|
860
|
+
description: "Free public cross-venue prediction-market statistics: total/open/" +
|
|
861
|
+
"closed market counts, total volume, 24h volume, and liquidity " +
|
|
862
|
+
"aggregated across Polymarket, Kalshi, Metaculus, PredictIt, " +
|
|
863
|
+
"Limitless, Manifold, and Smarkets, plus market highlights. Volume is " +
|
|
864
|
+
"reported on each venue's own basis (see the methodology at " +
|
|
865
|
+
"https://coinrithm.com/en/prediction-markets/stats) and monetary " +
|
|
866
|
+
"totals cover real-money venues only — these are self-computed " +
|
|
867
|
+
"aggregates, so cite CoinRithm when quoting them. No API key required.",
|
|
868
|
+
inputSchema: {
|
|
869
|
+
fiat: z
|
|
870
|
+
.string()
|
|
871
|
+
.optional()
|
|
872
|
+
.describe("Fiat currency code for monetary figures (default usd)."),
|
|
873
|
+
},
|
|
874
|
+
outputSchema: API_RESULT_OUTPUT_SCHEMA,
|
|
875
|
+
annotations: readOnlyAnnotations("Cross-venue prediction-market statistics"),
|
|
876
|
+
}, async ({ fiat }) => present(await client.getPublicPmOverview({ fiat })));
|
|
877
|
+
server.registerTool("pm_data_events", {
|
|
878
|
+
title: "Search prediction markets across all venues",
|
|
879
|
+
description: "Free public search over prediction-market events across ALL seven " +
|
|
880
|
+
"venues (Polymarket, Kalshi, Metaculus, PredictIt, Limitless, " +
|
|
881
|
+
"Manifold, Smarkets) — broader than discover_pm_markets, which is " +
|
|
882
|
+
"scoped to the paper-tradeable venues. Returns titles, probabilities, " +
|
|
883
|
+
"volume/liquidity, status, and source per event, plus " +
|
|
884
|
+
"referenceProbability when present (CoinRithm's canonical cross-venue " +
|
|
885
|
+
"number for open events matched across venues — probability, " +
|
|
886
|
+
"venueCount, spreadPoints, and outcomeName for multi-outcome " +
|
|
887
|
+
"leaders). Research/data only: to trade, use discover_pm_markets + " +
|
|
888
|
+
"pm_quote instead. No API key required.",
|
|
889
|
+
inputSchema: {
|
|
890
|
+
q: z.string().optional().describe("Optional search text."),
|
|
891
|
+
source: z
|
|
892
|
+
.string()
|
|
893
|
+
.optional()
|
|
894
|
+
.describe("Optional venue filter: polymarket, kalshi, metaculus, predictit, " +
|
|
895
|
+
"limitless, manifold, or smarkets."),
|
|
896
|
+
status: z
|
|
897
|
+
.string()
|
|
898
|
+
.optional()
|
|
899
|
+
.describe("Optional status filter (e.g. open or closed)."),
|
|
900
|
+
sort: z.string().optional().describe("Optional sort key."),
|
|
901
|
+
limit: z
|
|
902
|
+
.number()
|
|
903
|
+
.int()
|
|
904
|
+
.min(1)
|
|
905
|
+
.max(50)
|
|
906
|
+
.optional()
|
|
907
|
+
.describe("Max rows (1-50, default 20)."),
|
|
908
|
+
offset: z
|
|
909
|
+
.number()
|
|
910
|
+
.int()
|
|
911
|
+
.min(0)
|
|
912
|
+
.optional()
|
|
913
|
+
.describe("Pagination offset (default 0)."),
|
|
914
|
+
fiat: z
|
|
915
|
+
.string()
|
|
916
|
+
.optional()
|
|
917
|
+
.describe("Fiat currency code for monetary figures (default usd)."),
|
|
918
|
+
},
|
|
919
|
+
outputSchema: API_RESULT_OUTPUT_SCHEMA,
|
|
920
|
+
annotations: readOnlyAnnotations("Search prediction markets across all venues"),
|
|
921
|
+
}, async ({ q, source, status, sort, limit, offset, fiat }) => present(await client.listPublicPmEvents({
|
|
922
|
+
q,
|
|
923
|
+
source,
|
|
924
|
+
status,
|
|
925
|
+
sort,
|
|
926
|
+
limit,
|
|
927
|
+
offset,
|
|
928
|
+
fiat,
|
|
929
|
+
})));
|
|
930
|
+
server.registerTool("pm_data_event", {
|
|
931
|
+
title: "Get full prediction-market event detail",
|
|
932
|
+
description: "Free public detail for one prediction-market event by venue + slug: " +
|
|
933
|
+
"outcomes with probabilities, price snapshots, resolution evidence, " +
|
|
934
|
+
"crossSourceMatches (the SAME real-world question priced on other " +
|
|
935
|
+
"venues — read probability divergence directly from it), " +
|
|
936
|
+
"referenceProbability when present (CoinRithm's canonical cross-venue " +
|
|
937
|
+
"number: the liquidity-weighted median Yes probability across matched " +
|
|
938
|
+
"real-money venues, with venueCount and spreadPoints — quote all " +
|
|
939
|
+
"three together, venues disagree and the spread says by how much), " +
|
|
940
|
+
"recent whale trades on the event, related events, related news, and " +
|
|
941
|
+
"volumeHistory when present (daily volume points captured since " +
|
|
942
|
+
"2026-07-02 — read the event's volume trend directly from it). " +
|
|
943
|
+
"This is the cross-venue research view; for tradability use pm_quote. " +
|
|
944
|
+
"No API key required.",
|
|
945
|
+
inputSchema: {
|
|
946
|
+
source: z
|
|
947
|
+
.string()
|
|
948
|
+
.describe("Venue slug: polymarket, kalshi, metaculus, predictit, limitless, " +
|
|
949
|
+
"manifold, or smarkets."),
|
|
950
|
+
slug: z.string().describe("Event slug on that venue."),
|
|
951
|
+
fiat: z
|
|
952
|
+
.string()
|
|
953
|
+
.optional()
|
|
954
|
+
.describe("Fiat currency code for monetary figures (default usd)."),
|
|
955
|
+
},
|
|
956
|
+
outputSchema: API_RESULT_OUTPUT_SCHEMA,
|
|
957
|
+
annotations: readOnlyAnnotations("Get full prediction-market event detail"),
|
|
958
|
+
}, async ({ source, slug, fiat }) => present(await client.getPublicPmEvent(source, slug, { fiat })));
|
|
959
|
+
server.registerTool("pm_data_whales", {
|
|
960
|
+
title: "Get latest prediction-market whale trades",
|
|
961
|
+
description: "Free public tape of the latest large prediction-market trades " +
|
|
962
|
+
"(roughly $1k+ notional) across venues, newest first (top 50): side, " +
|
|
963
|
+
"outcome, USD value, price, market question, and the event it printed " +
|
|
964
|
+
"on. Polymarket rows are wallet-attributed; Kalshi rows are anonymized " +
|
|
965
|
+
"exchange prints. A large print is information, not a recommendation. " +
|
|
966
|
+
"No API key required.",
|
|
967
|
+
inputSchema: {},
|
|
968
|
+
outputSchema: API_RESULT_OUTPUT_SCHEMA,
|
|
969
|
+
annotations: readOnlyAnnotations("Get latest prediction-market whale trades"),
|
|
970
|
+
}, async () => present(await client.getPublicPmWhales()));
|
|
855
971
|
}
|
package/package.json
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@coinrithm/mcp-trading",
|
|
3
|
-
"version": "0.
|
|
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
|
-
"start": "node dist/index.js",
|
|
35
|
-
"start:http": "node dist/http.js",
|
|
36
|
-
"smoke:agent": "npm run build && node scripts/agent-smoke.mjs",
|
|
37
|
-
"prepare": "npm run build"
|
|
38
|
-
},
|
|
39
|
-
"engines": {
|
|
40
|
-
"node": ">=18"
|
|
41
|
-
},
|
|
42
|
-
"keywords": [
|
|
43
|
-
"mcp",
|
|
44
|
-
"mcp-server",
|
|
45
|
-
"model-context-protocol",
|
|
46
|
-
"ai-agent",
|
|
47
|
-
"agent-trading",
|
|
48
|
-
"trading",
|
|
49
|
-
"paper-trading",
|
|
50
|
-
"crypto",
|
|
51
|
-
"futures",
|
|
52
|
-
"prediction-markets",
|
|
53
|
-
"polymarket",
|
|
54
|
-
"kalshi",
|
|
55
|
-
"claude",
|
|
56
|
-
"chatgpt",
|
|
57
|
-
"gemini",
|
|
58
|
-
"cursor",
|
|
59
|
-
"open-knowledge-format",
|
|
60
|
-
"okf",
|
|
61
|
-
"model-agnostic",
|
|
62
|
-
"leaderboard",
|
|
63
|
-
"coinrithm"
|
|
64
|
-
],
|
|
65
|
-
"license": "MIT",
|
|
66
|
-
"dependencies": {
|
|
67
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
68
|
-
"express": "^4.21.0",
|
|
69
|
-
"yaml": "^2.5.0",
|
|
70
|
-
"zod": "^3.23.8"
|
|
71
|
-
},
|
|
72
|
-
"devDependencies": {
|
|
73
|
-
"@types/express": "^4.17.21",
|
|
74
|
-
"@types/node": "^20.14.0",
|
|
75
|
-
"typescript": "^5.5.0",
|
|
76
|
-
"vitest": "^2.1.0"
|
|
77
|
-
}
|
|
78
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@coinrithm/mcp-trading",
|
|
3
|
+
"version": "0.7.1",
|
|
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
|
+
"start": "node dist/index.js",
|
|
35
|
+
"start:http": "node dist/http.js",
|
|
36
|
+
"smoke:agent": "npm run build && node scripts/agent-smoke.mjs",
|
|
37
|
+
"prepare": "npm run build"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=18"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"mcp",
|
|
44
|
+
"mcp-server",
|
|
45
|
+
"model-context-protocol",
|
|
46
|
+
"ai-agent",
|
|
47
|
+
"agent-trading",
|
|
48
|
+
"trading",
|
|
49
|
+
"paper-trading",
|
|
50
|
+
"crypto",
|
|
51
|
+
"futures",
|
|
52
|
+
"prediction-markets",
|
|
53
|
+
"polymarket",
|
|
54
|
+
"kalshi",
|
|
55
|
+
"claude",
|
|
56
|
+
"chatgpt",
|
|
57
|
+
"gemini",
|
|
58
|
+
"cursor",
|
|
59
|
+
"open-knowledge-format",
|
|
60
|
+
"okf",
|
|
61
|
+
"model-agnostic",
|
|
62
|
+
"leaderboard",
|
|
63
|
+
"coinrithm"
|
|
64
|
+
],
|
|
65
|
+
"license": "MIT",
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
68
|
+
"express": "^4.21.0",
|
|
69
|
+
"yaml": "^2.5.0",
|
|
70
|
+
"zod": "^3.23.8"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@types/express": "^4.17.21",
|
|
74
|
+
"@types/node": "^20.14.0",
|
|
75
|
+
"typescript": "^5.5.0",
|
|
76
|
+
"vitest": "^2.1.0"
|
|
77
|
+
}
|
|
78
|
+
}
|