@missionsquad/mcp-server-tron 1.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 (193) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +537 -0
  3. package/bin/cli.js +51 -0
  4. package/build/core/chains.d.ts +17 -0
  5. package/build/core/chains.js +87 -0
  6. package/build/core/chains.js.map +1 -0
  7. package/build/core/prompts.d.ts +19 -0
  8. package/build/core/prompts.js +485 -0
  9. package/build/core/prompts.js.map +1 -0
  10. package/build/core/resources.d.ts +14 -0
  11. package/build/core/resources.js +42 -0
  12. package/build/core/resources.js.map +1 -0
  13. package/build/core/services/account-data.d.ts +144 -0
  14. package/build/core/services/account-data.js +228 -0
  15. package/build/core/services/account-data.js.map +1 -0
  16. package/build/core/services/account-resource.d.ts +56 -0
  17. package/build/core/services/account-resource.js +133 -0
  18. package/build/core/services/account-resource.js.map +1 -0
  19. package/build/core/services/account.d.ts +141 -0
  20. package/build/core/services/account.js +191 -0
  21. package/build/core/services/account.js.map +1 -0
  22. package/build/core/services/address.d.ts +8 -0
  23. package/build/core/services/address.js +52 -0
  24. package/build/core/services/address.js.map +1 -0
  25. package/build/core/services/agent-wallet.d.ts +62 -0
  26. package/build/core/services/agent-wallet.js +234 -0
  27. package/build/core/services/agent-wallet.js.map +1 -0
  28. package/build/core/services/balance.d.ts +26 -0
  29. package/build/core/services/balance.js +60 -0
  30. package/build/core/services/balance.js.map +1 -0
  31. package/build/core/services/blocks.d.ts +25 -0
  32. package/build/core/services/blocks.js +65 -0
  33. package/build/core/services/blocks.js.map +1 -0
  34. package/build/core/services/broadcast.d.ts +13 -0
  35. package/build/core/services/broadcast.js +24 -0
  36. package/build/core/services/broadcast.js.map +1 -0
  37. package/build/core/services/clients.d.ts +5 -0
  38. package/build/core/services/clients.js +29 -0
  39. package/build/core/services/clients.js.map +1 -0
  40. package/build/core/services/contract-data.d.ts +31 -0
  41. package/build/core/services/contract-data.js +54 -0
  42. package/build/core/services/contract-data.js.map +1 -0
  43. package/build/core/services/contracts.d.ts +108 -0
  44. package/build/core/services/contracts.js +482 -0
  45. package/build/core/services/contracts.js.map +1 -0
  46. package/build/core/services/events.d.ts +56 -0
  47. package/build/core/services/events.js +99 -0
  48. package/build/core/services/events.js.map +1 -0
  49. package/build/core/services/governance.d.ts +78 -0
  50. package/build/core/services/governance.js +207 -0
  51. package/build/core/services/governance.js.map +1 -0
  52. package/build/core/services/index.d.ts +28 -0
  53. package/build/core/services/index.js +81 -0
  54. package/build/core/services/index.js.map +1 -0
  55. package/build/core/services/mempool.d.ts +12 -0
  56. package/build/core/services/mempool.js +32 -0
  57. package/build/core/services/mempool.js.map +1 -0
  58. package/build/core/services/multicall-abi.d.ts +55 -0
  59. package/build/core/services/multicall-abi.js +61 -0
  60. package/build/core/services/multicall-abi.js.map +1 -0
  61. package/build/core/services/nodes.d.ts +8 -0
  62. package/build/core/services/nodes.js +18 -0
  63. package/build/core/services/nodes.js.map +1 -0
  64. package/build/core/services/proposals.d.ts +33 -0
  65. package/build/core/services/proposals.js +95 -0
  66. package/build/core/services/proposals.js.map +1 -0
  67. package/build/core/services/query.d.ts +34 -0
  68. package/build/core/services/query.js +60 -0
  69. package/build/core/services/query.js.map +1 -0
  70. package/build/core/services/staking.d.ts +40 -0
  71. package/build/core/services/staking.js +113 -0
  72. package/build/core/services/staking.js.map +1 -0
  73. package/build/core/services/tokens.d.ts +22 -0
  74. package/build/core/services/tokens.js +68 -0
  75. package/build/core/services/tokens.js.map +1 -0
  76. package/build/core/services/transactions.d.ts +16 -0
  77. package/build/core/services/transactions.js +42 -0
  78. package/build/core/services/transactions.js.map +1 -0
  79. package/build/core/services/transfer.d.ts +24 -0
  80. package/build/core/services/transfer.js +84 -0
  81. package/build/core/services/transfer.js.map +1 -0
  82. package/build/core/services/trongrid-client.d.ts +14 -0
  83. package/build/core/services/trongrid-client.js +19 -0
  84. package/build/core/services/trongrid-client.js.map +1 -0
  85. package/build/core/services/utils.d.ts +13 -0
  86. package/build/core/services/utils.js +39 -0
  87. package/build/core/services/utils.js.map +1 -0
  88. package/build/core/services/wallet.d.ts +13 -0
  89. package/build/core/services/wallet.js +18 -0
  90. package/build/core/services/wallet.js.map +1 -0
  91. package/build/core/tools/account-data.d.ts +2 -0
  92. package/build/core/tools/account-data.js +253 -0
  93. package/build/core/tools/account-data.js.map +1 -0
  94. package/build/core/tools/account-resource.d.ts +2 -0
  95. package/build/core/tools/account-resource.js +269 -0
  96. package/build/core/tools/account-resource.js.map +1 -0
  97. package/build/core/tools/account.d.ts +2 -0
  98. package/build/core/tools/account.js +451 -0
  99. package/build/core/tools/account.js.map +1 -0
  100. package/build/core/tools/address.d.ts +2 -0
  101. package/build/core/tools/address.js +45 -0
  102. package/build/core/tools/address.js.map +1 -0
  103. package/build/core/tools/balance.d.ts +2 -0
  104. package/build/core/tools/balance.js +94 -0
  105. package/build/core/tools/balance.js.map +1 -0
  106. package/build/core/tools/block.d.ts +2 -0
  107. package/build/core/tools/block.js +74 -0
  108. package/build/core/tools/block.js.map +1 -0
  109. package/build/core/tools/broadcast.d.ts +2 -0
  110. package/build/core/tools/broadcast.js +102 -0
  111. package/build/core/tools/broadcast.js.map +1 -0
  112. package/build/core/tools/contract-data.d.ts +2 -0
  113. package/build/core/tools/contract-data.js +159 -0
  114. package/build/core/tools/contract-data.js.map +1 -0
  115. package/build/core/tools/contract.d.ts +2 -0
  116. package/build/core/tools/contract.js +600 -0
  117. package/build/core/tools/contract.js.map +1 -0
  118. package/build/core/tools/event.d.ts +2 -0
  119. package/build/core/tools/event.js +159 -0
  120. package/build/core/tools/event.js.map +1 -0
  121. package/build/core/tools/governance.d.ts +6 -0
  122. package/build/core/tools/governance.js +424 -0
  123. package/build/core/tools/governance.js.map +1 -0
  124. package/build/core/tools/index.d.ts +15 -0
  125. package/build/core/tools/index.js +93 -0
  126. package/build/core/tools/index.js.map +1 -0
  127. package/build/core/tools/mempool.d.ts +2 -0
  128. package/build/core/tools/mempool.js +116 -0
  129. package/build/core/tools/mempool.js.map +1 -0
  130. package/build/core/tools/network.d.ts +2 -0
  131. package/build/core/tools/network.js +114 -0
  132. package/build/core/tools/network.js.map +1 -0
  133. package/build/core/tools/node.d.ts +2 -0
  134. package/build/core/tools/node.js +75 -0
  135. package/build/core/tools/node.js.map +1 -0
  136. package/build/core/tools/proposals.d.ts +6 -0
  137. package/build/core/tools/proposals.js +219 -0
  138. package/build/core/tools/proposals.js.map +1 -0
  139. package/build/core/tools/query.d.ts +2 -0
  140. package/build/core/tools/query.js +399 -0
  141. package/build/core/tools/query.js.map +1 -0
  142. package/build/core/tools/staking.d.ts +2 -0
  143. package/build/core/tools/staking.js +281 -0
  144. package/build/core/tools/staking.js.map +1 -0
  145. package/build/core/tools/transaction.d.ts +2 -0
  146. package/build/core/tools/transaction.js +65 -0
  147. package/build/core/tools/transaction.js.map +1 -0
  148. package/build/core/tools/transfer.d.ts +2 -0
  149. package/build/core/tools/transfer.js +101 -0
  150. package/build/core/tools/transfer.js.map +1 -0
  151. package/build/core/tools/types.d.ts +13 -0
  152. package/build/core/tools/types.js +2 -0
  153. package/build/core/tools/types.js.map +1 -0
  154. package/build/core/tools/wallet.d.ts +2 -0
  155. package/build/core/tools/wallet.js +172 -0
  156. package/build/core/tools/wallet.js.map +1 -0
  157. package/build/index.d.ts +1 -0
  158. package/build/index.js +21 -0
  159. package/build/index.js.map +1 -0
  160. package/build/middleware/auth.d.ts +16 -0
  161. package/build/middleware/auth.js +44 -0
  162. package/build/middleware/auth.js.map +1 -0
  163. package/build/oauth/OAuthService.d.ts +100 -0
  164. package/build/oauth/OAuthService.js +507 -0
  165. package/build/oauth/OAuthService.js.map +1 -0
  166. package/build/oauth/page.d.ts +1 -0
  167. package/build/oauth/page.js +255 -0
  168. package/build/oauth/page.js.map +1 -0
  169. package/build/oauth/types.d.ts +65 -0
  170. package/build/oauth/types.js +2 -0
  171. package/build/oauth/types.js.map +1 -0
  172. package/build/server/http-app.d.ts +9 -0
  173. package/build/server/http-app.js +128 -0
  174. package/build/server/http-app.js.map +1 -0
  175. package/build/server/http-server.d.ts +1 -0
  176. package/build/server/http-server.js +35 -0
  177. package/build/server/http-server.js.map +1 -0
  178. package/build/server/oauth-routes.d.ts +7 -0
  179. package/build/server/oauth-routes.js +157 -0
  180. package/build/server/oauth-routes.js.map +1 -0
  181. package/build/server/server.d.ts +9 -0
  182. package/build/server/server.js +54 -0
  183. package/build/server/server.js.map +1 -0
  184. package/build/tenant/TenantManager.d.ts +35 -0
  185. package/build/tenant/TenantManager.js +167 -0
  186. package/build/tenant/TenantManager.js.map +1 -0
  187. package/build/tenant/context.d.ts +11 -0
  188. package/build/tenant/context.js +23 -0
  189. package/build/tenant/context.js.map +1 -0
  190. package/build/tenant/types.d.ts +16 -0
  191. package/build/tenant/types.js +2 -0
  192. package/build/tenant/types.js.map +1 -0
  193. package/package.json +95 -0
