@agentxv2/gateway 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/.env.example +53 -0
  2. package/db/migrations/001_init.sql +117 -0
  3. package/db/migrations/002_agents.sql +20 -0
  4. package/db/migrations/003_a2a_results.sql +23 -0
  5. package/deploy/.env.deploy.example +23 -0
  6. package/deploy/add_swap_build.py +45 -0
  7. package/deploy/build_and_deploy.py +110 -0
  8. package/deploy/build_deploy_a2a.py +190 -0
  9. package/deploy/build_no_lint.py +52 -0
  10. package/deploy/build_on_fe.py +86 -0
  11. package/deploy/build_on_gw.py +98 -0
  12. package/deploy/build_prod.py +54 -0
  13. package/deploy/check_bal.py +31 -0
  14. package/deploy/check_code.py +47 -0
  15. package/deploy/check_deploy.sh +20 -0
  16. package/deploy/check_docs.py +16 -0
  17. package/deploy/check_frontend.py +42 -0
  18. package/deploy/check_frontend2.py +35 -0
  19. package/deploy/check_pks.py +34 -0
  20. package/deploy/check_status.py +32 -0
  21. package/deploy/check_v2.py +8 -0
  22. package/deploy/clean_install.py +28 -0
  23. package/deploy/deploy_a2a.py +58 -0
  24. package/deploy/deploy_a2a.sh +33 -0
  25. package/deploy/deploy_a2a_bg.sh +40 -0
  26. package/deploy/deploy_a2a_v2.py +151 -0
  27. package/deploy/deploy_a2a_v2.sh +36 -0
  28. package/deploy/deploy_bin.py +64 -0
  29. package/deploy/deploy_config.py +34 -0
  30. package/deploy/deploy_final.py +42 -0
  31. package/deploy/deploy_frontend.py +108 -0
  32. package/deploy/deploy_mcp.py +108 -0
  33. package/deploy/deploy_now.py +49 -0
  34. package/deploy/deploy_push_all.py +128 -0
  35. package/deploy/deploy_script.py +64 -0
  36. package/deploy/deploy_sep_a2a.sh +18 -0
  37. package/deploy/dev_mode.py +51 -0
  38. package/deploy/diag.py +12 -0
  39. package/deploy/diff_test.py +22 -0
  40. package/deploy/final_check.py +33 -0
  41. package/deploy/final_deploy.py +50 -0
  42. package/deploy/final_fix.py +54 -0
  43. package/deploy/final_push.py +114 -0
  44. package/deploy/find_frontend.py +38 -0
  45. package/deploy/fix_a2a.py +43 -0
  46. package/deploy/fix_and_build.py +77 -0
  47. package/deploy/fix_and_verify.py +56 -0
  48. package/deploy/fix_build.py +51 -0
  49. package/deploy/forge_deploy.py +67 -0
  50. package/deploy/full_push.py +101 -0
  51. package/deploy/full_push2.py +106 -0
  52. package/deploy/go_prod.py +59 -0
  53. package/deploy/gw_deploy.py +133 -0
  54. package/deploy/gw_final.py +206 -0
  55. package/deploy/gw_restart.py +28 -0
  56. package/deploy/gw_status.py +18 -0
  57. package/deploy/inline_build.py +99 -0
  58. package/deploy/one_shot.py +84 -0
  59. package/deploy/ox_deploy.py +32 -0
  60. package/deploy/pg_setup.py +36 -0
  61. package/deploy/prod_deploy.py +126 -0
  62. package/deploy/prod_final.py +140 -0
  63. package/deploy/prod_go.py +61 -0
  64. package/deploy/prod_one_shot.py +139 -0
  65. package/deploy/prod_setup.sh +62 -0
  66. package/deploy/prod_v2.py +91 -0
  67. package/deploy/prod_v3.py +103 -0
  68. package/deploy/push_docs.py +93 -0
  69. package/deploy/push_mcp.py +66 -0
  70. package/deploy/push_mcp_doc.py +28 -0
  71. package/deploy/push_v063.py +80 -0
  72. package/deploy/push_v2.py +71 -0
  73. package/deploy/qcheck.py +13 -0
  74. package/deploy/qcheck2.py +18 -0
  75. package/deploy/quick_check.py +8 -0
  76. package/deploy/rebuild.py +47 -0
  77. package/deploy/rebuild_frontend.py +44 -0
  78. package/deploy/restart.py +28 -0
  79. package/deploy/restore_frontend.py +42 -0
  80. package/deploy/restore_frontend2.py +41 -0
  81. package/deploy/restore_gateway.py +34 -0
  82. package/deploy/restore_quick.py +33 -0
  83. package/deploy/run_bash.py +19 -0
  84. package/deploy/run_sep.py +20 -0
  85. package/deploy/sdk_upgrade.py +50 -0
  86. package/deploy/server_prepare.py +41 -0
  87. package/deploy/server_setup.py +41 -0
  88. package/deploy/ssh_check.py +14 -0
  89. package/deploy/ssh_push.py +24 -0
  90. package/deploy/start_deploy.py +35 -0
  91. package/deploy/start_frontend.py +12 -0
  92. package/deploy/start_v2.py +29 -0
  93. package/deploy/stat.py +18 -0
  94. package/deploy/tail_log.py +11 -0
  95. package/deploy/update_env.py +32 -0
  96. package/deploy/upload_and_start.py +107 -0
  97. package/deploy/verify_a2a.py +13 -0
  98. package/deploy/verify_mcp.py +37 -0
  99. package/deploy/verify_sdk.py +21 -0
  100. package/dist/config.d.ts +26 -0
  101. package/dist/config.js +41 -0
  102. package/dist/config.js.map +1 -0
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.js +149 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/lib/crypto.d.ts +2 -0
  107. package/dist/lib/crypto.js +43 -0
  108. package/dist/lib/crypto.js.map +1 -0
  109. package/dist/lib/db.d.ts +3 -0
  110. package/dist/lib/db.js +26 -0
  111. package/dist/lib/db.js.map +1 -0
  112. package/dist/lib/ethers-utils.d.ts +60 -0
  113. package/dist/lib/ethers-utils.js +186 -0
  114. package/dist/lib/ethers-utils.js.map +1 -0
  115. package/dist/middleware/adminAuth.d.ts +2 -0
  116. package/dist/middleware/adminAuth.js +31 -0
  117. package/dist/middleware/adminAuth.js.map +1 -0
  118. package/dist/middleware/auth.d.ts +22 -0
  119. package/dist/middleware/auth.js +192 -0
  120. package/dist/middleware/auth.js.map +1 -0
  121. package/dist/middleware/error-handler.d.ts +36 -0
  122. package/dist/middleware/error-handler.js +100 -0
  123. package/dist/middleware/error-handler.js.map +1 -0
  124. package/dist/middleware/rate-limiter.d.ts +5 -0
  125. package/dist/middleware/rate-limiter.js +107 -0
  126. package/dist/middleware/rate-limiter.js.map +1 -0
  127. package/dist/routes/a2a.d.ts +2 -0
  128. package/dist/routes/a2a.js +84 -0
  129. package/dist/routes/a2a.js.map +1 -0
  130. package/dist/routes/admin.d.ts +2 -0
  131. package/dist/routes/admin.js +180 -0
  132. package/dist/routes/admin.js.map +1 -0
  133. package/dist/routes/agents.d.ts +2 -0
  134. package/dist/routes/agents.js +43 -0
  135. package/dist/routes/agents.js.map +1 -0
  136. package/dist/routes/chat.d.ts +2 -0
  137. package/dist/routes/chat.js +183 -0
  138. package/dist/routes/chat.js.map +1 -0
  139. package/dist/routes/history.d.ts +2 -0
  140. package/dist/routes/history.js +92 -0
  141. package/dist/routes/history.js.map +1 -0
  142. package/dist/routes/mcp.d.ts +13 -0
  143. package/dist/routes/mcp.js +513 -0
  144. package/dist/routes/mcp.js.map +1 -0
  145. package/dist/routes/tenant.d.ts +2 -0
  146. package/dist/routes/tenant.js +154 -0
  147. package/dist/routes/tenant.js.map +1 -0
  148. package/dist/services/a2a-worker.d.ts +7 -0
  149. package/dist/services/a2a-worker.js +406 -0
  150. package/dist/services/a2a-worker.js.map +1 -0
  151. package/dist/services/agent-indexer.d.ts +4 -0
  152. package/dist/services/agent-indexer.js +124 -0
  153. package/dist/services/agent-indexer.js.map +1 -0
  154. package/e2e_wallet.js +175 -0
  155. package/ecosystem.config.js +17 -0
  156. package/package.json +33 -0
  157. package/src/config.ts +47 -0
  158. package/src/index.ts +143 -0
  159. package/src/lib/crypto.ts +44 -0
  160. package/src/lib/db.ts +25 -0
  161. package/src/lib/ethers-utils.ts +229 -0
  162. package/src/middleware/adminAuth.ts +34 -0
  163. package/src/middleware/auth.ts +244 -0
  164. package/src/middleware/error-handler.ts +109 -0
  165. package/src/middleware/rate-limiter.ts +115 -0
  166. package/src/routes/a2a.ts +97 -0
  167. package/src/routes/admin.ts +219 -0
  168. package/src/routes/agents.ts +52 -0
  169. package/src/routes/chat.ts +219 -0
  170. package/src/routes/history.ts +114 -0
  171. package/src/routes/mcp.ts +567 -0
  172. package/src/routes/tenant.ts +196 -0
  173. package/src/services/a2a-worker.ts +486 -0
  174. package/src/services/agent-indexer.ts +127 -0
  175. package/tsconfig.json +18 -0
