@tunedforai/x402-mcp 1.0.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/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +162 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @tunedforai/x402-mcp
|
|
4
|
+
* stdio MCP wrapper for x402.tunedfor.ai
|
|
5
|
+
* Exposes camelCase tool names — no dots, no parser breakage.
|
|
6
|
+
*/
|
|
7
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
const UPSTREAM = "https://x402.tunedfor.ai/mcp/";
|
|
11
|
+
// ── Session management ────────────────────────────────────────────────────────
|
|
12
|
+
let sessionId = null;
|
|
13
|
+
const ACCEPT = "application/json, text/event-stream";
|
|
14
|
+
async function initSession() {
|
|
15
|
+
if (sessionId)
|
|
16
|
+
return sessionId;
|
|
17
|
+
const res = await fetch(UPSTREAM, {
|
|
18
|
+
method: "POST",
|
|
19
|
+
headers: { "Content-Type": "application/json", Accept: ACCEPT },
|
|
20
|
+
body: JSON.stringify({
|
|
21
|
+
jsonrpc: "2.0",
|
|
22
|
+
id: 1,
|
|
23
|
+
method: "initialize",
|
|
24
|
+
params: {
|
|
25
|
+
protocolVersion: "2024-11-05",
|
|
26
|
+
capabilities: {},
|
|
27
|
+
clientInfo: { name: "x402-mcp-wrapper", version: "1.0.0" },
|
|
28
|
+
},
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
const sid = res.headers.get("mcp-session-id");
|
|
32
|
+
if (!sid)
|
|
33
|
+
throw new Error("No mcp-session-id in initialize response");
|
|
34
|
+
sessionId = sid;
|
|
35
|
+
return sessionId;
|
|
36
|
+
}
|
|
37
|
+
async function parseResponse(res) {
|
|
38
|
+
const ct = res.headers.get("content-type") ?? "";
|
|
39
|
+
if (ct.includes("text/event-stream")) {
|
|
40
|
+
// SSE: read all chunks and find the last data: line with a full JSON result
|
|
41
|
+
const text = await res.text();
|
|
42
|
+
const lines = text.split("\n");
|
|
43
|
+
let last = null;
|
|
44
|
+
for (const line of lines) {
|
|
45
|
+
if (line.startsWith("data: "))
|
|
46
|
+
last = line.slice(6).trim();
|
|
47
|
+
}
|
|
48
|
+
if (!last)
|
|
49
|
+
throw new Error("Empty SSE response from upstream");
|
|
50
|
+
return JSON.parse(last);
|
|
51
|
+
}
|
|
52
|
+
return res.json();
|
|
53
|
+
}
|
|
54
|
+
async function callTool(toolName, args) {
|
|
55
|
+
const sid = await initSession();
|
|
56
|
+
const body = JSON.stringify({
|
|
57
|
+
jsonrpc: "2.0",
|
|
58
|
+
id: Date.now(),
|
|
59
|
+
method: "tools/call",
|
|
60
|
+
params: { name: toolName, arguments: args },
|
|
61
|
+
});
|
|
62
|
+
const doFetch = (sessionIdToUse) => fetch(UPSTREAM, {
|
|
63
|
+
method: "POST",
|
|
64
|
+
headers: {
|
|
65
|
+
"Content-Type": "application/json",
|
|
66
|
+
Accept: ACCEPT,
|
|
67
|
+
"mcp-session-id": sessionIdToUse,
|
|
68
|
+
},
|
|
69
|
+
body,
|
|
70
|
+
});
|
|
71
|
+
let res = await doFetch(sid);
|
|
72
|
+
if (!res.ok) {
|
|
73
|
+
// Session may have expired — reset and retry once
|
|
74
|
+
if (res.status === 400 || res.status === 404) {
|
|
75
|
+
sessionId = null;
|
|
76
|
+
const sid2 = await initSession();
|
|
77
|
+
res = await doFetch(sid2);
|
|
78
|
+
if (!res.ok)
|
|
79
|
+
throw new Error(`Upstream error: ${res.status}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw new Error(`Upstream HTTP ${res.status}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const data = await parseResponse(res);
|
|
86
|
+
if (data.error)
|
|
87
|
+
throw new Error(data.error.message ?? "Upstream RPC error");
|
|
88
|
+
return data.result?.content;
|
|
89
|
+
}
|
|
90
|
+
// ── Helper: extract text from MCP content array ───────────────────────────────
|
|
91
|
+
function extractText(content) {
|
|
92
|
+
if (Array.isArray(content)) {
|
|
93
|
+
return content
|
|
94
|
+
.filter((c) => typeof c === "object" && c !== null && "text" in c)
|
|
95
|
+
.map((c) => c.text)
|
|
96
|
+
.join("\n");
|
|
97
|
+
}
|
|
98
|
+
return JSON.stringify(content, null, 2);
|
|
99
|
+
}
|
|
100
|
+
// ── MCP Server setup ──────────────────────────────────────────────────────────
|
|
101
|
+
const server = new McpServer({
|
|
102
|
+
name: "x402-crypto-market-structure",
|
|
103
|
+
version: "1.0.0",
|
|
104
|
+
});
|
|
105
|
+
// marketSnapshot — live price, funding, OI, buy/sell ratio, fear/greed
|
|
106
|
+
server.tool("marketSnapshot", "Live crypto market snapshot: price, funding rate, open interest, buy/sell ratio, fear/greed index. Supports BTC ETH SOL XRP BNB DOGE ADA AVAX LINK ATOM DOT ARB SUI OP LTC.", { token: z.string().default("BTC").describe("Token symbol, e.g. BTC, ETH, SOL") }, async ({ token }) => {
|
|
107
|
+
const result = await callTool("market.snapshot", { token });
|
|
108
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
109
|
+
});
|
|
110
|
+
// marketAnalyze — macro regime + directional signal
|
|
111
|
+
server.tool("marketAnalyze", "Full pre-trade macro analysis: regime detection, DXY, VIX, fear/greed, directional signal and confidence score.", { token: z.string().default("BTC").describe("Token symbol") }, async ({ token }) => {
|
|
112
|
+
const result = await callTool("market.analyze", { token });
|
|
113
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
114
|
+
});
|
|
115
|
+
// marketOrderflow — buy/sell pressure, delta, imbalance
|
|
116
|
+
server.tool("marketOrderflow", "Real-time orderflow data: buy/sell pressure, delta, imbalance across exchanges.", { token: z.string().default("BTC").describe("Token symbol") }, async ({ token }) => {
|
|
117
|
+
const result = await callTool("market.orderflow", { token });
|
|
118
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
119
|
+
});
|
|
120
|
+
// marketFull — combined snapshot + orderflow
|
|
121
|
+
server.tool("marketFull", "Full market data bundle: snapshot + orderflow combined. Most comprehensive view.", { token: z.string().default("BTC").describe("Token symbol") }, async ({ token }) => {
|
|
122
|
+
const result = await callTool("market.full", { token });
|
|
123
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
124
|
+
});
|
|
125
|
+
// history1h — hourly OHLCV + buy/sell flow
|
|
126
|
+
server.tool("history1h", "Hourly OHLCV price history with buy/sell flow data. Up to 17 days of 1-hour bars.", {
|
|
127
|
+
token: z.string().default("BTC").describe("Token symbol"),
|
|
128
|
+
limit: z.number().default(24).describe("Number of bars to return (max ~400)"),
|
|
129
|
+
}, async ({ token, limit }) => {
|
|
130
|
+
const result = await callTool("history.1h", { token, limit });
|
|
131
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
132
|
+
});
|
|
133
|
+
// history1d — daily OHLCV
|
|
134
|
+
server.tool("history1d", "Daily OHLCV price history. Good for trend analysis and backtesting context.", {
|
|
135
|
+
token: z.string().default("BTC").describe("Token symbol"),
|
|
136
|
+
limit: z.number().default(30).describe("Number of daily bars"),
|
|
137
|
+
}, async ({ token, limit }) => {
|
|
138
|
+
const result = await callTool("history.1d", { token, limit });
|
|
139
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
140
|
+
});
|
|
141
|
+
// history5m — 5-minute OHLCV
|
|
142
|
+
server.tool("history5m", "5-minute OHLCV price bars. High-resolution intraday data.", {
|
|
143
|
+
token: z.string().default("BTC").describe("Token symbol"),
|
|
144
|
+
limit: z.number().default(60).describe("Number of 5-minute bars"),
|
|
145
|
+
}, async ({ token, limit }) => {
|
|
146
|
+
const result = await callTool("history.5m", { token, limit });
|
|
147
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
148
|
+
});
|
|
149
|
+
// addressRisk — wallet risk scoring
|
|
150
|
+
server.tool("addressRisk", "Risk score for an Ethereum wallet address. Flags mixers, sanctions, high-risk counterparties.", { address: z.string().describe("Full 42-character Ethereum address (0x...)") }, async ({ address }) => {
|
|
151
|
+
const result = await callTool("address.risk", { address });
|
|
152
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
153
|
+
});
|
|
154
|
+
// apiInfo — pricing and quick-start for REST API
|
|
155
|
+
server.tool("apiInfo", "x402 API pricing, quick start guide, and migration details for the pay-per-call REST endpoint.", {}, async () => {
|
|
156
|
+
const result = await callTool("api.info", {});
|
|
157
|
+
return { content: [{ type: "text", text: extractText(result) }] };
|
|
158
|
+
});
|
|
159
|
+
// ── Start ─────────────────────────────────────────────────────────────────────
|
|
160
|
+
const transport = new StdioServerTransport();
|
|
161
|
+
await server.connect(transport);
|
|
162
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tunedforai/x402-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for x402 crypto market structure data — camelCase tools, zero config, works everywhere",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"x402-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsx src/index.ts",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mcp",
|
|
20
|
+
"crypto",
|
|
21
|
+
"market-data",
|
|
22
|
+
"bitcoin",
|
|
23
|
+
"ethereum",
|
|
24
|
+
"x402",
|
|
25
|
+
"modelcontextprotocol"
|
|
26
|
+
],
|
|
27
|
+
"author": "Tuned For AI <admin@tunedfor.ai>",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@modelcontextprotocol/sdk": "^1.10.0",
|
|
31
|
+
"zod": "^3.23.8"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^22.0.0",
|
|
35
|
+
"tsx": "^4.19.0",
|
|
36
|
+
"typescript": "^5.5.0"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=18"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/tunedforai/x402-mcp.git"
|
|
44
|
+
}
|
|
45
|
+
}
|