obyte-mcp 0.1.1 → 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.
Files changed (45) hide show
  1. package/README.md +241 -185
  2. package/dist/amounts.d.ts +43 -0
  3. package/dist/amounts.js +117 -0
  4. package/dist/amounts.js.map +1 -0
  5. package/dist/cliArgs.d.ts +8 -2
  6. package/dist/cliArgs.js +37 -4
  7. package/dist/cliArgs.js.map +1 -1
  8. package/dist/config.d.ts +4 -1
  9. package/dist/config.js +46 -17
  10. package/dist/config.js.map +1 -1
  11. package/dist/configSnippets.d.ts +19 -4
  12. package/dist/configSnippets.js +97 -48
  13. package/dist/configSnippets.js.map +1 -1
  14. package/dist/constants.d.ts +3 -1
  15. package/dist/constants.js +3 -1
  16. package/dist/constants.js.map +1 -1
  17. package/dist/envelope.d.ts +3 -3
  18. package/dist/envelope.js.map +1 -1
  19. package/dist/index.js +29 -8
  20. package/dist/index.js.map +1 -1
  21. package/dist/install.d.ts +10 -0
  22. package/dist/install.js +159 -0
  23. package/dist/install.js.map +1 -0
  24. package/dist/obyteClient.d.ts +10 -2
  25. package/dist/obyteClient.js +8 -0
  26. package/dist/obyteClient.js.map +1 -1
  27. package/dist/prompts.js +26 -18
  28. package/dist/prompts.js.map +1 -1
  29. package/dist/resources.js +10 -2
  30. package/dist/resources.js.map +1 -1
  31. package/dist/schemas.d.ts +121 -1
  32. package/dist/schemas.js +34 -17
  33. package/dist/schemas.js.map +1 -1
  34. package/dist/server.js +26 -4
  35. package/dist/server.js.map +1 -1
  36. package/dist/setup.js +9 -3
  37. package/dist/setup.js.map +1 -1
  38. package/dist/symbols.js +2 -1
  39. package/dist/symbols.js.map +1 -1
  40. package/dist/tools.d.ts +2 -2
  41. package/dist/tools.js +153 -77
  42. package/dist/tools.js.map +1 -1
  43. package/dist/types.d.ts +24 -9
  44. package/package.json +5 -2
  45. package/server.json +25 -13
