@0xinsider/mcp 1.0.2 → 1.0.9
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 +44 -7
- package/dist/cli-lib.d.ts +9 -0
- package/dist/cli-lib.d.ts.map +1 -1
- package/dist/cli-lib.js +210 -68
- package/dist/cli-lib.js.map +1 -1
- package/dist/client.d.ts +5 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -4
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +2 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +25 -1
- package/dist/constants.js.map +1 -1
- package/dist/prompts/index.js +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +32 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/explore-markets.d.ts +36 -0
- package/dist/tools/explore-markets.d.ts.map +1 -0
- package/dist/tools/explore-markets.js +77 -0
- package/dist/tools/explore-markets.js.map +1 -0
- package/dist/tools/get-insider-radar.js +1 -1
- package/dist/tools/get-large-positions.d.ts +21 -0
- package/dist/tools/get-large-positions.d.ts.map +1 -0
- package/dist/tools/get-large-positions.js +68 -0
- package/dist/tools/get-large-positions.js.map +1 -0
- package/dist/tools/get-position-timeline.d.ts +24 -0
- package/dist/tools/get-position-timeline.d.ts.map +1 -0
- package/dist/tools/get-position-timeline.js +79 -0
- package/dist/tools/get-position-timeline.js.map +1 -0
- package/dist/tools/get-positions.d.ts +21 -0
- package/dist/tools/get-positions.d.ts.map +1 -0
- package/dist/tools/get-positions.js +68 -0
- package/dist/tools/get-positions.js.map +1 -0
- package/dist/tools/get-trader-pnl.d.ts +6 -0
- package/dist/tools/get-trader-pnl.d.ts.map +1 -0
- package/dist/tools/get-trader-pnl.js +39 -0
- package/dist/tools/get-trader-pnl.js.map +1 -0
- package/dist/tools/get-trader.d.ts.map +1 -1
- package/dist/tools/get-trader.js +4 -3
- package/dist/tools/get-trader.js.map +1 -1
- package/dist/tools/get-trending-wallets.d.ts +15 -0
- package/dist/tools/get-trending-wallets.d.ts.map +1 -0
- package/dist/tools/get-trending-wallets.js +56 -0
- package/dist/tools/get-trending-wallets.js.map +1 -0
- package/dist/tools/get-whale-trades.js +1 -1
- package/dist/tools/get-whale-trades.js.map +1 -1
- package/dist/tools/read-parity.d.ts +20 -0
- package/dist/tools/read-parity.d.ts.map +1 -0
- package/dist/tools/read-parity.js +493 -0
- package/dist/tools/read-parity.js.map +1 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
MCP server for [0xinsider](https://0xinsider.com) — prediction market intelligence for AI agents.
|
|
4
4
|
|
|
5
|
-
Gives your AI agent access to trader grades, whale trades, smart money signals, market intelligence, and insider
|
|
5
|
+
Gives your AI agent access to trader grades, whale trades, smart money signals, market intelligence, and insider-radar flags across prediction markets.
|
|
6
|
+
|
|
7
|
+
## Two ways to connect
|
|
8
|
+
|
|
9
|
+
- **Remote HTTP (no install)** — `POST https://api.0xinsider.com/api/v1/mcp` with `Authorization: Bearer oxi_sk_live_...`. Implements the MCP Streamable HTTP transport (protocolVersion `2025-11-25`). Works with MCP clients that speak HTTP and can send headers. `?token=` remains a legacy URL-only compatibility path, but prefer headers because URL secrets can leak through shell history, browser history, proxy logs, and crash reports. 31 read-only public V1 tools -- the 29 the stdio server exposes plus the remote-only `get_report` and `search_content` -- same rate limits, same billing.
|
|
10
|
+
- **Stdio (this npm package)** — run `npx -y @0xinsider/mcp` locally for Claude Code / Cursor / Codex / Gemini CLI. Best when the client can launch a child process and you prefer to keep the API key out of URLs.
|
|
11
|
+
|
|
12
|
+
The stdio server exposes these 29 read-only tools (the remote HTTP endpoint additionally exposes the remote-only `get_report` and `search_content`, 31 total): `get_leaderboard`, `get_trader`, `batch_get_traders`, `get_whale_trades`, `get_whale_trade`, `get_whale_trades_history`, `get_market_intel`, `batch_get_market_intel`, `get_smart_money_flows`, `get_sharp_money_flows`, `get_market_snapshot`, `get_insider_radar`, `get_insider_radar_flag`, `get_positions`, `get_position_timeline`, `get_position_timeline_by_id`, `search_markets`, `explore_markets`, `get_event_replay_since`, `list_webhooks`, `get_webhook`, `get_daily_report_snapshot`, `get_weekly_report_snapshot`, `get_monthly_report_snapshot`, `get_trader_export_snapshot`, `get_platforms`, `get_large_positions`, `get_trending_wallets`, `get_trader_pnl`.
|
|
6
13
|
|
|
7
14
|
## Quick Start
|
|
8
15
|
|
|
@@ -12,6 +19,8 @@ Gives your AI agent access to trader grades, whale trades, smart money signals,
|
|
|
12
19
|
npx -y @0xinsider/mcp init
|
|
13
20
|
```
|
|
14
21
|
|
|
22
|
+
`init` reads the key without echoing it. For non-interactive setup, set `OXINSIDER_API_KEY` in the process environment or pipe the key on stdin. Do not pass the key as a command-line argument.
|
|
23
|
+
|
|
15
24
|
Or manually add to `~/.claude/settings.json`:
|
|
16
25
|
|
|
17
26
|
```json
|
|
@@ -65,7 +74,7 @@ OXINSIDER_API_KEY = "oxi_sk_live_..."
|
|
|
65
74
|
|
|
66
75
|
### Gemini CLI
|
|
67
76
|
|
|
68
|
-
`npx -y @0xinsider/mcp init`
|
|
77
|
+
`npx -y @0xinsider/mcp init` detects Gemini CLI when the `gemini` command is installed and prints a manual config template.
|
|
69
78
|
|
|
70
79
|
Or add to `~/.gemini/settings.json`:
|
|
71
80
|
|
|
@@ -87,9 +96,7 @@ Or add to `~/.gemini/settings.json`:
|
|
|
87
96
|
|
|
88
97
|
Any client that supports stdio transport:
|
|
89
98
|
|
|
90
|
-
|
|
91
|
-
OXINSIDER_API_KEY=oxi_sk_live_... npx -y @0xinsider/mcp
|
|
92
|
-
```
|
|
99
|
+
Set `OXINSIDER_API_KEY` in the process environment before starting the stdio server. Do not pass the key as a command-line argument.
|
|
93
100
|
|
|
94
101
|
Need the command list? Run:
|
|
95
102
|
|
|
@@ -99,18 +106,48 @@ npx -y @0xinsider/mcp --help
|
|
|
99
106
|
|
|
100
107
|
## API Key
|
|
101
108
|
|
|
102
|
-
Get your API key at [0xinsider.com/developers](https://0xinsider.com/developers). Requires
|
|
109
|
+
Get your API key at [0xinsider.com/developers](https://0xinsider.com/developers). Requires a Pro subscription.
|
|
110
|
+
|
|
111
|
+
## Security
|
|
112
|
+
|
|
113
|
+
`init` never prints the API key. If an older version wrote the key to recorded terminal output, rotate the key before you use the new configuration.
|
|
103
114
|
|
|
104
115
|
## Tools
|
|
105
116
|
|
|
117
|
+
<!-- The `batch_get_traders` and `batch_get_market_intel` rows below are GENERATED: they
|
|
118
|
+
publish the batch item cap, which is owned by `MAX_BATCH_ITEMS` in
|
|
119
|
+
`backend/src/api_v1/handlers/batch.rs` (#8103). Do not hand-edit those two rows; a
|
|
120
|
+
`cd web && npm run generate:api-policy` run rewrites them. Every other row is written by
|
|
121
|
+
hand. Markers are not used here because an HTML comment inside a table breaks it. -->
|
|
122
|
+
|
|
106
123
|
| Tool | Description |
|
|
107
124
|
|------|-------------|
|
|
108
125
|
| `get_trader` | Look up a trader by wallet address or username — grade, P&L, win rate, strategy, quant metrics |
|
|
126
|
+
| `batch_get_traders` | Look up 1-25 traders in one call with per-item results and batch-item quota |
|
|
109
127
|
| `get_whale_trades` | Recent large trades with signal scoring, filterable by size/category/grade |
|
|
128
|
+
| `get_whale_trade` | Read one whale trade by wt_ ID or raw whale_alerts.id |
|
|
129
|
+
| `get_whale_trades_history` | Replay historical whale trades with cursor, market, trader, category, grade, platform, and time filters |
|
|
110
130
|
| `get_leaderboard` | Top-ranked traders (S/A/B grades) with optional category/strategy filters |
|
|
111
131
|
| `search_markets` | Search prediction markets by keyword |
|
|
132
|
+
| `explore_markets` | Browse whale-active markets with facets and grouped discovery entries |
|
|
112
133
|
| `get_market_intel` | Smart money flow analysis for a specific market |
|
|
113
|
-
| `
|
|
134
|
+
| `batch_get_market_intel` | Fetch market intelligence for 1-25 condition IDs in one call |
|
|
135
|
+
| `get_smart_money_flows` | Deprecated alias of `get_sharp_money_flows` (byte-identical); kept for backward compatibility |
|
|
136
|
+
| `get_sharp_money_flows` | Ranked sharp-money flow discovery across markets (timeframe, category, platform, min-grade, direction filters) |
|
|
137
|
+
| `get_market_snapshot` | Live market-card snapshot with outcomes, liquidity, sports context, and freshness state |
|
|
138
|
+
| `get_positions` | Current positions with trader, market, value, side, P&L, and freshness context |
|
|
139
|
+
| `get_position_timeline` | Per-market trader fills with running amount and average entry price |
|
|
140
|
+
| `get_position_timeline_by_id` | Per-market trader fills using an internal trader ID alias |
|
|
141
|
+
| `get_insider_radar` | Suspicious trading pattern flags |
|
|
142
|
+
| `get_insider_radar_flag` | Read one insider-radar flag by rf_ ID or raw radar_flags.id |
|
|
143
|
+
| `get_event_replay_since` | Durable public event replay after an opaque cursor |
|
|
144
|
+
| `list_webhooks` | Read webhook endpoints owned by the authenticated API-key user |
|
|
145
|
+
| `get_webhook` | Read one webhook endpoint by ID |
|
|
146
|
+
| `get_daily_report_snapshot` | Read a dated daily whale-activity report snapshot |
|
|
147
|
+
| `get_weekly_report_snapshot` | Read a weekly whale-activity report snapshot by week token or date range |
|
|
148
|
+
| `get_monthly_report_snapshot` | Read a monthly whale-activity report snapshot |
|
|
149
|
+
| `get_trader_export_snapshot` | Read trader export metadata without starting an export job |
|
|
150
|
+
| `get_platforms` | Provider capability matrix: which platforms support grade, P&L, strategy, timeline, whale signal, insider radar, and market snapshot |
|
|
114
151
|
|
|
115
152
|
## Resources
|
|
116
153
|
|
package/dist/cli-lib.d.ts
CHANGED
|
@@ -4,6 +4,9 @@ export type Environment = {
|
|
|
4
4
|
type: EnvironmentType;
|
|
5
5
|
configPath: string;
|
|
6
6
|
};
|
|
7
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
8
|
+
[key: string]: JsonValue;
|
|
9
|
+
};
|
|
7
10
|
type McpConfig = {
|
|
8
11
|
command: string;
|
|
9
12
|
args: string[];
|
|
@@ -11,8 +14,14 @@ type McpConfig = {
|
|
|
11
14
|
};
|
|
12
15
|
export declare function buildMcpConfig(apiKey: string): McpConfig;
|
|
13
16
|
export declare function formatCodexToml(apiKey: string): string;
|
|
17
|
+
export declare function buildMcpConfigTemplate(): McpConfig;
|
|
18
|
+
export declare function formatCodexTomlTemplate(): string;
|
|
14
19
|
export declare function resolveCliCommand(args: readonly string[]): CliCommand;
|
|
15
20
|
export declare function detectEnvironments(home?: string): Environment[];
|
|
21
|
+
export declare function readJsonFile(path: string): Record<string, JsonValue>;
|
|
22
|
+
export declare function writeJsonFile(path: string, data: Record<string, JsonValue>): void;
|
|
23
|
+
export declare function addJsonMcpServer(configPath: string, apiKey: string): void;
|
|
24
|
+
export declare function addCodexMcpServer(configPath: string, apiKey: string): void;
|
|
16
25
|
export declare function runCli(args: readonly string[]): Promise<void>;
|
|
17
26
|
export {};
|
|
18
27
|
//# sourceMappingURL=cli-lib.d.ts.map
|
package/dist/cli-lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-lib.d.ts","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-lib.d.ts","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/F,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AASF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAQxD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,wBAAgB,sBAAsB,IAAI,SAAS,CAElD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAOD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAarE;AAuLD,wBAAgB,kBAAkB,CAChC,IAAI,SAAoD,GACvD,WAAW,EAAE,CAwBf;AAiCD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAYpE;AAWD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAEjF;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CASzE;AA2CD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM1E;AA6CD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnE"}
|
package/dist/cli-lib.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
-
import {
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { createInterface } from "node:readline";
|
|
5
5
|
import { API_KEY_ENV_VAR, DEVELOPERS_URL, MCP_NPX_ARGS, MCP_NPX_COMMAND, PACKAGE_NAME, SERVER_NAME, } from "./constants.js";
|
|
6
6
|
import { runServer } from "./server.js";
|
|
7
|
+
const API_KEY_PREFIX = "oxi_sk_live_";
|
|
8
|
+
const API_KEY_CONFIG_PLACEHOLDER = "<YOUR_OXINSIDER_API_KEY>";
|
|
9
|
+
function asError(error) {
|
|
10
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
11
|
+
}
|
|
7
12
|
export function buildMcpConfig(apiKey) {
|
|
8
13
|
return {
|
|
9
14
|
command: MCP_NPX_COMMAND,
|
|
@@ -22,6 +27,12 @@ args = [${MCP_NPX_ARGS.map((arg) => JSON.stringify(arg)).join(", ")}]
|
|
|
22
27
|
${API_KEY_ENV_VAR} = ${JSON.stringify(apiKey)}
|
|
23
28
|
`;
|
|
24
29
|
}
|
|
30
|
+
export function buildMcpConfigTemplate() {
|
|
31
|
+
return buildMcpConfig(API_KEY_CONFIG_PLACEHOLDER);
|
|
32
|
+
}
|
|
33
|
+
export function formatCodexTomlTemplate() {
|
|
34
|
+
return formatCodexToml(API_KEY_CONFIG_PLACEHOLDER);
|
|
35
|
+
}
|
|
25
36
|
function commandExists(command, args = ["--version"]) {
|
|
26
37
|
const result = spawnSync(command, args, { stdio: "ignore" });
|
|
27
38
|
return !result.error && result.status === 0;
|
|
@@ -44,15 +55,21 @@ function printHelp() {
|
|
|
44
55
|
|
|
45
56
|
Usage:
|
|
46
57
|
npx -y ${PACKAGE_NAME} init
|
|
47
|
-
|
|
58
|
+
npx -y ${PACKAGE_NAME}
|
|
48
59
|
|
|
49
60
|
Commands:
|
|
50
61
|
init Detect Claude Code, Cursor, Codex, or Gemini CLI and write MCP config
|
|
51
62
|
serve Start the stdio MCP server (default)
|
|
52
63
|
help Show this message
|
|
64
|
+
|
|
65
|
+
Environment:
|
|
66
|
+
${API_KEY_ENV_VAR} API key for the stdio server or non-interactive init
|
|
53
67
|
`);
|
|
54
68
|
}
|
|
55
69
|
function ask(question) {
|
|
70
|
+
if (!process.stdin.isTTY) {
|
|
71
|
+
return Promise.reject(new Error("Interactive input requires a TTY."));
|
|
72
|
+
}
|
|
56
73
|
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
57
74
|
return new Promise((resolve) => {
|
|
58
75
|
rl.question(question, (answer) => {
|
|
@@ -61,6 +78,143 @@ function ask(question) {
|
|
|
61
78
|
});
|
|
62
79
|
});
|
|
63
80
|
}
|
|
81
|
+
function askSecret(question) {
|
|
82
|
+
if (!process.stdin.isTTY || typeof process.stdin.setRawMode !== "function") {
|
|
83
|
+
return Promise.reject(new Error("Hidden API key input requires a TTY."));
|
|
84
|
+
}
|
|
85
|
+
const previousRawMode = process.stdin.isRaw;
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
let value = "";
|
|
88
|
+
let settled = false;
|
|
89
|
+
let rawModeChanged = false;
|
|
90
|
+
const onData = (chunk) => {
|
|
91
|
+
for (const character of String(chunk)) {
|
|
92
|
+
if (character === "\r" || character === "\n") {
|
|
93
|
+
finish();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (character === "\u0003") {
|
|
97
|
+
finish(new Error("API key input interrupted by SIGINT."));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (character === "\u0004") {
|
|
101
|
+
finish(new Error("API key input ended before completion."));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (character === "\b" || character === "\u007f") {
|
|
105
|
+
value = value.slice(0, -1);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (character === "\u0015") {
|
|
109
|
+
value = "";
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (character >= " " && character !== "\u007f") {
|
|
113
|
+
value += character;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const onError = (error) => finish(error);
|
|
118
|
+
const onEnd = () => finish(new Error("API key input ended before completion."));
|
|
119
|
+
const onSigint = () => finish(new Error("API key input interrupted by SIGINT."));
|
|
120
|
+
const onSigterm = () => finish(new Error("API key input interrupted by SIGTERM."));
|
|
121
|
+
const restore = () => {
|
|
122
|
+
process.stdin.removeListener("data", onData);
|
|
123
|
+
process.stdin.removeListener("error", onError);
|
|
124
|
+
process.stdin.removeListener("end", onEnd);
|
|
125
|
+
process.removeListener("SIGINT", onSigint);
|
|
126
|
+
process.removeListener("SIGTERM", onSigterm);
|
|
127
|
+
let restoreError;
|
|
128
|
+
if (rawModeChanged) {
|
|
129
|
+
try {
|
|
130
|
+
process.stdin.setRawMode(previousRawMode);
|
|
131
|
+
rawModeChanged = false;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
restoreError = error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
process.stdin.pause();
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
restoreError ??= error;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
process.stdout.write("\n");
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
restoreError ??= error;
|
|
148
|
+
}
|
|
149
|
+
if (restoreError) {
|
|
150
|
+
throw asError(restoreError);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
function finish(error) {
|
|
154
|
+
if (settled)
|
|
155
|
+
return;
|
|
156
|
+
settled = true;
|
|
157
|
+
try {
|
|
158
|
+
restore();
|
|
159
|
+
}
|
|
160
|
+
catch (restoreError) {
|
|
161
|
+
reject(asError(restoreError));
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (error) {
|
|
165
|
+
reject(error);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
resolve(value.trim());
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
process.stdin.setRawMode(true);
|
|
173
|
+
rawModeChanged = true;
|
|
174
|
+
process.stdin.on("data", onData);
|
|
175
|
+
process.stdin.on("error", onError);
|
|
176
|
+
process.stdin.once("end", onEnd);
|
|
177
|
+
process.once("SIGINT", onSigint);
|
|
178
|
+
process.once("SIGTERM", onSigterm);
|
|
179
|
+
process.stdin.resume();
|
|
180
|
+
process.stdout.write(question);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
finish(asError(error));
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
async function readPipedApiKey() {
|
|
188
|
+
const chunks = [];
|
|
189
|
+
for await (const chunk of process.stdin) {
|
|
190
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
191
|
+
}
|
|
192
|
+
return Buffer.concat(chunks).toString("utf8").trim();
|
|
193
|
+
}
|
|
194
|
+
async function readApiKey() {
|
|
195
|
+
const configured = process.env[API_KEY_ENV_VAR]?.trim();
|
|
196
|
+
if (configured)
|
|
197
|
+
return configured;
|
|
198
|
+
if (process.stdin.isTTY && typeof process.stdin.setRawMode === "function") {
|
|
199
|
+
return askSecret("Enter your 0xinsider API key (input hidden): ");
|
|
200
|
+
}
|
|
201
|
+
if (!process.stdin.isTTY) {
|
|
202
|
+
const piped = await readPipedApiKey();
|
|
203
|
+
if (piped)
|
|
204
|
+
return piped;
|
|
205
|
+
}
|
|
206
|
+
throw new Error(`API key input needs a TTY. Set ${API_KEY_ENV_VAR} or pipe the key on stdin. Do not pass the key as a command-line argument. Get a key at ${DEVELOPERS_URL}.`);
|
|
207
|
+
}
|
|
208
|
+
function validateApiKey(apiKey) {
|
|
209
|
+
const normalized = apiKey.trim();
|
|
210
|
+
if (!normalized) {
|
|
211
|
+
throw new Error(`API key is required. Get one at ${DEVELOPERS_URL}.`);
|
|
212
|
+
}
|
|
213
|
+
if (!normalized.startsWith(API_KEY_PREFIX) || /\s/.test(normalized)) {
|
|
214
|
+
throw new Error(`Invalid API key format. Keys start with ${API_KEY_PREFIX}`);
|
|
215
|
+
}
|
|
216
|
+
return normalized;
|
|
217
|
+
}
|
|
64
218
|
export function detectEnvironments(home = process.env.HOME ?? process.env.USERPROFILE ?? "") {
|
|
65
219
|
const environments = [];
|
|
66
220
|
const claudeDir = join(home, ".claude");
|
|
@@ -111,30 +265,33 @@ async function chooseEnvironment(environments) {
|
|
|
111
265
|
function isJsonRecord(value) {
|
|
112
266
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
113
267
|
}
|
|
114
|
-
function readJsonFile(path) {
|
|
268
|
+
export function readJsonFile(path) {
|
|
115
269
|
if (!existsSync(path))
|
|
116
270
|
return {};
|
|
117
271
|
try {
|
|
118
272
|
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
119
273
|
if (!isJsonRecord(parsed)) {
|
|
120
|
-
|
|
121
|
-
return {};
|
|
274
|
+
throw new Error(`${path} does not contain a JSON object`);
|
|
122
275
|
}
|
|
123
276
|
return parsed;
|
|
124
277
|
}
|
|
125
278
|
catch (error) {
|
|
126
|
-
|
|
127
|
-
|
|
279
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
280
|
+
throw new Error(`Refusing to update malformed MCP config ${path}: ${message}`);
|
|
128
281
|
}
|
|
129
282
|
}
|
|
130
|
-
function
|
|
283
|
+
function writeTextFileRestricted(path, data) {
|
|
131
284
|
const dir = dirname(path);
|
|
132
285
|
if (!existsSync(dir)) {
|
|
133
286
|
mkdirSync(dir, { recursive: true });
|
|
134
287
|
}
|
|
135
|
-
writeFileSync(path,
|
|
288
|
+
writeFileSync(path, data, { mode: 0o600 });
|
|
289
|
+
chmodSync(path, 0o600);
|
|
290
|
+
}
|
|
291
|
+
export function writeJsonFile(path, data) {
|
|
292
|
+
writeTextFileRestricted(path, JSON.stringify(data, null, 2) + "\n");
|
|
136
293
|
}
|
|
137
|
-
function addJsonMcpServer(configPath, apiKey) {
|
|
294
|
+
export function addJsonMcpServer(configPath, apiKey) {
|
|
138
295
|
const config = readJsonFile(configPath);
|
|
139
296
|
const existing = config.mcpServers;
|
|
140
297
|
const mcpServers = isJsonRecord(existing) ? existing : {};
|
|
@@ -143,85 +300,70 @@ function addJsonMcpServer(configPath, apiKey) {
|
|
|
143
300
|
writeJsonFile(configPath, config);
|
|
144
301
|
console.log(`\nAdded ${SERVER_NAME} MCP server to ${configPath}`);
|
|
145
302
|
}
|
|
146
|
-
function printManualInstructions(
|
|
303
|
+
function printManualInstructions() {
|
|
147
304
|
console.log("\nClaude Code / Cursor / Gemini CLI JSON:\n");
|
|
148
|
-
console.log(JSON.stringify({ mcpServers: { [SERVER_NAME]:
|
|
305
|
+
console.log(JSON.stringify({ mcpServers: { [SERVER_NAME]: buildMcpConfigTemplate() } }, null, 2));
|
|
149
306
|
console.log("\nCodex TOML (~/.codex/config.toml):\n");
|
|
150
|
-
console.log(
|
|
307
|
+
console.log(formatCodexTomlTemplate());
|
|
308
|
+
console.log("Replace the placeholder with your API key in the config file. Do not paste the key into a command or terminal output.");
|
|
151
309
|
}
|
|
152
|
-
function
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
SERVER_NAME
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
function addGeminiMcpServer(apiKey) {
|
|
176
|
-
const result = spawnSync("gemini", [
|
|
177
|
-
"mcp",
|
|
178
|
-
"add",
|
|
179
|
-
"--scope",
|
|
180
|
-
"user",
|
|
181
|
-
SERVER_NAME,
|
|
182
|
-
"--env",
|
|
183
|
-
`${API_KEY_ENV_VAR}=${apiKey}`,
|
|
184
|
-
"--",
|
|
185
|
-
MCP_NPX_COMMAND,
|
|
186
|
-
...MCP_NPX_ARGS,
|
|
187
|
-
], {
|
|
188
|
-
stdio: "inherit",
|
|
189
|
-
});
|
|
190
|
-
if (result.error) {
|
|
191
|
-
throw result.error;
|
|
192
|
-
}
|
|
193
|
-
if (result.status !== 0) {
|
|
194
|
-
throw new Error(`gemini mcp add failed with exit code ${result.status ?? "unknown"}`);
|
|
310
|
+
function stripCodexServerBlocks(source) {
|
|
311
|
+
const serverHeaders = new Set([
|
|
312
|
+
`[mcp_servers.${SERVER_NAME}]`,
|
|
313
|
+
`[mcp_servers."${SERVER_NAME}"]`,
|
|
314
|
+
]);
|
|
315
|
+
const envHeaders = new Set([
|
|
316
|
+
`[mcp_servers.${SERVER_NAME}.env]`,
|
|
317
|
+
`[mcp_servers."${SERVER_NAME}".env]`,
|
|
318
|
+
]);
|
|
319
|
+
const output = [];
|
|
320
|
+
let skipping = false;
|
|
321
|
+
for (const line of source.split(/\r?\n/)) {
|
|
322
|
+
const trimmed = line.trim();
|
|
323
|
+
if (serverHeaders.has(trimmed) || envHeaders.has(trimmed)) {
|
|
324
|
+
skipping = true;
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
if (skipping && /^\[.+\]$/.test(trimmed)) {
|
|
328
|
+
skipping = false;
|
|
329
|
+
}
|
|
330
|
+
if (!skipping) {
|
|
331
|
+
output.push(line);
|
|
332
|
+
}
|
|
195
333
|
}
|
|
334
|
+
return output.join("\n").trimEnd();
|
|
335
|
+
}
|
|
336
|
+
export function addCodexMcpServer(configPath, apiKey) {
|
|
337
|
+
const existing = existsSync(configPath) ? readFileSync(configPath, "utf-8") : "";
|
|
338
|
+
const withoutExistingServer = stripCodexServerBlocks(existing);
|
|
339
|
+
const nextConfig = `${withoutExistingServer}${withoutExistingServer ? "\n\n" : ""}${formatCodexToml(apiKey)}`;
|
|
340
|
+
writeTextFileRestricted(configPath, nextConfig);
|
|
341
|
+
}
|
|
342
|
+
function printGeminiManualInstructions() {
|
|
343
|
+
console.log("\nGemini CLI auto-setup is not run because its MCP helper requires passing env values through process arguments.");
|
|
344
|
+
printManualInstructions();
|
|
196
345
|
}
|
|
197
346
|
async function runSetup() {
|
|
198
347
|
console.log(`${SERVER_NAME} MCP Server Setup\n`);
|
|
199
|
-
const apiKey = await
|
|
200
|
-
if (!apiKey) {
|
|
201
|
-
throw new Error(`API key is required. Get one at ${DEVELOPERS_URL}`);
|
|
202
|
-
}
|
|
203
|
-
if (!apiKey.startsWith("oxi_sk_live_")) {
|
|
204
|
-
throw new Error("Invalid API key format. Keys start with oxi_sk_live_");
|
|
205
|
-
}
|
|
348
|
+
const apiKey = validateApiKey(await readApiKey());
|
|
206
349
|
const env = await chooseEnvironment(detectEnvironments());
|
|
207
350
|
if (!env) {
|
|
208
351
|
console.log("\nCould not detect Claude Code, Cursor, Codex, or Gemini CLI. Here are manual instructions:");
|
|
209
|
-
printManualInstructions(
|
|
352
|
+
printManualInstructions();
|
|
210
353
|
return;
|
|
211
354
|
}
|
|
212
355
|
const confirm = await ask(`Detected ${environmentLabel(env.type)}. Add ${SERVER_NAME} MCP server? (Y/n): `);
|
|
213
356
|
if (confirm.toLowerCase() === "n") {
|
|
214
|
-
printManualInstructions(
|
|
357
|
+
printManualInstructions();
|
|
215
358
|
return;
|
|
216
359
|
}
|
|
217
360
|
if (env.type === "codex") {
|
|
218
|
-
addCodexMcpServer(apiKey);
|
|
361
|
+
addCodexMcpServer(env.configPath, apiKey);
|
|
219
362
|
console.log(`\nAdded ${SERVER_NAME} MCP server to ${env.configPath}`);
|
|
220
363
|
return;
|
|
221
364
|
}
|
|
222
365
|
if (env.type === "gemini-cli") {
|
|
223
|
-
|
|
224
|
-
console.log(`\nAdded ${SERVER_NAME} MCP server to ${env.configPath}`);
|
|
366
|
+
printGeminiManualInstructions();
|
|
225
367
|
return;
|
|
226
368
|
}
|
|
227
369
|
addJsonMcpServer(env.configPath, apiKey);
|
package/dist/cli-lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-lib.js","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-lib.js","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -9,11 +9,14 @@ interface ApiResponse {
|
|
|
9
9
|
has_more?: boolean;
|
|
10
10
|
next_cursor?: string | null;
|
|
11
11
|
total?: number | null;
|
|
12
|
+
facets?: unknown;
|
|
12
13
|
error?: {
|
|
13
14
|
code: string;
|
|
14
15
|
message: string;
|
|
15
16
|
doc_url?: string;
|
|
16
17
|
param?: string;
|
|
18
|
+
reason?: string;
|
|
19
|
+
retry_at?: string;
|
|
17
20
|
};
|
|
18
21
|
}
|
|
19
22
|
export declare class ApiClient {
|
|
@@ -21,6 +24,8 @@ export declare class ApiClient {
|
|
|
21
24
|
private readonly baseUrl;
|
|
22
25
|
constructor(apiKey: string, baseUrl?: string);
|
|
23
26
|
request(path: string, params?: Record<string, string | number | undefined>, repeatedParams?: Record<string, string[]>): Promise<ApiResponse>;
|
|
27
|
+
post(path: string, body: unknown): Promise<ApiResponse>;
|
|
28
|
+
private decodeResponse;
|
|
24
29
|
}
|
|
25
30
|
export declare class ApiError extends Error {
|
|
26
31
|
readonly status: number;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QAGf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAMD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAKtC,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,EACpD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACxC,OAAO,CAAC,WAAW,CAAC;IA6BjB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;YAgB/C,cAAc;CAsC7B;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB"}
|
package/dist/client.js
CHANGED
|
@@ -33,6 +33,23 @@ export class ApiClient {
|
|
|
33
33
|
"User-Agent": `@0xinsider/mcp/${VERSION}`,
|
|
34
34
|
},
|
|
35
35
|
});
|
|
36
|
+
return this.decodeResponse(response, path);
|
|
37
|
+
}
|
|
38
|
+
async post(path, body) {
|
|
39
|
+
const url = new URL(`${this.baseUrl}${path}`);
|
|
40
|
+
const response = await fetch(url.toString(), {
|
|
41
|
+
method: "POST",
|
|
42
|
+
headers: {
|
|
43
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
44
|
+
Accept: "application/json",
|
|
45
|
+
"Content-Type": "application/json",
|
|
46
|
+
"User-Agent": `@0xinsider/mcp/${VERSION}`,
|
|
47
|
+
},
|
|
48
|
+
body: JSON.stringify(body),
|
|
49
|
+
});
|
|
50
|
+
return this.decodeResponse(response, path);
|
|
51
|
+
}
|
|
52
|
+
async decodeResponse(response, path) {
|
|
36
53
|
const body = await response.json();
|
|
37
54
|
if (!isApiResponse(body)) {
|
|
38
55
|
throw new ApiError(response.status, "invalid_response", `Unexpected API response format from ${path}`);
|
|
@@ -41,10 +58,19 @@ export class ApiClient {
|
|
|
41
58
|
const code = body.error?.code ?? "unknown_error";
|
|
42
59
|
const message = body.error?.message ?? `HTTP ${response.status}`;
|
|
43
60
|
const docUrl = body.error?.doc_url;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
61
|
+
const reason = body.error?.reason;
|
|
62
|
+
// Surface `reason` when present: `Error (not_found)` tells an agent nothing,
|
|
63
|
+
// while `Error (not_found/pick_not_released)` tells it the pick is not out YET.
|
|
64
|
+
let errorText = `Error (${reason ? `${code}/${reason}` : code}): ${message}`;
|
|
65
|
+
// Retry-After on EVERY retryable error, not just rate_limited (#7209). The pick
|
|
66
|
+
// 404 carries it, and dropping it here would leave our own MCP tool unable to do
|
|
67
|
+
// what our own docs tell callers to do -- schedule instead of poll.
|
|
68
|
+
const retryAfter = response.headers.get("retry-after");
|
|
69
|
+
if (retryAfter) {
|
|
70
|
+
errorText += ` Retry after ${retryAfter}s.`;
|
|
71
|
+
}
|
|
72
|
+
if (body.error?.retry_at) {
|
|
73
|
+
errorText += ` Not available before ${body.error.retry_at}.`;
|
|
48
74
|
}
|
|
49
75
|
if (code === "subscription_required") {
|
|
50
76
|
errorText += " Upgrade at https://0xinsider.com/pricing";
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|