@@ -0,0 +1,513 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // AgentX Gateway — MCP Server (Model Context Protocol)
4
+ // ---------------------------------------------------------------------------
5
+ // Standard MCP JSON-RPC 2.0 endpoint. Supports dual-chain (Sepolia + OxaChain L1).
6
+ // POST /mcp
7
+ // tools/list → all 29 AgentX platform tools
8
+ // tools/call → params.name + params.arguments.{chain:"sepolia"|"oxachain"}
9
+ // initialize → handshake
10
+ //
11
+ // Claude Desktop config:
12
+ // { "mcpServers": { "agentx": { "url": "http://43.156.225.164:3090/mcp" } } }
13
+ // ---------------------------------------------------------------------------
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MCP_TOOLS = void 0;
16
+ const express_1 = require("express");
17
+ const ethers_1 = require("ethers");
18
+ const config_1 = require("../config");
19
+ const router = (0, express_1.Router)();
20
+ const CHAINS = {
21
+ sepolia: {
22
+ rpcUrl: config_1.config.rpcUrl,
23
+ chainId: config_1.config.chainId,
24
+ identityRegistry: config_1.config.identityRegistry,
25
+ subscriptionManager: config_1.config.subscriptionManager,
26
+ a2aProtocol: config_1.config.a2aProtocol,
27
+ reputationRegistry: config_1.config.reputationRegistry,
28
+ configurationRegistry: config_1.config.configurationRegistry,
29
+ multiEndpoint: config_1.config.multiEndpoint,
30
+ },
31
+ oxachain: {
32
+ rpcUrl: config_1.config.rpcUrlOxaChain,
33
+ chainId: config_1.config.chainIdOxaChain,
34
+ identityRegistry: config_1.config.identityRegistryOxaChain,
35
+ subscriptionManager: config_1.config.subscriptionManagerOxaChain,
36
+ a2aProtocol: config_1.config.a2aProtocolOxaChain,
37
+ reputationRegistry: config_1.config.reputationRegistryOxaChain,
38
+ configurationRegistry: config_1.config.configurationRegistryOxaChain,
39
+ multiEndpoint: config_1.config.multiEndpointOxaChain,
40
+ },
41
+ };
42
+ function resolveChain(args) {
43
+ const key = args.chain?.toLowerCase() === 'oxachain' ? 'oxachain' : 'sepolia';
44
+ return CHAINS[key];
45
+ }
46
+ // ── Cached Providers ───────────────────────────────────────────────────────
47
+ const providers = {};
48
+ function getProvider(chain) {
49
+ if (!providers[chain])
50
+ providers[chain] = new ethers_1.ethers.JsonRpcProvider(CHAINS[chain].rpcUrl);
51
+ return providers[chain];
52
+ }
53
+ function getContract(chain, address, abi) {
54
+ return new ethers_1.ethers.Contract(address, abi, getProvider(chain));
55
+ }
56
+ function commonArgs() {
57
+ return {
58
+ chain: { type: 'string', description: 'Chain: "sepolia" (default) or "oxachain" for OxaChain L1 mainnet', enum: ['sepolia', 'oxachain'] },
59
+ };
60
+ }
61
+ const MCP_TOOLS = [
62
+ // ── IdentityRegistry ────────────────────────────────────────────────────
63
+ {
64
+ name: 'agentx_identity_list',
65
+ description: 'List all Agent IDs owned by a wallet address on Sepolia or OxaChain L1.',
66
+ inputSchema: { type: 'object', properties: { ...commonArgs(), ownerAddress: { type: 'string', description: 'Ethereum wallet address (0x...)' } }, required: ['ownerAddress'] },
67
+ },
68
+ {
69
+ name: 'agentx_identity_get',
70
+ description: 'Get agent details — tokenURI, metadata, existence.',
71
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent numeric ID' } }, required: ['agentId'] },
72
+ },
73
+ {
74
+ name: 'agentx_identity_exists',
75
+ description: 'Check whether an agent ID exists on-chain.',
76
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
77
+ },
78
+ {
79
+ name: 'agentx_identity_total_count',
80
+ description: 'Total number of agents registered.',
81
+ inputSchema: { type: 'object', properties: { ...commonArgs() } },
82
+ },
83
+ {
84
+ name: 'agentx_identity_register',
85
+ description: 'Register a new Agent on-chain. WRITE operation — returns tx payload.',
86
+ inputSchema: {
87
+ type: 'object',
88
+ properties: {
89
+ ...commonArgs(),
90
+ tokenURI: { type: 'string', description: 'IPFS URI (ipfs://...)' },
91
+ encryptedPayloadCid: { type: 'string', description: 'IPFS CID of encrypted payload' },
92
+ eciesEncryptedKey: { type: 'string', description: 'Hex ECIES-encrypted AES key' },
93
+ },
94
+ required: ['tokenURI', 'encryptedPayloadCid', 'eciesEncryptedKey'],
95
+ },
96
+ },
97
+ // ── SubscriptionManager ─────────────────────────────────────────────────
98
+ {
99
+ name: 'agentx_subscription_plans',
100
+ description: 'Get plan details: price, period, pay token, trial days.',
101
+ inputSchema: { type: 'object', properties: { ...commonArgs(), planId: { type: 'integer', description: 'Plan ID' } }, required: ['planId'] },
102
+ },
103
+ {
104
+ name: 'agentx_subscription_check',
105
+ description: 'Check if a wallet has an active subscription for an agent.',
106
+ inputSchema: {
107
+ type: 'object',
108
+ properties: { ...commonArgs(), subscriberAddress: { type: 'string', description: 'Wallet address' }, agentId: { type: 'integer', description: 'Agent ID' } },
109
+ required: ['subscriberAddress', 'agentId'],
110
+ },
111
+ },
112
+ {
113
+ name: 'agentx_subscription_detail',
114
+ description: 'Full subscription detail including trial info, escrow status.',
115
+ inputSchema: { type: 'object', properties: { ...commonArgs(), subscriptionId: { type: 'integer', description: 'Subscription ID' } }, required: ['subscriptionId'] },
116
+ },
117
+ {
118
+ name: 'agentx_subscription_my_list',
119
+ description: 'List all subscription IDs for a wallet.',
120
+ inputSchema: { type: 'object', properties: { ...commonArgs(), userAddress: { type: 'string', description: 'Wallet address' } }, required: ['userAddress'] },
121
+ },
122
+ {
123
+ name: 'agentx_subscription_subscribe',
124
+ description: 'Subscribe to a plan. WRITE operation.',
125
+ inputSchema: {
126
+ type: 'object',
127
+ properties: { ...commonArgs(), planId: { type: 'integer', description: 'Plan ID' }, valueWei: { type: 'string', description: 'ETH in wei' } },
128
+ required: ['planId'],
129
+ },
130
+ },
131
+ {
132
+ name: 'agentx_subscription_cancel',
133
+ description: 'Cancel a subscription. WRITE operation.',
134
+ inputSchema: { type: 'object', properties: { ...commonArgs(), subscriptionId: { type: 'integer', description: 'Subscription ID' } }, required: ['subscriptionId'] },
135
+ },
136
+ {
137
+ name: 'agentx_subscription_release',
138
+ description: 'Release escrowed funds. WRITE operation.',
139
+ inputSchema: { type: 'object', properties: { ...commonArgs(), subscriptionId: { type: 'integer', description: 'Subscription ID' } }, required: ['subscriptionId'] },
140
+ },
141
+ {
142
+ name: 'agentx_subscription_fee',
143
+ description: 'Get current platform fee in bps.',
144
+ inputSchema: { type: 'object', properties: { ...commonArgs() } },
145
+ },
146
+ // ── A2AProtocol ─────────────────────────────────────────────────────────
147
+ {
148
+ name: 'agentx_a2a_create_task',
149
+ description: 'Create an on-chain A2A task. WRITE operation.',
150
+ inputSchema: {
151
+ type: 'object',
152
+ properties: { ...commonArgs(), targetAgentId: { type: 'integer', description: 'Target agent ID' }, taskType: { type: 'string', description: 'e.g. audit, analyze' }, inputData: { type: 'string', description: 'JSON input' } },
153
+ required: ['targetAgentId', 'taskType', 'inputData'],
154
+ },
155
+ },
156
+ {
157
+ name: 'agentx_a2a_get_task',
158
+ description: 'Get A2A task details.',
159
+ inputSchema: { type: 'object', properties: { ...commonArgs(), taskId: { type: 'integer', description: 'Task ID' } }, required: ['taskId'] },
160
+ },
161
+ {
162
+ name: 'agentx_a2a_complete_task',
163
+ description: 'Complete a task on-chain. WRITE operation.',
164
+ inputSchema: {
165
+ type: 'object',
166
+ properties: { ...commonArgs(), taskId: { type: 'integer', description: 'Task ID' }, outputData: { type: 'string', description: 'JSON output' } },
167
+ required: ['taskId', 'outputData'],
168
+ },
169
+ },
170
+ {
171
+ name: 'agentx_a2a_my_tasks',
172
+ description: 'Get all task IDs for a wallet.',
173
+ inputSchema: { type: 'object', properties: { ...commonArgs(), userAddress: { type: 'string', description: 'Wallet address' } }, required: ['userAddress'] },
174
+ },
175
+ {
176
+ name: 'agentx_a2a_agent_card',
177
+ description: 'Get agent A2A card: name, capabilities, supported tasks.',
178
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
179
+ },
180
+ // ── ReputationRegistry ──────────────────────────────────────────────────
181
+ {
182
+ name: 'agentx_reputation_rate',
183
+ description: 'Rate an agent (1-5). WRITE operation.',
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' }, rating: { type: 'integer', description: '1-5' }, comment: { type: 'string', description: 'Review' } },
187
+ required: ['agentId', 'rating'],
188
+ },
189
+ },
190
+ {
191
+ name: 'agentx_reputation_get',
192
+ description: 'Average rating and review count.',
193
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
194
+ },
195
+ {
196
+ name: 'agentx_reputation_reviews',
197
+ description: 'All reviews with reviewer, rating, comment, timestamp.',
198
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
199
+ },
200
+ // ── ConfigurationRegistry ───────────────────────────────────────────────
201
+ {
202
+ name: 'agentx_config_get',
203
+ description: 'Read a config value by key.',
204
+ inputSchema: {
205
+ type: 'object',
206
+ properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' }, configKey: { type: 'string', description: 'Config key' } },
207
+ required: ['agentId', 'configKey'],
208
+ },
209
+ },
210
+ {
211
+ name: 'agentx_config_list',
212
+ description: 'List all configurations for an agent.',
213
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
214
+ },
215
+ {
216
+ name: 'agentx_config_set',
217
+ description: 'Set config value on-chain. WRITE operation.',
218
+ inputSchema: {
219
+ type: 'object',
220
+ properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' }, key: { type: 'string' }, value: { type: 'string' }, dataType: { type: 'string', enum: ['string', 'number', 'boolean', 'json'] } },
221
+ required: ['agentId', 'key', 'value'],
222
+ },
223
+ },
224
+ // ── MultiEndpointRegistry ───────────────────────────────────────────────
225
+ {
226
+ name: 'agentx_endpoint_list',
227
+ description: 'All registered endpoints.',
228
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
229
+ },
230
+ {
231
+ name: 'agentx_endpoint_active',
232
+ description: 'Only active endpoints.',
233
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
234
+ },
235
+ {
236
+ name: 'agentx_endpoint_best_mcp',
237
+ description: 'Best available MCP endpoint URL.',
238
+ inputSchema: { type: 'object', properties: { ...commonArgs(), agentId: { type: 'integer', description: 'Agent ID' } }, required: ['agentId'] },
239
+ },
240
+ // ── Gateway ─────────────────────────────────────────────────────────────
241
+ {
242
+ name: 'agentx_gateway_tenant',
243
+ description: 'Get tenant profile, plan, quota.',
244
+ inputSchema: { type: 'object', properties: { accessToken: { type: 'string', description: 'Gateway JWT token' } }, required: ['accessToken'] },
245
+ },
246
+ {
247
+ name: 'agentx_gateway_health',
248
+ description: 'Gateway health + chain contract addresses (both chains).',
249
+ inputSchema: { type: 'object', properties: {} },
250
+ },
251
+ ];
252
+ exports.MCP_TOOLS = MCP_TOOLS;
253
+ // ── ABIs ────────────────────────────────────────────────────────────────────
254
+ const ID_ABI = [
255
+ 'function getAgentsByOwner(address owner) view returns (uint256[])',
256
+ 'function getCurrentAgentId() view returns (uint256)',
257
+ 'function agentExists(uint256 agentId) view returns (bool)',
258
+ 'function tokenURI(uint256 tokenId) view returns (string)',
259
+ ];
260
+ const SUB_ABI = [
261
+ // No named params — avoids ethers.js v6 struct decoding issues with mixed static/dynamic fields
262
+ 'function getPlan(uint256) view returns (uint256,uint256,address,uint256,string,bool,address,uint256)',
263
+ 'function hasActiveSubscription(address,uint256) view returns (bool)',
264
+ 'function getSubscription(address,uint256) view returns (uint256,address,uint256,uint8,uint256,uint256,string)',
265
+ 'function getSubscriptionDetail(uint256) view returns (uint256,address,uint256,uint8,uint256,uint256,string,address,uint256,bool,uint256,bool)',
266
+ 'function getUserSubscriptions(address) view returns (uint256[])',
267
+ 'function platformFeeBps() view returns (uint256)',
268
+ ];
269
+ const A2A_ABI = [
270
+ 'function getTask(uint256) view returns (uint256,uint256,string,string,string,uint256,address,uint256,uint256)',
271
+ 'function getUserTasks(address) view returns (uint256[])',
272
+ 'function getAgentCard(uint256) view returns (uint256,uint256,string,string,string,string[],string[],string,string,string,bool)',
273
+ ];
274
+ const REP_ABI = [
275
+ 'function getReputationSummary(uint256 agentId, address[] clientAddresses, bytes32 tag1, bytes32 tag2) view returns (uint64 count, uint8 averageScore)',
276
+ 'function readFeedback(uint256 agentId, address clientAddress, uint64 index) view returns (uint8 score, bytes32 tag1, bytes32 tag2, bool isRevoked)',
277
+ 'function getClients(uint256 agentId) view returns (address[])',
278
+ 'function getLastIndex(uint256 agentId, address clientAddress) view returns (uint64)',
279
+ ];
280
+ const CFG_ABI = [
281
+ 'function getConfig(uint256 agentId, string configKey) view returns (tuple(uint256 configId, uint256 agentId, string configKey, string configValue, string dataType, string description, bool isActive, uint256 createdAt, uint256 updatedAt, address createdBy))',
282
+ 'function getAgentConfigs(uint256 agentId) view returns (tuple(uint256 configId, uint256 agentId, string configKey, string configValue, string dataType, string description, bool isActive, uint256 createdAt, uint256 updatedAt, address createdBy)[])',
283
+ 'function getConfigKeys(uint256 agentId) view returns (string[])',
284
+ ];
285
+ const EP_ABI = [
286
+ 'function getAgentEndpoints(uint256) view returns (tuple(uint256,uint256,string,string,string,string,string,bool,uint256,uint256,address)[])',
287
+ 'function getActiveAgentEndpoints(uint256) view returns (tuple(uint256,uint256,string,string,string,string,string,bool,uint256,uint256,address)[])',
288
+ ];
289
+ // ── Helpers ─────────────────────────────────────────────────────────────────
290
+ function formatBigInts(arr) { return arr.map(Number); }
291
+ function toObj(keys, vals) {
292
+ const obj = {};
293
+ for (let i = 0; i < keys.length; i++) {
294
+ const v = vals[i];
295
+ obj[keys[i]] = typeof v === 'bigint' ? (v > 2n ** 53n ? v.toString() : Number(v)) : v;
296
+ }
297
+ return obj;
298
+ }
299
+ // ── Tool Executor ───────────────────────────────────────────────────────────
300
+ async function executeToolCall(name, args) {
301
+ const chain = resolveChain(args);
302
+ const ck = args.chain?.toLowerCase() === 'oxachain' ? 'oxachain' : 'sepolia';
303
+ const chainLabel = ck === 'oxachain' ? 'OxaChain L1' : 'Sepolia';
304
+ const chainId = ck === 'oxachain' ? config_1.config.chainIdOxaChain : config_1.config.chainId;
305
+ try {
306
+ switch (name) {
307
+ // ── Identity ──────────────────────────────────
308
+ case 'agentx_identity_list': {
309
+ const owner = args.ownerAddress;
310
+ const ids = await getContract(ck, chain.identityRegistry, ID_ABI).getAgentsByOwner(owner);
311
+ return { agentIds: formatBigInts(ids), owner, chain: chainLabel, chainId };
312
+ }
313
+ case 'agentx_identity_get': {
314
+ const agentId = Number(args.agentId);
315
+ const c = getContract(ck, chain.identityRegistry, ID_ABI);
316
+ const [exists, tokenURI] = await Promise.all([
317
+ c.agentExists(agentId).catch(() => false),
318
+ c.tokenURI(agentId).catch(() => null),
319
+ ]);
320
+ return { agentId, exists, tokenURI, chain: chainLabel, chainId };
321
+ }
322
+ case 'agentx_identity_exists':
323
+ return { exists: await getContract(ck, chain.identityRegistry, ID_ABI).agentExists(Number(args.agentId)), chain: chainLabel, chainId };
324
+ case 'agentx_identity_total_count': {
325
+ const total = await getContract(ck, chain.identityRegistry, ID_ABI).getCurrentAgentId();
326
+ return { totalAgents: Number(total), chain: chainLabel, chainId };
327
+ }
328
+ case 'agentx_identity_register':
329
+ return { _writeOp: true, message: `WRITE. Use a wallet client to sign and submit to ${chainLabel}.`, contract: chain.identityRegistry, chain: chainLabel, chainId };
330
+ // ── Subscription ──────────────────────────────
331
+ case 'agentx_subscription_plans': {
332
+ // raw eth_call to avoid ethers.js v6 struct-decoding bug with bool+string mix
333
+ const planId = Number(args.planId);
334
+ const abiCoder = ethers_1.ethers.AbiCoder.defaultAbiCoder();
335
+ const data = new ethers_1.ethers.Interface(SUB_ABI).encodeFunctionData('getPlan', [planId]);
336
+ const raw = await getProvider(ck).call({ to: chain.subscriptionManager, data });
337
+ const decoded = abiCoder.decode(['uint256', 'uint256', 'address', 'uint256', 'string', 'bool', 'address', 'uint256'], raw);
338
+ return { planId: Number(decoded[0]), agentId: Number(decoded[1]), creator: decoded[2], price: Number(decoded[3]), period: decoded[4], active: decoded[5], payToken: decoded[6], trialDays: Number(decoded[7]), chain: chainLabel, chainId };
339
+ }
340
+ case 'agentx_subscription_check': {
341
+ // Accept both 'subscriberAddress' and 'subscriber' parameter names
342
+ const subscriber = (args.subscriberAddress || args.subscriber || args.subscriber_address);
343
+ const subscriberAddr = ethers_1.ethers.getAddress(subscriber);
344
+ const ok = await getContract(ck, chain.subscriptionManager, SUB_ABI).hasActiveSubscription(subscriberAddr, Number(args.agentId));
345
+ return { active: ok, subscriber: subscriberAddr, agentId: Number(args.agentId), chain: chainLabel, chainId };
346
+ }
347
+ case 'agentx_subscription_detail': {
348
+ const d = await getContract(ck, chain.subscriptionManager, SUB_ABI).getSubscriptionDetail(Number(args.subscriptionId));
349
+ return { ...toObj(['subscriptionId', 'subscriber', 'agentId', 'status', 'startedAt', 'expiresAt', 'period', 'payToken', 'amountPaid', 'trialActive', 'trialEndsAt', 'fundsReleased'], d), chain: chainLabel, chainId };
350
+ }
351
+ case 'agentx_subscription_my_list': {
352
+ const ids = await getContract(ck, chain.subscriptionManager, SUB_ABI).getUserSubscriptions(args.userAddress);
353
+ return { subscriptionIds: formatBigInts(ids), user: args.userAddress, chain: chainLabel, chainId };
354
+ }
355
+ case 'agentx_subscription_subscribe':
356
+ return { _writeOp: true, message: `WRITE. Subscribe via wallet client on ${chainLabel}.`, contract: chain.subscriptionManager, chain: chainLabel, chainId };
357
+ case 'agentx_subscription_cancel':
358
+ return { _writeOp: true, message: `WRITE. Cancel via wallet client on ${chainLabel}.`, contract: chain.subscriptionManager, chain: chainLabel, chainId };
359
+ case 'agentx_subscription_release':
360
+ return { _writeOp: true, message: `WRITE. Release via wallet client on ${chainLabel}.`, contract: chain.subscriptionManager, chain: chainLabel, chainId };
361
+ case 'agentx_subscription_fee': {
362
+ const fee = await getContract(ck, chain.subscriptionManager, SUB_ABI).platformFeeBps();
363
+ return { platformFeeBps: Number(fee), chain: chainLabel, chainId };
364
+ }
365
+ // ── A2A ───────────────────────────────────────
366
+ case 'agentx_a2a_get_task': {
367
+ const t = await getContract(ck, chain.a2aProtocol, A2A_ABI).getTask(Number(args.taskId));
368
+ return { ...toObj(['taskId', 'agentId', 'taskType', 'inputData', 'outputData', 'status', 'clientAddress', 'createdAt', 'completedAt'], t), chain: chainLabel, chainId };
369
+ }
370
+ case 'agentx_a2a_my_tasks': {
371
+ const ids = await getContract(ck, chain.a2aProtocol, A2A_ABI).getUserTasks(args.userAddress);
372
+ return { taskIds: formatBigInts(ids), user: args.userAddress, chain: chainLabel, chainId };
373
+ }
374
+ case 'agentx_a2a_agent_card': {
375
+ const card = await getContract(ck, chain.a2aProtocol, A2A_ABI).getAgentCard(Number(args.agentId));
376
+ const [, aId, name, , , capabilities, supportedTasks, comm, auth, , isActive] = card;
377
+ return { agentId: Number(aId), name, capabilities, supportedTasks, communicationProtocol: comm, authenticationMethod: auth, isActive, chain: chainLabel, chainId };
378
+ }
379
+ case 'agentx_a2a_create_task':
380
+ return { _writeOp: true, message: `WRITE. Create task via wallet client on ${chainLabel}.`, contract: chain.a2aProtocol, chain: chainLabel, chainId };
381
+ case 'agentx_a2a_complete_task':
382
+ return { _writeOp: true, message: `WRITE. Complete task via wallet client on ${chainLabel}.`, contract: chain.a2aProtocol, chain: chainLabel, chainId };
383
+ // ── Reputation ─────────────────────────────────
384
+ case 'agentx_reputation_get': {
385
+ const [count, avgScore] = await getContract(ck, chain.reputationRegistry, REP_ABI).getReputationSummary(Number(args.agentId), [], ethers_1.ethers.ZeroHash, ethers_1.ethers.ZeroHash);
386
+ return { agentId: Number(args.agentId), averageScore: Number(avgScore), reviewCount: Number(count), chain: chainLabel, chainId };
387
+ }
388
+ case 'agentx_reputation_reviews': {
389
+ const clients = await getContract(ck, chain.reputationRegistry, REP_ABI).getClients(Number(args.agentId));
390
+ const reviews = [];
391
+ for (const client of clients.map(String)) {
392
+ const lastIdx = await getContract(ck, chain.reputationRegistry, REP_ABI).getLastIndex(Number(args.agentId), client).then(n => Number(n)).catch(() => 0);
393
+ for (let i = 1; i <= lastIdx; i++) {
394
+ try {
395
+ const fb = await getContract(ck, chain.reputationRegistry, REP_ABI).readFeedback(Number(args.agentId), client, i);
396
+ reviews.push({ reviewer: client, score: Number(fb[0]), tag1: fb[1], tag2: fb[2], isRevoked: fb[3] });
397
+ }
398
+ catch { /* skip */ }
399
+ }
400
+ }
401
+ return { agentId: Number(args.agentId), reviews, chain: chainLabel, chainId };
402
+ }
403
+ case 'agentx_reputation_rate':
404
+ return { _writeOp: true, message: `WRITE. Rate via wallet client on ${chainLabel}.`, contract: chain.reputationRegistry, chain: chainLabel, chainId };
405
+ // ── Configuration ──────────────────────────────
406
+ case 'agentx_config_get': {
407
+ const v = await getContract(ck, chain.configurationRegistry, CFG_ABI).getConfig(Number(args.agentId), args.configKey);
408
+ return { agentId: Number(args.agentId), configKey: v.configKey, configValue: v.configValue, dataType: v.dataType, description: v.description, isActive: v.isActive, chain: chainLabel, chainId };
409
+ }
410
+ case 'agentx_config_list': {
411
+ const configs = await getContract(ck, chain.configurationRegistry, CFG_ABI).getAgentConfigs(Number(args.agentId));
412
+ return { agentId: Number(args.agentId), configs: configs.map((c) => ({ configKey: c.configKey, configValue: c.configValue, dataType: c.dataType, description: c.description, isActive: c.isActive })), chain: chainLabel, chainId };
413
+ }
414
+ case 'agentx_config_set':
415
+ return { _writeOp: true, message: `WRITE. Set config via wallet client on ${chainLabel}.`, contract: chain.configurationRegistry, chain: chainLabel, chainId };
416
+ // ── MultiEndpoint ──────────────────────────────
417
+ case 'agentx_endpoint_list': {
418
+ const eps = await getContract(ck, chain.multiEndpoint, EP_ABI).getAgentEndpoints(Number(args.agentId));
419
+ return { agentId: Number(args.agentId), endpoints: eps.map((e) => ({ endpointId: Number(e[0]), name: e[2], type: e[3], protocol: e[4], url: e[5], isActive: e[7] })), chain: chainLabel, chainId };
420
+ }
421
+ case 'agentx_endpoint_active': {
422
+ const eps = await getContract(ck, chain.multiEndpoint, EP_ABI).getActiveAgentEndpoints(Number(args.agentId));
423
+ return { agentId: Number(args.agentId), endpoints: eps.map((e) => ({ endpointId: Number(e[0]), name: e[2], type: e[3], protocol: e[4], url: e[5] })), chain: chainLabel, chainId };
424
+ }
425
+ case 'agentx_endpoint_best_mcp': {
426
+ const eps = await getContract(ck, chain.multiEndpoint, EP_ABI).getActiveAgentEndpoints(Number(args.agentId));
427
+ const mcp = eps.find((e) => e[3] === 'mcp' || e[4] === 'mcp');
428
+ return { agentId: Number(args.agentId), mcpUrl: mcp ? mcp[5] : null, chain: chainLabel, chainId };
429
+ }
430
+ // ── Gateway ────────────────────────────────────
431
+ case 'agentx_gateway_tenant': {
432
+ const token = args.accessToken;
433
+ if (!token)
434
+ return { error: 'accessToken required' };
435
+ const res = await fetch(`http://127.0.0.1:${config_1.config.port}/api/v1/tenant/me`, { headers: { Authorization: `Bearer ${token}` } });
436
+ if (!res.ok)
437
+ return { error: `HTTP ${res.status}`, detail: await res.text() };
438
+ return res.json();
439
+ }
440
+ case 'agentx_gateway_health':
441
+ return {
442
+ status: 'ok',
443
+ time: new Date().toISOString(),
444
+ chains: {
445
+ sepolia: { chainId: config_1.config.chainId, rpcUrl: config_1.config.rpcUrl, identityRegistry: config_1.config.identityRegistry, subscriptionManager: config_1.config.subscriptionManager, a2aProtocol: config_1.config.a2aProtocol, reputationRegistry: config_1.config.reputationRegistry, configurationRegistry: config_1.config.configurationRegistry, multiEndpoint: config_1.config.multiEndpoint },
446
+ oxachain: { chainId: config_1.config.chainIdOxaChain, rpcUrl: config_1.config.rpcUrlOxaChain, identityRegistry: config_1.config.identityRegistryOxaChain, subscriptionManager: config_1.config.subscriptionManagerOxaChain, a2aProtocol: config_1.config.a2aProtocolOxaChain, reputationRegistry: config_1.config.reputationRegistryOxaChain, configurationRegistry: config_1.config.configurationRegistryOxaChain, multiEndpoint: config_1.config.multiEndpointOxaChain },
447
+ },
448
+ };
449
+ default:
450
+ return { error: `Unknown tool: ${name}`, availableTools: MCP_TOOLS.map(t => t.name) };
451
+ }
452
+ }
453
+ catch (err) {
454
+ const msg = err instanceof Error ? err.message : String(err);
455
+ return { error: msg, tool: name, chain: chainLabel };
456
+ }
457
+ }
458
+ // ── MCP Router ──────────────────────────────────────────────────────────────
459
+ router.post('/', async (req, res) => {
460
+ const { jsonrpc, id, method, params } = req.body;
461
+ if (jsonrpc !== '2.0') {
462
+ res.status(400).json({ jsonrpc: '2.0', id: id ?? null, error: { code: -32600, message: 'Invalid Request: jsonrpc must be "2.0"' } });
463
+ return;
464
+ }
465
+ try {
466
+ switch (method) {
467
+ case 'tools/list': {
468
+ const tools = MCP_TOOLS.map(t => ({
469
+ name: t.name,
470
+ description: t.description,
471
+ inputSchema: t.inputSchema,
472
+ }));
473
+ res.json({ jsonrpc: '2.0', id, result: { tools } });
474
+ return;
475
+ }
476
+ case 'tools/call': {
477
+ const toolName = params?.name;
478
+ const toolArgs = (params?.arguments ?? {});
479
+ if (!toolName) {
480
+ res.json({ jsonrpc: '2.0', id, error: { code: -32602, message: 'Invalid params: missing tool "name"' } });
481
+ return;
482
+ }
483
+ if (!MCP_TOOLS.some(t => t.name === toolName)) {
484
+ res.json({ jsonrpc: '2.0', id, error: { code: -32601, message: `Method not found: ${toolName}` } });
485
+ return;
486
+ }
487
+ const result = await executeToolCall(toolName, toolArgs);
488
+ res.json({
489
+ jsonrpc: '2.0', id,
490
+ result: {
491
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
492
+ isError: result && typeof result === 'object' && 'error' in result,
493
+ },
494
+ });
495
+ return;
496
+ }
497
+ case 'initialize':
498
+ res.json({ jsonrpc: '2.0', id, result: { protocolVersion: '2024-11-05', serverInfo: { name: 'agentx-gateway', version: '0.2.0' }, capabilities: { tools: {} } } });
499
+ return;
500
+ case 'notifications/initialized':
501
+ res.json({ jsonrpc: '2.0', id, result: {} });
502
+ return;
503
+ default:
504
+ res.json({ jsonrpc: '2.0', id, error: { code: -32601, message: `Method not found: ${method}` } });
505
+ }
506
+ }
507
+ catch (err) {
508
+ const msg = err instanceof Error ? err.message : String(err);
509
+ res.json({ jsonrpc: '2.0', id: id ?? null, error: { code: -32603, message: `Internal error: ${msg}` } });
510
+ }
511
+ });
512
+ exports.default = router;
513
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;