@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.
@@ -0,0 +1,8 @@
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
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -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":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AAEjD,iFAAiF;AAEjF,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC,MAAM,MAAM,GAAG,qCAAqC,CAAC;AAErD,KAAK,UAAU,WAAW;IACxB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE;QAC/D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;aAC3D;SACF,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,SAAS,GAAG,GAAG,CAAC;IAChB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAa;IACxC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACrC,4EAA4E;QAC5E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqE,CAAC;IAC9F,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAA+E,CAAC;AACjG,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAgB,EAAE,IAA6B;IACrE,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;IAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;KAC5C,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,cAAsB,EAAE,EAAE,CACzC,KAAK,CAAC,QAAQ,EAAE;QACd,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,MAAM;YACd,gBAAgB,EAAE,cAAc;SACjC;QACD,IAAI;KACL,CAAC,CAAC;IAEL,IAAI,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,kDAAkD;QAClD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;YACjC,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAC9B,CAAC;AAED,iFAAiF;AAEjF,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC;aACtG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,iFAAiF;AAEjF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,8BAA8B;IACpC,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,uEAAuE;AACvE,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,6KAA6K,EAC7K,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,EACjF,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,iHAAiH,EACjH,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC7D,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,wDAAwD;AACxD,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,iFAAiF,EACjF,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC7D,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,6CAA6C;AAC7C,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,kFAAkF,EAClF,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC7D,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,2CAA2C;AAC3C,MAAM,CAAC,IAAI,CACT,WAAW,EACX,mFAAmF,EACnF;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CAC9E,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,IAAI,CACT,WAAW,EACX,6EAA6E,EAC7E;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CAC/D,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,6BAA6B;AAC7B,MAAM,CAAC,IAAI,CACT,WAAW,EACX,2DAA2D,EAC3D;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAClE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,oCAAoC;AACpC,MAAM,CAAC,IAAI,CACT,aAAa,EACb,+FAA+F,EAC/F,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC,EAAE,EAC9E,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACpB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,IAAI,CACT,SAAS,EACT,gGAAgG,EAChG,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC,CACF,CAAC;AAEF,iFAAiF;AAEjF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
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
+ }