httpcat-cli 0.3.0 → 0.3.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/.github/workflows/ci.yml +3 -0
- package/.github/workflows/rc-publish.yml +6 -0
- package/.github/workflows/release.yml +102 -0
- package/.github/workflows/sync-version.yml +31 -2
- package/README.md +1408 -109
- package/additions.txt +3 -0
- package/bun.lock +260 -25
- package/dist/agent/autonomous-trader.d.ts.map +1 -0
- package/dist/agent/autonomous-trader.js +362 -0
- package/dist/agent/autonomous-trader.js.map +1 -0
- package/dist/agent/ax-agent.d.ts.map +1 -1
- package/dist/agent/ax-agent.js +356 -18
- package/dist/agent/ax-agent.js.map +1 -1
- package/dist/agent/event-client.d.ts.map +1 -0
- package/dist/agent/event-client.js +82 -0
- package/dist/agent/event-client.js.map +1 -0
- package/dist/agent/log-stream.d.ts.map +1 -0
- package/dist/agent/log-stream.js +95 -0
- package/dist/agent/log-stream.js.map +1 -0
- package/dist/agent/memory/conversation-session.d.ts.map +1 -0
- package/dist/agent/memory/conversation-session.js +232 -0
- package/dist/agent/memory/conversation-session.js.map +1 -0
- package/dist/agent/memory/conversation-store.d.ts.map +1 -0
- package/dist/agent/memory/conversation-store.js +214 -0
- package/dist/agent/memory/conversation-store.js.map +1 -0
- package/dist/agent/memory/database-schema.d.ts.map +1 -0
- package/dist/agent/memory/database-schema.js +355 -0
- package/dist/agent/memory/database-schema.js.map +1 -0
- package/dist/agent/memory/decision-tracker.d.ts.map +1 -0
- package/dist/agent/memory/decision-tracker.js +274 -0
- package/dist/agent/memory/decision-tracker.js.map +1 -0
- package/dist/agent/memory/memory-manager.d.ts.map +1 -0
- package/dist/agent/memory/memory-manager.js +187 -0
- package/dist/agent/memory/memory-manager.js.map +1 -0
- package/dist/agent/memory/types.d.ts.map +1 -0
- package/dist/agent/memory/types.js +5 -0
- package/dist/agent/memory/types.js.map +1 -0
- package/dist/agent/message-formatter.d.ts.map +1 -0
- package/dist/agent/message-formatter.js +76 -0
- package/dist/agent/message-formatter.js.map +1 -0
- package/dist/agent/position-db.d.ts.map +1 -0
- package/dist/agent/position-db.js +154 -0
- package/dist/agent/position-db.js.map +1 -0
- package/dist/agent/simple-chat-ui-static.d.ts.map +1 -0
- package/dist/agent/simple-chat-ui-static.js +129 -0
- package/dist/agent/simple-chat-ui-static.js.map +1 -0
- package/dist/agent/simple-chat-ui.d.ts.map +1 -0
- package/dist/agent/simple-chat-ui.js +90 -0
- package/dist/agent/simple-chat-ui.js.map +1 -0
- package/dist/agent/tools.d.ts.map +1 -1
- package/dist/agent/tools.js +297 -4
- package/dist/agent/tools.js.map +1 -1
- package/dist/agent/ui.d.ts.map +1 -0
- package/dist/agent/ui.js +84 -0
- package/dist/agent/ui.js.map +1 -0
- package/dist/agent/unified-runtime.d.ts.map +1 -0
- package/dist/agent/unified-runtime.js +397 -0
- package/dist/agent/unified-runtime.js.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +272 -21
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +187 -33
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +125 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +505 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/automation.d.ts.map +1 -0
- package/dist/commands/automation.js +346 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/balances.d.ts.map +1 -1
- package/dist/commands/balances.js +226 -73
- package/dist/commands/balances.js.map +1 -1
- package/dist/commands/buy.d.ts.map +1 -1
- package/dist/commands/buy.js +149 -146
- package/dist/commands/buy.js.map +1 -1
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +51 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/cex.d.ts.map +1 -0
- package/dist/commands/cex.js +958 -0
- package/dist/commands/cex.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +169 -411
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/claim.d.ts.map +1 -1
- package/dist/commands/claim.js +313 -29
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +151 -43
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/gasless-swap.d.ts.map +1 -0
- package/dist/commands/gasless-swap.js +232 -0
- package/dist/commands/gasless-swap.js.map +1 -0
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +63 -7
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +131 -47
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/launchpad.d.ts.map +1 -0
- package/dist/commands/launchpad.js +708 -0
- package/dist/commands/launchpad.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +57 -23
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/market.d.ts.map +1 -0
- package/dist/commands/market.js +960 -0
- package/dist/commands/market.js.map +1 -0
- package/dist/commands/mcp-install.d.ts.map +1 -0
- package/dist/commands/mcp-install.js +387 -0
- package/dist/commands/mcp-install.js.map +1 -0
- package/dist/commands/opps.d.ts.map +1 -0
- package/dist/commands/opps.js +409 -0
- package/dist/commands/opps.js.map +1 -0
- package/dist/commands/perps.d.ts.map +1 -0
- package/dist/commands/perps.js +248 -0
- package/dist/commands/perps.js.map +1 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +679 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/positions.d.ts.map +1 -1
- package/dist/commands/positions.js +76 -47
- package/dist/commands/positions.js.map +1 -1
- package/dist/commands/predict.d.ts.map +1 -0
- package/dist/commands/predict.js +280 -0
- package/dist/commands/predict.js.map +1 -0
- package/dist/commands/predictions.d.ts.map +1 -0
- package/dist/commands/predictions.js +486 -0
- package/dist/commands/predictions.js.map +1 -0
- package/dist/commands/risk.d.ts.map +1 -0
- package/dist/commands/risk.js +225 -0
- package/dist/commands/risk.js.map +1 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +244 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/commands/sell.d.ts.map +1 -1
- package/dist/commands/sell.js +67 -34
- package/dist/commands/sell.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +733 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/sign.d.ts.map +1 -0
- package/dist/commands/sign.js +1048 -0
- package/dist/commands/sign.js.map +1 -0
- package/dist/commands/swap.d.ts.map +1 -0
- package/dist/commands/swap.js +744 -0
- package/dist/commands/swap.js.map +1 -0
- package/dist/commands/system.d.ts.map +1 -0
- package/dist/commands/system.js +417 -0
- package/dist/commands/system.js.map +1 -0
- package/dist/commands/tools/index.d.ts.map +1 -0
- package/dist/commands/tools/index.js +2040 -0
- package/dist/commands/tools/index.js.map +1 -0
- package/dist/commands/trade.d.ts.map +1 -0
- package/dist/commands/trade.js +237 -0
- package/dist/commands/trade.js.map +1 -0
- package/dist/commands/transactions.d.ts.map +1 -1
- package/dist/commands/transactions.js +29 -17
- package/dist/commands/transactions.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +429 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +351 -40
- package/dist/config.js.map +1 -1
- package/dist/index.js +4524 -924
- package/dist/index.js.map +1 -1
- package/dist/interactive/art.d.ts.map +1 -1
- package/dist/interactive/art.js +33 -1
- package/dist/interactive/art.js.map +1 -1
- package/dist/interactive/shell.d.ts.map +1 -1
- package/dist/interactive/shell.js +467 -2652
- package/dist/interactive/shell.js.map +1 -1
- package/dist/mcp/context.d.ts.map +1 -0
- package/dist/mcp/context.js +211 -0
- package/dist/mcp/context.js.map +1 -0
- package/dist/mcp/onboarding.d.ts.map +1 -0
- package/dist/mcp/onboarding.js +266 -0
- package/dist/mcp/onboarding.js.map +1 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +222 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +51 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +4119 -169
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/types/agent-info.d.ts.map +1 -0
- package/dist/types/agent-info.js +11 -0
- package/dist/types/agent-info.js.map +1 -0
- package/dist/ui/components/ScrollableList.d.ts.map +1 -0
- package/dist/ui/components/ScrollableList.js +72 -0
- package/dist/ui/components/ScrollableList.js.map +1 -0
- package/dist/ui/components/ThemeProvider.d.ts.map +1 -0
- package/dist/ui/components/ThemeProvider.js +87 -0
- package/dist/ui/components/ThemeProvider.js.map +1 -0
- package/dist/ui/components/ThemedBox.d.ts.map +1 -0
- package/dist/ui/components/ThemedBox.js +24 -0
- package/dist/ui/components/ThemedBox.js.map +1 -0
- package/dist/ui/components/agent/ChatHeader.d.ts.map +1 -0
- package/dist/ui/components/agent/ChatHeader.js +39 -0
- package/dist/ui/components/agent/ChatHeader.js.map +1 -0
- package/dist/ui/components/agent/Header.d.ts.map +1 -0
- package/dist/ui/components/agent/Header.js +14 -0
- package/dist/ui/components/agent/Header.js.map +1 -0
- package/dist/ui/components/agent/Input.d.ts.map +1 -0
- package/dist/ui/components/agent/Input.js +23 -0
- package/dist/ui/components/agent/Input.js.map +1 -0
- package/dist/ui/components/agent/Output.d.ts.map +1 -0
- package/dist/ui/components/agent/Output.js +23 -0
- package/dist/ui/components/agent/Output.js.map +1 -0
- package/dist/ui/components/chat/TokenChatUI.d.ts.map +1 -0
- package/dist/ui/components/chat/TokenChatUI.js +133 -0
- package/dist/ui/components/chat/TokenChatUI.js.map +1 -0
- package/dist/ui/components/shell/ShellHeader.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellHeader.js +31 -0
- package/dist/ui/components/shell/ShellHeader.js.map +1 -0
- package/dist/ui/components/shell/ShellInput.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellInput.js +151 -0
- package/dist/ui/components/shell/ShellInput.js.map +1 -0
- package/dist/ui/components/shell/ShellOutput.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellOutput.js +8 -0
- package/dist/ui/components/shell/ShellOutput.js.map +1 -0
- package/dist/ui/hooks/useChatWebSocket.d.ts.map +1 -0
- package/dist/ui/hooks/useChatWebSocket.js +76 -0
- package/dist/ui/hooks/useChatWebSocket.js.map +1 -0
- package/dist/ui/hooks/useCommandHistory.d.ts.map +1 -0
- package/dist/ui/hooks/useCommandHistory.js +70 -0
- package/dist/ui/hooks/useCommandHistory.js.map +1 -0
- package/dist/ui/hooks/useDebounce.d.ts.map +1 -0
- package/dist/ui/hooks/useDebounce.js +17 -0
- package/dist/ui/hooks/useDebounce.js.map +1 -0
- package/dist/ui/hooks/useLogStream.d.ts.map +1 -0
- package/dist/ui/hooks/useLogStream.js +20 -0
- package/dist/ui/hooks/useLogStream.js.map +1 -0
- package/dist/ui/hooks/useVirtualScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useVirtualScroll.js +70 -0
- package/dist/ui/hooks/useVirtualScroll.js.map +1 -0
- package/dist/utils/admin.d.ts.map +1 -0
- package/dist/utils/admin.js +144 -0
- package/dist/utils/admin.js.map +1 -0
- package/dist/utils/autoSetup.d.ts.map +1 -0
- package/dist/utils/autoSetup.js +252 -0
- package/dist/utils/autoSetup.js.map +1 -0
- package/dist/utils/build-constants.d.ts.map +1 -0
- package/dist/utils/build-constants.js +10 -0
- package/dist/utils/build-constants.js.map +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +10 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +46 -9
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/llm-cli-config.d.ts.map +1 -0
- package/dist/utils/llm-cli-config.js +963 -0
- package/dist/utils/llm-cli-config.js.map +1 -0
- package/dist/utils/llm-cli-detector.d.ts.map +1 -0
- package/dist/utils/llm-cli-detector.js +202 -0
- package/dist/utils/llm-cli-detector.js.map +1 -0
- package/dist/utils/loading.d.ts.map +1 -1
- package/dist/utils/loading.js +25 -3
- package/dist/utils/loading.js.map +1 -1
- package/dist/utils/maintenance.d.ts.map +1 -0
- package/dist/utils/maintenance.js +17 -0
- package/dist/utils/maintenance.js.map +1 -0
- package/dist/utils/mcp-config.d.ts.map +1 -0
- package/dist/utils/mcp-config.js +77 -0
- package/dist/utils/mcp-config.js.map +1 -0
- package/dist/utils/privateKeyPrompt.d.ts.map +1 -1
- package/dist/utils/privateKeyPrompt.js +308 -129
- package/dist/utils/privateKeyPrompt.js.map +1 -1
- package/dist/utils/process-cleanup.d.ts.map +1 -0
- package/dist/utils/process-cleanup.js +136 -0
- package/dist/utils/process-cleanup.js.map +1 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +56 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/rpc-helpers.d.ts.map +1 -0
- package/dist/utils/rpc-helpers.js +70 -0
- package/dist/utils/rpc-helpers.js.map +1 -0
- package/dist/utils/rpc-transport.d.ts.map +1 -0
- package/dist/utils/rpc-transport.js +87 -0
- package/dist/utils/rpc-transport.js.map +1 -0
- package/dist/utils/shell-setup.d.ts.map +1 -0
- package/dist/utils/shell-setup.js +531 -0
- package/dist/utils/shell-setup.js.map +1 -0
- package/dist/utils/status.d.ts.map +1 -1
- package/dist/utils/status.js +34 -5
- package/dist/utils/status.js.map +1 -1
- package/dist/utils/token-resolver.d.ts.map +1 -1
- package/dist/utils/token-resolver.js +51 -8
- package/dist/utils/token-resolver.js.map +1 -1
- package/dist/utils/x402-caller.d.ts.map +1 -0
- package/dist/utils/x402-caller.js +17 -0
- package/dist/utils/x402-caller.js.map +1 -0
- package/docs/README.md +28 -0
- package/docs/agent/README.md +18 -0
- package/docs/api/README.md +41 -0
- package/docs/cli/README.md +42 -0
- package/docs/guides/README.md +26 -0
- package/docs/implementation/README.md +18 -0
- package/docs/planning/README.md +19 -0
- package/docs/testing/README.md +15 -0
- package/docs/ux/README.md +16 -0
- package/issues.txt +2 -0
- package/package.json +24 -9
- package/scripts/cat-spin.sh +417 -0
- package/scripts/deprecate-rc-versions.js +58 -0
- package/scripts/inject-build-constants.js +43 -0
- package/scripts/monitor-foobar.js +117 -0
- package/swap.logs +61 -0
- package/swapping.txt +108 -0
- package/test.txt +12 -0
- package/tests/fixtures/test-data.json +16 -0
- package/Screenshot 2025-12-21 at 8.56.02/342/200/257PM.png +0 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Onboarding
|
|
3
|
+
*
|
|
4
|
+
* This module handles interactive onboarding when the MCP server starts
|
|
5
|
+
* without a configured wallet. Since MCP uses stdio transport, all prompts
|
|
6
|
+
* must work via stdin/stdout/stderr.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. Check if wallet is configured
|
|
10
|
+
* 2. If not, prompt user via stdio for wallet setup
|
|
11
|
+
* 3. Support both seed phrase generation and private key import
|
|
12
|
+
* 4. Save to config file using ConfigManager
|
|
13
|
+
*/
|
|
14
|
+
import { createInterface } from "readline";
|
|
15
|
+
import { config } from "../config.js";
|
|
16
|
+
import { generateSeedPhrase, validateSeedPhrase, seedPhraseToPrivateKey, getAddressFromPrivateKey, } from "../utils/wallet.js";
|
|
17
|
+
import { encryptData } from "../utils/wallet.js";
|
|
18
|
+
/**
|
|
19
|
+
* Check if wallet is configured and run onboarding if needed
|
|
20
|
+
*
|
|
21
|
+
* This function is called when the MCP server starts. If no wallet is configured,
|
|
22
|
+
* it runs an interactive onboarding flow via stdio.
|
|
23
|
+
*
|
|
24
|
+
* @returns Promise that resolves when onboarding is complete (or skipped if already configured)
|
|
25
|
+
* @throws Error if onboarding is cancelled or fails
|
|
26
|
+
*/
|
|
27
|
+
export async function checkAndOnboard() {
|
|
28
|
+
// Check if already configured
|
|
29
|
+
if (config.isConfigured()) {
|
|
30
|
+
return; // Already configured, skip onboarding
|
|
31
|
+
}
|
|
32
|
+
// Check if import mode is enabled via environment variable
|
|
33
|
+
if (process.env.HTTPCAT_IMPORT_MODE === "true") {
|
|
34
|
+
// Write to stderr (stdout is used for MCP protocol)
|
|
35
|
+
process.stderr.write("\n");
|
|
36
|
+
process.stderr.write("⚠️ No wallet configured for httpcat MCP server.\n");
|
|
37
|
+
process.stderr.write("Starting onboarding...\n\n");
|
|
38
|
+
// Prompt user for setup method
|
|
39
|
+
const setupMethod = await promptChoice("How would you like to set up your wallet?", [
|
|
40
|
+
{ value: "generate", label: "Generate new wallet (seed phrase)" },
|
|
41
|
+
{ value: "import_seed", label: "Import existing seed phrase" },
|
|
42
|
+
{ value: "import_key", label: "Import existing private key" },
|
|
43
|
+
], "generate");
|
|
44
|
+
let seedPhrase;
|
|
45
|
+
let privateKey;
|
|
46
|
+
let accountIndex = 0;
|
|
47
|
+
if (setupMethod === "generate") {
|
|
48
|
+
// Generate new seed phrase
|
|
49
|
+
process.stderr.write("\n");
|
|
50
|
+
process.stderr.write("Generating new seed phrase...\n");
|
|
51
|
+
seedPhrase = generateSeedPhrase();
|
|
52
|
+
process.stderr.write("\n");
|
|
53
|
+
process.stderr.write("⚠️ IMPORTANT: Save this seed phrase in a safe place!\n");
|
|
54
|
+
process.stderr.write(" You will need it to recover your wallet.\n");
|
|
55
|
+
process.stderr.write("\n");
|
|
56
|
+
process.stderr.write("Seed phrase:\n");
|
|
57
|
+
process.stderr.write("─".repeat(60) + "\n");
|
|
58
|
+
process.stderr.write(seedPhrase + "\n");
|
|
59
|
+
process.stderr.write("─".repeat(60) + "\n");
|
|
60
|
+
process.stderr.write("\n");
|
|
61
|
+
const confirmed = await promptYesNo("Have you saved the seed phrase? (yes/no): ", false);
|
|
62
|
+
if (!confirmed) {
|
|
63
|
+
throw new Error("Onboarding cancelled - seed phrase not confirmed");
|
|
64
|
+
}
|
|
65
|
+
accountIndex = 1; // First seed-derived account
|
|
66
|
+
}
|
|
67
|
+
else if (setupMethod === "import_seed") {
|
|
68
|
+
// Import existing seed phrase
|
|
69
|
+
process.stderr.write("\n");
|
|
70
|
+
process.stderr.write("Enter your seed phrase (12 or 24 words):\n");
|
|
71
|
+
const inputSeedPhrase = await promptInput("Seed phrase: ");
|
|
72
|
+
if (!validateSeedPhrase(inputSeedPhrase)) {
|
|
73
|
+
throw new Error("Invalid seed phrase format");
|
|
74
|
+
}
|
|
75
|
+
seedPhrase = inputSeedPhrase;
|
|
76
|
+
accountIndex = 1; // First seed-derived account
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Import existing private key
|
|
80
|
+
process.stderr.write("\n");
|
|
81
|
+
process.stderr.write("Enter your private key (0x...):\n");
|
|
82
|
+
const inputKey = await promptInput("Private key: ");
|
|
83
|
+
// Validate private key format
|
|
84
|
+
if (!inputKey.startsWith("0x") || inputKey.length !== 66) {
|
|
85
|
+
throw new Error("Invalid private key format: must start with 0x and be 66 characters long");
|
|
86
|
+
}
|
|
87
|
+
privateKey = inputKey;
|
|
88
|
+
accountIndex = 0; // Custom account
|
|
89
|
+
}
|
|
90
|
+
// Prompt for password (optional)
|
|
91
|
+
process.stderr.write("\n");
|
|
92
|
+
const usePassword = await promptYesNo("Would you like to password-protect your wallet? (yes/no): ", false);
|
|
93
|
+
let password = "";
|
|
94
|
+
if (usePassword) {
|
|
95
|
+
process.stderr.write("Enter password (leave empty for no password):\n");
|
|
96
|
+
const password1 = await promptInput("Password: ", true);
|
|
97
|
+
const password2 = await promptInput("Confirm password: ", true);
|
|
98
|
+
if (password1 !== password2) {
|
|
99
|
+
throw new Error("Passwords do not match");
|
|
100
|
+
}
|
|
101
|
+
password = password1;
|
|
102
|
+
}
|
|
103
|
+
// Save to config
|
|
104
|
+
await saveWalletConfig(seedPhrase, privateKey, password, accountIndex);
|
|
105
|
+
process.stderr.write("\n");
|
|
106
|
+
process.stderr.write("✅ Wallet configured successfully!\n");
|
|
107
|
+
process.stderr.write("\n");
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Auto-generate seed phrase for new users (silent mode for MCP)
|
|
111
|
+
const { autoSetupWallet } = await import("../utils/autoSetup.js");
|
|
112
|
+
// For MCP, we want minimal output - just write to stderr
|
|
113
|
+
process.stderr.write("\n");
|
|
114
|
+
process.stderr.write("⚠️ No wallet configured. Auto-generating wallet...\n");
|
|
115
|
+
process.stderr.write(" (Set HTTPCAT_IMPORT_MODE=true to use import flow)\n\n");
|
|
116
|
+
const address = await autoSetupWallet();
|
|
117
|
+
process.stderr.write("\n");
|
|
118
|
+
process.stderr.write(`✅ Wallet configured successfully!\n`);
|
|
119
|
+
process.stderr.write(` Address: ${address}\n`);
|
|
120
|
+
process.stderr.write("\n");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Save wallet configuration to config file
|
|
125
|
+
*/
|
|
126
|
+
async function saveWalletConfig(seedPhrase, privateKey, password, accountIndex) {
|
|
127
|
+
if (seedPhrase) {
|
|
128
|
+
// Save seed phrase
|
|
129
|
+
if (password) {
|
|
130
|
+
const encrypted = encryptData(seedPhrase, password);
|
|
131
|
+
config.setEncryptedSeedPhrase(encrypted, password);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
config.setEncryptedSeedPhrase(seedPhrase, "");
|
|
135
|
+
}
|
|
136
|
+
// Create account entry for seed-derived account
|
|
137
|
+
const seedPrivateKey = seedPhraseToPrivateKey(seedPhrase, 0);
|
|
138
|
+
const address = getAddressFromPrivateKey(seedPrivateKey);
|
|
139
|
+
const accounts = config.getAllAccounts();
|
|
140
|
+
const accountExists = accounts.some((acc) => acc.index === accountIndex);
|
|
141
|
+
if (!accountExists) {
|
|
142
|
+
config.addAccount({
|
|
143
|
+
type: "seed",
|
|
144
|
+
index: accountIndex,
|
|
145
|
+
address,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (privateKey) {
|
|
150
|
+
// Save private key
|
|
151
|
+
// setEncryptedPrivateKey expects the raw private key, not encrypted
|
|
152
|
+
config.setEncryptedPrivateKey(privateKey, password || "");
|
|
153
|
+
// Create account entry for custom account
|
|
154
|
+
const address = getAddressFromPrivateKey(privateKey);
|
|
155
|
+
const accounts = config.getAllAccounts();
|
|
156
|
+
const accountExists = accounts.some((acc) => acc.index === accountIndex);
|
|
157
|
+
if (!accountExists) {
|
|
158
|
+
config.addAccount({
|
|
159
|
+
type: "custom",
|
|
160
|
+
index: accountIndex,
|
|
161
|
+
address,
|
|
162
|
+
encryptedPrivateKey: password
|
|
163
|
+
? encryptData(privateKey, password)
|
|
164
|
+
: privateKey,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Set password if provided
|
|
169
|
+
if (password) {
|
|
170
|
+
config.setPassword(password);
|
|
171
|
+
}
|
|
172
|
+
// Set active account
|
|
173
|
+
config.setActiveAccount(accountIndex);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Prompt user for a choice from a list of options
|
|
177
|
+
*/
|
|
178
|
+
function promptChoice(question, options, defaultValue) {
|
|
179
|
+
return new Promise((resolve) => {
|
|
180
|
+
const rl = createInterface({
|
|
181
|
+
input: process.stdin,
|
|
182
|
+
output: process.stderr, // Use stderr for prompts
|
|
183
|
+
});
|
|
184
|
+
process.stderr.write(question + "\n");
|
|
185
|
+
options.forEach((opt, index) => {
|
|
186
|
+
const marker = defaultValue === opt.value ? "→" : " ";
|
|
187
|
+
process.stderr.write(` ${marker} ${index + 1}. ${opt.label}\n`);
|
|
188
|
+
});
|
|
189
|
+
process.stderr.write("Choice: ");
|
|
190
|
+
rl.question("", (answer) => {
|
|
191
|
+
rl.close();
|
|
192
|
+
const choice = answer.trim();
|
|
193
|
+
if (!choice && defaultValue) {
|
|
194
|
+
resolve(defaultValue);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const index = parseInt(choice, 10) - 1;
|
|
198
|
+
if (index >= 0 && index < options.length) {
|
|
199
|
+
resolve(options[index].value);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
// Try to match by value
|
|
203
|
+
const option = options.find((opt) => opt.value === choice);
|
|
204
|
+
if (option) {
|
|
205
|
+
resolve(option.value);
|
|
206
|
+
}
|
|
207
|
+
else if (defaultValue) {
|
|
208
|
+
resolve(defaultValue);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Default to first option
|
|
212
|
+
resolve(options[0].value);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Prompt user for yes/no answer
|
|
220
|
+
*/
|
|
221
|
+
function promptYesNo(question, defaultValue) {
|
|
222
|
+
return new Promise((resolve) => {
|
|
223
|
+
const rl = createInterface({
|
|
224
|
+
input: process.stdin,
|
|
225
|
+
output: process.stderr,
|
|
226
|
+
});
|
|
227
|
+
const defaultText = defaultValue ? "yes" : "no";
|
|
228
|
+
process.stderr.write(question);
|
|
229
|
+
rl.question("", (answer) => {
|
|
230
|
+
rl.close();
|
|
231
|
+
const trimmed = answer.trim().toLowerCase();
|
|
232
|
+
if (!trimmed) {
|
|
233
|
+
resolve(defaultValue);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
resolve(trimmed === "yes" || trimmed === "y");
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Prompt user for text input
|
|
242
|
+
*/
|
|
243
|
+
function promptInput(prompt, mask = false) {
|
|
244
|
+
return new Promise((resolve) => {
|
|
245
|
+
const rl = createInterface({
|
|
246
|
+
input: process.stdin,
|
|
247
|
+
output: process.stderr,
|
|
248
|
+
});
|
|
249
|
+
process.stderr.write(prompt);
|
|
250
|
+
// For password input, we need to mask the input
|
|
251
|
+
// This is a simplified version - in production you might want to use a library
|
|
252
|
+
if (mask) {
|
|
253
|
+
// Disable echo
|
|
254
|
+
process.stdin.setRawMode?.(true);
|
|
255
|
+
}
|
|
256
|
+
rl.question("", (answer) => {
|
|
257
|
+
rl.close();
|
|
258
|
+
if (mask) {
|
|
259
|
+
process.stdin.setRawMode?.(false);
|
|
260
|
+
process.stderr.write("\n");
|
|
261
|
+
}
|
|
262
|
+
resolve(answer.trim());
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/mcp/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA0BH;;GAEG;AACH,wBAAgB,aAAa,IAAI,KAAK,CAAC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAqBD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,QAAQ,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACH,CAAC,CA6CD;AAsHD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1D"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources Implementation
|
|
3
|
+
*
|
|
4
|
+
* This module provides MCP Resources for static data that can be accessed
|
|
5
|
+
* by LLM clients. Resources are read-only data sources that provide context
|
|
6
|
+
* about the httpcat ecosystem.
|
|
7
|
+
*
|
|
8
|
+
* Resources include:
|
|
9
|
+
* - Token lists (cached from API)
|
|
10
|
+
* - Market information
|
|
11
|
+
* - Network status
|
|
12
|
+
* - Documentation snippets
|
|
13
|
+
*/
|
|
14
|
+
import { HttpcatClient } from "../client.js";
|
|
15
|
+
import { config } from "../config.js";
|
|
16
|
+
import { listTokens } from "../commands/list.js";
|
|
17
|
+
import { getNetworkConfig } from "../utils/constants.js";
|
|
18
|
+
const resourceCache = new Map();
|
|
19
|
+
const DEFAULT_TTL = 5 * 60 * 1000; // 5 minutes
|
|
20
|
+
/**
|
|
21
|
+
* Get resource URI prefix
|
|
22
|
+
*/
|
|
23
|
+
function getResourceUriPrefix() {
|
|
24
|
+
return "httpcat://";
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* List all available resources
|
|
28
|
+
*/
|
|
29
|
+
export function listResources() {
|
|
30
|
+
return [
|
|
31
|
+
{
|
|
32
|
+
uri: `${getResourceUriPrefix()}tokens/list`,
|
|
33
|
+
name: "Token List",
|
|
34
|
+
description: "List of all tokens on the platform with market data",
|
|
35
|
+
mimeType: "application/json",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
uri: `${getResourceUriPrefix()}network/status`,
|
|
39
|
+
name: "Network Status",
|
|
40
|
+
description: "Current network status and configuration",
|
|
41
|
+
mimeType: "application/json",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
uri: `${getResourceUriPrefix()}ecosystem/info`,
|
|
45
|
+
name: "Ecosystem Information",
|
|
46
|
+
description: "Information about the httpcat ecosystem and token economics",
|
|
47
|
+
mimeType: "application/json",
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read a resource by URI
|
|
53
|
+
*/
|
|
54
|
+
export async function readResource(uri) {
|
|
55
|
+
// Check cache first
|
|
56
|
+
const cached = resourceCache.get(uri);
|
|
57
|
+
if (cached && Date.now() - cached.timestamp < cached.ttl) {
|
|
58
|
+
return {
|
|
59
|
+
contents: [
|
|
60
|
+
{
|
|
61
|
+
uri,
|
|
62
|
+
mimeType: "application/json",
|
|
63
|
+
text: JSON.stringify(cached.data, null, 2),
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Fetch fresh data based on URI
|
|
69
|
+
let data;
|
|
70
|
+
const prefix = getResourceUriPrefix();
|
|
71
|
+
if (uri.startsWith(`${prefix}tokens/list`)) {
|
|
72
|
+
data = await fetchTokenList();
|
|
73
|
+
}
|
|
74
|
+
else if (uri.startsWith(`${prefix}network/status`)) {
|
|
75
|
+
data = await fetchNetworkStatus();
|
|
76
|
+
}
|
|
77
|
+
else if (uri.startsWith(`${prefix}ecosystem/info`)) {
|
|
78
|
+
data = await fetchEcosystemInfo();
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
throw new Error(`Unknown resource URI: ${uri}`);
|
|
82
|
+
}
|
|
83
|
+
// Cache the data
|
|
84
|
+
resourceCache.set(uri, {
|
|
85
|
+
data,
|
|
86
|
+
timestamp: Date.now(),
|
|
87
|
+
ttl: DEFAULT_TTL,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
contents: [
|
|
91
|
+
{
|
|
92
|
+
uri,
|
|
93
|
+
mimeType: "application/json",
|
|
94
|
+
text: JSON.stringify(data, null, 2),
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Fetch token list from API
|
|
101
|
+
*/
|
|
102
|
+
async function fetchTokenList() {
|
|
103
|
+
try {
|
|
104
|
+
const client = await createClient();
|
|
105
|
+
const result = await listTokens(client, 1, 100, "mcap");
|
|
106
|
+
return {
|
|
107
|
+
tokens: result.tokens || [],
|
|
108
|
+
total: result.total || 0,
|
|
109
|
+
page: result.page || 1,
|
|
110
|
+
limit: result.limit || 100,
|
|
111
|
+
timestamp: new Date().toISOString(),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
// Return empty list on error
|
|
116
|
+
return {
|
|
117
|
+
tokens: [],
|
|
118
|
+
total: 0,
|
|
119
|
+
page: 1,
|
|
120
|
+
limit: 100,
|
|
121
|
+
error: error.message,
|
|
122
|
+
timestamp: new Date().toISOString(),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Fetch network status
|
|
128
|
+
*/
|
|
129
|
+
async function fetchNetworkStatus() {
|
|
130
|
+
const network = config.get("network");
|
|
131
|
+
const networkDisplayName = config.caip2ToNetwork(network);
|
|
132
|
+
const isTestnet = config.isTestnet(network);
|
|
133
|
+
const agentUrl = config.getAgentUrl();
|
|
134
|
+
try {
|
|
135
|
+
const networkConfig = await getNetworkConfig(network);
|
|
136
|
+
return {
|
|
137
|
+
network: networkDisplayName,
|
|
138
|
+
chainId: networkConfig.chain.id,
|
|
139
|
+
isTestnet,
|
|
140
|
+
agentUrl,
|
|
141
|
+
rpcUrl: config.getRpcUrl() || "default",
|
|
142
|
+
alchemyApiKey: config.getAlchemyApiKey() ? "configured" : "not configured",
|
|
143
|
+
timestamp: new Date().toISOString(),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return {
|
|
148
|
+
network: networkDisplayName,
|
|
149
|
+
chainId: "unknown",
|
|
150
|
+
isTestnet,
|
|
151
|
+
agentUrl,
|
|
152
|
+
error: error.message,
|
|
153
|
+
timestamp: new Date().toISOString(),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Fetch ecosystem information
|
|
159
|
+
*/
|
|
160
|
+
async function fetchEcosystemInfo() {
|
|
161
|
+
return {
|
|
162
|
+
platform: "402.cat",
|
|
163
|
+
description: "A platform for creating and trading tokens on bonding curves with x402 payments",
|
|
164
|
+
tokenEconomics: {
|
|
165
|
+
creationCost: "0.01 USDC",
|
|
166
|
+
buyFee: "1%",
|
|
167
|
+
sellFee: "1%",
|
|
168
|
+
creatorFeeShare: "80%",
|
|
169
|
+
platformFeeShare: "20%",
|
|
170
|
+
},
|
|
171
|
+
bondingCurve: {
|
|
172
|
+
description: "Tokens start on a bonding curve and graduate to AMM when they reach $100k market cap",
|
|
173
|
+
graduationThreshold: "$100,000 USDC",
|
|
174
|
+
},
|
|
175
|
+
networks: {
|
|
176
|
+
mainnet: {
|
|
177
|
+
name: "Base",
|
|
178
|
+
chainId: "eip155:8453",
|
|
179
|
+
buyAmounts: ["50", "100", "200"],
|
|
180
|
+
currency: "USDC",
|
|
181
|
+
},
|
|
182
|
+
testnet: {
|
|
183
|
+
name: "Base Sepolia",
|
|
184
|
+
chainId: "eip155:84532",
|
|
185
|
+
buyAmounts: ["0.05", "0.10", "0.20"],
|
|
186
|
+
currency: "USDC",
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
features: [
|
|
190
|
+
"Token creation on bonding curves",
|
|
191
|
+
"Token trading (buy/sell)",
|
|
192
|
+
"Perpetual futures trading",
|
|
193
|
+
"Prediction markets",
|
|
194
|
+
"Chat rooms per token",
|
|
195
|
+
"Fee claiming for creators",
|
|
196
|
+
"Universal token swaps",
|
|
197
|
+
"MEV-protected swaps",
|
|
198
|
+
"Gasless swaps",
|
|
199
|
+
],
|
|
200
|
+
timestamp: new Date().toISOString(),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Create client for API calls
|
|
205
|
+
*/
|
|
206
|
+
async function createClient() {
|
|
207
|
+
const privateKey = config.getPrivateKey();
|
|
208
|
+
return await HttpcatClient.create(privateKey);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Clear resource cache (useful for testing or forced refresh)
|
|
212
|
+
*/
|
|
213
|
+
export function clearResourceCache() {
|
|
214
|
+
resourceCache.clear();
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Clear a specific resource from cache
|
|
218
|
+
*/
|
|
219
|
+
export function clearResourceCacheForUri(uri) {
|
|
220
|
+
resourceCache.delete(uri);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAWzD,MAAM,aAAa,GAAgC,IAAI,GAAG,EAAE,CAAC;AAC7D,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAE/C;;GAEG;AACH,SAAS,oBAAoB;IAC5B,OAAO,YAAY,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAM5B,OAAO;QACN;YACC,GAAG,EAAE,GAAG,oBAAoB,EAAE,aAAa;YAC3C,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,kBAAkB;SAC5B;QACD;YACC,GAAG,EAAE,GAAG,oBAAoB,EAAE,gBAAgB;YAC9C,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,kBAAkB;SAC5B;QACD;YACC,GAAG,EAAE,GAAG,oBAAoB,EAAE,gBAAgB;YAC9C,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,kBAAkB;SAC5B;KACD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAQ7C,oBAAoB;IACpB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO;YACN,QAAQ,EAAE;gBACT;oBACC,GAAG;oBACH,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC1C;aACD;SACD,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,IAAS,CAAC;IACd,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAEtC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC;QACtD,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACnC,CAAC;SAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC;QACtD,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACnC,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB;IACjB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE;QACtB,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,WAAW;KAChB,CAAC,CAAC;IAEH,OAAO;QACN,QAAQ,EAAE;YACT;gBACC,GAAG;gBACH,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACnC;SACD;KACD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc;IAC5B,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO;YACN,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;YACxB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;YACtB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACrB,6BAA6B;QAC7B,OAAO;YACN,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;IACH,CAAC;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO;YACN,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;YAC/B,SAAS;YACT,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,SAAS;YACvC,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;YAC1E,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACrB,OAAO;YACN,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,SAAS;YAClB,SAAS;YACT,QAAQ;YACR,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;IACH,CAAC;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB;IAChC,OAAO;QACN,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,iFAAiF;QAC9F,cAAc,EAAE;YACf,YAAY,EAAE,WAAW;YACzB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,KAAK;SACvB;QACD,YAAY,EAAE;YACb,WAAW,EAAE,sFAAsF;YACnG,mBAAmB,EAAE,eAAe;SACpC;QACD,QAAQ,EAAE;YACT,OAAO,EAAE;gBACR,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,aAAa;gBACtB,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;gBAChC,QAAQ,EAAE,MAAM;aAChB;YACD,OAAO,EAAE;gBACR,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBACpC,QAAQ,EAAE,MAAM;aAChB;SACD;QACD,QAAQ,EAAE;YACT,kCAAkC;YAClC,0BAA0B;YAC1B,2BAA2B;YAC3B,oBAAoB;YACpB,sBAAsB;YACtB,2BAA2B;YAC3B,uBAAuB;YACvB,qBAAqB;YACrB,eAAe;SACf;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY;IAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IAC1C,OAAO,MAAM,aAAa,CAAC,MAAM,CAAC,UAAiB,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IACjC,aAAa,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IACnD,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAeA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAiGpD"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
4
4
|
import { getTools, handleTool } from "./tools.js";
|
|
5
|
+
import { checkAndOnboard } from "./onboarding.js";
|
|
6
|
+
import { listResources, readResource } from "./resources.js";
|
|
7
|
+
import { listPrompts, getPrompt } from "./context.js";
|
|
5
8
|
export async function startMcpServer() {
|
|
9
|
+
// Check if wallet is configured, run onboarding if needed
|
|
10
|
+
// This must happen before creating the server to ensure we have a wallet
|
|
11
|
+
try {
|
|
12
|
+
await checkAndOnboard();
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
// If onboarding fails or is cancelled, exit with error
|
|
16
|
+
// Write to stderr since stdout is used for MCP protocol
|
|
17
|
+
process.stderr.write(`\n❌ Onboarding failed: ${error.message}\n`);
|
|
18
|
+
process.stderr.write("MCP server cannot start without a configured wallet.\n");
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
6
21
|
// Create MCP server
|
|
7
22
|
const server = new Server({
|
|
8
23
|
name: "httpcat-cli",
|
|
@@ -10,6 +25,8 @@ export async function startMcpServer() {
|
|
|
10
25
|
}, {
|
|
11
26
|
capabilities: {
|
|
12
27
|
tools: {},
|
|
28
|
+
resources: {},
|
|
29
|
+
prompts: {},
|
|
13
30
|
},
|
|
14
31
|
});
|
|
15
32
|
// List tools handler
|
|
@@ -26,6 +43,39 @@ export async function startMcpServer() {
|
|
|
26
43
|
}
|
|
27
44
|
return await handleTool(name, args);
|
|
28
45
|
});
|
|
46
|
+
// List resources handler
|
|
47
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
48
|
+
return {
|
|
49
|
+
resources: listResources(),
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
// Read resource handler
|
|
53
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
54
|
+
const { uri } = request.params;
|
|
55
|
+
return await readResource(uri);
|
|
56
|
+
});
|
|
57
|
+
// List prompts handler
|
|
58
|
+
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
59
|
+
return {
|
|
60
|
+
prompts: listPrompts(),
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
// Get prompt handler
|
|
64
|
+
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
65
|
+
const { name, arguments: args } = request.params;
|
|
66
|
+
const promptText = getPrompt(name, args);
|
|
67
|
+
return {
|
|
68
|
+
messages: [
|
|
69
|
+
{
|
|
70
|
+
role: "user",
|
|
71
|
+
content: {
|
|
72
|
+
type: "text",
|
|
73
|
+
text: promptText,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
});
|
|
29
79
|
// Set up stdio transport
|
|
30
80
|
const transport = new StdioServerTransport();
|
|
31
81
|
await server.connect(transport);
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AA2R1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,IAAI,IAAI,EAAE,CAy6FjC;AAOD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,GACR,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwrD7D"}
|