@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.
- package/.env.example +53 -0
- package/db/migrations/001_init.sql +117 -0
- package/db/migrations/002_agents.sql +20 -0
- package/db/migrations/003_a2a_results.sql +23 -0
- package/deploy/.env.deploy.example +23 -0
- package/deploy/add_swap_build.py +45 -0
- package/deploy/build_and_deploy.py +110 -0
- package/deploy/build_deploy_a2a.py +190 -0
- package/deploy/build_no_lint.py +52 -0
- package/deploy/build_on_fe.py +86 -0
- package/deploy/build_on_gw.py +98 -0
- package/deploy/build_prod.py +54 -0
- package/deploy/check_bal.py +31 -0
- package/deploy/check_code.py +47 -0
- package/deploy/check_deploy.sh +20 -0
- package/deploy/check_docs.py +16 -0
- package/deploy/check_frontend.py +42 -0
- package/deploy/check_frontend2.py +35 -0
- package/deploy/check_pks.py +34 -0
- package/deploy/check_status.py +32 -0
- package/deploy/check_v2.py +8 -0
- package/deploy/clean_install.py +28 -0
- package/deploy/deploy_a2a.py +58 -0
- package/deploy/deploy_a2a.sh +33 -0
- package/deploy/deploy_a2a_bg.sh +40 -0
- package/deploy/deploy_a2a_v2.py +151 -0
- package/deploy/deploy_a2a_v2.sh +36 -0
- package/deploy/deploy_bin.py +64 -0
- package/deploy/deploy_config.py +34 -0
- package/deploy/deploy_final.py +42 -0
- package/deploy/deploy_frontend.py +108 -0
- package/deploy/deploy_mcp.py +108 -0
- package/deploy/deploy_now.py +49 -0
- package/deploy/deploy_push_all.py +128 -0
- package/deploy/deploy_script.py +64 -0
- package/deploy/deploy_sep_a2a.sh +18 -0
- package/deploy/dev_mode.py +51 -0
- package/deploy/diag.py +12 -0
- package/deploy/diff_test.py +22 -0
- package/deploy/final_check.py +33 -0
- package/deploy/final_deploy.py +50 -0
- package/deploy/final_fix.py +54 -0
- package/deploy/final_push.py +114 -0
- package/deploy/find_frontend.py +38 -0
- package/deploy/fix_a2a.py +43 -0
- package/deploy/fix_and_build.py +77 -0
- package/deploy/fix_and_verify.py +56 -0
- package/deploy/fix_build.py +51 -0
- package/deploy/forge_deploy.py +67 -0
- package/deploy/full_push.py +101 -0
- package/deploy/full_push2.py +106 -0
- package/deploy/go_prod.py +59 -0
- package/deploy/gw_deploy.py +133 -0
- package/deploy/gw_final.py +206 -0
- package/deploy/gw_restart.py +28 -0
- package/deploy/gw_status.py +18 -0
- package/deploy/inline_build.py +99 -0
- package/deploy/one_shot.py +84 -0
- package/deploy/ox_deploy.py +32 -0
- package/deploy/pg_setup.py +36 -0
- package/deploy/prod_deploy.py +126 -0
- package/deploy/prod_final.py +140 -0
- package/deploy/prod_go.py +61 -0
- package/deploy/prod_one_shot.py +139 -0
- package/deploy/prod_setup.sh +62 -0
- package/deploy/prod_v2.py +91 -0
- package/deploy/prod_v3.py +103 -0
- package/deploy/push_docs.py +93 -0
- package/deploy/push_mcp.py +66 -0
- package/deploy/push_mcp_doc.py +28 -0
- package/deploy/push_v063.py +80 -0
- package/deploy/push_v2.py +71 -0
- package/deploy/qcheck.py +13 -0
- package/deploy/qcheck2.py +18 -0
- package/deploy/quick_check.py +8 -0
- package/deploy/rebuild.py +47 -0
- package/deploy/rebuild_frontend.py +44 -0
- package/deploy/restart.py +28 -0
- package/deploy/restore_frontend.py +42 -0
- package/deploy/restore_frontend2.py +41 -0
- package/deploy/restore_gateway.py +34 -0
- package/deploy/restore_quick.py +33 -0
- package/deploy/run_bash.py +19 -0
- package/deploy/run_sep.py +20 -0
- package/deploy/sdk_upgrade.py +50 -0
- package/deploy/server_prepare.py +41 -0
- package/deploy/server_setup.py +41 -0
- package/deploy/ssh_check.py +14 -0
- package/deploy/ssh_push.py +24 -0
- package/deploy/start_deploy.py +35 -0
- package/deploy/start_frontend.py +12 -0
- package/deploy/start_v2.py +29 -0
- package/deploy/stat.py +18 -0
- package/deploy/tail_log.py +11 -0
- package/deploy/update_env.py +32 -0
- package/deploy/upload_and_start.py +107 -0
- package/deploy/verify_a2a.py +13 -0
- package/deploy/verify_mcp.py +37 -0
- package/deploy/verify_sdk.py +21 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.js +41 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +149 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/crypto.d.ts +2 -0
- package/dist/lib/crypto.js +43 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/db.d.ts +3 -0
- package/dist/lib/db.js +26 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/ethers-utils.d.ts +60 -0
- package/dist/lib/ethers-utils.js +186 -0
- package/dist/lib/ethers-utils.js.map +1 -0
- package/dist/middleware/adminAuth.d.ts +2 -0
- package/dist/middleware/adminAuth.js +31 -0
- package/dist/middleware/adminAuth.js.map +1 -0
- package/dist/middleware/auth.d.ts +22 -0
- package/dist/middleware/auth.js +192 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +36 -0
- package/dist/middleware/error-handler.js +100 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/rate-limiter.d.ts +5 -0
- package/dist/middleware/rate-limiter.js +107 -0
- package/dist/middleware/rate-limiter.js.map +1 -0
- package/dist/routes/a2a.d.ts +2 -0
- package/dist/routes/a2a.js +84 -0
- package/dist/routes/a2a.js.map +1 -0
- package/dist/routes/admin.d.ts +2 -0
- package/dist/routes/admin.js +180 -0
- package/dist/routes/admin.js.map +1 -0
- package/dist/routes/agents.d.ts +2 -0
- package/dist/routes/agents.js +43 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/chat.d.ts +2 -0
- package/dist/routes/chat.js +183 -0
- package/dist/routes/chat.js.map +1 -0
- package/dist/routes/history.d.ts +2 -0
- package/dist/routes/history.js +92 -0
- package/dist/routes/history.js.map +1 -0
- package/dist/routes/mcp.d.ts +13 -0
- package/dist/routes/mcp.js +513 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/tenant.d.ts +2 -0
- package/dist/routes/tenant.js +154 -0
- package/dist/routes/tenant.js.map +1 -0
- package/dist/services/a2a-worker.d.ts +7 -0
- package/dist/services/a2a-worker.js +406 -0
- package/dist/services/a2a-worker.js.map +1 -0
- package/dist/services/agent-indexer.d.ts +4 -0
- package/dist/services/agent-indexer.js +124 -0
- package/dist/services/agent-indexer.js.map +1 -0
- package/e2e_wallet.js +175 -0
- package/ecosystem.config.js +17 -0
- package/package.json +33 -0
- package/src/config.ts +47 -0
- package/src/index.ts +143 -0
- package/src/lib/crypto.ts +44 -0
- package/src/lib/db.ts +25 -0
- package/src/lib/ethers-utils.ts +229 -0
- package/src/middleware/adminAuth.ts +34 -0
- package/src/middleware/auth.ts +244 -0
- package/src/middleware/error-handler.ts +109 -0
- package/src/middleware/rate-limiter.ts +115 -0
- package/src/routes/a2a.ts +97 -0
- package/src/routes/admin.ts +219 -0
- package/src/routes/agents.ts +52 -0
- package/src/routes/chat.ts +219 -0
- package/src/routes/history.ts +114 -0
- package/src/routes/mcp.ts +567 -0
- package/src/routes/tenant.ts +196 -0
- package/src/services/a2a-worker.ts +486 -0
- package/src/services/agent-indexer.ts +127 -0
- 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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"}
|