@@ -0,0 +1,157 @@
1
+ import { renderOAuthWalletPage } from "../oauth/page.js";
2
+ export function registerOAuthRoutes(app, params) {
3
+ const { oauthService, tenantManager } = params;
4
+ app.get("/.well-known/oauth-authorization-server", (_req, res) => {
5
+ res.status(200).json(oauthService.getAuthorizationServerMetadata());
6
+ });
7
+ app.get("/.well-known/oauth-protected-resource", (_req, res) => {
8
+ res.status(200).json(oauthService.getProtectedResourceMetadata());
9
+ });
10
+ app.get("/oauth/authorize", async (req, res) => {
11
+ try {
12
+ const pending = await oauthService.createPendingAuthorization({
13
+ responseType: readQueryString(req, "response_type"),
14
+ clientId: readQueryString(req, "client_id"),
15
+ redirectUri: readQueryString(req, "redirect_uri"),
16
+ state: readQueryString(req, "state"),
17
+ scope: readQueryString(req, "scope"),
18
+ resource: readQueryString(req, "resource"),
19
+ codeChallenge: readQueryString(req, "code_challenge"),
20
+ codeChallengeMethod: readQueryString(req, "code_challenge_method"),
21
+ });
22
+ res.setHeader("Set-Cookie", serializeCookie(oauthService.authCodeCookieName, pending.authRequestId, {
23
+ httpOnly: true,
24
+ secure: isSecureOrigin(oauthService.publicOrigin),
25
+ sameSite: "Lax",
26
+ path: "/oauth",
27
+ maxAgeSeconds: Math.max(1, Math.floor((pending.expiresAt - pending.issuedAt) / 1000)),
28
+ }));
29
+ res.status(200).type("html").send(renderOAuthWalletPage());
30
+ }
31
+ catch (error) {
32
+ res.status(400).json({ error: error instanceof Error ? error.message : String(error) });
33
+ }
34
+ });
35
+ app.post("/oauth/authorize/challenge", async (req, res) => {
36
+ try {
37
+ const authRequestId = requireAuthRequestCookie(req, oauthService.authCodeCookieName);
38
+ const walletAddress = readBodyString(req, "walletAddress");
39
+ const tenant = tenantManager.requireTenantByAddress(walletAddress);
40
+ const challenge = oauthService.createWalletChallenge(authRequestId, tenant);
41
+ res.status(200).json({
42
+ challenge: challenge.challenge,
43
+ expiresAt: challenge.expiresAt,
44
+ });
45
+ }
46
+ catch (error) {
47
+ res.status(400).json({ error: error instanceof Error ? error.message : String(error) });
48
+ }
49
+ });
50
+ app.post("/oauth/authorize/verify", async (req, res) => {
51
+ try {
52
+ const authRequestId = requireAuthRequestCookie(req, oauthService.authCodeCookieName);
53
+ const result = await oauthService.verifyWalletChallenge({
54
+ authRequestId,
55
+ tenantManager,
56
+ walletAddress: readBodyString(req, "walletAddress"),
57
+ challenge: readBodyString(req, "challenge"),
58
+ signature: readBodyString(req, "signature"),
59
+ });
60
+ res.status(200).json({ redirectTo: result.redirectTo });
61
+ }
62
+ catch (error) {
63
+ res.status(400).json({ error: error instanceof Error ? error.message : String(error) });
64
+ }
65
+ });
66
+ app.post("/oauth/authorize/create-wallet", async (req, res) => {
67
+ try {
68
+ const authRequestId = requireAuthRequestCookie(req, oauthService.authCodeCookieName);
69
+ const result = await oauthService.createWalletAndAuthorize({
70
+ authRequestId,
71
+ tenantManager,
72
+ });
73
+ res.status(200).json({
74
+ tenantId: result.wallet.tenantId,
75
+ walletAddress: result.wallet.walletAddress,
76
+ walletAddressHex: result.wallet.walletAddressHex,
77
+ privateKey: result.wallet.privateKey,
78
+ redirectTo: result.redirectTo,
79
+ });
80
+ }
81
+ catch (error) {
82
+ res.status(400).json({ error: error instanceof Error ? error.message : String(error) });
83
+ }
84
+ });
85
+ app.post("/oauth/token", async (req, res) => {
86
+ try {
87
+ const tokenResponse = await oauthService.exchangeToken(toFlatRecord(req.body), tenantManager);
88
+ res.status(200).json(tokenResponse);
89
+ }
90
+ catch (error) {
91
+ res.status(400).json({ error: error instanceof Error ? error.message : String(error) });
92
+ }
93
+ });
94
+ }
95
+ function readQueryString(req, key) {
96
+ const value = req.query[key];
97
+ return typeof value === "string" ? value : undefined;
98
+ }
99
+ function readBodyString(req, key) {
100
+ const value = req.body?.[key];
101
+ if (typeof value !== "string" || value.trim().length === 0) {
102
+ throw new Error(`${key} is required.`);
103
+ }
104
+ return value.trim();
105
+ }
106
+ function requireAuthRequestCookie(req, cookieName) {
107
+ const cookies = parseCookieHeader(req.headers.cookie);
108
+ const value = cookies[cookieName];
109
+ if (!value) {
110
+ throw new Error("OAuth authorization request cookie is missing.");
111
+ }
112
+ return value;
113
+ }
114
+ function parseCookieHeader(rawCookieHeader) {
115
+ const result = {};
116
+ if (!rawCookieHeader) {
117
+ return result;
118
+ }
119
+ for (const part of rawCookieHeader.split(";")) {
120
+ const separatorIndex = part.indexOf("=");
121
+ if (separatorIndex <= 0) {
122
+ continue;
123
+ }
124
+ const name = part.slice(0, separatorIndex).trim();
125
+ const value = part.slice(separatorIndex + 1).trim();
126
+ if (name) {
127
+ result[name] = decodeURIComponent(value);
128
+ }
129
+ }
130
+ return result;
131
+ }
132
+ function serializeCookie(name, value, options) {
133
+ const parts = [`${name}=${encodeURIComponent(value)}`];
134
+ if (options.path) {
135
+ parts.push(`Path=${options.path}`);
136
+ }
137
+ if (options.maxAgeSeconds !== undefined) {
138
+ parts.push(`Max-Age=${options.maxAgeSeconds}`);
139
+ }
140
+ if (options.httpOnly) {
141
+ parts.push("HttpOnly");
142
+ }
143
+ if (options.secure) {
144
+ parts.push("Secure");
145
+ }
146
+ if (options.sameSite) {
147
+ parts.push(`SameSite=${options.sameSite}`);
148
+ }
149
+ return parts.join("; ");
150
+ }
151
+ function isSecureOrigin(origin) {
152
+ return origin.startsWith("https://");
153
+ }
154
+ function toFlatRecord(value) {
155
+ return typeof value === "object" && value !== null ? value : {};
156
+ }
157
+ //# sourceMappingURL=oauth-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-routes.js","sourceRoot":"","sources":["../../src/server/oauth-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare const version: any;
3
+ /** MCP protocol version supported by this server (from SDK LATEST_PROTOCOL_VERSION). */
4
+ export declare const MCP_PROTOCOL_VERSION = "2025-11-25";
5
+ declare function startServer(options?: {
6
+ readOnly?: boolean;
7
+ transport?: "stdio" | "http";
8
+ }): Promise<McpServer>;
9
+ export default startServer;
@@ -0,0 +1,54 @@
1
+ import { createRequire } from "node:module";
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { registerTRONResources } from "../core/resources.js";
4
+ import { registerTRONTools } from "../core/tools/index.js";
5
+ import { registerTRONPrompts } from "../core/prompts.js";
6
+ import { getSupportedNetworks } from "../core/chains.js";
7
+ const require = createRequire(import.meta.url);
8
+ export const { version } = require("../../package.json");
9
+ /** MCP protocol version supported by this server (from SDK LATEST_PROTOCOL_VERSION). */
10
+ export const MCP_PROTOCOL_VERSION = "2025-11-25";
11
+ // Create and start the MCP server
12
+ async function startServer(options = {}) {
13
+ try {
14
+ // Create a new MCP server instance with capabilities
15
+ const server = new McpServer({
16
+ name: "mcp-server-tron",
17
+ version,
18
+ }, {
19
+ capabilities: {
20
+ tools: {
21
+ listChanged: true,
22
+ },
23
+ resources: {
24
+ subscribe: false,
25
+ listChanged: true,
26
+ },
27
+ prompts: {
28
+ listChanged: true,
29
+ },
30
+ logging: {},
31
+ },
32
+ });
33
+ // Register all resources, tools, and prompts
34
+ registerTRONResources(server);
35
+ registerTRONTools(server, options);
36
+ registerTRONPrompts(server, options);
37
+ // Log server information
38
+ console.error(`mcp-server-tron v${version} initialized`);
39
+ if (options.readOnly) {
40
+ console.error("Mode: Read-only (Write tools disabled)");
41
+ }
42
+ console.error(`Protocol: MCP ${MCP_PROTOCOL_VERSION}`);
43
+ console.error(`Supported networks: ${getSupportedNetworks().length} networks`);
44
+ console.error("Server is ready to handle requests");
45
+ return server;
46
+ }
47
+ catch (error) {
48
+ console.error("Failed to initialize server:", error);
49
+ throw error;
50
+ }
51
+ }
52
+ // Export the server creation function
53
+ export default startServer;
54
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEzD,wFAAwF;AACxF,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,kCAAkC;AAClC,KAAK,UAAU,WAAW,CAAC,UAAgE,EAAE;IAC3F,IAAI,CAAC;QACH,qDAAqD;QACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;YACE,IAAI,EAAE,iBAAiB;YACvB,OAAO;SACR,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE;oBACL,WAAW,EAAE,IAAI;iBAClB;gBACD,SAAS,EAAE;oBACT,SAAS,EAAE,KAAK;oBAChB,WAAW,EAAE,IAAI;iBAClB;gBACD,OAAO,EAAE;oBACP,WAAW,EAAE,IAAI;iBAClB;gBACD,OAAO,EAAE,EAAE;aACZ;SACF,CACF,CAAC;QAEF,6CAA6C;QAC7C,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAErC,yBAAyB;QACzB,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,cAAc,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,iBAAiB,oBAAoB,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,uBAAuB,oBAAoB,EAAE,CAAC,MAAM,WAAW,CAAC,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAEpD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,eAAe,WAAW,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { TenantWalletProvider, type CreatedTenantWallet } from "@missionsquad/agent-wallet";
2
+ import type { TenantIndex, TenantRecord } from "./types.js";
3
+ export interface TenantManagerOptions {
4
+ dataDir: string;
5
+ tenantMasterSecret: string;
6
+ }
7
+ export declare class TenantManager {
8
+ private readonly dataDir;
9
+ private readonly tenantMasterSecret;
10
+ constructor(options: TenantManagerOptions);
11
+ normalizeAddress(address: string): {
12
+ walletAddressBase58: string;
13
+ walletAddressHex: string;
14
+ tenantId: string;
15
+ };
16
+ getTenantIndex(): TenantIndex;
17
+ getTenantById(tenantId: string): TenantRecord | null;
18
+ getTenantByAddress(address: string): TenantRecord | null;
19
+ requireTenantByAddress(address: string): TenantRecord;
20
+ createTenantWithNewWallet(): Promise<{
21
+ tenant: TenantRecord;
22
+ wallet: CreatedTenantWallet;
23
+ }>;
24
+ getTenantWalletProvider(tenantId: string): TenantWalletProvider;
25
+ incrementSessionVersion(tenantId: string): TenantRecord;
26
+ private deriveTenantPassword;
27
+ private ensureTenantsRoot;
28
+ private getTenantsRoot;
29
+ private getIndexPath;
30
+ private getTenantRoot;
31
+ private getTenantRecordPath;
32
+ private writeTenantIndex;
33
+ private writeTenantRecord;
34
+ private writeJsonAtomic;
35
+ }
@@ -0,0 +1,167 @@
1
+ import { createHmac, randomUUID } from "node:crypto";
2
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { TronWeb } from "tronweb";
5
+ import { TenantWalletProvider } from "@missionsquad/agent-wallet";
6
+ const PRIMARY_WALLET_ID = "primary";
7
+ const TENANTS_DIRNAME = "tenants";
8
+ const TENANT_INDEX_FILENAME = "index.json";
9
+ const TENANT_RECORD_FILENAME = "tenant.json";
10
+ const TENANT_WALLET_DIRNAME = "agent-wallet";
11
+ export class TenantManager {
12
+ dataDir;
13
+ tenantMasterSecret;
14
+ constructor(options) {
15
+ this.dataDir = options.dataDir;
16
+ this.tenantMasterSecret = options.tenantMasterSecret;
17
+ }
18
+ normalizeAddress(address) {
19
+ if (!TronWeb.isAddress(address)) {
20
+ throw new Error(`Invalid TRON address: ${address}`);
21
+ }
22
+ const walletAddressHex = TronWeb.address.toHex(address).toLowerCase().replace(/^0x/, "");
23
+ const walletAddressBase58 = TronWeb.address.fromHex(walletAddressHex);
24
+ return {
25
+ walletAddressBase58,
26
+ walletAddressHex,
27
+ tenantId: walletAddressHex,
28
+ };
29
+ }
30
+ getTenantIndex() {
31
+ this.ensureTenantsRoot();
32
+ const indexPath = this.getIndexPath();
33
+ if (!existsSync(indexPath)) {
34
+ return {};
35
+ }
36
+ return JSON.parse(readFileSync(indexPath, "utf-8"));
37
+ }
38
+ getTenantById(tenantId) {
39
+ const recordPath = this.getTenantRecordPath(tenantId);
40
+ if (!existsSync(recordPath)) {
41
+ return null;
42
+ }
43
+ return JSON.parse(readFileSync(recordPath, "utf-8"));
44
+ }
45
+ getTenantByAddress(address) {
46
+ const { walletAddressHex } = this.normalizeAddress(address);
47
+ const index = this.getTenantIndex();
48
+ const tenantId = index[walletAddressHex];
49
+ if (!tenantId) {
50
+ return null;
51
+ }
52
+ return this.getTenantById(tenantId);
53
+ }
54
+ requireTenantByAddress(address) {
55
+ const tenant = this.getTenantByAddress(address);
56
+ if (!tenant) {
57
+ throw new Error("Managed tenant wallet not found for the provided address.");
58
+ }
59
+ return tenant;
60
+ }
61
+ async createTenantWithNewWallet() {
62
+ this.ensureTenantsRoot();
63
+ const generatedAccount = await TronWeb.createAccount();
64
+ const normalized = this.normalizeAddress(generatedAccount.address.base58);
65
+ const existingTenant = this.getTenantById(normalized.tenantId);
66
+ if (existingTenant) {
67
+ throw new Error(`Tenant '${normalized.tenantId}' already exists.`);
68
+ }
69
+ const pendingRoot = join(this.getTenantsRoot(), `.pending-${randomUUID()}`);
70
+ const pendingWalletDir = join(pendingRoot, TENANT_WALLET_DIRNAME);
71
+ mkdirSync(pendingWalletDir, { recursive: true });
72
+ const provider = new TenantWalletProvider({
73
+ tenantId: normalized.tenantId,
74
+ walletDir: pendingWalletDir,
75
+ masterPassword: this.deriveTenantPassword(normalized.tenantId),
76
+ network: "tron",
77
+ });
78
+ try {
79
+ const wallet = await provider.createPrimaryTronWalletFromPrivateKey(generatedAccount.privateKey, normalized.walletAddressBase58);
80
+ const tenantRoot = this.getTenantRoot(normalized.tenantId);
81
+ renameSync(pendingRoot, tenantRoot);
82
+ const now = Date.now();
83
+ const tenant = {
84
+ tenantId: normalized.tenantId,
85
+ walletId: PRIMARY_WALLET_ID,
86
+ walletAddressBase58: normalized.walletAddressBase58,
87
+ walletAddressHex: normalized.walletAddressHex,
88
+ walletDir: join(tenantRoot, TENANT_WALLET_DIRNAME),
89
+ createdAt: now,
90
+ updatedAt: now,
91
+ sessionVersion: 1,
92
+ };
93
+ this.writeTenantRecord(tenant);
94
+ const index = this.getTenantIndex();
95
+ index[tenant.walletAddressHex] = tenant.tenantId;
96
+ this.writeTenantIndex(index);
97
+ return {
98
+ tenant,
99
+ wallet: {
100
+ ...wallet,
101
+ walletDir: tenant.walletDir,
102
+ addressHex: tenant.walletAddressHex,
103
+ },
104
+ };
105
+ }
106
+ catch (error) {
107
+ rmSync(pendingRoot, { recursive: true, force: true });
108
+ throw error;
109
+ }
110
+ }
111
+ getTenantWalletProvider(tenantId) {
112
+ const tenant = this.getTenantById(tenantId);
113
+ if (!tenant) {
114
+ throw new Error(`Tenant '${tenantId}' not found.`);
115
+ }
116
+ return new TenantWalletProvider({
117
+ tenantId: tenant.tenantId,
118
+ walletDir: tenant.walletDir,
119
+ masterPassword: this.deriveTenantPassword(tenant.tenantId),
120
+ network: "tron",
121
+ });
122
+ }
123
+ incrementSessionVersion(tenantId) {
124
+ const tenant = this.getTenantById(tenantId);
125
+ if (!tenant) {
126
+ throw new Error(`Tenant '${tenantId}' not found.`);
127
+ }
128
+ const updated = {
129
+ ...tenant,
130
+ sessionVersion: tenant.sessionVersion + 1,
131
+ updatedAt: Date.now(),
132
+ };
133
+ this.writeTenantRecord(updated);
134
+ return updated;
135
+ }
136
+ deriveTenantPassword(tenantId) {
137
+ return createHmac("sha256", this.tenantMasterSecret).update(tenantId).digest("base64url");
138
+ }
139
+ ensureTenantsRoot() {
140
+ mkdirSync(this.getTenantsRoot(), { recursive: true });
141
+ }
142
+ getTenantsRoot() {
143
+ return join(this.dataDir, TENANTS_DIRNAME);
144
+ }
145
+ getIndexPath() {
146
+ return join(this.getTenantsRoot(), TENANT_INDEX_FILENAME);
147
+ }
148
+ getTenantRoot(tenantId) {
149
+ return join(this.getTenantsRoot(), tenantId);
150
+ }
151
+ getTenantRecordPath(tenantId) {
152
+ return join(this.getTenantRoot(tenantId), TENANT_RECORD_FILENAME);
153
+ }
154
+ writeTenantIndex(index) {
155
+ this.writeJsonAtomic(this.getIndexPath(), index);
156
+ }
157
+ writeTenantRecord(record) {
158
+ mkdirSync(this.getTenantRoot(record.tenantId), { recursive: true });
159
+ this.writeJsonAtomic(this.getTenantRecordPath(record.tenantId), record);
160
+ }
161
+ writeJsonAtomic(path, data) {
162
+ const tempPath = `${path}.tmp`;
163
+ writeFileSync(tempPath, JSON.stringify(data, null, 2) + "\n", "utf-8");
164
+ renameSync(tempPath, path);
165
+ }
166
+ }
167
+ //# sourceMappingURL=TenantManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TenantManager.js","sourceRoot":"","sources":["../../src/tenant/TenantManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { TenantAuthContext } from "./types.js";
2
+ import type { TenantManager } from "./TenantManager.js";
3
+ export interface RequestContextState {
4
+ transport: "http";
5
+ tenantManager: TenantManager;
6
+ auth: TenantAuthContext | null;
7
+ }
8
+ export declare function runWithRequestContext<T>(state: RequestContextState, fn: () => Promise<T>): Promise<T>;
9
+ export declare function getRequestContext(): RequestContextState | undefined;
10
+ export declare function requireTenantAuthContext(): TenantAuthContext;
11
+ export declare function getTenantManagerFromContext(): TenantManager;
@@ -0,0 +1,23 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const requestContextStorage = new AsyncLocalStorage();
3
+ export function runWithRequestContext(state, fn) {
4
+ return requestContextStorage.run(state, fn);
5
+ }
6
+ export function getRequestContext() {
7
+ return requestContextStorage.getStore();
8
+ }
9
+ export function requireTenantAuthContext() {
10
+ const context = getRequestContext();
11
+ if (!context?.auth) {
12
+ throw new Error("Authentication required.");
13
+ }
14
+ return context.auth;
15
+ }
16
+ export function getTenantManagerFromContext() {
17
+ const context = getRequestContext();
18
+ if (!context) {
19
+ throw new Error("Tenant request context is not available.");
20
+ }
21
+ return context.tenantManager;
22
+ }
23
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tenant/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUrD,MAAM,qBAAqB,GAAG,IAAI,iBAAiB,EAAuB,CAAC;AAE3E,MAAM,UAAU,qBAAqB,CACnC,KAA0B,EAC1B,EAAoB;IAEpB,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,qBAAqB,CAAC,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,OAAO,CAAC,aAAa,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface TenantRecord {
2
+ tenantId: string;
3
+ walletId: "primary";
4
+ walletAddressBase58: string;
5
+ walletAddressHex: string;
6
+ walletDir: string;
7
+ createdAt: number;
8
+ updatedAt: number;
9
+ sessionVersion: number;
10
+ }
11
+ export interface TenantIndex {
12
+ [walletAddressHex: string]: string;
13
+ }
14
+ export interface TenantAuthContext {
15
+ tenant: TenantRecord;
16
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tenant/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,95 @@
1
+ {
2
+ "name": "@missionsquad/mcp-server-tron",
3
+ "mcpName": "io.github.missionsquad/mcp-server-tron",
4
+ "module": "build/index.js",
5
+ "type": "module",
6
+ "version": "1.2.0",
7
+ "description": "MCP server for TRON blockchain. Supports TRX/TRC20 transfers, smart contracts, AI prompts & OAuth 2.0",
8
+ "bin": {
9
+ "mcp-server-tron": "./bin/cli.js"
10
+ },
11
+ "main": "build/index.js",
12
+ "files": [
13
+ "build/",
14
+ "bin/",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
18
+ "scripts": {
19
+ "start": "tsx src/index.ts",
20
+ "build": "tsc",
21
+ "dev": "tsx watch src/index.ts",
22
+ "start:http": "tsx src/server/http-server.ts",
23
+ "dev:http": "tsx watch src/server/http-server.ts",
24
+ "test": "vitest run",
25
+ "test:ci": "vitest run --exclude tests/core/services/account-data.test.ts --exclude tests/core/services/account.test.ts --exclude tests/core/services/estimation.test.ts --exclude tests/core/services/events.test.ts --exclude tests/core/services/governance.test.ts --exclude tests/core/services/mempool.test.ts --exclude tests/core/services/multicall.test.ts --exclude tests/core/services/nodes.test.ts --exclude tests/core/services/proposals.test.ts --exclude tests/core/services/services.test.ts --exclude tests/core/tools/account-data-e2e.test.ts --exclude tests/core/tools_integration.test.ts",
26
+ "lint": "eslint .",
27
+ "lint:fix": "eslint . --fix",
28
+ "prepublishOnly": "npm run build",
29
+ "version:patch": "npm version patch",
30
+ "version:minor": "npm version minor",
31
+ "version:major": "npm version major",
32
+ "release": "npm publish",
33
+ "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
34
+ "changelog:latest": "conventional-changelog -p angular -r 1 > RELEASE_NOTES.md",
35
+ "inspect": "npx @modelcontextprotocol/inspector npx tsx src/index.ts"
36
+ },
37
+ "devDependencies": {
38
+ "@types/express": "^5.0.0",
39
+ "@types/jsonwebtoken": "^9.0.2",
40
+ "@types/node": "^22.19.7",
41
+ "@typescript-eslint/eslint-plugin": "^8.53.1",
42
+ "@typescript-eslint/parser": "^8.53.1",
43
+ "conventional-changelog-cli": "^5.0.0",
44
+ "eslint": "^9.39.2",
45
+ "eslint-config-prettier": "^10.1.8",
46
+ "eslint-plugin-prettier": "^5.5.5",
47
+ "globals": "^17.1.0",
48
+ "prettier": "^3.8.1",
49
+ "tsx": "^4.21.0",
50
+ "typescript": "^5.9.3",
51
+ "typescript-eslint": "^8.53.1",
52
+ "vitest": "^4.0.17"
53
+ },
54
+ "peerDependencies": {
55
+ "typescript": "^5.8.2"
56
+ },
57
+ "dependencies": {
58
+ "@missionsquad/agent-wallet": "^1.0.0",
59
+ "@modelcontextprotocol/sdk": "^1.22.0",
60
+ "@scure/bip32": "^2.0.1",
61
+ "@scure/bip39": "^2.0.1",
62
+ "express": "^4.21.2",
63
+ "jsonwebtoken": "^9.0.2",
64
+ "tronweb": "^6.1.1",
65
+ "zod": "^3.24.3"
66
+ },
67
+ "keywords": [
68
+ "mcp",
69
+ "model-context-protocol",
70
+ "tron",
71
+ "blockchain",
72
+ "trx",
73
+ "smart-contracts",
74
+ "ai",
75
+ "agent",
76
+ "trc20",
77
+ "trc721"
78
+ ],
79
+ "author": "Mission Squad AI <jayson@missionsquad.ai>",
80
+ "license": "MIT",
81
+ "engines": {
82
+ "node": ">=20.0.0"
83
+ },
84
+ "repository": {
85
+ "type": "git",
86
+ "url": "https://github.com/MissionSquad/mcp-server-tron"
87
+ },
88
+ "bugs": {
89
+ "url": "https://github.com/MissionSquad/mcp-server-tron/issues"
90
+ },
91
+ "homepage": "https://github.com/MissionSquad/mcp-server-tron#readme",
92
+ "publishConfig": {
93
+ "access": "public"
94
+ }
95
+ }