@@ -0,0 +1,43 @@
1
+ import type { AaStateVarsReader, SymbolOptions } from "./symbols.js";
2
+ import type { Network } from "./types.js";
3
+ export declare const BASE_DECIMALS = 9;
4
+ export declare const AMOUNTS_NOTE = "Raw on-ledger amounts are integers in the asset's smallest units. display_total is already divided by 10^decimals; present display values to users, never raw integers. base is GBYTE with 9 decimals. explorer_asset_url lists the asset's description and holders (explorer amounts are already in display units).";
5
+ /** Explorer page listing an asset's description and holders. */
6
+ export declare function assetExplorerUrl(network: Network, symbolOrAsset: string): string;
7
+ export interface AssetAmountSummary {
8
+ asset: string;
9
+ symbol: string | null;
10
+ decimals: number | null;
11
+ raw_total: number;
12
+ display_total: string | null;
13
+ explorer_asset_url?: string;
14
+ }
15
+ export interface BalanceAmountSummary {
16
+ totals_by_asset: Record<string, AssetAmountSummary>;
17
+ amounts_note: string;
18
+ unresolved_assets?: string[];
19
+ }
20
+ /**
21
+ * Converts a raw smallest-units integer into a human display string without
22
+ * floating point artifacts, e.g. formatAmount(2500000000, 9) === "2.5".
23
+ */
24
+ export declare function formatAmount(rawAmount: number, decimals: number): string | null;
25
+ /**
26
+ * Sums raw amounts per asset from either hub balance shape:
27
+ * - get_balances: { address: { asset: { stable, pending } } }
28
+ * - AA balances: { asset: number }
29
+ */
30
+ export declare function collectAssetTotals(balances: unknown): Record<string, number>;
31
+ export interface SummarizeOptions extends SymbolOptions {
32
+ resolve?: boolean;
33
+ maxResolvedAssets?: number;
34
+ /** When set, each asset summary gets an explorer_asset_url for that network. */
35
+ network?: Network;
36
+ }
37
+ /**
38
+ * Builds a per-asset totals summary with symbols, decimals, and display amounts.
39
+ * base always resolves to GBYTE/9 without touching the registry; custom assets
40
+ * are resolved through the registry when available, failures degrade to nulls
41
+ * and are listed in unresolved_assets so agents know to resolve before display.
42
+ */
43
+ export declare function summarizeBalanceAmounts(reader: AaStateVarsReader, balances: unknown, options?: SummarizeOptions): Promise<BalanceAmountSummary>;
@@ -0,0 +1,117 @@
1
+ import { MAINNET_EXPLORER, TESTNET_EXPLORER } from "./constants.js";
2
+ import { isPlainObject } from "./jsonUtils.js";
3
+ import { getDecimalsBySymbolOrAsset, getSymbolByAsset } from "./symbols.js";
4
+ export const BASE_DECIMALS = 9;
5
+ export const AMOUNTS_NOTE = "Raw on-ledger amounts are integers in the asset's smallest units. display_total is already divided by 10^decimals; present display values to users, never raw integers. base is GBYTE with 9 decimals. explorer_asset_url lists the asset's description and holders (explorer amounts are already in display units).";
6
+ /** Explorer page listing an asset's description and holders. */
7
+ export function assetExplorerUrl(network, symbolOrAsset) {
8
+ const base = network === "testnet" ? TESTNET_EXPLORER : MAINNET_EXPLORER;
9
+ return `${base}/asset/${encodeURIComponent(symbolOrAsset)}`;
10
+ }
11
+ /**
12
+ * Converts a raw smallest-units integer into a human display string without
13
+ * floating point artifacts, e.g. formatAmount(2500000000, 9) === "2.5".
14
+ */
15
+ export function formatAmount(rawAmount, decimals) {
16
+ if (typeof rawAmount !== "number" || !Number.isFinite(rawAmount))
17
+ return null;
18
+ if (!Number.isInteger(decimals) || decimals < 0 || decimals > 30)
19
+ return null;
20
+ if (decimals === 0)
21
+ return String(rawAmount);
22
+ if (!Number.isSafeInteger(rawAmount))
23
+ return String(rawAmount / 10 ** decimals);
24
+ const negative = rawAmount < 0;
25
+ const digits = String(Math.abs(rawAmount)).padStart(decimals + 1, "0");
26
+ const whole = digits.slice(0, -decimals);
27
+ const frac = digits.slice(-decimals).replace(/0+$/, "");
28
+ return `${negative ? "-" : ""}${whole}${frac ? `.${frac}` : ""}`;
29
+ }
30
+ /**
31
+ * Sums raw amounts per asset from either hub balance shape:
32
+ * - get_balances: { address: { asset: { stable, pending } } }
33
+ * - AA balances: { asset: number }
34
+ */
35
+ export function collectAssetTotals(balances) {
36
+ const totals = {};
37
+ if (!isPlainObject(balances))
38
+ return totals;
39
+ const add = (asset, value) => {
40
+ let raw;
41
+ if (typeof value === "number") {
42
+ raw = value;
43
+ }
44
+ else if (isPlainObject(value)) {
45
+ const stable = typeof value.stable === "number" ? value.stable : 0;
46
+ const pending = typeof value.pending === "number" ? value.pending : 0;
47
+ raw = stable + pending;
48
+ }
49
+ if (raw !== undefined)
50
+ totals[asset] = (totals[asset] ?? 0) + raw;
51
+ };
52
+ for (const [key, entry] of Object.entries(balances)) {
53
+ const values = isPlainObject(entry) ? Object.values(entry) : [];
54
+ if (values.length > 0 && values.every((value) => isPlainObject(value))) {
55
+ // Address -> asset map (get_balances shape); sum across addresses.
56
+ for (const [asset, value] of Object.entries(entry))
57
+ add(asset, value);
58
+ }
59
+ else {
60
+ add(key, entry);
61
+ }
62
+ }
63
+ return totals;
64
+ }
65
+ /**
66
+ * Builds a per-asset totals summary with symbols, decimals, and display amounts.
67
+ * base always resolves to GBYTE/9 without touching the registry; custom assets
68
+ * are resolved through the registry when available, failures degrade to nulls
69
+ * and are listed in unresolved_assets so agents know to resolve before display.
70
+ */
71
+ export async function summarizeBalanceAmounts(reader, balances, options = {}) {
72
+ const totals = collectAssetTotals(balances);
73
+ const customAssets = Object.keys(totals).filter((asset) => asset !== "base");
74
+ const maxResolved = options.maxResolvedAssets ?? 10;
75
+ const toResolve = options.resolve === false ? [] : customAssets.slice(0, maxResolved);
76
+ const resolved = new Map(await Promise.all(toResolve.map(async (asset) => {
77
+ const [symbol, decimals] = await Promise.all([
78
+ getSymbolByAsset(reader, asset, options).catch(() => null),
79
+ getDecimalsBySymbolOrAsset(reader, asset, options).catch(() => null)
80
+ ]);
81
+ return [asset, { symbol, decimals }];
82
+ })));
83
+ const totalsByAsset = {};
84
+ const unresolved = [];
85
+ for (const [asset, rawTotal] of Object.entries(totals)) {
86
+ if (asset === "base") {
87
+ totalsByAsset[asset] = {
88
+ asset,
89
+ symbol: "GBYTE",
90
+ decimals: BASE_DECIMALS,
91
+ raw_total: rawTotal,
92
+ display_total: formatAmount(rawTotal, BASE_DECIMALS),
93
+ ...(options.network ? { explorer_asset_url: assetExplorerUrl(options.network, "GBYTE") } : {})
94
+ };
95
+ continue;
96
+ }
97
+ const info = resolved.get(asset);
98
+ const decimals = info?.decimals ?? null;
99
+ const symbol = info?.symbol ?? null;
100
+ totalsByAsset[asset] = {
101
+ asset,
102
+ symbol,
103
+ decimals,
104
+ raw_total: rawTotal,
105
+ display_total: decimals === null ? null : formatAmount(rawTotal, decimals),
106
+ // Unknown assets get a prefix fallback "symbol"; only registry-confirmed symbols make clean explorer URLs.
107
+ ...(options.network ? { explorer_asset_url: assetExplorerUrl(options.network, decimals !== null && symbol ? symbol : asset) } : {})
108
+ };
109
+ if (decimals === null)
110
+ unresolved.push(asset);
111
+ }
112
+ const summary = { totals_by_asset: totalsByAsset, amounts_note: AMOUNTS_NOTE };
113
+ if (unresolved.length > 0)
114
+ summary.unresolved_assets = unresolved;
115
+ return summary;
116
+ }
117
+ //# sourceMappingURL=amounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amounts.js","sourceRoot":"","sources":["../src/amounts.ts"],"names":[],"mappings":"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"}
package/dist/cliArgs.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { CliOptions } from "./types.js";
2
- export type CommandName = "server" | "setup" | "doctor" | "help" | "version";
3
- export type ClientName = "codex" | "claude-desktop" | "claude-code";
2
+ export type CommandName = "server" | "setup" | "install" | "doctor" | "help" | "version";
3
+ export type ClientName = "codex" | "claude-desktop" | "claude-code" | "vscode";
4
+ export declare const CLIENT_NAMES: readonly ClientName[];
4
5
  export interface ParsedCli {
5
6
  command: CommandName;
6
7
  options: CliOptions;
@@ -8,6 +9,11 @@ export interface ParsedCli {
8
9
  printOnly: boolean;
9
10
  client?: ClientName;
10
11
  };
12
+ install: {
13
+ dryRun: boolean;
14
+ client?: ClientName;
15
+ serverName?: string;
16
+ };
11
17
  doctor: {
12
18
  json: boolean;
13
19
  };
package/dist/cliArgs.js CHANGED
@@ -1,15 +1,17 @@
1
1
  import { ObyteMcpError } from "./errors.js";
2
2
  import { parseNetwork } from "./config.js";
3
+ export const CLIENT_NAMES = ["vscode", "codex", "claude-desktop", "claude-code"];
3
4
  export function parseCliArgs(argv) {
4
5
  const parsed = {
5
6
  command: "server",
6
7
  options: {},
7
8
  setup: { printOnly: false },
9
+ install: { dryRun: false },
8
10
  doctor: { json: false }
9
11
  };
10
12
  const args = [...argv];
11
13
  const first = args[0];
12
- if (first === "setup" || first === "doctor") {
14
+ if (first === "setup" || first === "install" || first === "doctor") {
13
15
  parsed.command = first;
14
16
  args.shift();
15
17
  }
@@ -29,6 +31,10 @@ export function parseCliArgs(argv) {
29
31
  parsed.setup.printOnly = true;
30
32
  continue;
31
33
  }
34
+ if (arg === "--dry-run") {
35
+ parsed.install.dryRun = true;
36
+ continue;
37
+ }
32
38
  if (arg === "--json") {
33
39
  parsed.doctor.json = true;
34
40
  continue;
@@ -49,6 +55,26 @@ export function parseCliArgs(argv) {
49
55
  index += 1;
50
56
  continue;
51
57
  }
58
+ if (arg === "--mainnet-hub") {
59
+ parsed.options.mainnetHubAddress = requireString(next, "--mainnet-hub");
60
+ index += 1;
61
+ continue;
62
+ }
63
+ if (arg === "--testnet-hub") {
64
+ parsed.options.testnetHubAddress = requireString(next, "--testnet-hub");
65
+ index += 1;
66
+ continue;
67
+ }
68
+ if (arg === "--mainnet-token-registry") {
69
+ parsed.options.mainnetTokenRegistryAddress = requireString(next, "--mainnet-token-registry");
70
+ index += 1;
71
+ continue;
72
+ }
73
+ if (arg === "--testnet-token-registry") {
74
+ parsed.options.testnetTokenRegistryAddress = requireString(next, "--testnet-token-registry");
75
+ index += 1;
76
+ continue;
77
+ }
52
78
  if (arg === "--timeout-ms") {
53
79
  parsed.options.timeoutMs = parseInteger(requireString(next, "--timeout-ms"), "--timeout-ms");
54
80
  index += 1;
@@ -65,7 +91,14 @@ export function parseCliArgs(argv) {
65
91
  continue;
66
92
  }
67
93
  if (arg === "--client") {
68
- parsed.setup.client = parseClient(requireString(next, "--client"));
94
+ const client = parseClient(requireString(next, "--client"));
95
+ parsed.setup.client = client;
96
+ parsed.install.client = client;
97
+ index += 1;
98
+ continue;
99
+ }
100
+ if (arg === "--name") {
101
+ parsed.install.serverName = requireString(next, "--name");
69
102
  index += 1;
70
103
  continue;
71
104
  }
@@ -90,8 +123,8 @@ function parseInteger(value, label) {
90
123
  return number;
91
124
  }
92
125
  function parseClient(value) {
93
- if (value === "codex" || value === "claude-desktop" || value === "claude-code")
126
+ if (value === "codex" || value === "claude-desktop" || value === "claude-code" || value === "vscode")
94
127
  return value;
95
- throw new ObyteMcpError("CONFIG_ERROR", "--client must be codex, claude-desktop, or claude-code", { value });
128
+ throw new ObyteMcpError("CONFIG_ERROR", "--client must be vscode, codex, claude-desktop, or claude-code", { value });
96
129
  }
97
130
  //# sourceMappingURL=cliArgs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cliArgs.js","sourceRoot":"","sources":["../src/cliArgs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cliArgs.js","sourceRoot":"","sources":["../src/cliArgs.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- import type { CliOptions, Network, RuntimeConfig } from "./types.js";
1
+ import type { CliOptions, EnvelopeConfig, Network, RuntimeConfig } from "./types.js";
2
+ export declare const NETWORKS: readonly Network[];
2
3
  export declare function parseNetwork(value: string | undefined, source: string): Network | undefined;
3
4
  export declare function buildRuntimeConfig(env?: NodeJS.ProcessEnv, cli?: CliOptions): RuntimeConfig;
5
+ /** Narrows the full runtime config to the fields the response envelope needs for one network. */
6
+ export declare function envelopeConfig(config: RuntimeConfig, network: Network): EnvelopeConfig;
4
7
  export declare function normalizeHubAddress(value: string | undefined): string | undefined;
package/dist/config.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { DEFAULT_MAX_CONCURRENCY, DEFAULT_MAX_OUTPUT_BYTES, DEFAULT_TIMEOUT_MS, MAINNET_HUB, MAINNET_TOKEN_REGISTRY_ADDRESS, MAX_MAX_CONCURRENCY, MAX_MAX_OUTPUT_BYTES, MAX_TIMEOUT_MS, MIN_MAX_CONCURRENCY, MIN_MAX_OUTPUT_BYTES, MIN_TIMEOUT_MS, TESTNET_HUB } from "./constants.js";
2
2
  import { ObyteMcpError } from "./errors.js";
3
+ export const NETWORKS = ["mainnet", "testnet"];
3
4
  export function parseNetwork(value, source) {
4
5
  if (value === undefined || value === "")
5
6
  return undefined;
@@ -9,36 +10,64 @@ export function parseNetwork(value, source) {
9
10
  }
10
11
  export function buildRuntimeConfig(env = process.env, cli = {}) {
11
12
  const envNetwork = parseNetwork(env.OBYTE_NETWORK, "OBYTE_NETWORK");
12
- const network = envNetwork ?? cli.network ?? "mainnet";
13
- const networkSource = envNetwork ? "env" : cli.network ? "cli" : "default";
14
- const envHub = normalizeHubAddress(env.OBYTE_HUB_ADDRESS);
15
- const cliHub = normalizeHubAddress(cli.hubAddress);
16
- const hubAddress = envHub ?? cliHub ?? (network === "testnet" ? TESTNET_HUB : MAINNET_HUB);
17
- const hubSource = envHub ? "env" : cliHub ? "cli" : "default";
18
- const envRegistry = normalizeOptionalString(env.OBYTE_TOKEN_REGISTRY_ADDRESS);
19
- const cliRegistry = normalizeOptionalString(cli.tokenRegistryAddress);
20
- const tokenRegistryAddress = envRegistry ?? cliRegistry ?? (network === "mainnet" ? MAINNET_TOKEN_REGISTRY_ADDRESS : undefined);
21
- const registrySource = envRegistry ? "env" : cliRegistry ? "cli" : network === "mainnet" ? "default" : "unset";
13
+ const defaultNetwork = envNetwork ?? cli.network ?? "mainnet";
14
+ const defaultNetworkSource = envNetwork ? "env" : cli.network ? "cli" : "default";
15
+ const networks = {
16
+ mainnet: buildNetworkConfig("mainnet", env, cli, defaultNetwork),
17
+ testnet: buildNetworkConfig("testnet", env, cli, defaultNetwork)
18
+ };
22
19
  const timeoutMs = pickBoundedNumber(env.OBYTE_REQUEST_TIMEOUT_MS, cli.timeoutMs, DEFAULT_TIMEOUT_MS, MIN_TIMEOUT_MS, MAX_TIMEOUT_MS, "OBYTE_REQUEST_TIMEOUT_MS");
23
20
  const maxConcurrency = pickBoundedNumber(env.OBYTE_MAX_CONCURRENCY, cli.maxConcurrency, DEFAULT_MAX_CONCURRENCY, MIN_MAX_CONCURRENCY, MAX_MAX_CONCURRENCY, "OBYTE_MAX_CONCURRENCY");
24
21
  const maxOutputBytes = pickBoundedNumber(env.OBYTE_MAX_OUTPUT_BYTES, cli.maxOutputBytes, DEFAULT_MAX_OUTPUT_BYTES, MIN_MAX_OUTPUT_BYTES, MAX_MAX_OUTPUT_BYTES, "OBYTE_MAX_OUTPUT_BYTES");
25
22
  return {
26
- network,
27
- hubAddress,
28
- tokenRegistryAddress,
23
+ defaultNetwork,
24
+ defaultNetworkSource,
25
+ networks,
29
26
  timeoutMs,
30
27
  maxConcurrency,
31
28
  maxOutputBytes,
32
- source: {
33
- network: networkSource,
34
- hubAddress: hubSource,
35
- tokenRegistryAddress: registrySource,
29
+ limitsSource: {
36
30
  timeoutMs: env.OBYTE_REQUEST_TIMEOUT_MS ? "env" : cli.timeoutMs !== undefined ? "cli" : "default",
37
31
  maxConcurrency: env.OBYTE_MAX_CONCURRENCY ? "env" : cli.maxConcurrency !== undefined ? "cli" : "default",
38
32
  maxOutputBytes: env.OBYTE_MAX_OUTPUT_BYTES ? "env" : cli.maxOutputBytes !== undefined ? "cli" : "default"
39
33
  }
40
34
  };
41
35
  }
36
+ /** Narrows the full runtime config to the fields the response envelope needs for one network. */
37
+ export function envelopeConfig(config, network) {
38
+ return { network, hubAddress: config.networks[network].hubAddress, maxOutputBytes: config.maxOutputBytes };
39
+ }
40
+ function buildNetworkConfig(network, env, cli, defaultNetwork) {
41
+ const isDefault = network === defaultNetwork;
42
+ const upper = network.toUpperCase();
43
+ const hub = resolveSourced([
44
+ [normalizeHubAddress(env[`OBYTE_${upper}_HUB_ADDRESS`]), "env"],
45
+ [normalizeHubAddress(network === "mainnet" ? cli.mainnetHubAddress : cli.testnetHubAddress), "cli"],
46
+ [isDefault ? normalizeHubAddress(env.OBYTE_HUB_ADDRESS) : undefined, "env"],
47
+ [isDefault ? normalizeHubAddress(cli.hubAddress) : undefined, "cli"]
48
+ ], [network === "testnet" ? TESTNET_HUB : MAINNET_HUB, "default"]);
49
+ const registryDefault = network === "mainnet" ? MAINNET_TOKEN_REGISTRY_ADDRESS : undefined;
50
+ const registry = resolveSourced([
51
+ [normalizeOptionalString(env[`OBYTE_${upper}_TOKEN_REGISTRY_ADDRESS`]), "env"],
52
+ [normalizeOptionalString(network === "mainnet" ? cli.mainnetTokenRegistryAddress : cli.testnetTokenRegistryAddress), "cli"],
53
+ [isDefault ? normalizeOptionalString(env.OBYTE_TOKEN_REGISTRY_ADDRESS) : undefined, "env"],
54
+ [isDefault ? normalizeOptionalString(cli.tokenRegistryAddress) : undefined, "cli"]
55
+ ], [registryDefault, registryDefault ? "default" : "unset"]);
56
+ return {
57
+ network,
58
+ hubAddress: hub.value,
59
+ tokenRegistryAddress: registry.value,
60
+ hubSource: hub.source,
61
+ tokenRegistrySource: registry.source
62
+ };
63
+ }
64
+ function resolveSourced(candidates, fallback) {
65
+ for (const [value, source] of candidates) {
66
+ if (value !== undefined)
67
+ return { value, source };
68
+ }
69
+ return { value: fallback[0], source: fallback[1] };
70
+ }
42
71
  export function normalizeHubAddress(value) {
43
72
  const raw = normalizeOptionalString(value);
44
73
  if (!raw)
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,20 @@
1
1
  import type { ClientName } from "./cliArgs.js";
2
- import type { CliOptions, Network, RuntimeConfig } from "./types.js";
3
- export declare function configSnippet(client: ClientName, config: RuntimeConfig): string;
4
- export declare function allConfigSnippets(config: RuntimeConfig): string;
5
- export declare function cliOptionsFromNetwork(network: Network): CliOptions;
2
+ import type { RuntimeConfig } from "./types.js";
3
+ export declare const DEFAULT_SERVER_NAME = "obyte";
4
+ export interface Invocation {
5
+ command: string;
6
+ args: string[];
7
+ }
8
+ /** The `npx` arguments that launch the server with the given runtime config. */
9
+ export declare function commandArgs(config: RuntimeConfig): string[];
10
+ /** The `command`/`args` for the entry written into a JSON-style client config (`npx obyte-mcp ...`). */
11
+ export declare function serverEntry(config: RuntimeConfig): Invocation;
12
+ /** The client CLI command that registers the server (for clients that expose a CLI). */
13
+ export declare function installInvocation(client: ClientName, config: RuntimeConfig, serverName: string): Invocation | undefined;
14
+ export declare function configSnippet(client: ClientName, config: RuntimeConfig, serverName?: string): string;
15
+ export declare function allConfigSnippets(config: RuntimeConfig, serverName?: string): string;
16
+ export declare function vscodeSnippet(config: RuntimeConfig, serverName?: string): string;
17
+ export declare function codexSnippet(config: RuntimeConfig, serverName?: string): string;
18
+ export declare function claudeDesktopSnippet(config: RuntimeConfig, serverName?: string): string;
19
+ export declare function claudeCodeSnippet(config: RuntimeConfig, serverName?: string): string;
20
+ export declare function shellQuote(value: string): string;
@@ -1,69 +1,118 @@
1
- export function configSnippet(client, config) {
1
+ export const DEFAULT_SERVER_NAME = "obyte";
2
+ /** The `npx` arguments that launch the server with the given runtime config. */
3
+ export function commandArgs(config) {
4
+ const args = ["-y", "obyte-mcp"];
5
+ if (config.defaultNetwork !== "mainnet")
6
+ args.push("--network", config.defaultNetwork);
7
+ if (config.networks.mainnet.hubSource !== "default")
8
+ args.push("--mainnet-hub", config.networks.mainnet.hubAddress);
9
+ if (config.networks.testnet.hubSource !== "default")
10
+ args.push("--testnet-hub", config.networks.testnet.hubAddress);
11
+ if (isOverride(config.networks.mainnet.tokenRegistrySource) && config.networks.mainnet.tokenRegistryAddress) {
12
+ args.push("--mainnet-token-registry", config.networks.mainnet.tokenRegistryAddress);
13
+ }
14
+ if (isOverride(config.networks.testnet.tokenRegistrySource) && config.networks.testnet.tokenRegistryAddress) {
15
+ args.push("--testnet-token-registry", config.networks.testnet.tokenRegistryAddress);
16
+ }
17
+ return args;
18
+ }
19
+ function isOverride(source) {
20
+ return source === "env" || source === "cli";
21
+ }
22
+ /** The `command`/`args` for the entry written into a JSON-style client config (`npx obyte-mcp ...`). */
23
+ export function serverEntry(config) {
24
+ return { command: "npx", args: commandArgs(config) };
25
+ }
26
+ /** The client CLI command that registers the server (for clients that expose a CLI). */
27
+ export function installInvocation(client, config, serverName) {
28
+ const args = commandArgs(config);
29
+ if (client === "claude-code") {
30
+ return { command: "claude", args: ["mcp", "add", "--transport", "stdio", serverName, "--", "npx", ...args] };
31
+ }
32
+ if (client === "codex") {
33
+ return { command: "codex", args: ["mcp", "add", serverName, "--", "npx", ...args] };
34
+ }
35
+ if (client === "vscode") {
36
+ return { command: "code", args: ["--add-mcp", JSON.stringify({ name: serverName, command: "npx", args })] };
37
+ }
38
+ return undefined; // claude-desktop has no CLI; it is configured by writing its JSON file
39
+ }
40
+ export function configSnippet(client, config, serverName = DEFAULT_SERVER_NAME) {
2
41
  if (client === "claude-code")
3
- return claudeCodeCommand(config);
42
+ return claudeCodeSnippet(config, serverName);
4
43
  if (client === "claude-desktop")
5
- return claudeDesktopJson(config);
6
- return codexJson(config);
44
+ return claudeDesktopSnippet(config, serverName);
45
+ if (client === "vscode")
46
+ return vscodeSnippet(config, serverName);
47
+ return codexSnippet(config, serverName);
7
48
  }
8
- export function allConfigSnippets(config) {
9
- return `# Codex
49
+ export function allConfigSnippets(config, serverName = DEFAULT_SERVER_NAME) {
50
+ return `## VS Code
51
+
52
+ ${vscodeSnippet(config, serverName)}
53
+
54
+ ## Codex CLI
10
55
 
11
- ${codexJson(config)}
56
+ ${codexSnippet(config, serverName)}
12
57
 
13
- # Claude Desktop
58
+ ## Claude Desktop
14
59
 
15
- ${claudeDesktopJson(config)}
60
+ ${claudeDesktopSnippet(config, serverName)}
16
61
 
17
- # Claude Code
62
+ ## Claude Code
18
63
 
19
- ${claudeCodeCommand(config)}
64
+ ${claudeCodeSnippet(config, serverName)}
20
65
  `;
21
66
  }
22
- export function cliOptionsFromNetwork(network) {
23
- return { network };
24
- }
25
- function commandArgs(config) {
26
- const args = ["-y", "obyte-mcp", "--network", config.network];
27
- if (config.source.hubAddress !== "default")
28
- args.push("--hub", config.hubAddress);
29
- if (config.tokenRegistryAddress && config.source.tokenRegistryAddress !== "default") {
30
- args.push("--token-registry", config.tokenRegistryAddress);
31
- }
32
- return args;
33
- }
34
- function codexJson(config) {
35
- return fencedJson({
36
- mcpServers: {
37
- obyte: {
38
- command: "npx",
39
- args: commandArgs(config)
40
- }
41
- }
42
- });
43
- }
44
- function claudeDesktopJson(config) {
45
- return fencedJson({
46
- mcpServers: {
47
- obyte: {
48
- command: "npx",
49
- args: commandArgs(config)
50
- }
67
+ export function vscodeSnippet(config, serverName = DEFAULT_SERVER_NAME) {
68
+ const entry = serverEntry(config);
69
+ const body = fencedJson({
70
+ servers: {
71
+ [serverName]: { type: "stdio", command: entry.command, args: entry.args }
51
72
  }
52
73
  });
74
+ return `Add to \`.vscode/mcp.json\` (workspace) or your user \`settings.json\` under \`"mcp"\`:
75
+
76
+ ${body}
77
+
78
+ Or register it from a terminal:
79
+
80
+ ${fencedShell(`code --add-mcp '${JSON.stringify({ name: serverName, command: entry.command, args: entry.args })}'`)}`;
53
81
  }
54
- function claudeCodeCommand(config) {
55
- return `\`\`\`bash
56
- claude mcp add --transport stdio obyte -- npx ${commandArgs(config).map(shellQuote).join(" ")}
82
+ export function codexSnippet(config, serverName = DEFAULT_SERVER_NAME) {
83
+ const entry = serverEntry(config);
84
+ const argsToml = entry.args.map((value) => JSON.stringify(value)).join(", ");
85
+ return `Add to \`~/.codex/config.toml\`:
86
+
87
+ \`\`\`toml
88
+ [mcp_servers.${serverName}]
89
+ command = ${JSON.stringify(entry.command)}
90
+ args = [${argsToml}]
57
91
  \`\`\`
58
92
 
59
- The \`--\` before \`npx\` is required. Without it, Claude Code can parse server flags as Claude flags.`;
93
+ Or register it from a terminal (newer Codex CLI):
94
+
95
+ ${fencedShell(`codex mcp add ${serverName} -- ${entry.command} ${entry.args.map(shellQuote).join(" ")}`)}`;
96
+ }
97
+ export function claudeDesktopSnippet(config, serverName = DEFAULT_SERVER_NAME) {
98
+ const entry = serverEntry(config);
99
+ return `Edit \`claude_desktop_config.json\` and restart Claude Desktop:
100
+
101
+ ${fencedJson({ mcpServers: { [serverName]: { command: entry.command, args: entry.args } } })}`;
102
+ }
103
+ export function claudeCodeSnippet(config, serverName = DEFAULT_SERVER_NAME) {
104
+ const entry = serverEntry(config);
105
+ return `${fencedShell(`claude mcp add --transport stdio ${serverName} -- ${entry.command} ${entry.args.map(shellQuote).join(" ")}`)}
106
+
107
+ The \`--\` before \`${entry.command}\` is required. Without it, Claude Code can parse server flags as Claude flags.`;
60
108
  }
61
109
  function fencedJson(value) {
62
- return `\`\`\`json
63
- ${JSON.stringify(value, null, 2)}
64
- \`\`\``;
110
+ return `\`\`\`json\n${JSON.stringify(value, null, 2)}\n\`\`\``;
111
+ }
112
+ function fencedShell(command) {
113
+ return `\`\`\`bash\n${command}\n\`\`\``;
65
114
  }
66
- function shellQuote(value) {
115
+ export function shellQuote(value) {
67
116
  if (/^[A-Za-z0-9._/:=-]+$/.test(value))
68
117
  return value;
69
118
  return `'${value.replace(/'/g, "'\\''")}'`;