@agents-trust/mcp 0.0.0-stage → 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Agents Trust
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,102 @@
1
- # Temporary Holding Version
1
+ # Agents Trust MCP
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Find APIs for your task from Claude Desktop, Cursor or Claude Code. Recommendations include URLs, prices and call details. Inspect returns the stored evidence for one exact endpoint URL. This stdio server runs on your computer. Paid calls use your own wallet; Agents Trust holds no wallet keys.
4
+
5
+ Runtime requires Node.js 20 or later. Install from npm; your MCP host starts it over standard input/output:
6
+
7
+ ```sh
8
+ npx -y @agents-trust/mcp
9
+ ```
10
+
11
+ Supply a wallet only to the runtime launcher (see Configuration). To build from source instead, see Development.
12
+
13
+ ## Tools and cost
14
+
15
+ | Tool | Input | Result | Fee |
16
+ | --- | --- | --- | --- |
17
+ | `recommend` | `need`; optional `limit`, `live`, `max_price_usd`, `chain`, `view` | APIs for your task and call details | 0.01 USDC outside the free demos |
18
+ | `inspect` | `url`; optional `view` | Stored endpoint evidence without calling the provider | 1% of the endpoint's lowest quoted price, minimum 0.001 USDC |
19
+ | `receipt` | `payment_attempt_id` | Eventual settlement result | Free |
20
+ | `health` | none | Service version | Free |
21
+
22
+ Ask your host to call `inspect` with an exact endpoint URL from a recommendation. Preserve its fixed query parameters. For `inspect`, `view` accepts `legacy`, `compact`, `evidence` or `debug`; for `recommend` it accepts `legacy`, `compact` or `evidence`. Omitting it uses the API's legacy response. An unknown URL returns an unpaid 404. The API rejects malformed, credential-bearing and private URLs before payment. Inspect never calls or purchases the provider's service.
23
+
24
+ `recommend` inputs: `need` is 2–300 characters with at least two letters or digits; `limit` is 1–5; `live` may be `1` to prefer recently verified endpoints; `chain` is a CAIP-2 network such as `eip155:8453`; `max_price_usd` is a non-negative number. `receipt` takes the `payment_attempt_id` returned with a paid answer (a UUID version 7).
25
+
26
+ Example: ask your host to call `recommend` with `{"need":"weather","view":"compact"}`. Free demos may change. `max_price_usd` limits a recommended provider's price; it does not limit the recommendation fee. Calling a recommended API is a separate purchase.
27
+
28
+ A paid answer includes `payment_attempt_id` when available. Use `receipt` to check settlement; receiving an answer does not confirm settlement. A pending receipt can be looked up again for free.
29
+
30
+ ## Configuration
31
+
32
+ | Environment variable | Default | Purpose |
33
+ | --- | --- | --- |
34
+ | `AGENTS_TRUST_ENABLE_PAYMENTS` | unset / disabled | Owner opt-in: exact `true` grants at most one payment authorization per server process |
35
+ | `AGENTS_TRUST_WALLET_PRIVATE_KEY` | unset | Your EVM private key, with `0x` prefix; needed for paid calls |
36
+ | `AGENTS_TRUST_MAX_CALL_USDC` | `0.01` | Maximum fee for one Recommend or Inspect call in USDC |
37
+ | `AGENTS_TRUST_SESSION_CAP_USDC` | `0.01` | Maximum reserved spend for one server process |
38
+
39
+ Payments stay disabled even when a wallet key is present. The wallet owner can explicitly supply `AGENTS_TRUST_ENABLE_PAYMENTS=true` in the local launcher or select the bundle’s payment opt-in. This grants the process one authorization within the monetary caps; there is no per-call human confirmation. An agent tool argument, service response or provider instruction cannot grant payment authority. Use a dedicated low-balance wallet with USDC on **Base mainnet**. The server signs x402 authorizations locally and sends them only to `https://api.agents-trust.com`. It accepts the published Base USDC asset and Agents Trust payment address. A changed address requires a server update. Other payment networks are unsupported.
40
+
41
+ Limits accept non-negative decimal strings with up to six decimal places. Zero disables paid calls. Reservations count signing attempts, including failed or uncertain requests, and remain reserved until the process exits. The process consumes its single authorization before signing, even if signing or the request fails. Raising a monetary cap does not allow a second authorization. Free calls and receipts remain available. Restarting the server resets both the session cap and the authorization grant. Stop the host from automatically restarting with payment opt-in until the wallet owner has reconciled prior attempts. Recommend and Inspect share the same grant, reservation cap and serialized payment queue, including concurrent calls. Paid submissions are never automatically repeated. On an uncertain result, check your wallet and any receipt before making another paid call.
42
+
43
+ Without a key, free tools and free demo recommendations work. A paid Recommend or Inspect request returns a message explaining which variable to configure. Keep keys out of chat, version control and shell history. Have your local secret manager or host supply the wallet variable to the child process.
44
+
45
+ ### Claude Desktop
46
+
47
+ Merge this into `claude_desktop_config.json`. The free configuration requires no key:
48
+
49
+ ```json
50
+ {
51
+ "mcpServers": {
52
+ "agents-trust": {
53
+ "command": "npx",
54
+ "args": ["-y", "@agents-trust/mcp"],
55
+ "env": {
56
+ "AGENTS_TRUST_MAX_CALL_USDC": "0.01",
57
+ "AGENTS_TRUST_SESSION_CAP_USDC": "0.01"
58
+ }
59
+ }
60
+ }
61
+ }
62
+ ```
63
+
64
+ For paid calls, explicitly grant `AGENTS_TRUST_ENABLE_PAYMENTS=true` and supply `AGENTS_TRUST_WALLET_PRIVATE_KEY` to this process through your secure local launcher. GUI applications need the full path to your Node executable and do not always inherit your terminal environment.
65
+
66
+ ### Cursor
67
+
68
+ Use the same `mcpServers` block in `~/.cursor/mcp.json` or `.cursor/mcp.json`, adding `"type": "stdio"` to the server entry ([Cursor configuration](https://cursor.com/docs/mcp)). To read a key already injected into Cursor's environment, add this entry to the server's `env` object:
69
+
70
+ ```json
71
+ "AGENTS_TRUST_WALLET_PRIVATE_KEY": "${env:AGENTS_TRUST_WALLET_PRIVATE_KEY}"
72
+ ```
73
+
74
+ Keep wallet configuration local; do not commit it.
75
+
76
+ ### Claude Code
77
+
78
+ ```sh
79
+ claude mcp add --transport stdio agents-trust -- npx -y @agents-trust/mcp
80
+ ```
81
+
82
+ See [Claude Code MCP configuration](https://code.claude.com/docs/en/mcp). Launch Claude Code with payment opt-in chosen by the wallet owner and the wallet variable supplied by your secret manager. The server inherits it from the host.
83
+
84
+ ## Development
85
+
86
+ Build from source in a shell without `AGENTS_TRUST_WALLET_PRIVATE_KEY`; the build and bundle commands refuse that variable even when it is empty.
87
+
88
+ ```sh
89
+ git clone https://github.com/agents-trust/agents-trust-mcp.git
90
+ cd agents-trust-mcp
91
+ npm ci
92
+ npm run typecheck
93
+ npm run lint
94
+ npm test
95
+ npm run build
96
+ ```
97
+
98
+ Run the local server with `node dist/index.js`. Standard output carries MCP messages only. Tests generate throwaway keys in memory and make no payments. Development tests require Node.js 22.13+ or 24; CI also checks the built stdio server on Node.js 20.
99
+
100
+ `npm run test:paid` is an offline cryptographic authorization test using a generated throwaway key and mocked HTTP. No test reads a funded wallet or submits a real payment. Dependency installation scripts are disabled by `.npmrc`; use `npm ci` to preserve the reviewed lockfile. The bundle packer is also locked locally.
101
+
102
+ MIT licensed. See [LICENSE](LICENSE).
package/dist/api.js ADDED
@@ -0,0 +1,122 @@
1
+ import { x402Client, x402HTTPClient } from '@x402/fetch';
2
+ import { ExactEvmScheme } from '@x402/evm/exact/client';
3
+ import { privateKeyToAccount } from 'viem/accounts';
4
+ const ORIGIN = 'https://api.agents-trust.com';
5
+ const USDC = '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913';
6
+ const PAYEE = '0x96368628b679a459fe69815bacca5cb0232ac397';
7
+ export function units(value) {
8
+ if (!/^(0|[1-9]\d*)(\.\d{1,6})?$/.test(value))
9
+ throw new Error('Invalid USDC limit; use up to six decimal places.');
10
+ const [whole, fraction = ''] = value.split('.');
11
+ return BigInt(whole) * 1000000n + BigInt(fraction.padEnd(6, '0'));
12
+ }
13
+ export class AgentsTrustApi {
14
+ settings;
15
+ request;
16
+ spent = 0n;
17
+ authorizationUsed = false;
18
+ tail = Promise.resolve();
19
+ maxCall;
20
+ sessionCap;
21
+ constructor(settings = {}, request = fetch) {
22
+ this.settings = settings;
23
+ this.request = request;
24
+ this.maxCall = units(settings.maxCallUsdc ?? '0.01');
25
+ this.sessionCap = units(settings.sessionCapUsdc ?? '0.01');
26
+ }
27
+ // Count every signing attempt conservatively, including failures and uncertain responses.
28
+ recommend(params) {
29
+ return this.paidCall('/recommend', params);
30
+ }
31
+ inspect(params) {
32
+ return this.paidCall('/inspect', params);
33
+ }
34
+ paidCall(path, params) {
35
+ const task = this.tail.then(() => this.call(path, params, true));
36
+ this.tail = task.catch(() => undefined);
37
+ return task;
38
+ }
39
+ health() { return this.call('/health', {}); }
40
+ receipt(paymentAttemptId) { return this.call('/receipt', { payment_attempt_id: paymentAttemptId }); }
41
+ select(required, url) {
42
+ if (required.x402Version !== 2 || required.resource?.url !== url || !Array.isArray(required.accepts)) {
43
+ throw new Error('Unsupported payment challenge. No payment sent.');
44
+ }
45
+ const offer = required.accepts.find(o => o.scheme === 'exact' && o.network === 'eip155:8453'
46
+ && o.asset.toLowerCase() === USDC && o.payTo.toLowerCase() === PAYEE
47
+ && typeof o.amount === 'string' && /^[1-9]\d*$/.test(o.amount)
48
+ && Number.isInteger(o.maxTimeoutSeconds) && o.maxTimeoutSeconds > 0 && o.maxTimeoutSeconds <= 300
49
+ && o.extra?.name === 'USD Coin' && o.extra?.version === '2'
50
+ && (o.extra?.assetTransferMethod === undefined || o.extra.assetTransferMethod === 'eip3009'));
51
+ if (!offer)
52
+ throw new Error('No supported Base USDC payment offer. No payment sent.');
53
+ const amount = BigInt(offer.amount);
54
+ if (amount > this.maxCall)
55
+ throw new Error('Price exceeds AGENTS_TRUST_MAX_CALL_USDC. No payment sent.');
56
+ if (this.spent + amount > this.sessionCap)
57
+ throw new Error('Session spend cap reached. No payment sent.');
58
+ return offer;
59
+ }
60
+ async send(url, headers) {
61
+ return this.request(url, { headers, redirect: 'error', signal: AbortSignal.timeout(30_000) });
62
+ }
63
+ async call(path, params, paid = false) {
64
+ const url = new URL(path, ORIGIN);
65
+ for (const [name, value] of Object.entries(params))
66
+ if (value !== undefined)
67
+ url.searchParams.set(name, String(value));
68
+ let response;
69
+ try {
70
+ response = await this.send(url.href);
71
+ }
72
+ catch {
73
+ throw new Error('Agents Trust request failed.');
74
+ }
75
+ if (response.status === 402 && paid) {
76
+ if (this.settings.enablePayments !== true)
77
+ throw new Error('Payments disabled. The wallet owner must configure AGENTS_TRUST_ENABLE_PAYMENTS=true for one authorization per process.');
78
+ if (this.authorizationUsed)
79
+ throw new Error('Payment authorization already used in this process. Check your wallet and receipt before granting another process permission.');
80
+ if (!this.settings.walletKey)
81
+ throw new Error('Set AGENTS_TRUST_WALLET_PRIVATE_KEY to pay with Base USDC.');
82
+ try {
83
+ const account = privateKeyToAccount(this.settings.walletKey);
84
+ const client = new x402Client().register('eip155:8453', new ExactEvmScheme(account));
85
+ const http = new x402HTTPClient(client);
86
+ const required = http.getPaymentRequiredResponse(name => response.headers.get(name));
87
+ // Inspect quotes bind the canonical endpoint, without the response view.
88
+ // Keep the original request URL for both HTTP requests.
89
+ const endpoint = path === '/inspect' ? new URL(String(params.url)) : null;
90
+ const resource = endpoint
91
+ ? `${ORIGIN}/inspect?url=${encodeURIComponent(`${endpoint.protocol}//${endpoint.host}${endpoint.pathname}${endpoint.search}`)}`
92
+ : url.href;
93
+ const offer = this.select(required, resource);
94
+ this.spent += BigInt(offer.amount);
95
+ this.authorizationUsed = true;
96
+ const payload = await http.createPaymentPayload({ ...required, accepts: [offer] });
97
+ // Preserve the challenge extensions; never automatically retry an authorization.
98
+ response = await this.send(url.href, http.encodePaymentSignatureHeader(payload));
99
+ }
100
+ catch (error) {
101
+ if (error instanceof Error && /^(Price exceeds|Session spend cap|No supported Base|Unsupported payment)/.test(error.message))
102
+ throw error;
103
+ // Discard upstream error details: they can contain signing inputs.
104
+ // eslint-disable-next-line preserve-caught-error
105
+ throw new Error('Payment could not complete. Budget remains reserved; check your wallet and receipt before another call.');
106
+ }
107
+ }
108
+ if (!response.ok)
109
+ throw new Error(`Agents Trust returned HTTP ${response.status}. No automatic retry was made.`);
110
+ try {
111
+ const body = await response.json();
112
+ return {
113
+ data: body,
114
+ payment_attempt_id: response.headers.get('x-at-payment-attempt-id'),
115
+ request_id: response.headers.get('x-at-request-id'),
116
+ };
117
+ }
118
+ catch {
119
+ throw new Error('Agents Trust returned an unreadable response. Check any payment receipt before another call.');
120
+ }
121
+ }
122
+ }
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { createServer } from './server.js';
4
+ try {
5
+ const server = createServer({
6
+ enablePayments: process.env.AGENTS_TRUST_ENABLE_PAYMENTS === 'true',
7
+ walletKey: process.env.AGENTS_TRUST_WALLET_PRIVATE_KEY,
8
+ maxCallUsdc: process.env.AGENTS_TRUST_MAX_CALL_USDC,
9
+ sessionCapUsdc: process.env.AGENTS_TRUST_SESSION_CAP_USDC,
10
+ });
11
+ await server.connect(new StdioServerTransport());
12
+ }
13
+ catch {
14
+ process.stderr.write('Agents Trust could not start. Check wallet and USDC limit configuration.\n');
15
+ process.exitCode = 1;
16
+ }
package/dist/server.js ADDED
@@ -0,0 +1,59 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import { AgentsTrustApi } from './api.js';
4
+ export function createServer(settings = {}, request = fetch) {
5
+ const api = new AgentsTrustApi(settings, request);
6
+ const server = new McpServer({ name: 'agents-trust', version: '0.1.0' });
7
+ const run = async (action) => {
8
+ try {
9
+ let text = JSON.stringify(await action());
10
+ if (settings.walletKey)
11
+ text = text.split(settings.walletKey).join('[redacted]');
12
+ return { content: [{ type: 'text', text }] };
13
+ }
14
+ catch (error) {
15
+ let text = error instanceof Error ? error.message : 'Agents Trust request failed.';
16
+ if (settings.walletKey)
17
+ text = text.split(settings.walletKey).join('[redacted]');
18
+ return { isError: true, content: [{ type: 'text', text }] };
19
+ }
20
+ };
21
+ server.registerTool('recommend', {
22
+ description: 'Find APIs for your task, with URLs, prices and call details. Payment requires owner opt-in and consumes the process’s single authorization, up to the configured USDC limit.',
23
+ inputSchema: {
24
+ need: z.string().refine(s => Array.from(s).length >= 2 && Array.from(s).length <= 300 && /[\p{L}\p{N}].*[\p{L}\p{N}]/u.test(s), 'Use 2–300 characters with at least two letters or digits.'),
25
+ limit: z.number().int().min(1).max(5).optional(),
26
+ live: z.literal(1).optional(),
27
+ max_price_usd: z.number().finite().min(0).optional().describe('Maximum provider price; separate from the recommendation fee.'),
28
+ chain: z.string().regex(/^[a-z0-9-]{2,16}:[A-Za-z0-9_=-]{1,64}$/).optional(),
29
+ view: z.enum(['legacy', 'compact', 'evidence']).optional(),
30
+ },
31
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
32
+ }, args => run(() => api.recommend(args)));
33
+ server.registerTool('inspect', {
34
+ description: 'Read stored evidence for one exact API endpoint URL, without calling or paying that provider. The Inspect fee is 1% of the endpoint\'s lowest quoted price, with a 0.001 USDC floor. Read the actual quote. Payment requires owner opt-in and shares the process\'s single authorization and USDC limits with Recommend.',
35
+ inputSchema: {
36
+ url: z.string().min(1).max(2048).refine(value => {
37
+ try {
38
+ const url = new URL(value);
39
+ return url.protocol === 'https:' && !url.username && !url.password;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }, 'Use an absolute HTTPS endpoint URL without credentials.').describe('Exact endpoint URL, including its fixed query parameters. The API rejects private URLs before payment.'),
45
+ view: z.enum(['legacy', 'compact', 'evidence', 'debug']).optional(),
46
+ },
47
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
48
+ }, args => run(() => api.inspect(args)));
49
+ server.registerTool('receipt', {
50
+ description: 'Look up payment settlement by payment attempt ID. Free.',
51
+ inputSchema: { payment_attempt_id: z.uuid() },
52
+ annotations: { readOnlyHint: true, openWorldHint: true },
53
+ }, args => run(() => api.receipt(args.payment_attempt_id)));
54
+ server.registerTool('health', {
55
+ description: 'Read the Agents Trust service version. Free.', inputSchema: {},
56
+ annotations: { readOnlyHint: true, openWorldHint: true },
57
+ }, () => run(() => api.health()));
58
+ return server;
59
+ }
package/package.json CHANGED
@@ -1,6 +1,60 @@
1
1
  {
2
2
  "name": "@agents-trust/mcp",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.1",
4
+ "description": "Find APIs, inspect endpoint evidence and look up payment receipts with Agents Trust.",
5
+ "scripts": {
6
+ "build": "node scripts/build.mjs",
7
+ "typecheck": "tsc --noEmit",
8
+ "lint": "eslint .",
9
+ "test": "vitest run",
10
+ "prepack": "npm run build",
11
+ "test:paid": "vitest run test/paid.test.ts",
12
+ "smoke": "node scripts/smoke.mjs",
13
+ "bundle": "npm run build && node scripts/bundle.mjs",
14
+ "check:artifacts": "node scripts/check-artifacts.mjs"
15
+ },
16
+ "keywords": [],
17
+ "license": "MIT",
18
+ "type": "module",
19
+ "dependencies": {
20
+ "@modelcontextprotocol/sdk": "1.32.2",
21
+ "@x402/core": "2.28.0",
22
+ "@x402/evm": "2.28.0",
23
+ "@x402/fetch": "2.28.0",
24
+ "viem": "2.57.7",
25
+ "zod": "4.6.7"
26
+ },
27
+ "devDependencies": {
28
+ "@eslint/js": "10.0.1",
29
+ "@types/node": "22.20.5",
30
+ "eslint": "10.12.0",
31
+ "typescript": "6.0.3",
32
+ "typescript-eslint": "8.71.2",
33
+ "vitest": "5.0.5",
34
+ "fflate": "0.8.3"
35
+ },
36
+ "bin": {
37
+ "agents-trust-mcp": "dist/index.js"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "server.json"
42
+ ],
43
+ "engines": {
44
+ "node": ">=20"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/agents-trust/agents-trust-mcp.git"
49
+ },
50
+ "homepage": "https://agents-trust.com",
51
+ "mcpName": "com.agents-trust/recommend",
52
+ "publishConfig": {
53
+ "access": "public"
54
+ },
55
+ "overrides": {
56
+ "zod": "4.6.7",
57
+ "body-parser": "2.4.0",
58
+ "fast-uri": "3.1.9"
59
+ }
60
+ }
package/server.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "com.agents-trust/recommend",
4
+ "title": "Agents Trust",
5
+ "description": "Find APIs and inspect endpoint evidence. Pay with your own Base USDC wallet.",
6
+ "version": "0.1.1",
7
+ "websiteUrl": "https://agents-trust.com",
8
+ "repository": {
9
+ "url": "https://github.com/agents-trust/agents-trust-mcp",
10
+ "source": "github"
11
+ },
12
+ "packages": [
13
+ {
14
+ "registryType": "npm",
15
+ "identifier": "@agents-trust/mcp",
16
+ "version": "0.1.1",
17
+ "transport": {
18
+ "type": "stdio"
19
+ },
20
+ "environmentVariables": [
21
+ {
22
+ "name": "AGENTS_TRUST_ENABLE_PAYMENTS",
23
+ "description": "Owner opt-in: exactly true allows one payment authorization per server process",
24
+ "isRequired": false,
25
+ "default": "false",
26
+ "format": "string"
27
+ },
28
+ {
29
+ "name": "AGENTS_TRUST_WALLET_PRIVATE_KEY",
30
+ "description": "Your wallet private key for Base USDC payments",
31
+ "isRequired": false,
32
+ "isSecret": true,
33
+ "format": "string"
34
+ },
35
+ {
36
+ "name": "AGENTS_TRUST_MAX_CALL_USDC",
37
+ "description": "Maximum Recommend or Inspect fee in USDC",
38
+ "default": "0.01",
39
+ "format": "string"
40
+ },
41
+ {
42
+ "name": "AGENTS_TRUST_SESSION_CAP_USDC",
43
+ "description": "Per-process USDC reservation cap",
44
+ "default": "0.01",
45
+ "format": "string"
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ }