obyte-mcp 0.1.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 (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +551 -0
  3. package/dist/cliArgs.d.ts +15 -0
  4. package/dist/cliArgs.js +97 -0
  5. package/dist/cliArgs.js.map +1 -0
  6. package/dist/config.d.ts +4 -0
  7. package/dist/config.js +77 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/configSnippets.d.ts +5 -0
  10. package/dist/configSnippets.js +71 -0
  11. package/dist/configSnippets.js.map +1 -0
  12. package/dist/constants.d.ts +16 -0
  13. package/dist/constants.js +17 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/diagnostics.d.ts +10 -0
  16. package/dist/diagnostics.js +31 -0
  17. package/dist/diagnostics.js.map +1 -0
  18. package/dist/doctor.d.ts +6 -0
  19. package/dist/doctor.js +45 -0
  20. package/dist/doctor.js.map +1 -0
  21. package/dist/envelope.d.ts +6 -0
  22. package/dist/envelope.js +182 -0
  23. package/dist/envelope.js.map +1 -0
  24. package/dist/errors.d.ts +7 -0
  25. package/dist/errors.js +22 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +59 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/jsonUtils.d.ts +6 -0
  31. package/dist/jsonUtils.js +52 -0
  32. package/dist/jsonUtils.js.map +1 -0
  33. package/dist/limiter.d.ts +9 -0
  34. package/dist/limiter.js +36 -0
  35. package/dist/limiter.js.map +1 -0
  36. package/dist/obyteClient.d.ts +41 -0
  37. package/dist/obyteClient.js +181 -0
  38. package/dist/obyteClient.js.map +1 -0
  39. package/dist/prompts.d.ts +2 -0
  40. package/dist/prompts.js +91 -0
  41. package/dist/prompts.js.map +1 -0
  42. package/dist/resources.d.ts +3 -0
  43. package/dist/resources.js +100 -0
  44. package/dist/resources.js.map +1 -0
  45. package/dist/schemas.d.ts +113 -0
  46. package/dist/schemas.js +93 -0
  47. package/dist/schemas.js.map +1 -0
  48. package/dist/secretGuard.d.ts +1 -0
  49. package/dist/secretGuard.js +41 -0
  50. package/dist/secretGuard.js.map +1 -0
  51. package/dist/server.d.ts +2 -0
  52. package/dist/server.js +41 -0
  53. package/dist/server.js.map +1 -0
  54. package/dist/setup.d.ts +8 -0
  55. package/dist/setup.js +47 -0
  56. package/dist/setup.js.map +1 -0
  57. package/dist/symbols.d.ts +12 -0
  58. package/dist/symbols.js +93 -0
  59. package/dist/symbols.js.map +1 -0
  60. package/dist/toolResult.d.ts +6 -0
  61. package/dist/toolResult.js +6 -0
  62. package/dist/toolResult.js.map +1 -0
  63. package/dist/tools.d.ts +4 -0
  64. package/dist/tools.js +294 -0
  65. package/dist/tools.js.map +1 -0
  66. package/dist/types.d.ts +65 -0
  67. package/dist/types.js +2 -0
  68. package/dist/types.js.map +1 -0
  69. package/package.json +44 -0
@@ -0,0 +1,113 @@
1
+ import { z } from "zod/v4";
2
+ export declare const stringValue: z.ZodString;
3
+ export declare const address: z.ZodString;
4
+ export declare const unit: z.ZodString;
5
+ export declare const asset: z.ZodString;
6
+ export declare const symbol: z.ZodString;
7
+ export declare const varPrefix: z.ZodString;
8
+ export declare const optionalRegistry: z.ZodOptional<z.ZodString>;
9
+ export declare const emptySchema: z.ZodObject<{}, z.core.$strict>;
10
+ export declare const networkInfoSchema: z.ZodObject<{}, z.core.$strict>;
11
+ export declare const getWitnessesSchema: z.ZodObject<{
12
+ update: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
13
+ }, z.core.$strict>;
14
+ export declare const getJointSchema: z.ZodObject<{
15
+ unit: z.ZodString;
16
+ }, z.core.$strict>;
17
+ export declare const addressesSchema: z.ZodObject<{
18
+ addresses: z.ZodArray<z.ZodString>;
19
+ }, z.core.$strict>;
20
+ export declare const getDefinitionSchema: z.ZodObject<{
21
+ address: z.ZodString;
22
+ }, z.core.$strict>;
23
+ export declare const getDataFeedSchema: z.ZodObject<{
24
+ oracles: z.ZodArray<z.ZodString>;
25
+ feed_name: z.ZodString;
26
+ ifnone: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>;
27
+ }, z.core.$strict>;
28
+ export declare const getHistorySchema: z.ZodObject<{
29
+ addresses: z.ZodArray<z.ZodString>;
30
+ witnesses: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
+ update_witnesses: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
32
+ }, z.core.$strict>;
33
+ export declare const getAttestationSchema: z.ZodObject<{
34
+ attestor_address: z.ZodString;
35
+ field: z.ZodString;
36
+ value: z.ZodString;
37
+ }, z.core.$strict>;
38
+ export declare const getAttestationsSchema: z.ZodObject<{
39
+ address: z.ZodString;
40
+ }, z.core.$strict>;
41
+ export declare const triggerUnitSchema: z.ZodObject<{
42
+ trigger_unit: z.ZodString;
43
+ }, z.core.$strict>;
44
+ export declare const aaOrAasSchema: z.ZodObject<{
45
+ aa: z.ZodOptional<z.ZodString>;
46
+ aas: z.ZodOptional<z.ZodArray<z.ZodString>>;
47
+ }, z.core.$strict>;
48
+ export declare const baseAaOrAasSchema: z.ZodObject<{
49
+ base_aa: z.ZodOptional<z.ZodString>;
50
+ base_aas: z.ZodOptional<z.ZodArray<z.ZodString>>;
51
+ }, z.core.$strict>;
52
+ export declare const dryRunAaSchema: z.ZodObject<{
53
+ address: z.ZodString;
54
+ trigger: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
55
+ }, z.core.$strict>;
56
+ export declare const executeGetterSchema: z.ZodObject<{
57
+ address: z.ZodString;
58
+ getter: z.ZodString;
59
+ args: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
60
+ }, z.core.$strict>;
61
+ export declare const aaAddressSchema: z.ZodObject<{
62
+ address: z.ZodString;
63
+ }, z.core.$strict>;
64
+ export declare const getAaStateVarsSchema: z.ZodObject<{
65
+ address: z.ZodString;
66
+ var_prefix: z.ZodOptional<z.ZodString>;
67
+ var_prefix_from: z.ZodOptional<z.ZodString>;
68
+ var_prefix_to: z.ZodOptional<z.ZodString>;
69
+ }, z.core.$strict>;
70
+ export declare const registrySchema: z.ZodObject<{
71
+ token_registry_address: z.ZodOptional<z.ZodString>;
72
+ }, z.core.$strict>;
73
+ export declare const symbolByAssetSchema: z.ZodObject<{
74
+ asset: z.ZodUnion<readonly [z.ZodString, z.ZodNull]>;
75
+ token_registry_address: z.ZodOptional<z.ZodString>;
76
+ }, z.core.$strict>;
77
+ export declare const assetBySymbolSchema: z.ZodObject<{
78
+ symbol: z.ZodString;
79
+ token_registry_address: z.ZodOptional<z.ZodString>;
80
+ }, z.core.$strict>;
81
+ export declare const decimalsSchema: z.ZodObject<{
82
+ symbol_or_asset: z.ZodString;
83
+ token_registry_address: z.ZodOptional<z.ZodString>;
84
+ }, z.core.$strict>;
85
+ export declare const resolveAssetSchema: z.ZodObject<{
86
+ value: z.ZodString;
87
+ token_registry_address: z.ZodOptional<z.ZodString>;
88
+ }, z.core.$strict>;
89
+ export declare const analyzeAddressSchema: z.ZodObject<{
90
+ address: z.ZodString;
91
+ include_history: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
92
+ include_definition: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
93
+ include_attestations: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
94
+ }, z.core.$strict>;
95
+ export declare const analyzeUnitSchema: z.ZodObject<{
96
+ unit: z.ZodString;
97
+ include_aa_response_chain: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
98
+ }, z.core.$strict>;
99
+ export declare const analyzeAaSchema: z.ZodObject<{
100
+ address: z.ZodString;
101
+ state_var_prefix: z.ZodOptional<z.ZodString>;
102
+ include_balances: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
103
+ include_responses: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
104
+ }, z.core.$strict>;
105
+ export declare const prepareAaDryRunSchema: z.ZodObject<{
106
+ address: z.ZodString;
107
+ trigger: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
108
+ }, z.core.$strict>;
109
+ export declare const portfolioSummarySchema: z.ZodObject<{
110
+ addresses: z.ZodArray<z.ZodString>;
111
+ token_registry_address: z.ZodOptional<z.ZodString>;
112
+ resolve_symbols: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
113
+ }, z.core.$strict>;
@@ -0,0 +1,93 @@
1
+ import { z } from "zod/v4";
2
+ import { MAX_JSON_PAYLOAD_BYTES } from "./constants.js";
3
+ import { jsonByteLength } from "./jsonUtils.js";
4
+ const jsonValue = z.lazy(() => z.union([z.string(), z.number(), z.boolean(), z.null(), z.array(jsonValue), z.record(z.string(), jsonValue)]));
5
+ const boundedJson = jsonValue.refine((value) => jsonByteLength(value) <= MAX_JSON_PAYLOAD_BYTES, {
6
+ message: `JSON payload must not exceed ${MAX_JSON_PAYLOAD_BYTES} bytes`
7
+ });
8
+ export const stringValue = z.string().min(1).max(4096);
9
+ export const address = z.string().min(1).max(128);
10
+ export const unit = z.string().min(1).max(128);
11
+ export const asset = z.string().min(1).max(128);
12
+ export const symbol = z.string().min(1).max(64);
13
+ export const varPrefix = z.string().min(1).max(128);
14
+ export const optionalRegistry = z.string().min(1).max(128).optional();
15
+ export const emptySchema = z.object({}).strict();
16
+ export const networkInfoSchema = emptySchema;
17
+ export const getWitnessesSchema = z.object({ update: z.boolean().optional().default(false) }).strict();
18
+ export const getJointSchema = z.object({ unit }).strict();
19
+ export const addressesSchema = z.object({ addresses: z.array(address).min(1).max(20) }).strict();
20
+ export const getDefinitionSchema = z.object({ address }).strict();
21
+ export const getDataFeedSchema = z
22
+ .object({
23
+ oracles: z.array(address).min(1).max(10),
24
+ feed_name: stringValue,
25
+ ifnone: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional()
26
+ })
27
+ .strict();
28
+ export const getHistorySchema = z
29
+ .object({
30
+ addresses: z.array(address).min(1).max(20),
31
+ witnesses: z.array(address).min(1).max(20).optional(),
32
+ update_witnesses: z.boolean().optional().default(false)
33
+ })
34
+ .strict();
35
+ export const getAttestationSchema = z.object({ attestor_address: address, field: stringValue, value: stringValue }).strict();
36
+ export const getAttestationsSchema = z.object({ address }).strict();
37
+ export const triggerUnitSchema = z.object({ trigger_unit: unit }).strict();
38
+ export const aaOrAasSchema = z
39
+ .object({
40
+ aa: address.optional(),
41
+ aas: z.array(address).min(1).max(20).optional()
42
+ })
43
+ .strict()
44
+ .refine((value) => Boolean(value.aa) !== Boolean(value.aas), { message: "Provide exactly one of aa or aas" });
45
+ export const baseAaOrAasSchema = z
46
+ .object({
47
+ base_aa: address.optional(),
48
+ base_aas: z.array(address).min(1).max(20).optional()
49
+ })
50
+ .strict()
51
+ .refine((value) => Boolean(value.base_aa) !== Boolean(value.base_aas), { message: "Provide exactly one of base_aa or base_aas" });
52
+ export const dryRunAaSchema = z.object({ address, trigger: boundedJson }).strict();
53
+ export const executeGetterSchema = z.object({ address, getter: stringValue, args: boundedJson.optional() }).strict();
54
+ export const aaAddressSchema = z.object({ address }).strict();
55
+ export const getAaStateVarsSchema = z
56
+ .object({
57
+ address,
58
+ var_prefix: varPrefix.optional(),
59
+ var_prefix_from: varPrefix.optional(),
60
+ var_prefix_to: varPrefix.optional()
61
+ })
62
+ .strict();
63
+ export const registrySchema = z.object({ token_registry_address: optionalRegistry }).strict();
64
+ export const symbolByAssetSchema = z.object({ asset: z.union([asset, z.null()]), token_registry_address: optionalRegistry }).strict();
65
+ export const assetBySymbolSchema = z.object({ symbol, token_registry_address: optionalRegistry }).strict();
66
+ export const decimalsSchema = z.object({ symbol_or_asset: stringValue, token_registry_address: optionalRegistry }).strict();
67
+ export const resolveAssetSchema = z.object({ value: stringValue, token_registry_address: optionalRegistry }).strict();
68
+ export const analyzeAddressSchema = z
69
+ .object({
70
+ address,
71
+ include_history: z.boolean().optional().default(false),
72
+ include_definition: z.boolean().optional().default(true),
73
+ include_attestations: z.boolean().optional().default(true)
74
+ })
75
+ .strict();
76
+ export const analyzeUnitSchema = z.object({ unit, include_aa_response_chain: z.boolean().optional().default(true) }).strict();
77
+ export const analyzeAaSchema = z
78
+ .object({
79
+ address,
80
+ state_var_prefix: varPrefix.optional(),
81
+ include_balances: z.boolean().optional().default(true),
82
+ include_responses: z.boolean().optional().default(false)
83
+ })
84
+ .strict();
85
+ export const prepareAaDryRunSchema = dryRunAaSchema;
86
+ export const portfolioSummarySchema = z
87
+ .object({
88
+ addresses: z.array(address).min(1).max(20),
89
+ token_registry_address: optionalRegistry,
90
+ resolve_symbols: z.boolean().optional().default(true)
91
+ })
92
+ .strict();
93
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function assertNoSecrets(value: unknown): void;
@@ -0,0 +1,41 @@
1
+ import { ObyteMcpError } from "./errors.js";
2
+ const SECRET_KEY_PATTERN = /(^|[_-])(private[_-]?key|privkey|seed|mnemonic|xprv|passphrase|secret)([_-]|$)/i;
3
+ const HEX_PRIVATE_KEY_PATTERN = /\b(?:0x)?[a-f0-9]{64}\b/i;
4
+ const XPRV_PATTERN = /\b(?:xprv|tprv)[1-9A-HJ-NP-Za-km-z]{20,}\b/;
5
+ const MNEMONIC_LIKE_PATTERN = /\b(?:[a-z]{3,12}\s+){11,23}[a-z]{3,12}\b/i;
6
+ export function assertNoSecrets(value) {
7
+ const reason = findSecretLikeInput(value, []);
8
+ if (reason) {
9
+ throw new ObyteMcpError("SECRET_INPUT_REJECTED", "Secret-like input was rejected. This MCP server never needs private keys, seeds, mnemonics, xprv values, or passphrases.", reason);
10
+ }
11
+ }
12
+ function findSecretLikeInput(value, path) {
13
+ if (typeof value === "string") {
14
+ if (XPRV_PATTERN.test(value))
15
+ return { path, reason: "xprv-like string" };
16
+ if (HEX_PRIVATE_KEY_PATTERN.test(value))
17
+ return { path, reason: "64-character hex private-key-like string" };
18
+ if (MNEMONIC_LIKE_PATTERN.test(value))
19
+ return { path, reason: "mnemonic-like phrase" };
20
+ return undefined;
21
+ }
22
+ if (value === null || typeof value !== "object")
23
+ return undefined;
24
+ if (Array.isArray(value)) {
25
+ for (let index = 0; index < value.length; index += 1) {
26
+ const found = findSecretLikeInput(value[index], [...path, String(index)]);
27
+ if (found)
28
+ return found;
29
+ }
30
+ return undefined;
31
+ }
32
+ for (const [key, child] of Object.entries(value)) {
33
+ if (SECRET_KEY_PATTERN.test(key))
34
+ return { path: [...path, key], reason: "secret-like field name" };
35
+ const found = findSecretLikeInput(child, [...path, key]);
36
+ if (found)
37
+ return found;
38
+ }
39
+ return undefined;
40
+ }
41
+ //# sourceMappingURL=secretGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretGuard.js","sourceRoot":"","sources":["../src/secretGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,kBAAkB,GAAG,iFAAiF,CAAC;AAC7G,MAAM,uBAAuB,GAAG,0BAA0B,CAAC;AAC3D,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAClE,MAAM,qBAAqB,GAAG,2CAA2C,CAAC;AAE1E,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,aAAa,CACrB,uBAAuB,EACvB,0HAA0H,EAC1H,MAAM,CACP,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,IAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QAC1E,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;QAC7G,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QACvF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAElE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC5E,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;QACpG,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { RuntimeConfig } from "./types.js";
2
+ export declare function runServer(config: RuntimeConfig): Promise<void>;
package/dist/server.js ADDED
@@ -0,0 +1,41 @@
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
+ import { serveStdio } from "@modelcontextprotocol/server/stdio";
3
+ import { PACKAGE_NAME, PACKAGE_VERSION } from "./constants.js";
4
+ import { writeDiagnostic } from "./diagnostics.js";
5
+ import { ObyteHttpClient } from "./obyteClient.js";
6
+ import { registerObytePrompts } from "./prompts.js";
7
+ import { registerObyteResources } from "./resources.js";
8
+ import { registerObyteTools } from "./tools.js";
9
+ export async function runServer(config) {
10
+ const handle = serveStdio(() => {
11
+ const server = new McpServer({
12
+ name: PACKAGE_NAME,
13
+ version: PACKAGE_VERSION
14
+ });
15
+ const client = new ObyteHttpClient(config);
16
+ registerObyteTools(server, client, config);
17
+ registerObyteResources(server, config);
18
+ registerObytePrompts(server);
19
+ return server;
20
+ }, {
21
+ onerror: (error) => {
22
+ writeDiagnostic({
23
+ level: "error",
24
+ event: "mcp_stdio_error",
25
+ message: error.message
26
+ });
27
+ }
28
+ });
29
+ const shutdown = async (signal) => {
30
+ writeDiagnostic({
31
+ level: "info",
32
+ event: "shutdown",
33
+ message: `Received ${signal}, closing MCP stdio server`
34
+ });
35
+ await handle.close();
36
+ process.exit(0);
37
+ };
38
+ process.once("SIGINT", () => void shutdown("SIGINT"));
39
+ process.once("SIGTERM", () => void shutdown("SIGTERM"));
40
+ }
41
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAqB;IACnD,MAAM,MAAM,GAAG,UAAU,CACvB,GAAG,EAAE;QACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3C,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC,EACD;QACE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,eAAe,CAAC;gBACd,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;KACF,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAsB,EAAiB,EAAE;QAC/D,eAAe,CAAC;YACd,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,YAAY,MAAM,4BAA4B;SACxD,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ClientName } from "./cliArgs.js";
2
+ import type { CliOptions } from "./types.js";
3
+ interface SetupOptions {
4
+ printOnly: boolean;
5
+ client?: ClientName;
6
+ }
7
+ export declare function runSetup(cliOptions: CliOptions, setup: SetupOptions): Promise<void>;
8
+ export {};
package/dist/setup.js ADDED
@@ -0,0 +1,47 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { stdin as input, stdout as output } from "node:process";
3
+ import { buildRuntimeConfig } from "./config.js";
4
+ import { allConfigSnippets, configSnippet } from "./configSnippets.js";
5
+ export async function runSetup(cliOptions, setup) {
6
+ const options = setup.printOnly ? cliOptions : await interactiveOptions(cliOptions);
7
+ const config = buildRuntimeConfig(process.env, options);
8
+ const body = setup.client ? configSnippet(setup.client, config) : allConfigSnippets(config);
9
+ process.stdout.write(`# obyte-mcp setup
10
+
11
+ Network: ${config.network}
12
+ Hub: ${config.hubAddress}
13
+ Token registry: ${config.tokenRegistryAddress ?? "(not configured)"}
14
+
15
+ ${body}
16
+ `);
17
+ }
18
+ async function interactiveOptions(cliOptions) {
19
+ const rl = createInterface({ input, output });
20
+ try {
21
+ const network = cliOptions.network ?? (await askNetwork(rl));
22
+ const hubAddress = cliOptions.hubAddress ?? (await askOptional(rl, "Custom hub URL (empty for default): "));
23
+ const tokenRegistryAddress = cliOptions.tokenRegistryAddress ?? (await askOptional(rl, "Token registry address (empty for network default or unset): "));
24
+ const result = { ...cliOptions, network };
25
+ if (hubAddress !== undefined)
26
+ result.hubAddress = hubAddress;
27
+ if (tokenRegistryAddress !== undefined)
28
+ result.tokenRegistryAddress = tokenRegistryAddress;
29
+ return result;
30
+ }
31
+ finally {
32
+ rl.close();
33
+ }
34
+ }
35
+ async function askNetwork(rl) {
36
+ while (true) {
37
+ const answer = (await rl.question("Network (mainnet/testnet) [mainnet]: ")).trim() || "mainnet";
38
+ if (answer === "mainnet" || answer === "testnet")
39
+ return answer;
40
+ process.stdout.write("Please enter mainnet or testnet.\n");
41
+ }
42
+ }
43
+ async function askOptional(rl, question) {
44
+ const answer = (await rl.question(question)).trim();
45
+ return answer || undefined;
46
+ }
47
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASvE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAAsB,EAAE,KAAmB;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;WAEZ,MAAM,CAAC,OAAO;OAClB,MAAM,CAAC,UAAU;kBACN,MAAM,CAAC,oBAAoB,IAAI,kBAAkB;;EAEjE,IAAI;CACL,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,UAAsB;IACtD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAC,CAAC;QAC5G,MAAM,oBAAoB,GACxB,UAAU,CAAC,oBAAoB,IAAI,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,+DAA+D,CAAC,CAAC,CAAC;QAC9H,MAAM,MAAM,GAAe,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC;QACtD,IAAI,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7D,IAAI,oBAAoB,KAAK,SAAS;YAAE,MAAM,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QAC3F,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAsC;IAC9D,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QAChG,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAsC,EAAE,QAAgB;IACjF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface AaStateVarsReader {
2
+ getAaStateVars(address: string, varPrefix?: string, from?: string, to?: string): Promise<unknown>;
3
+ }
4
+ export interface SymbolOptions {
5
+ configuredRegistryAddress?: string | undefined;
6
+ tokenRegistryAddress?: string | undefined;
7
+ }
8
+ export declare function getOfficialTokenRegistryAddress(configuredRegistryAddress?: string): string;
9
+ export declare function getSymbolByAsset(client: AaStateVarsReader, asset: string | null, options?: SymbolOptions): Promise<string | null>;
10
+ export declare function getAssetBySymbol(client: AaStateVarsReader, symbol: string, options?: SymbolOptions): Promise<string | null>;
11
+ export declare function getDecimalsBySymbolOrAsset(client: AaStateVarsReader, symbolOrAsset: string, options?: SymbolOptions): Promise<number>;
12
+ export declare function resolveAsset(client: AaStateVarsReader, value: string, options?: SymbolOptions): Promise<unknown>;
@@ -0,0 +1,93 @@
1
+ import { MAINNET_TOKEN_REGISTRY_ADDRESS } from "./constants.js";
2
+ import { ObyteMcpError } from "./errors.js";
3
+ export function getOfficialTokenRegistryAddress(configuredRegistryAddress) {
4
+ return configuredRegistryAddress ?? MAINNET_TOKEN_REGISTRY_ADDRESS;
5
+ }
6
+ export async function getSymbolByAsset(client, asset, options = {}) {
7
+ if (asset === null || asset === "base")
8
+ return "GBYTE";
9
+ if (typeof asset !== "string")
10
+ return null;
11
+ const tokenRegistryAddress = requireRegistry(options);
12
+ const stateVars = await client.getAaStateVars(tokenRegistryAddress, `a2s_${asset}`);
13
+ const resolved = isRecord(stateVars) ? stateVars[`a2s_${asset}`] : undefined;
14
+ if (typeof resolved === "string") {
15
+ return resolved;
16
+ }
17
+ return asset.replace(/[+=]/g, "").substring(0, 6);
18
+ }
19
+ export async function getAssetBySymbol(client, symbol, options = {}) {
20
+ if (symbol === "GBYTE" || symbol === "MBYTE" || symbol === "KBYTE" || symbol === "BYTE")
21
+ return "base";
22
+ const tokenRegistryAddress = requireRegistry(options);
23
+ const stateVars = await client.getAaStateVars(tokenRegistryAddress, `s2a_${symbol}`);
24
+ const resolved = isRecord(stateVars) ? stateVars[`s2a_${symbol}`] : undefined;
25
+ return typeof resolved === "string" ? resolved : null;
26
+ }
27
+ export async function getDecimalsBySymbolOrAsset(client, symbolOrAsset, options = {}) {
28
+ const tokenRegistryAddress = requireRegistry(options);
29
+ if (!symbolOrAsset)
30
+ throw new ObyteMcpError("VALIDATION_ERROR", "symbolOrAsset is undefined");
31
+ if (symbolOrAsset === "base" || symbolOrAsset === "GBYTE")
32
+ return 9;
33
+ if (symbolOrAsset === "MBYTE")
34
+ return 6;
35
+ if (symbolOrAsset === "KBYTE")
36
+ return 3;
37
+ if (symbolOrAsset === "BYTE")
38
+ return 0;
39
+ let asset;
40
+ if (symbolOrAsset.length === 44) {
41
+ asset = symbolOrAsset;
42
+ }
43
+ else if (symbolOrAsset === symbolOrAsset.toUpperCase()) {
44
+ const stateVars = await client.getAaStateVars(tokenRegistryAddress, `s2a_${symbolOrAsset}`);
45
+ const resolved = isRecord(stateVars) ? stateVars[`s2a_${symbolOrAsset}`] : undefined;
46
+ if (typeof resolved !== "string")
47
+ throw new ObyteMcpError("HUB_ERROR", `no such symbol ${symbolOrAsset}`);
48
+ asset = resolved;
49
+ }
50
+ else {
51
+ throw new ObyteMcpError("VALIDATION_ERROR", "not valid symbolOrAsset");
52
+ }
53
+ const descVars = await client.getAaStateVars(tokenRegistryAddress, `current_desc_${asset}`);
54
+ const descHash = isRecord(descVars) ? descVars[`current_desc_${asset}`] : undefined;
55
+ if (typeof descHash !== "string")
56
+ throw new ObyteMcpError("HUB_ERROR", `no decimals for ${symbolOrAsset}`);
57
+ const decimalsVars = await client.getAaStateVars(tokenRegistryAddress, `decimals_${descHash}`);
58
+ const decimals = isRecord(decimalsVars) ? decimalsVars[`decimals_${descHash}`] : undefined;
59
+ if (typeof decimals !== "number")
60
+ throw new ObyteMcpError("HUB_ERROR", `no decimals for ${symbolOrAsset}`);
61
+ return decimals;
62
+ }
63
+ export async function resolveAsset(client, value, options = {}) {
64
+ if (value === "base" || value === "GBYTE" || value === "MBYTE" || value === "KBYTE" || value === "BYTE") {
65
+ return {
66
+ input: value,
67
+ asset: "base",
68
+ symbol: value === "base" ? "GBYTE" : value,
69
+ decimals: value === "GBYTE" || value === "base" ? 9 : value === "MBYTE" ? 6 : value === "KBYTE" ? 3 : 0
70
+ };
71
+ }
72
+ if (value.length === 44) {
73
+ const [symbol, decimals] = await Promise.all([
74
+ getSymbolByAsset(client, value, options),
75
+ getDecimalsBySymbolOrAsset(client, value, options).catch(() => null)
76
+ ]);
77
+ return { input: value, asset: value, symbol, decimals };
78
+ }
79
+ const asset = await getAssetBySymbol(client, value, options);
80
+ const decimals = await getDecimalsBySymbolOrAsset(client, value, options).catch(() => null);
81
+ return { input: value, asset, symbol: value, decimals };
82
+ }
83
+ function requireRegistry(options) {
84
+ const tokenRegistryAddress = options.tokenRegistryAddress ?? options.configuredRegistryAddress;
85
+ if (!tokenRegistryAddress) {
86
+ throw new ObyteMcpError("CONFIG_ERROR", "Token registry address is required for symbol lookup on this network. Set OBYTE_TOKEN_REGISTRY_ADDRESS, pass --token-registry, or provide token_registry_address.");
87
+ }
88
+ return tokenRegistryAddress;
89
+ }
90
+ function isRecord(value) {
91
+ return value !== null && typeof value === "object" && !Array.isArray(value);
92
+ }
93
+ //# sourceMappingURL=symbols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAW5C,MAAM,UAAU,+BAA+B,CAAC,yBAAkC;IAChF,OAAO,yBAAyB,IAAI,8BAA8B,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAyB,EAAE,KAAoB,EAAE,UAAyB,EAAE;IACjH,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,oBAAoB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAyB,EAAE,MAAc,EAAE,UAAyB,EAAE;IAC3G,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvG,MAAM,oBAAoB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,OAAO,MAAM,EAAE,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAAyB,EAAE,aAAqB,EAAE,UAAyB,EAAE;IAC5H,MAAM,oBAAoB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;IAC9F,IAAI,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC;IACpE,IAAI,aAAa,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC;IACxC,IAAI,aAAa,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC;IACxC,IAAI,aAAa,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAEvC,IAAI,KAAa,CAAC;IAClB,IAAI,aAAa,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAChC,KAAK,GAAG,aAAa,CAAC;IACxB,CAAC;SAAM,IAAI,aAAa,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,OAAO,aAAa,EAAE,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,kBAAkB,aAAa,EAAE,CAAC,CAAC;QAC1G,KAAK,GAAG,QAAQ,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,gBAAgB,KAAK,EAAE,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,mBAAmB,aAAa,EAAE,CAAC,CAAC;IAE3G,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,YAAY,QAAQ,EAAE,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,aAAa,CAAC,WAAW,EAAE,mBAAmB,aAAa,EAAE,CAAC,CAAC;IAC3G,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAyB,EAAE,KAAa,EAAE,UAAyB,EAAE;IACtG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACxG,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC1C,QAAQ,EAAE,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxG,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3C,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;YACxC,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SACrE,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5F,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,OAAsB;IAC7C,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAC/F,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,MAAM,IAAI,aAAa,CACrB,cAAc,EACd,mKAAmK,CACpK,CAAC;IACJ,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function textResult(text: string): {
2
+ content: Array<{
3
+ type: "text";
4
+ text: string;
5
+ }>;
6
+ };
@@ -0,0 +1,6 @@
1
+ export function textResult(text) {
2
+ return {
3
+ content: [{ type: "text", text }]
4
+ };
5
+ }
6
+ //# sourceMappingURL=toolResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolResult.js","sourceRoot":"","sources":["../src/toolResult.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/server";
2
+ import { ObyteHttpClient } from "./obyteClient.js";
3
+ import type { RuntimeConfig } from "./types.js";
4
+ export declare function registerObyteTools(server: McpServer, client: ObyteHttpClient, config: RuntimeConfig): void;