@bxetech/bpe-mcp 0.1.0 → 0.2.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/README.md +10 -7
- package/dist/briefing.d.ts +2 -0
- package/dist/briefing.js +48 -11
- package/dist/briefing.js.map +1 -1
- package/dist/tools.js +56 -10
- package/dist/tools.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -5,9 +5,11 @@ API. Lets Claude Desktop, Cursor, Goose, and other MCP-enabled agents query
|
|
|
5
5
|
consolidated Bitcoin pricing, ML signals, funding-rate skew, and
|
|
6
6
|
natural-language market briefings — without writing any HTTP boilerplate.
|
|
7
7
|
|
|
8
|
-
> **Status:** v0.
|
|
8
|
+
> **Status:** v0.2 — five tools, local stdio transport, no LLM
|
|
9
9
|
> calls inside the briefing endpoint (template-rendered). API key required.
|
|
10
10
|
|
|
11
|
+
Listed in the [official MCP Server Registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.bxetech/bpe-mcp) as `io.github.bxetech/bpe-mcp`. Install via `npm install -g @bxetech/bpe-mcp` or `npx -y @bxetech/bpe-mcp`.
|
|
12
|
+
|
|
11
13
|
## Why use it
|
|
12
14
|
|
|
13
15
|
If you're building an agent that touches Bitcoin markets, you have two
|
|
@@ -23,14 +25,15 @@ options today:
|
|
|
23
25
|
This MCP server is option 2 dressed up as native tools your agent can
|
|
24
26
|
discover and call.
|
|
25
27
|
|
|
26
|
-
## Tools (v0.
|
|
28
|
+
## Tools (v0.2)
|
|
27
29
|
|
|
28
30
|
| Tool | What it does |
|
|
29
31
|
|---|---|
|
|
30
32
|
| `get_consolidated_price` | Current BTC price aggregated across the BPE network |
|
|
31
|
-
| `get_market_briefing` |
|
|
33
|
+
| `get_market_briefing` | ~4 lines (brief) or 6–8 (detailed) natural-language summary — price, funding skew, ML signal, sentiment, anomalies |
|
|
32
34
|
| `get_funding_skew` | Per-venue annualised funding rates + max-spread pair |
|
|
33
|
-
| `get_ml_signal` | Current ML prediction
|
|
35
|
+
| `get_ml_signal` | Current ML prediction (direction, probability, confidence) at the requested horizon |
|
|
36
|
+
| `get_sentiment_snapshot` | Crypto Fear & Greed index, news sentiment, mempool stress |
|
|
34
37
|
|
|
35
38
|
## Install
|
|
36
39
|
|
|
@@ -55,7 +58,7 @@ Or use `npx` with no install (recommended for Claude Desktop):
|
|
|
55
58
|
}
|
|
56
59
|
```
|
|
57
60
|
|
|
58
|
-
Restart Claude Desktop. The
|
|
61
|
+
Restart Claude Desktop. The five tools appear under the MCP server picker.
|
|
59
62
|
|
|
60
63
|
## Configuration
|
|
61
64
|
|
|
@@ -94,8 +97,8 @@ To dogfood in Claude Desktop while iterating, point at the local build:
|
|
|
94
97
|
|
|
95
98
|
## Roadmap
|
|
96
99
|
|
|
97
|
-
- **v0.2** — `
|
|
98
|
-
- **v0.3** —
|
|
100
|
+
- **v0.2** — `get_sentiment_snapshot` ✅, friendly tier-aware errors ✅, timestamped briefings ✅
|
|
101
|
+
- **v0.3** — `get_basis`, `subscribe_alert` (webhook subscription), hosted HTTP transport for non-developer install (Cursor extension, ChatGPT Desktop)
|
|
99
102
|
- **v0.4** — Optional LLM-rendered briefing via Haiku (richer prose, with per-call cost)
|
|
100
103
|
|
|
101
104
|
See [`docs/research/AGENT_INTEGRATION_AND_MONETISATION_2026-04-27.md`](../docs/research/AGENT_INTEGRATION_AND_MONETISATION_2026-04-27.md) for the broader product / monetisation plan.
|
package/dist/briefing.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { BpeClient } from "./client.js";
|
|
2
2
|
export type BriefingVerbosity = "brief" | "detailed";
|
|
3
3
|
export declare function buildBriefing(client: BpeClient, verbosity: BriefingVerbosity): Promise<string>;
|
|
4
|
+
export declare function formatAge(ageMs: number | null): string;
|
|
5
|
+
export declare function formatIsoUtc(ms: number): string;
|
package/dist/briefing.js
CHANGED
|
@@ -36,12 +36,18 @@ export async function buildBriefing(client, verbosity) {
|
|
|
36
36
|
const preds = wrap(bundle.predictions);
|
|
37
37
|
const sent = wrap(bundle.sentiment);
|
|
38
38
|
const lines = [];
|
|
39
|
+
// Header: explicit UTC timestamp so the caller can reason about staleness
|
|
40
|
+
// and distinguish two briefings taken seconds apart.
|
|
41
|
+
const ts = price.status === "fulfilled" && price.value?.timestamp_ms
|
|
42
|
+
? price.value.timestamp_ms
|
|
43
|
+
: Date.now();
|
|
44
|
+
lines.push(`As of ${formatIsoUtc(ts)}.`);
|
|
39
45
|
// Price line
|
|
40
46
|
if (price.status === "fulfilled" && price.value?.price) {
|
|
41
47
|
const p = price.value;
|
|
42
48
|
const venues = p.exchange_count ?? "?";
|
|
43
49
|
const ageMs = p.timestamp_ms != null ? Math.max(0, Date.now() - p.timestamp_ms) : null;
|
|
44
|
-
const ageStr =
|
|
50
|
+
const ageStr = formatAge(ageMs);
|
|
45
51
|
lines.push(`BTC: $${formatPrice(p.price)} (consolidated across ${venues} exchanges, ${ageStr}).`);
|
|
46
52
|
}
|
|
47
53
|
else {
|
|
@@ -72,17 +78,30 @@ export async function buildBriefing(client, verbosity) {
|
|
|
72
78
|
}
|
|
73
79
|
// ML signal — server returns a single prediction snapshot (whichever
|
|
74
80
|
// horizon the upstream pricing-service most recently emitted).
|
|
81
|
+
// In brief mode, show probability only (less confusing than dual
|
|
82
|
+
// probability + confidence). In detailed mode, expose both labelled
|
|
83
|
+
// for the quant-minded reader.
|
|
75
84
|
if (preds.status === "fulfilled" && preds.value?.direction) {
|
|
76
85
|
const p = preds.value;
|
|
77
86
|
const horizon = p.horizon_secs != null ? `${p.horizon_secs}s` : "?";
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
87
|
+
if (verbosity === "detailed") {
|
|
88
|
+
const conf = p.confidence != null ? `, ${(p.confidence * 100).toFixed(0)}% model confidence` : "";
|
|
89
|
+
const prob = p.probability != null ? `${(p.probability * 100).toFixed(0)}% probability` : "no probability";
|
|
90
|
+
lines.push(`ML ${horizon}: ${p.direction} (${prob}${conf}).`);
|
|
91
|
+
if (p.models?.length) {
|
|
92
|
+
const detail = p.models
|
|
93
|
+
.map((m) => `${m.name}${m.signal != null ? `=${m.signal.toFixed(3)}` : ""}`)
|
|
94
|
+
.join(", ");
|
|
95
|
+
lines.push(` Sub-models: ${detail}.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Brief: pick the single most informative number (probability if
|
|
100
|
+
// available, else confidence). Skip both labels to keep the line
|
|
101
|
+
// short — agents can re-read the description if they want the math.
|
|
102
|
+
const pct = p.probability ?? p.confidence;
|
|
103
|
+
const pctStr = pct != null ? ` (${(pct * 100).toFixed(0)}% probability)` : "";
|
|
104
|
+
lines.push(`ML ${horizon}: ${p.direction}${pctStr}.`);
|
|
86
105
|
}
|
|
87
106
|
}
|
|
88
107
|
// Sentiment
|
|
@@ -114,8 +133,10 @@ function detectAnomaly(derivs, preds) {
|
|
|
114
133
|
.filter((x) => Number.isFinite(x));
|
|
115
134
|
const max = ann.length ? Math.max(...ann) : 0;
|
|
116
135
|
const min = ann.length ? Math.min(...ann) : 0;
|
|
117
|
-
|
|
118
|
-
|
|
136
|
+
// 15% APR spread is already meaningful for perp-perp arb after fees +
|
|
137
|
+
// borrow; raised noise floor above this would miss real opportunities.
|
|
138
|
+
if (max - min > 0.15)
|
|
139
|
+
return `funding spread ${formatPct(max - min)} APR — basis or perp-perp arb opportunity (long lowest, short highest).`;
|
|
119
140
|
if (Math.abs(max) > 0.5)
|
|
120
141
|
return `extreme funding ${formatPct(max)} APR — perp positioning stretched.`;
|
|
121
142
|
}
|
|
@@ -134,4 +155,20 @@ function formatPrice(n) {
|
|
|
134
155
|
function formatPct(frac) {
|
|
135
156
|
return `${(frac * 100).toFixed(2)}%`;
|
|
136
157
|
}
|
|
158
|
+
// Age formatter shared between briefing and per-tool callers.
|
|
159
|
+
// Sub-100ms is reported as "live" — exact ms ("0 ms old") reads oddly to
|
|
160
|
+
// non-technical users and obscures that the data IS effectively realtime.
|
|
161
|
+
export function formatAge(ageMs) {
|
|
162
|
+
if (ageMs == null)
|
|
163
|
+
return "fresh";
|
|
164
|
+
if (ageMs < 100)
|
|
165
|
+
return "live";
|
|
166
|
+
if (ageMs < 1000)
|
|
167
|
+
return `${ageMs} ms old`;
|
|
168
|
+
return `${(ageMs / 1000).toFixed(1)}s old`;
|
|
169
|
+
}
|
|
170
|
+
// "2026-05-13 11:53:42 UTC" — readable, sortable, unambiguous.
|
|
171
|
+
export function formatIsoUtc(ms) {
|
|
172
|
+
return new Date(ms).toISOString().slice(0, 19).replace("T", " ") + " UTC";
|
|
173
|
+
}
|
|
137
174
|
//# sourceMappingURL=briefing.js.map
|
package/dist/briefing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"briefing.js","sourceRoot":"","sources":["../src/briefing.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,0EAA0E;AAC1E,oEAAoE;AACpE,wEAAwE;AACxE,gEAAgE;AAChE,EAAE;AACF,2BAA2B;AAC3B,2CAA2C;AAC3C,sEAAsE;AACtE,sDAAsD;AACtD,EAAE;AACF,gDAAgD;AAChD,6CAA6C;AAC7C,+BAA+B;AAC/B,mEAAmE;AACnE,+DAA+D;AAC/D,sEAAsE;AACtE,4DAA4D;AAoB5D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAiB,EACjB,SAA4B;IAE5B,wDAAwD;IACxD,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,UAAU,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;IACD,kEAAkE;IAClE,qCAAqC;IACrC,MAAM,IAAI,GAAG,CAAI,CAAgB,EAA2B,EAAE,CAC5D,CAAC,IAAI,IAAI;QACP,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE;QACnC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,
|
|
1
|
+
{"version":3,"file":"briefing.js","sourceRoot":"","sources":["../src/briefing.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
//
|
|
9
9
|
// Stretch (v0.2): get_basis, get_sentiment_snapshot, subscribe_alert.
|
|
10
10
|
import { z } from "zod";
|
|
11
|
+
import { BpeApiError, } from "./client.js";
|
|
11
12
|
import { buildBriefing } from "./briefing.js";
|
|
13
|
+
import { formatAge } from "./briefing.js";
|
|
12
14
|
// All tools return a single text content block. Returning structured JSON
|
|
13
15
|
// would also work, but text is the most agent-portable shape — every model
|
|
14
16
|
// handles it natively, and we can always graduate to structured output later.
|
|
@@ -18,6 +20,28 @@ function asText(text) {
|
|
|
18
20
|
function asError(text) {
|
|
19
21
|
return { content: [{ type: "text", text }], isError: true };
|
|
20
22
|
}
|
|
23
|
+
// Translate API errors into actionable messages a calling agent (or human
|
|
24
|
+
// reading the agent's transcript) can act on. Recognises the common HTTP
|
|
25
|
+
// status codes and emits an upgrade / retry / config hint instead of a raw
|
|
26
|
+
// stack-trace-shaped string.
|
|
27
|
+
function friendlyError(err, channel) {
|
|
28
|
+
if (err instanceof BpeApiError) {
|
|
29
|
+
if (err.status === 401) {
|
|
30
|
+
return "Invalid or missing API key. Set BPE_API_KEY in your MCP client config (see https://github.com/bxetech/bpe-mcp#install) or request one at https://bxetech.com/contact.";
|
|
31
|
+
}
|
|
32
|
+
if (err.status === 403) {
|
|
33
|
+
const ch = channel ? ` (requires the '${channel}' channel)` : "";
|
|
34
|
+
return `This tool needs Agent tier or higher${ch}. Free tier does not include it — see https://bxetech.com/agents for plans, or contact contact@bxetech.com to upgrade.`;
|
|
35
|
+
}
|
|
36
|
+
if (err.status === 429) {
|
|
37
|
+
return "Rate limit exceeded. Wait a few seconds and retry, or upgrade your tier at https://bxetech.com/agents for higher limits.";
|
|
38
|
+
}
|
|
39
|
+
if (err.status && err.status >= 500) {
|
|
40
|
+
return `BPE backend error (${err.status}). Try again in a moment. If this persists, email contact@bxetech.com.`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return err instanceof Error ? err.message : String(err);
|
|
44
|
+
}
|
|
21
45
|
export function registerTools(server, client) {
|
|
22
46
|
// ── 1. get_consolidated_price ────────────────────────────────────────────
|
|
23
47
|
server.tool("get_consolidated_price", "Get the current consolidated Bitcoin price aggregated across the BPE exchange network. Returns price in USD, the number of contributing exchanges, and freshness in milliseconds. Use this when an agent or user asks 'what's the BTC price right now?' — it's faster and more authoritative than calling any individual exchange.", {
|
|
@@ -30,22 +54,22 @@ export function registerTools(server, client) {
|
|
|
30
54
|
const r = await client.get("price");
|
|
31
55
|
const venues = r.exchange_count ?? "?";
|
|
32
56
|
const ageMs = r.timestamp_ms != null ? Math.max(0, Date.now() - r.timestamp_ms) : null;
|
|
33
|
-
const ageStr =
|
|
57
|
+
const ageStr = formatAge(ageMs);
|
|
34
58
|
const lines = [`${symbol}: $${formatPrice(r.price)}`];
|
|
35
59
|
if (r.best_bid != null && r.best_ask != null) {
|
|
36
60
|
lines.push(`Bid/Ask: $${formatPrice(r.best_bid)} / $${formatPrice(r.best_ask)}` +
|
|
37
61
|
(r.spread_bps != null ? ` (${r.spread_bps.toFixed(1)} bps spread)` : ""));
|
|
38
62
|
}
|
|
39
|
-
lines.push(`Source: ${venues} exchanges contributing, ${ageStr}
|
|
63
|
+
lines.push(`Source: ${venues} exchanges contributing, ${ageStr}` +
|
|
40
64
|
(r.confidence != null ? `, confidence ${(r.confidence * 100).toFixed(0)}%` : "") + ".");
|
|
41
65
|
return asText(lines.join("\n"));
|
|
42
66
|
}
|
|
43
67
|
catch (err) {
|
|
44
|
-
return asError(`Failed to fetch consolidated price: ${
|
|
68
|
+
return asError(`Failed to fetch consolidated price: ${friendlyError(err, "price")}`);
|
|
45
69
|
}
|
|
46
70
|
});
|
|
47
71
|
// ── 2. get_market_briefing ───────────────────────────────────────────────
|
|
48
|
-
server.tool("get_market_briefing", "Get a concise natural-language summary of the current Bitcoin market state. Synthesises consolidated price, funding-rate skew across major perpetual venues, current ML prediction, and sentiment indicators
|
|
72
|
+
server.tool("get_market_briefing", "Get a concise natural-language summary of the current Bitcoin market state. Synthesises consolidated price, funding-rate skew across major perpetual venues, current ML prediction, and sentiment indicators. 'brief' mode returns roughly 4 lines (price, funding skew, ML signal, sentiment); 'detailed' adds per-venue funding breakdown and ML sub-model details — typically 6-8 lines. This is the most token-efficient way for an agent to get the 'what's happening right now' picture — replaces 4-5 raw data calls plus the reasoning to summarise them.", {
|
|
49
73
|
verbosity: z
|
|
50
74
|
.enum(["brief", "detailed"])
|
|
51
75
|
.default("brief")
|
|
@@ -56,7 +80,7 @@ export function registerTools(server, client) {
|
|
|
56
80
|
return asText(briefing);
|
|
57
81
|
}
|
|
58
82
|
catch (err) {
|
|
59
|
-
return asError(`Failed to build market briefing: ${
|
|
83
|
+
return asError(`Failed to build market briefing: ${friendlyError(err, "predictions+sentiment+derivatives")}`);
|
|
60
84
|
}
|
|
61
85
|
});
|
|
62
86
|
// ── 3. get_funding_skew ──────────────────────────────────────────────────
|
|
@@ -86,7 +110,7 @@ export function registerTools(server, client) {
|
|
|
86
110
|
return asText(lines.join("\n"));
|
|
87
111
|
}
|
|
88
112
|
catch (err) {
|
|
89
|
-
return asError(`Failed to fetch funding skew: ${
|
|
113
|
+
return asError(`Failed to fetch funding skew: ${friendlyError(err, "derivatives")}`);
|
|
90
114
|
}
|
|
91
115
|
});
|
|
92
116
|
// ── 4. get_ml_signal ─────────────────────────────────────────────────────
|
|
@@ -135,7 +159,32 @@ export function registerTools(server, client) {
|
|
|
135
159
|
return asText(lines.join("\n"));
|
|
136
160
|
}
|
|
137
161
|
catch (err) {
|
|
138
|
-
return asError(`Failed to fetch ML signal: ${
|
|
162
|
+
return asError(`Failed to fetch ML signal: ${friendlyError(err, "predictions")}`);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
// ── 5. get_sentiment_snapshot ───────────────────────────────────────────
|
|
166
|
+
server.tool("get_sentiment_snapshot", "Get current Bitcoin market sentiment indicators: Crypto Fear & Greed index (0-100, with label like 'Fear' / 'Neutral' / 'Greed'), news sentiment (-1 most bearish to +1 most bullish), and mempool stress (0 calm to 1 highly congested). Useful for contextualising price action, detecting positioning extremes that may precede reversals, and as a coarse macro filter for shorter-horizon ML signals.", {}, async () => {
|
|
167
|
+
try {
|
|
168
|
+
const r = await client.get("sentiment");
|
|
169
|
+
const lines = [];
|
|
170
|
+
if (r.fear_greed_index != null) {
|
|
171
|
+
lines.push(`Fear & Greed: ${r.fear_greed_index}/100` +
|
|
172
|
+
(r.fear_greed_label ? ` (${r.fear_greed_label})` : ""));
|
|
173
|
+
}
|
|
174
|
+
if (r.news_sentiment != null) {
|
|
175
|
+
const sign = r.news_sentiment > 0 ? "+" : "";
|
|
176
|
+
lines.push(`News sentiment: ${sign}${r.news_sentiment.toFixed(2)} (range -1 to +1)`);
|
|
177
|
+
}
|
|
178
|
+
if (r.mempool_stress != null) {
|
|
179
|
+
lines.push(`Mempool stress: ${r.mempool_stress.toFixed(2)} (range 0 to 1)`);
|
|
180
|
+
}
|
|
181
|
+
if (!lines.length) {
|
|
182
|
+
return asError("No sentiment data currently available — try again in a few seconds.");
|
|
183
|
+
}
|
|
184
|
+
return asText(lines.join("\n"));
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
return asError(`Failed to fetch sentiment: ${friendlyError(err, "sentiment")}`);
|
|
139
188
|
}
|
|
140
189
|
});
|
|
141
190
|
}
|
|
@@ -145,7 +194,4 @@ function formatPrice(n) {
|
|
|
145
194
|
function formatPct(frac) {
|
|
146
195
|
return `${(frac * 100).toFixed(2)}%`;
|
|
147
196
|
}
|
|
148
|
-
function errMsg(err) {
|
|
149
|
-
return err instanceof Error ? err.message : String(err);
|
|
150
|
-
}
|
|
151
197
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,EAAE;AACF,2EAA2E;AAC3E,4DAA4D;AAC5D,sEAAsE;AACtE,yEAAyE;AACzE,uEAAuE;AACvE,EAAE;AACF,sEAAsE;AAEtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,EAAE;AACF,2EAA2E;AAC3E,4DAA4D;AAC5D,sEAAsE;AACtE,yEAAyE;AACzE,uEAAuE;AACvE,EAAE;AACF,sEAAsE;AAEtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,WAAW,GAMZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,6BAA6B;AAC7B,SAAS,aAAa,CAAC,GAAY,EAAE,OAAgB;IACnD,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,uKAAuK,CAAC;QACjL,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,OAAO,uCAAuC,EAAE,wHAAwH,CAAC;QAC3K,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,0HAA0H,CAAC;QACpI,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACpC,OAAO,sBAAsB,GAAG,CAAC,MAAM,wEAAwE,CAAC;QAClH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAiB;IAChE,4EAA4E;IAC5E,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,oUAAoU,EACpU;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;aACjB,OAAO,CAAC,SAAS,CAAC;aAClB,QAAQ,CAAC,oDAAoD,CAAC;KAClE,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAgB,OAAO,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,IAAI,GAAG,CAAC;YACvC,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvF,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;oBAC7E,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9E,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,4BAA4B,MAAM,EAAE;gBAC9D,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YAC1F,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,uCAAuC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,miBAAmiB,EACniB;QACE,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;aAC3B,OAAO,CAAC,OAAO,CAAC;aAChB,QAAQ,CAAC,oGAAoG,CAAC;KAClH,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,oCAAoC,aAAa,CAAC,GAAG,EAAE,mCAAmC,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,mRAAmR,EACnR,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAsB,aAAa,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC;iBAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,EAAE,EAAE,CAAC,CAAC,QAAQ;gBACd,GAAG,EAAE,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG;aACnD,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAEjC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,OAAO,CAAC,2CAA2C,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACtB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;YACrC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;YAEjC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAClD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,iCAAiC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,MAAM,CAAC,IAAI,CACT,eAAe,EACf,6VAA6V,EAC7V;QACE,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;aAC1B,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,gOAAgO,CAAC;KAC9O,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5E,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAsB,aAAa,CAAC,CAAC;YAE/D,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC5C,OAAO,OAAO,CAAC,oEAAoE,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC;YAC1C,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,6BAA6B,UAAU,mDAAmD,CAAC,CAAC;YACnI,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,YAAY,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,CAAC,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,CAAC,oBAAoB,IAAI,IAAI,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;oBAC3D,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACrE,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,8BAA8B,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,4YAA4Y,EAC5Y,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAoB,WAAW,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CACR,iBAAiB,CAAC,CAAC,gBAAgB,MAAM;oBACvC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACzD,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,OAAO,CAAC,qEAAqE,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,8BAA8B,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bxetech/bpe-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"mcpName": "io.github.bxetech/bpe-mcp",
|
|
4
5
|
"description": "MCP server for the BPE (Bitcoin Pricing Engine) market-data API. Lets Claude Desktop, Cursor, and other MCP-enabled agents query consolidated BTC pricing, ML signals, funding-rate skew, and natural-language market briefings.",
|
|
5
6
|
"license": "MIT",
|
|
6
7
|
"type": "module",
|