plugin-x402-endpoints 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -0
- package/dist/index.cjs +2060 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +150 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.js +2048 -0
- package/dist/index.js.map +1 -0
- package/package.json +90 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2060 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/catalog.json
|
|
6
|
+
var catalog_default = {
|
|
7
|
+
name: "x402-endpoints",
|
|
8
|
+
baseUrl: "https://x402-endpoints.onrender.com",
|
|
9
|
+
network: "eip155:8453",
|
|
10
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
11
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
12
|
+
facilitator: "https://api.cdp.coinbase.com/platform/v2/x402",
|
|
13
|
+
endpoints: [
|
|
14
|
+
{
|
|
15
|
+
tool: "gleif_lei",
|
|
16
|
+
action: "X402_GLEIF_LEI",
|
|
17
|
+
path: "/gleif/lei",
|
|
18
|
+
method: "GET",
|
|
19
|
+
price: "$0.01",
|
|
20
|
+
description: "Look up any Legal Entity Identifier (LEI) against the official GLEIF global registry \u2014 returns legal name, status, jurisdiction, legal form and registered address, real-time, worldwide coverage.",
|
|
21
|
+
llm_usage_prompt: "LEI lookup via GLEIF: legal entity name, status, jurisdiction, ultimate & direct parent relationships and registration authority. For regulatory reporting (EMIR/MiFID), KYB and counterparty agents. Input: LEI code or legal name.",
|
|
22
|
+
tags: [
|
|
23
|
+
"lei",
|
|
24
|
+
"gleif",
|
|
25
|
+
"kyb",
|
|
26
|
+
"compliance"
|
|
27
|
+
],
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
lei: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "20-character LEI, e.g. '529900T8BM49AURSDO55'",
|
|
34
|
+
pattern: "^[A-Z0-9]{20}$"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
required: [
|
|
38
|
+
"lei"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
outputExample: {
|
|
42
|
+
lei: "529900T8BM49AURSDO55",
|
|
43
|
+
legal_name: "Ubisecure Oy",
|
|
44
|
+
entity_status: "ACTIVE",
|
|
45
|
+
registration_status: "ISSUED",
|
|
46
|
+
jurisdiction: "FI",
|
|
47
|
+
legal_form_code: "DKUW",
|
|
48
|
+
legal_address: {
|
|
49
|
+
lines: [
|
|
50
|
+
"Tekniikantie 14"
|
|
51
|
+
],
|
|
52
|
+
city: "ESPOO",
|
|
53
|
+
region: "FI-18",
|
|
54
|
+
country: "FI",
|
|
55
|
+
postal_code: "02150"
|
|
56
|
+
},
|
|
57
|
+
initial_registration_date: "2016-08-04T11:00:36Z",
|
|
58
|
+
last_update_date: "2024-06-20T07:11:02Z",
|
|
59
|
+
next_renewal_date: "2027-06-28T18:34:06Z",
|
|
60
|
+
managing_lou: "529900T8BM49AURSDO55",
|
|
61
|
+
source: "GLEIF API v1 (gleif.org)",
|
|
62
|
+
timestamp: "2026-06-24T12:00:00Z",
|
|
63
|
+
disclaimer: "Indicative data from the GLEIF register, not a compliance opinion.",
|
|
64
|
+
cached: false
|
|
65
|
+
},
|
|
66
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
67
|
+
network: "eip155:8453",
|
|
68
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
tool: "vies_vat",
|
|
72
|
+
action: "X402_VIES_VAT",
|
|
73
|
+
path: "/vies/vat",
|
|
74
|
+
method: "GET",
|
|
75
|
+
price: "$0.01",
|
|
76
|
+
description: "Validate an EU VAT number against the official EU VIES registry across all 27 member states \u2014 returns valid/invalid plus the registered company name and address. Distinguishes 'invalid' (number does not exist) from 'service unavailable' (national DB offline).",
|
|
77
|
+
llm_usage_prompt: "EU VAT number validation via the official VIES registry across 27 member states. Returns valid/invalid plus registered company name and address. Critically distinguishes 'invalid' (number does not exist) from 'unavailable' (national VAT database offline). For invoicing, B2B onboarding, KYB and tax-compliance agents. Input: 2-letter country code (EL for Greece) + VAT number.",
|
|
78
|
+
tags: [
|
|
79
|
+
"vat",
|
|
80
|
+
"vies",
|
|
81
|
+
"eu",
|
|
82
|
+
"kyb"
|
|
83
|
+
],
|
|
84
|
+
inputSchema: {
|
|
85
|
+
type: "object",
|
|
86
|
+
properties: {
|
|
87
|
+
country: {
|
|
88
|
+
type: "string",
|
|
89
|
+
description: "2-letter EU member state code, e.g. 'IE' (use 'EL' for Greece)",
|
|
90
|
+
pattern: "^[A-Z]{2}$"
|
|
91
|
+
},
|
|
92
|
+
vat: {
|
|
93
|
+
type: "string",
|
|
94
|
+
description: "VAT number without country prefix, e.g. '6388047V'"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
required: [
|
|
98
|
+
"country",
|
|
99
|
+
"vat"
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
outputExample: {
|
|
103
|
+
country_code: "IE",
|
|
104
|
+
vat_number: "6388047V",
|
|
105
|
+
valid: true,
|
|
106
|
+
name: "GOOGLE IRELAND LIMITED",
|
|
107
|
+
address: "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
|
|
108
|
+
request_date: "2026-06-24T14:17:13.066Z",
|
|
109
|
+
source: "EU VIES REST API (ec.europa.eu)",
|
|
110
|
+
timestamp: "2026-06-24T14:17:13Z",
|
|
111
|
+
disclaimer: "Indicative data from the VIES register (EU Commission), not a compliance opinion.",
|
|
112
|
+
cached: false
|
|
113
|
+
},
|
|
114
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
115
|
+
network: "eip155:8453",
|
|
116
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
tool: "polymarket_odds",
|
|
120
|
+
action: "X402_POLYMARKET_ODDS",
|
|
121
|
+
path: "/polymarket/odds",
|
|
122
|
+
method: "GET",
|
|
123
|
+
price: "$0.05",
|
|
124
|
+
description: "Live prediction market odds and implied probabilities from Polymarket \u2014 give a market id or slug, get each outcome with its probability (0-1), volume, liquidity and resolution status.",
|
|
125
|
+
llm_usage_prompt: "Live prediction-market odds and implied probabilities from Polymarket. Returns each outcome with its probability (0-1), plus volume, liquidity and resolution status for a market. For event-forecasting, hedging and research agents. Input: Polymarket market id or slug.",
|
|
126
|
+
tags: [
|
|
127
|
+
"polymarket",
|
|
128
|
+
"prediction-market",
|
|
129
|
+
"odds",
|
|
130
|
+
"probability"
|
|
131
|
+
],
|
|
132
|
+
inputSchema: {
|
|
133
|
+
type: "object",
|
|
134
|
+
properties: {
|
|
135
|
+
market: {
|
|
136
|
+
type: "string",
|
|
137
|
+
description: "Polymarket market id or slug, e.g. '2654605' or 'will-it-rain-tomorrow'"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
required: [
|
|
141
|
+
"market"
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
outputExample: {
|
|
145
|
+
id: "2654605",
|
|
146
|
+
slug: "wta-andreeva-vs-day-set-2",
|
|
147
|
+
question: "Set 2 Winner: Andreeva vs Day",
|
|
148
|
+
outcomes: [
|
|
149
|
+
{
|
|
150
|
+
name: "Andreeva",
|
|
151
|
+
price: 0.06,
|
|
152
|
+
probability: 0.06
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: "Day",
|
|
156
|
+
price: 0.94,
|
|
157
|
+
probability: 0.94
|
|
158
|
+
}
|
|
159
|
+
],
|
|
160
|
+
active: true,
|
|
161
|
+
closed: false,
|
|
162
|
+
volume: "99.98",
|
|
163
|
+
liquidity: "1426.8",
|
|
164
|
+
end_date: "2026-07-01T11:30:00Z",
|
|
165
|
+
resolution_source: null,
|
|
166
|
+
source: "Polymarket Gamma API (gamma-api.polymarket.com)",
|
|
167
|
+
timestamp: "2026-06-24T14:20:00Z",
|
|
168
|
+
disclaimer: "Indicative market odds, not investment advice.",
|
|
169
|
+
cached: false
|
|
170
|
+
},
|
|
171
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
172
|
+
network: "eip155:8453",
|
|
173
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
tool: "flights_states",
|
|
177
|
+
action: "X402_FLIGHTS_STATES",
|
|
178
|
+
path: "/flights/states",
|
|
179
|
+
method: "GET",
|
|
180
|
+
price: "$0.01",
|
|
181
|
+
description: "Real-time aircraft states worldwide from adsb.fi open data (ADS-B) \u2014 give a bounding box, get every aircraft in the area with live position, altitude, speed, heading and ground status. Data by adsb.fi (ODbL).",
|
|
182
|
+
llm_usage_prompt: "Real-time aircraft states worldwide from adsb.fi open data (ADS-B). Returns every aircraft in a bounding box with live position, altitude, velocity, heading and on-ground status. For travel, logistics, airspace-monitoring and tracking agents. Input: bounding box (lamin, lomin, lamax, lomax). Data by adsb.fi (ODbL).",
|
|
183
|
+
tags: [
|
|
184
|
+
"flights",
|
|
185
|
+
"adsb-fi",
|
|
186
|
+
"aircraft",
|
|
187
|
+
"ads-b"
|
|
188
|
+
],
|
|
189
|
+
inputSchema: {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: {
|
|
192
|
+
lamin: {
|
|
193
|
+
type: "number",
|
|
194
|
+
description: "Min latitude of bounding box, e.g. 48.0"
|
|
195
|
+
},
|
|
196
|
+
lomin: {
|
|
197
|
+
type: "number",
|
|
198
|
+
description: "Min longitude of bounding box, e.g. 2.0"
|
|
199
|
+
},
|
|
200
|
+
lamax: {
|
|
201
|
+
type: "number",
|
|
202
|
+
description: "Max latitude of bounding box, e.g. 49.0"
|
|
203
|
+
},
|
|
204
|
+
lomax: {
|
|
205
|
+
type: "number",
|
|
206
|
+
description: "Max longitude of bounding box, e.g. 3.0"
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
required: [
|
|
210
|
+
"lamin",
|
|
211
|
+
"lomin",
|
|
212
|
+
"lamax",
|
|
213
|
+
"lomax"
|
|
214
|
+
]
|
|
215
|
+
},
|
|
216
|
+
outputExample: {
|
|
217
|
+
bbox: {
|
|
218
|
+
lamin: 48,
|
|
219
|
+
lomin: 2,
|
|
220
|
+
lamax: 49,
|
|
221
|
+
lomax: 3
|
|
222
|
+
},
|
|
223
|
+
time: 1782310689,
|
|
224
|
+
count: 1,
|
|
225
|
+
states: [
|
|
226
|
+
{
|
|
227
|
+
icao24: "3c49b1",
|
|
228
|
+
callsign: "TUI6HA",
|
|
229
|
+
origin_country: null,
|
|
230
|
+
longitude: 2.189676,
|
|
231
|
+
latitude: 48.820775,
|
|
232
|
+
baro_altitude_m: 11582.4,
|
|
233
|
+
geo_altitude_m: 11887.2,
|
|
234
|
+
velocity_ms: 239.01,
|
|
235
|
+
true_track_deg: 44.22,
|
|
236
|
+
vertical_rate_ms: -2.28,
|
|
237
|
+
on_ground: false,
|
|
238
|
+
squawk: "1000",
|
|
239
|
+
last_contact: 1782418393,
|
|
240
|
+
registration: "D-ABMQ",
|
|
241
|
+
aircraft_type: "B738"
|
|
242
|
+
}
|
|
243
|
+
],
|
|
244
|
+
source: "adsb.fi open data (opendata.adsb.fi)",
|
|
245
|
+
attribution: "Live ADS-B data by adsb.fi (https://adsb.fi) \u2014 community ODbL, free open data.",
|
|
246
|
+
timestamp: "2026-06-24T14:25:00Z",
|
|
247
|
+
cached: false
|
|
248
|
+
},
|
|
249
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
250
|
+
network: "eip155:8453",
|
|
251
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
tool: "ev_charging",
|
|
255
|
+
action: "X402_EV_CHARGING",
|
|
256
|
+
path: "/ev/charging",
|
|
257
|
+
method: "GET",
|
|
258
|
+
price: "$0.01",
|
|
259
|
+
description: "EV charging stations worldwide from Open Charge Map \u2014 give a location and radius, get nearby stations with operator, connector type, power (kW), number of points and status.",
|
|
260
|
+
llm_usage_prompt: "EV charging stations worldwide from Open Charge Map. Returns nearby stations with operator, connector type (Type2/CCS/CHAdeMO), power in kW, number of points and status. For routing, fleet and trip-planning agents. Input: latitude, longitude, radius (km) and max results.",
|
|
261
|
+
tags: [
|
|
262
|
+
"ev",
|
|
263
|
+
"charging",
|
|
264
|
+
"open-charge-map",
|
|
265
|
+
"mobility"
|
|
266
|
+
],
|
|
267
|
+
inputSchema: {
|
|
268
|
+
type: "object",
|
|
269
|
+
properties: {
|
|
270
|
+
latitude: {
|
|
271
|
+
type: "number",
|
|
272
|
+
description: "Latitude of search center, e.g. 48.85"
|
|
273
|
+
},
|
|
274
|
+
longitude: {
|
|
275
|
+
type: "number",
|
|
276
|
+
description: "Longitude of search center, e.g. 2.35"
|
|
277
|
+
},
|
|
278
|
+
distance: {
|
|
279
|
+
type: "number",
|
|
280
|
+
description: "Search radius in km (0-200], e.g. 5"
|
|
281
|
+
},
|
|
282
|
+
maxresults: {
|
|
283
|
+
type: "integer",
|
|
284
|
+
description: "Max stations to return [1-200], e.g. 20"
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
required: [
|
|
288
|
+
"latitude",
|
|
289
|
+
"longitude"
|
|
290
|
+
]
|
|
291
|
+
},
|
|
292
|
+
outputExample: {
|
|
293
|
+
query: {
|
|
294
|
+
latitude: 48.85,
|
|
295
|
+
longitude: 2.35,
|
|
296
|
+
distance_km: 5
|
|
297
|
+
},
|
|
298
|
+
count: 1,
|
|
299
|
+
stations: [
|
|
300
|
+
{
|
|
301
|
+
id: 198782,
|
|
302
|
+
title: "SAEMES | PARKING LAGRANGE",
|
|
303
|
+
address: "19 rue Maubert 75005 Paris",
|
|
304
|
+
town: null,
|
|
305
|
+
postcode: null,
|
|
306
|
+
country_id: 80,
|
|
307
|
+
latitude: 48.8507,
|
|
308
|
+
longitude: 2.3487,
|
|
309
|
+
distance_km: 0.21,
|
|
310
|
+
operator: null,
|
|
311
|
+
usage_cost: null,
|
|
312
|
+
num_points: null,
|
|
313
|
+
status: null,
|
|
314
|
+
operational: null,
|
|
315
|
+
connections: [
|
|
316
|
+
{
|
|
317
|
+
type: "Type 2 (Socket Only)",
|
|
318
|
+
power_kw: 22,
|
|
319
|
+
current_type_id: 20,
|
|
320
|
+
quantity: 2,
|
|
321
|
+
status: "Operational",
|
|
322
|
+
operational: true
|
|
323
|
+
}
|
|
324
|
+
],
|
|
325
|
+
date_last_verified: "2022-08-23T10:36:00Z"
|
|
326
|
+
}
|
|
327
|
+
],
|
|
328
|
+
source: "Open Charge Map (api.openchargemap.io)",
|
|
329
|
+
timestamp: "2026-06-24T14:30:00Z",
|
|
330
|
+
cached: false
|
|
331
|
+
},
|
|
332
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
333
|
+
network: "eip155:8453",
|
|
334
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
tool: "bodacc_annonces",
|
|
338
|
+
action: "X402_BODACC_ANNONCES",
|
|
339
|
+
path: "/bodacc/annonces",
|
|
340
|
+
method: "GET",
|
|
341
|
+
price: "$0.01",
|
|
342
|
+
description: "Search the official French BODACC registry (DILA) for company legal announcements: incorporations, modifications, radiations and insolvencies \u2014 coverage France, by name, SIREN or RCS.",
|
|
343
|
+
llm_usage_prompt: "BODACC company legal announcements monitor (France, official DILA source): incorporations, modifications, radiations and insolvency proceedings for a company. Returns announcement type, family, date, court (tribunal), registre/SIREN and link. For credit-risk, supplier-risk, KYB and AML agents. Input: company name, SIREN or RCS.",
|
|
344
|
+
tags: [
|
|
345
|
+
"bodacc",
|
|
346
|
+
"france",
|
|
347
|
+
"company",
|
|
348
|
+
"insolvency"
|
|
349
|
+
],
|
|
350
|
+
inputSchema: {
|
|
351
|
+
type: "object",
|
|
352
|
+
properties: {
|
|
353
|
+
q: {
|
|
354
|
+
type: "string",
|
|
355
|
+
description: "Company name, SIREN or RCS, e.g. 'OVH' or '424761419'"
|
|
356
|
+
},
|
|
357
|
+
famille: {
|
|
358
|
+
type: "string",
|
|
359
|
+
description: "Optional filter: creation | modification | radiation | depot | collective"
|
|
360
|
+
},
|
|
361
|
+
limit: {
|
|
362
|
+
type: "integer",
|
|
363
|
+
description: "Max announcements [1-100], e.g. 10"
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
required: [
|
|
367
|
+
"q"
|
|
368
|
+
]
|
|
369
|
+
},
|
|
370
|
+
outputExample: {
|
|
371
|
+
query: "OVH",
|
|
372
|
+
famille: "creation",
|
|
373
|
+
total_count: 165,
|
|
374
|
+
count: 1,
|
|
375
|
+
annonces: [
|
|
376
|
+
{
|
|
377
|
+
id: "A202300012345",
|
|
378
|
+
date_parution: "2026-06-12",
|
|
379
|
+
type: "Annonce",
|
|
380
|
+
famille: "Cr\xE9ations",
|
|
381
|
+
registre: [
|
|
382
|
+
"104274436",
|
|
383
|
+
"104 274 436"
|
|
384
|
+
],
|
|
385
|
+
commercant: "OVHcloud OCT5",
|
|
386
|
+
ville: "ROUBAIX",
|
|
387
|
+
departement: "Nord",
|
|
388
|
+
tribunal: "Lille M\xE9tropole",
|
|
389
|
+
jugement: null,
|
|
390
|
+
url: "https://www.bodacc.fr/annonce/detail/A202300012345"
|
|
391
|
+
}
|
|
392
|
+
],
|
|
393
|
+
source: "BODACC \u2014 DILA via OpenDataSoft (bodacc-datadila.opendatasoft.com)",
|
|
394
|
+
timestamp: "2026-06-24T15:00:00Z",
|
|
395
|
+
disclaimer: "Indicative data from BODACC (DILA), not legal advice.",
|
|
396
|
+
cached: false
|
|
397
|
+
},
|
|
398
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
399
|
+
network: "eip155:8453",
|
|
400
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
tool: "ted_tenders",
|
|
404
|
+
action: "X402_TED_TENDERS",
|
|
405
|
+
path: "/ted/tenders",
|
|
406
|
+
method: "GET",
|
|
407
|
+
price: "$0.05",
|
|
408
|
+
description: "Search the official EU TED (Tenders Electronic Daily) for public procurement notices across the 27+ member states \u2014 by keywords, buyer country and CPV code.",
|
|
409
|
+
llm_usage_prompt: "EU public-procurement tender search via the official TED (Tenders Electronic Daily). Returns notices: publication number, title, buyer name and country, notice type, publication date and link. Filter by keywords, buyer country (ISO-3) and CPV code. For business-development, bid and market-intelligence agents.",
|
|
410
|
+
tags: [
|
|
411
|
+
"ted",
|
|
412
|
+
"procurement",
|
|
413
|
+
"tenders",
|
|
414
|
+
"eu"
|
|
415
|
+
],
|
|
416
|
+
inputSchema: {
|
|
417
|
+
type: "object",
|
|
418
|
+
properties: {
|
|
419
|
+
query: {
|
|
420
|
+
type: "string",
|
|
421
|
+
description: "Keywords, e.g. 'cloud software'"
|
|
422
|
+
},
|
|
423
|
+
country: {
|
|
424
|
+
type: "string",
|
|
425
|
+
description: "Buyer country ISO-3 code, e.g. 'FRA', 'DEU'"
|
|
426
|
+
},
|
|
427
|
+
cpv: {
|
|
428
|
+
type: "string",
|
|
429
|
+
description: "CPV code prefix, e.g. '72000000' (IT services)"
|
|
430
|
+
},
|
|
431
|
+
limit: {
|
|
432
|
+
type: "integer",
|
|
433
|
+
description: "Max notices [1-50], e.g. 10"
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
outputExample: {
|
|
438
|
+
query: {
|
|
439
|
+
text: "software",
|
|
440
|
+
country: "FRA",
|
|
441
|
+
cpv: null
|
|
442
|
+
},
|
|
443
|
+
total: 31412,
|
|
444
|
+
count: 1,
|
|
445
|
+
tenders: [
|
|
446
|
+
{
|
|
447
|
+
publication_number: "212976-2016",
|
|
448
|
+
title: "France-Ch\xE2tenay-Malabry: System, storage and content management software package",
|
|
449
|
+
buyer_name: "Ecole Centrale",
|
|
450
|
+
buyer_country: "FRA",
|
|
451
|
+
notice_type: "Contract notice",
|
|
452
|
+
publication_date: "2016-06-22",
|
|
453
|
+
url: "https://ted.europa.eu/en/notice/212976-2016"
|
|
454
|
+
}
|
|
455
|
+
],
|
|
456
|
+
source: "EU TED \u2014 Tenders Electronic Daily (api.ted.europa.eu)",
|
|
457
|
+
timestamp: "2026-06-24T15:05:00Z",
|
|
458
|
+
cached: false
|
|
459
|
+
},
|
|
460
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
461
|
+
network: "eip155:8453",
|
|
462
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
tool: "eurlex_search",
|
|
466
|
+
action: "X402_EURLEX_SEARCH",
|
|
467
|
+
path: "/eurlex/search",
|
|
468
|
+
method: "GET",
|
|
469
|
+
price: "$0.01",
|
|
470
|
+
description: "Search official EUR-Lex for EU legislation, treaties, case law and legal acts by keyword \u2014 returns CELEX number, title and date. Multilingual (en, fr, de, es, it, nl, pl).",
|
|
471
|
+
llm_usage_prompt: "EUR-Lex search for EU legislation, treaties, case law and legal acts via the official EU Publications Office (CELLAR). Full-text title search returns CELEX number, title, date and EUR-Lex link. Multilingual (en, fr, de, es, it, nl, pl). For legal-research, regulatory and compliance agents. Input: keywords.",
|
|
472
|
+
tags: [
|
|
473
|
+
"eurlex",
|
|
474
|
+
"eu-law",
|
|
475
|
+
"legislation",
|
|
476
|
+
"case-law"
|
|
477
|
+
],
|
|
478
|
+
inputSchema: {
|
|
479
|
+
type: "object",
|
|
480
|
+
properties: {
|
|
481
|
+
query: {
|
|
482
|
+
type: "string",
|
|
483
|
+
description: "Keywords searched in act titles, e.g. 'data protection'"
|
|
484
|
+
},
|
|
485
|
+
language: {
|
|
486
|
+
type: "string",
|
|
487
|
+
description: "Language: en, fr, de, es, it, nl, pl (default en)"
|
|
488
|
+
},
|
|
489
|
+
limit: {
|
|
490
|
+
type: "integer",
|
|
491
|
+
description: "Max documents [1-50], e.g. 10"
|
|
492
|
+
}
|
|
493
|
+
},
|
|
494
|
+
required: [
|
|
495
|
+
"query"
|
|
496
|
+
]
|
|
497
|
+
},
|
|
498
|
+
outputExample: {
|
|
499
|
+
query: "data protection",
|
|
500
|
+
language: "en",
|
|
501
|
+
count: 1,
|
|
502
|
+
documents: [
|
|
503
|
+
{
|
|
504
|
+
celex: "32016R0679",
|
|
505
|
+
title: "Regulation (EU) 2016/679 of the European Parliament and of the Council",
|
|
506
|
+
date: "2016-04-27",
|
|
507
|
+
url: "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679"
|
|
508
|
+
}
|
|
509
|
+
],
|
|
510
|
+
source: "EUR-Lex / CELLAR SPARQL (publications.europa.eu)",
|
|
511
|
+
timestamp: "2026-06-24T15:10:00Z",
|
|
512
|
+
cached: false
|
|
513
|
+
},
|
|
514
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
515
|
+
network: "eip155:8453",
|
|
516
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
tool: "sanctions_screen",
|
|
520
|
+
action: "X402_SANCTIONS_SCREEN",
|
|
521
|
+
path: "/sanctions/screen",
|
|
522
|
+
method: "GET",
|
|
523
|
+
price: "$0.05",
|
|
524
|
+
description: "Screen a name against the official EU consolidated sanctions list (FISMA) \u2014 returns matches with a similarity score and context (EU reference, type, programme), not a binary yes/no.",
|
|
525
|
+
llm_usage_prompt: "Name screening against the official EU consolidated financial sanctions list (FISMA). Fuzzy-matches a person or entity name and returns matches with a similarity score plus context: EU reference, subject type, programme and designation details. Not a binary yes/no \u2014 returns ranked matches for human review. For KYB, AML and payment-compliance agents. Input: name (+optional type).",
|
|
526
|
+
tags: [
|
|
527
|
+
"sanctions",
|
|
528
|
+
"compliance",
|
|
529
|
+
"aml",
|
|
530
|
+
"eu"
|
|
531
|
+
],
|
|
532
|
+
inputSchema: {
|
|
533
|
+
type: "object",
|
|
534
|
+
properties: {
|
|
535
|
+
name: {
|
|
536
|
+
type: "string",
|
|
537
|
+
description: "Name to screen (person or entity), e.g. 'Saddam Hussein'"
|
|
538
|
+
},
|
|
539
|
+
type: {
|
|
540
|
+
type: "string",
|
|
541
|
+
description: "Optional: 'person' or 'enterprise'"
|
|
542
|
+
},
|
|
543
|
+
threshold: {
|
|
544
|
+
type: "number",
|
|
545
|
+
description: "Min similarity 0-1 to report a match (default 0.7)"
|
|
546
|
+
},
|
|
547
|
+
limit: {
|
|
548
|
+
type: "integer",
|
|
549
|
+
description: "Max matches [1-50], e.g. 10"
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
required: [
|
|
553
|
+
"name"
|
|
554
|
+
]
|
|
555
|
+
},
|
|
556
|
+
outputExample: {
|
|
557
|
+
query: "Saddam Hussein",
|
|
558
|
+
type: "person",
|
|
559
|
+
threshold: 0.7,
|
|
560
|
+
match_count: 1,
|
|
561
|
+
matches: [
|
|
562
|
+
{
|
|
563
|
+
name: "Saddam Hussein Al-Tikriti",
|
|
564
|
+
score: 0.859,
|
|
565
|
+
subject_type: "person",
|
|
566
|
+
eu_reference: "EU.27.28",
|
|
567
|
+
un_id: null,
|
|
568
|
+
programme: "IRQ",
|
|
569
|
+
designation_details: "Former President of Iraq",
|
|
570
|
+
publication_date: "2003-07-07"
|
|
571
|
+
}
|
|
572
|
+
],
|
|
573
|
+
list_size: 30242,
|
|
574
|
+
source: "EU Consolidated Financial Sanctions List \u2014 FISMA (webgate.ec.europa.eu)",
|
|
575
|
+
timestamp: "2026-06-24T15:15:00Z",
|
|
576
|
+
disclaimer: "Indicative screening against the EU consolidated list; a match is not a legal confirmation and requires human review. Not a compliance opinion.",
|
|
577
|
+
cached: false
|
|
578
|
+
},
|
|
579
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
580
|
+
network: "eip155:8453",
|
|
581
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
tool: "cve_lookup",
|
|
585
|
+
action: "X402_CVE_LOOKUP",
|
|
586
|
+
path: "/cve/lookup",
|
|
587
|
+
method: "GET",
|
|
588
|
+
price: "$0.01",
|
|
589
|
+
description: "Security vulnerability lookup (CVE) against the official NVD (NIST) database \u2014 by exact CVE id or by keyword/product. Returns description, CVSS severity, CWE weaknesses and references. Worldwide.",
|
|
590
|
+
llm_usage_prompt: "Security vulnerability (CVE) lookup against the official NVD (NIST) database. By exact CVE id or by keyword/product. Returns description, CVSS score and severity, CWE weaknesses, status and references. For devsecops, SBOM and dependency-audit agents. Input: CVE id (e.g. CVE-2021-44228) or keyword (e.g. log4j).",
|
|
591
|
+
tags: [
|
|
592
|
+
"cve",
|
|
593
|
+
"security",
|
|
594
|
+
"vulnerability",
|
|
595
|
+
"nvd"
|
|
596
|
+
],
|
|
597
|
+
inputSchema: {
|
|
598
|
+
type: "object",
|
|
599
|
+
properties: {
|
|
600
|
+
cve_id: {
|
|
601
|
+
type: "string",
|
|
602
|
+
description: "Exact CVE id, e.g. 'CVE-2021-44228'"
|
|
603
|
+
},
|
|
604
|
+
keyword: {
|
|
605
|
+
type: "string",
|
|
606
|
+
description: "Keyword / product search, e.g. 'log4j'"
|
|
607
|
+
},
|
|
608
|
+
limit: {
|
|
609
|
+
type: "integer",
|
|
610
|
+
description: "Max results for keyword search [1-20], e.g. 10"
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
outputExample: {
|
|
615
|
+
query: {
|
|
616
|
+
cve_id: "CVE-2021-44228",
|
|
617
|
+
keyword: null
|
|
618
|
+
},
|
|
619
|
+
total_results: 1,
|
|
620
|
+
count: 1,
|
|
621
|
+
cves: [
|
|
622
|
+
{
|
|
623
|
+
id: "CVE-2021-44228",
|
|
624
|
+
description: "Apache Log4j2 JNDI features do not protect against attacker controlled LDAP and other JNDI related endpoints...",
|
|
625
|
+
cvss: {
|
|
626
|
+
version: "3.1",
|
|
627
|
+
base_score: 10,
|
|
628
|
+
base_severity: "CRITICAL",
|
|
629
|
+
vector: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
|
|
630
|
+
},
|
|
631
|
+
weaknesses: [
|
|
632
|
+
"CWE-20",
|
|
633
|
+
"CWE-400",
|
|
634
|
+
"CWE-502",
|
|
635
|
+
"CWE-917"
|
|
636
|
+
],
|
|
637
|
+
published: "2021-12-10T10:15:09.143",
|
|
638
|
+
last_modified: "2026-06-17T04:12:05.460",
|
|
639
|
+
status: "Analyzed",
|
|
640
|
+
references: [
|
|
641
|
+
"https://logging.apache.org/log4j/2.x/security.html"
|
|
642
|
+
]
|
|
643
|
+
}
|
|
644
|
+
],
|
|
645
|
+
source: "NVD \u2014 NIST National Vulnerability Database v2.0 (services.nvd.nist.gov)",
|
|
646
|
+
timestamp: "2026-06-24T15:20:00Z",
|
|
647
|
+
cached: false
|
|
648
|
+
},
|
|
649
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
650
|
+
network: "eip155:8453",
|
|
651
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
652
|
+
},
|
|
653
|
+
{
|
|
654
|
+
tool: "recalls_search",
|
|
655
|
+
action: "X402_RECALLS_SEARCH",
|
|
656
|
+
path: "/recalls/search",
|
|
657
|
+
method: "GET",
|
|
658
|
+
price: "$0.01",
|
|
659
|
+
description: "Product recall lookup (drugs/devices/food), Class I/II/III, against the official FDA openFDA enforcement reports \u2014 by product, firm or reason. Coverage US.",
|
|
660
|
+
llm_usage_prompt: "Product recall lookup against the official FDA openFDA enforcement reports (Recall Enterprise System). Search drugs, devices or food recalls by product, firm or reason, filter by Class I/II/III. Returns recall number, classification, status, reason, recalling firm, dates and distribution. Coverage US. For e-commerce, supply-chain, pharmacovigilance and compliance agents.",
|
|
661
|
+
tags: [
|
|
662
|
+
"recalls",
|
|
663
|
+
"fda",
|
|
664
|
+
"openfda",
|
|
665
|
+
"safety"
|
|
666
|
+
],
|
|
667
|
+
inputSchema: {
|
|
668
|
+
type: "object",
|
|
669
|
+
properties: {
|
|
670
|
+
query: {
|
|
671
|
+
type: "string",
|
|
672
|
+
description: "Product, firm or reason, e.g. 'metformin' or 'contamination'"
|
|
673
|
+
},
|
|
674
|
+
category: {
|
|
675
|
+
type: "string",
|
|
676
|
+
description: "drug | device | food (default drug)"
|
|
677
|
+
},
|
|
678
|
+
classification: {
|
|
679
|
+
type: "string",
|
|
680
|
+
description: "Recall class: I, II or III (optional)"
|
|
681
|
+
},
|
|
682
|
+
limit: {
|
|
683
|
+
type: "integer",
|
|
684
|
+
description: "Max recalls [1-1000], e.g. 20"
|
|
685
|
+
}
|
|
686
|
+
},
|
|
687
|
+
required: [
|
|
688
|
+
"query"
|
|
689
|
+
]
|
|
690
|
+
},
|
|
691
|
+
outputExample: {
|
|
692
|
+
query: "metformin",
|
|
693
|
+
category: "drug",
|
|
694
|
+
classification: "II",
|
|
695
|
+
total: 94,
|
|
696
|
+
count: 1,
|
|
697
|
+
recalls: [
|
|
698
|
+
{
|
|
699
|
+
recall_number: "D-0435-2021",
|
|
700
|
+
classification: "Class II",
|
|
701
|
+
status: "Terminated",
|
|
702
|
+
product_type: "Drugs",
|
|
703
|
+
product_description: "Metformin HCl Extended-Release Tablets...",
|
|
704
|
+
reason_for_recall: "CGMP Deviations: temperature excursion during storage.",
|
|
705
|
+
recalling_firm: "Cardinal Health Inc.",
|
|
706
|
+
distribution_pattern: "Nationwide",
|
|
707
|
+
recall_initiation_date: "20210315",
|
|
708
|
+
report_date: "20210407",
|
|
709
|
+
voluntary_mandated: "Voluntary: Firm initiated",
|
|
710
|
+
city: "Dublin",
|
|
711
|
+
state: "OH",
|
|
712
|
+
country: "United States"
|
|
713
|
+
}
|
|
714
|
+
],
|
|
715
|
+
source: "openFDA \u2014 FDA enforcement reports (api.fda.gov)",
|
|
716
|
+
timestamp: "2026-06-24T16:00:00Z",
|
|
717
|
+
disclaimer: "Indicative data from openFDA (FDA), not medical or regulatory advice.",
|
|
718
|
+
cached: false
|
|
719
|
+
},
|
|
720
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
721
|
+
network: "eip155:8453",
|
|
722
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
tool: "drug_label",
|
|
726
|
+
action: "X402_DRUG_LABEL",
|
|
727
|
+
path: "/drug/label",
|
|
728
|
+
method: "GET",
|
|
729
|
+
price: "$0.05",
|
|
730
|
+
description: "Drug interactions, warnings and contraindications lookup from the official FDA openFDA drug labels \u2014 by generic or brand name. Returns the key label sections. Coverage US.",
|
|
731
|
+
llm_usage_prompt: "Drug label lookup against the official FDA openFDA drug labels. By generic or brand name, returns key label sections: drug interactions, warnings, contraindications, indications and boxed warning. Coverage US. For healthcare, pharmacy and clinical-decision-support agents. Not medical advice.",
|
|
732
|
+
tags: [
|
|
733
|
+
"drug",
|
|
734
|
+
"fda",
|
|
735
|
+
"openfda",
|
|
736
|
+
"interactions"
|
|
737
|
+
],
|
|
738
|
+
inputSchema: {
|
|
739
|
+
type: "object",
|
|
740
|
+
properties: {
|
|
741
|
+
drug: {
|
|
742
|
+
type: "string",
|
|
743
|
+
description: "Drug generic or brand name, e.g. 'ibuprofen' or 'Advil'"
|
|
744
|
+
},
|
|
745
|
+
limit: {
|
|
746
|
+
type: "integer",
|
|
747
|
+
description: "Max labels [1-10], e.g. 1"
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
required: [
|
|
751
|
+
"drug"
|
|
752
|
+
]
|
|
753
|
+
},
|
|
754
|
+
outputExample: {
|
|
755
|
+
drug: "ibuprofen",
|
|
756
|
+
count: 1,
|
|
757
|
+
labels: [
|
|
758
|
+
{
|
|
759
|
+
brand_name: [
|
|
760
|
+
"Ibuprofen"
|
|
761
|
+
],
|
|
762
|
+
generic_name: [
|
|
763
|
+
"IBUPROFEN"
|
|
764
|
+
],
|
|
765
|
+
manufacturer_name: [
|
|
766
|
+
"CVS Pharmacy"
|
|
767
|
+
],
|
|
768
|
+
drug_interactions: "Ask a doctor or pharmacist before use if you are taking aspirin, an anticoagulant...",
|
|
769
|
+
warnings: "Allergy alert: Ibuprofen may cause a severe allergic reaction...",
|
|
770
|
+
contraindications: null,
|
|
771
|
+
indications_and_usage: "temporarily relieves minor aches and pains...",
|
|
772
|
+
boxed_warning: null
|
|
773
|
+
}
|
|
774
|
+
],
|
|
775
|
+
source: "openFDA \u2014 FDA drug labels (api.fda.gov)",
|
|
776
|
+
timestamp: "2026-06-24T16:05:00Z",
|
|
777
|
+
disclaimer: "Indicative data from FDA labels (openFDA), not medical advice.",
|
|
778
|
+
cached: false
|
|
779
|
+
},
|
|
780
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
781
|
+
network: "eip155:8453",
|
|
782
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
tool: "osm_building_footprint",
|
|
786
|
+
action: "X402_OSM_BUILDING_FOOTPRINT",
|
|
787
|
+
path: "/osm/building-footprint",
|
|
788
|
+
method: "GET",
|
|
789
|
+
price: "$0.01",
|
|
790
|
+
description: "OpenStreetMap building footprints via Overpass \u2014 give a coordinate (or bounding box) and get building geometry as GeoJSON, footprint area (m\xB2), levels and height by coordinate. Worldwide coverage, OpenStreetMap data.",
|
|
791
|
+
llm_usage_prompt: "Building footprint and geometry by coordinate via OpenStreetMap/Overpass. Returns the building polygon as GeoJSON, server-computed footprint area (m\xB2), levels/floors, height and name for buildings around a point or within a bounding box. Worldwide. For real-estate, insurance, solar, geospatial and urban-planning agents. Input: lat/lon (+radius) or bbox.",
|
|
792
|
+
tags: [
|
|
793
|
+
"openstreetmap",
|
|
794
|
+
"building",
|
|
795
|
+
"geospatial",
|
|
796
|
+
"overpass"
|
|
797
|
+
],
|
|
798
|
+
inputSchema: {
|
|
799
|
+
type: "object",
|
|
800
|
+
properties: {
|
|
801
|
+
lat: {
|
|
802
|
+
type: "number",
|
|
803
|
+
description: "Latitude of the point, e.g. 48.8584"
|
|
804
|
+
},
|
|
805
|
+
lon: {
|
|
806
|
+
type: "number",
|
|
807
|
+
description: "Longitude of the point, e.g. 2.2945"
|
|
808
|
+
},
|
|
809
|
+
radius: {
|
|
810
|
+
type: "integer",
|
|
811
|
+
description: "Search radius in metres [1-200], default 50"
|
|
812
|
+
},
|
|
813
|
+
bbox: {
|
|
814
|
+
type: "string",
|
|
815
|
+
description: "Alternative to lat/lon: 'south,west,north,east' (max ~2km span)"
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
},
|
|
819
|
+
outputExample: {
|
|
820
|
+
query: {
|
|
821
|
+
lat: 48.8584,
|
|
822
|
+
lon: 2.2945,
|
|
823
|
+
radius_m: 60
|
|
824
|
+
},
|
|
825
|
+
count: 1,
|
|
826
|
+
buildings: [
|
|
827
|
+
{
|
|
828
|
+
osm_type: "way",
|
|
829
|
+
osm_id: 5013364,
|
|
830
|
+
tags: {
|
|
831
|
+
building: "tower",
|
|
832
|
+
name: "Tour Eiffel",
|
|
833
|
+
height: "330",
|
|
834
|
+
"addr:city": "Paris",
|
|
835
|
+
"addr:postcode": "75007"
|
|
836
|
+
},
|
|
837
|
+
centroid: {
|
|
838
|
+
lat: 48.8582621,
|
|
839
|
+
lon: 2.2944962
|
|
840
|
+
},
|
|
841
|
+
footprint_area_m2: 9754.7,
|
|
842
|
+
geometry: {
|
|
843
|
+
type: "Polygon",
|
|
844
|
+
coordinates: [
|
|
845
|
+
[
|
|
846
|
+
[
|
|
847
|
+
2.2942817,
|
|
848
|
+
48.8576248
|
|
849
|
+
],
|
|
850
|
+
[
|
|
851
|
+
2.2956897,
|
|
852
|
+
48.8582343
|
|
853
|
+
],
|
|
854
|
+
[
|
|
855
|
+
2.2942817,
|
|
856
|
+
48.8576248
|
|
857
|
+
]
|
|
858
|
+
]
|
|
859
|
+
]
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
],
|
|
863
|
+
source: "OpenStreetMap via Overpass API (overpass-api.de)",
|
|
864
|
+
attribution: "\xA9 OpenStreetMap contributors (ODbL)",
|
|
865
|
+
timestamp: "2026-06-25T10:00:00Z",
|
|
866
|
+
cached: false
|
|
867
|
+
},
|
|
868
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
869
|
+
network: "eip155:8453",
|
|
870
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
tool: "climate_risk_score",
|
|
874
|
+
action: "X402_CLIMATE_RISK_SCORE",
|
|
875
|
+
path: "/climate-risk/score",
|
|
876
|
+
method: "GET",
|
|
877
|
+
price: "$0.05",
|
|
878
|
+
description: "Derived climate risk score from Open-Meteo CMIP6 projections \u2014 a composite heat/drought/extreme-rain risk score (0-100) by coordinate and scenario, comparing a baseline to a future horizon. Worldwide. Derived/heuristic, not an official rating; the underlying CMIP6 HighResMIP dataset is a single high-emissions pathway and does not differentiate SSP scenarios.",
|
|
879
|
+
llm_usage_prompt: "Derived climate risk score by coordinate from Open-Meteo CMIP6 (HighResMIP) projections. Returns a composite 0-100 heat/drought/extreme-rain risk score and rating, per-hazard subscores and indicators, baseline-vs-future comparison and an explicit methodology. Deterministic. Derived/heuristic, NOT an official or regulatory rating; the underlying dataset is a single high-emissions pathway and does not differentiate SSP scenarios. For property due-diligence, ESG, parametric-insurance and siting agents. Input: lat/lon (+scenario, horizon).",
|
|
880
|
+
tags: [
|
|
881
|
+
"climate",
|
|
882
|
+
"risk-score",
|
|
883
|
+
"cmip6",
|
|
884
|
+
"geospatial"
|
|
885
|
+
],
|
|
886
|
+
inputSchema: {
|
|
887
|
+
type: "object",
|
|
888
|
+
properties: {
|
|
889
|
+
lat: {
|
|
890
|
+
type: "number",
|
|
891
|
+
description: "Latitude, e.g. 48.85"
|
|
892
|
+
},
|
|
893
|
+
lon: {
|
|
894
|
+
type: "number",
|
|
895
|
+
description: "Longitude, e.g. 2.35"
|
|
896
|
+
},
|
|
897
|
+
scenario: {
|
|
898
|
+
type: "string",
|
|
899
|
+
description: "Emission scenario label: ssp245 | ssp585 (informational, see methodology)"
|
|
900
|
+
},
|
|
901
|
+
horizon: {
|
|
902
|
+
type: "integer",
|
|
903
|
+
description: "Future target year [2030-2050], e.g. 2050"
|
|
904
|
+
}
|
|
905
|
+
},
|
|
906
|
+
required: [
|
|
907
|
+
"lat",
|
|
908
|
+
"lon"
|
|
909
|
+
]
|
|
910
|
+
},
|
|
911
|
+
outputExample: {
|
|
912
|
+
query: {
|
|
913
|
+
lat: 48.85,
|
|
914
|
+
lon: 2.35,
|
|
915
|
+
scenario: "ssp245",
|
|
916
|
+
horizon: 2050
|
|
917
|
+
},
|
|
918
|
+
composite_score: 24.2,
|
|
919
|
+
rating: "Low",
|
|
920
|
+
subscores: {
|
|
921
|
+
heat: 16.5,
|
|
922
|
+
drought: 43.2,
|
|
923
|
+
extreme_rain: 15.4
|
|
924
|
+
},
|
|
925
|
+
indicators: {
|
|
926
|
+
mean_days_above_30C_per_year: 19.1,
|
|
927
|
+
mean_days_above_35C_per_year: 3.1,
|
|
928
|
+
mean_longest_dry_spell_days: 25.9,
|
|
929
|
+
mean_days_rain_over_20mm_per_year: 2.3
|
|
930
|
+
},
|
|
931
|
+
baseline: {
|
|
932
|
+
window: "2005-2014",
|
|
933
|
+
composite_score: 18,
|
|
934
|
+
rating: "Low",
|
|
935
|
+
subscores: {
|
|
936
|
+
heat: 11,
|
|
937
|
+
drought: 38,
|
|
938
|
+
extreme_rain: 13.3
|
|
939
|
+
},
|
|
940
|
+
indicators: {
|
|
941
|
+
mean_days_above_30C_per_year: 14,
|
|
942
|
+
mean_days_above_35C_per_year: 1,
|
|
943
|
+
mean_longest_dry_spell_days: 22.8,
|
|
944
|
+
mean_days_rain_over_20mm_per_year: 2
|
|
945
|
+
}
|
|
946
|
+
},
|
|
947
|
+
delta_vs_baseline: 6.2,
|
|
948
|
+
scenario: "ssp245",
|
|
949
|
+
horizon: 2050,
|
|
950
|
+
methodology: {
|
|
951
|
+
summary: "Composite 0-100 = 0.45*heat + 0.30*drought + 0.25*extreme_rain, ensemble mean of Open-Meteo HighResMIP CMIP6 models.",
|
|
952
|
+
baseline_window: "2005-01-01..2014-12-31",
|
|
953
|
+
future_window: "2041-01-01..2050-12-31",
|
|
954
|
+
deterministic: true,
|
|
955
|
+
scenario_requested: "ssp245",
|
|
956
|
+
scenario_note: "Open-Meteo CMIP6 HighResMIP is a single high-emissions pathway to 2050; 'scenario' is echoed for reference only and does not change the projection.",
|
|
957
|
+
data_disclaimer: "Derived/heuristic score \u2014 not an official or regulatory risk rating."
|
|
958
|
+
},
|
|
959
|
+
source: "Open-Meteo Climate API \u2014 CMIP6 HighResMIP downscaled (climate-api.open-meteo.com)",
|
|
960
|
+
attribution: "Weather/climate data by Open-Meteo.com (CC BY 4.0)",
|
|
961
|
+
timestamp: "2026-06-25T10:00:00Z",
|
|
962
|
+
disclaimer: "Derived/heuristic score from CMIP6 projections (Open-Meteo), not an official risk rating.",
|
|
963
|
+
cached: false
|
|
964
|
+
},
|
|
965
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
966
|
+
network: "eip155:8453",
|
|
967
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
tool: "polymarket_resolution",
|
|
971
|
+
action: "X402_POLYMARKET_RESOLUTION",
|
|
972
|
+
path: "/polymarket/resolution",
|
|
973
|
+
method: "GET",
|
|
974
|
+
price: "$0.01",
|
|
975
|
+
description: "Polymarket resolution status via Gamma API \u2014 market resolution, winning outcome and resolution source lookup by slug or condition id (or list recent resolved markets). Distinct from live odds: returns whether a market is closed and which outcome won. Coverage Polymarket markets.",
|
|
976
|
+
llm_usage_prompt: "Polymarket market resolution oracle via the Gamma API. Returns whether a market is closed/resolved, the winning outcome (derived from final outcome prices, only when unambiguous \u2014 never invented), resolution source, end date and condition id/slug \u2014 or lists recent resolved markets. Distinct from live odds. For settlement, audit, research and event-forecasting agents. Input: market slug or condition id.",
|
|
977
|
+
tags: [
|
|
978
|
+
"polymarket",
|
|
979
|
+
"resolution",
|
|
980
|
+
"prediction-market",
|
|
981
|
+
"oracle"
|
|
982
|
+
],
|
|
983
|
+
inputSchema: {
|
|
984
|
+
type: "object",
|
|
985
|
+
properties: {
|
|
986
|
+
slug: {
|
|
987
|
+
type: "string",
|
|
988
|
+
description: "Market slug, e.g. 'will-donald-trump-win-the-2024-us-presidential-election'"
|
|
989
|
+
},
|
|
990
|
+
condition_id: {
|
|
991
|
+
type: "string",
|
|
992
|
+
description: "On-chain condition id, e.g. '0x1fad72...'"
|
|
993
|
+
},
|
|
994
|
+
limit: {
|
|
995
|
+
type: "integer",
|
|
996
|
+
description: "Max markets when listing resolved markets [1-50], e.g. 20"
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
},
|
|
1000
|
+
outputExample: {
|
|
1001
|
+
mode: "lookup",
|
|
1002
|
+
market: {
|
|
1003
|
+
question: "Will Donald Trump win the 2024 US Presidential Election?",
|
|
1004
|
+
slug: "will-donald-trump-win-the-2024-us-presidential-election",
|
|
1005
|
+
condition_id: "0x...",
|
|
1006
|
+
closed: true,
|
|
1007
|
+
active: true,
|
|
1008
|
+
resolution_status: "resolved",
|
|
1009
|
+
winning_outcome: "Yes",
|
|
1010
|
+
outcomes: [
|
|
1011
|
+
{
|
|
1012
|
+
outcome: "Yes",
|
|
1013
|
+
price: 1
|
|
1014
|
+
},
|
|
1015
|
+
{
|
|
1016
|
+
outcome: "No",
|
|
1017
|
+
price: 0
|
|
1018
|
+
}
|
|
1019
|
+
],
|
|
1020
|
+
outcome_prices_raw: '["1", "0"]',
|
|
1021
|
+
resolution_source: null,
|
|
1022
|
+
uma_resolution_status: null,
|
|
1023
|
+
end_date: "2024-11-05T12:00:00Z",
|
|
1024
|
+
closed_time: null,
|
|
1025
|
+
source: "Polymarket Gamma API (gamma-api.polymarket.com)",
|
|
1026
|
+
timestamp: "2026-06-25T10:00:00Z",
|
|
1027
|
+
disclaimer: "Indicative resolution status from Polymarket (on-chain indexed), not investment advice."
|
|
1028
|
+
},
|
|
1029
|
+
source: "Polymarket Gamma API (gamma-api.polymarket.com)",
|
|
1030
|
+
timestamp: "2026-06-25T10:00:00Z",
|
|
1031
|
+
cached: false
|
|
1032
|
+
},
|
|
1033
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1034
|
+
network: "eip155:8453",
|
|
1035
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1036
|
+
},
|
|
1037
|
+
{
|
|
1038
|
+
tool: "solar_building_insights",
|
|
1039
|
+
action: "X402_SOLAR_BUILDING_INSIGHTS",
|
|
1040
|
+
path: "/solar/building-insights",
|
|
1041
|
+
method: "GET",
|
|
1042
|
+
price: "$0.05",
|
|
1043
|
+
description: "Rooftop solar potential, panel capacity, sunshine hours and carbon offset by coordinate from the official Google Maps Platform Solar API \u2014 returns max panel count, usable roof area, annual sunshine hours and carbon-offset factor for the closest building. Worldwide partial coverage (EU well covered).",
|
|
1044
|
+
llm_usage_prompt: "Rooftop solar potential by coordinate via the official Google Maps Platform Solar API. Returns max solar panel count, usable array area (m\xB2), annual sunshine hours, carbon-offset factor (kg/MWh) and whole-roof area for the closest building. Worldwide partial coverage (EU well covered). For agents sizing solar installs, real-estate energy scoring, or carbon/ROI estimates. Input: lat/lon (+imagery quality).",
|
|
1045
|
+
tags: [
|
|
1046
|
+
"solar",
|
|
1047
|
+
"google",
|
|
1048
|
+
"rooftop",
|
|
1049
|
+
"energy"
|
|
1050
|
+
],
|
|
1051
|
+
inputSchema: {
|
|
1052
|
+
type: "object",
|
|
1053
|
+
properties: {
|
|
1054
|
+
lat: {
|
|
1055
|
+
type: "number",
|
|
1056
|
+
description: "Latitude of the building, e.g. 48.139"
|
|
1057
|
+
},
|
|
1058
|
+
lon: {
|
|
1059
|
+
type: "number",
|
|
1060
|
+
description: "Longitude of the building, e.g. 11.566"
|
|
1061
|
+
},
|
|
1062
|
+
quality: {
|
|
1063
|
+
type: "string",
|
|
1064
|
+
description: "Required imagery quality: HIGH | MEDIUM | BASE (default HIGH)"
|
|
1065
|
+
}
|
|
1066
|
+
},
|
|
1067
|
+
required: [
|
|
1068
|
+
"lat",
|
|
1069
|
+
"lon"
|
|
1070
|
+
]
|
|
1071
|
+
},
|
|
1072
|
+
outputExample: {
|
|
1073
|
+
name: "buildings/...",
|
|
1074
|
+
center: {
|
|
1075
|
+
latitude: 48.1388,
|
|
1076
|
+
longitude: 11.5658
|
|
1077
|
+
},
|
|
1078
|
+
imagery_quality: "HIGH",
|
|
1079
|
+
imagery_date: "2022-09-04",
|
|
1080
|
+
postal_code: "80331",
|
|
1081
|
+
administrative_area: "Bayern",
|
|
1082
|
+
region_code: "DE",
|
|
1083
|
+
solar_potential: {
|
|
1084
|
+
max_array_panels_count: 48,
|
|
1085
|
+
max_array_area_meters2: 94.25,
|
|
1086
|
+
max_sunshine_hours_per_year: 1222.3,
|
|
1087
|
+
carbon_offset_factor_kg_per_mwh: 475,
|
|
1088
|
+
panel_capacity_watts: 250,
|
|
1089
|
+
whole_roof_area_meters2: 194.63
|
|
1090
|
+
},
|
|
1091
|
+
source: "Google Maps Platform Solar API (solar.googleapis.com)",
|
|
1092
|
+
attribution: "Solar data \xA9 Google \u2014 Google Maps Platform Solar API",
|
|
1093
|
+
timestamp: "2026-06-25T12:00:00Z",
|
|
1094
|
+
cached: false
|
|
1095
|
+
},
|
|
1096
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1097
|
+
network: "eip155:8453",
|
|
1098
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1099
|
+
},
|
|
1100
|
+
{
|
|
1101
|
+
tool: "uk_companies_search",
|
|
1102
|
+
action: "X402_UK_COMPANIES_SEARCH",
|
|
1103
|
+
path: "/uk-companies/search",
|
|
1104
|
+
method: "GET",
|
|
1105
|
+
price: "$0.01",
|
|
1106
|
+
description: "Search the official UK Companies House register \u2014 UK company search, status, type and registered details lookup (KYB) by name or number, or fetch a detailed company profile (registered address, SIC codes, officers) by company number. Official UK register coverage.",
|
|
1107
|
+
llm_usage_prompt: "UK company verification via the official Companies House register. Search by name or number, or fetch a detailed profile by company number: status, type, incorporation date, registered office address, SIC codes, insolvency history and officers (with post-ECCTA identity verification status when present). For KYB, AML and supplier due-diligence agents. Input: company name or number.",
|
|
1108
|
+
tags: [
|
|
1109
|
+
"companies-house",
|
|
1110
|
+
"uk",
|
|
1111
|
+
"kyb",
|
|
1112
|
+
"company-registry"
|
|
1113
|
+
],
|
|
1114
|
+
inputSchema: {
|
|
1115
|
+
type: "object",
|
|
1116
|
+
properties: {
|
|
1117
|
+
q: {
|
|
1118
|
+
type: "string",
|
|
1119
|
+
description: "Company name or number, e.g. 'Tesco' or '00445790'"
|
|
1120
|
+
},
|
|
1121
|
+
company_number: {
|
|
1122
|
+
type: "string",
|
|
1123
|
+
description: "If set, return the detailed profile for this number, e.g. '00445790'"
|
|
1124
|
+
},
|
|
1125
|
+
limit: {
|
|
1126
|
+
type: "integer",
|
|
1127
|
+
description: "Max results [1-50], e.g. 20"
|
|
1128
|
+
},
|
|
1129
|
+
start_index: {
|
|
1130
|
+
type: "integer",
|
|
1131
|
+
description: "Pagination offset, e.g. 0"
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
},
|
|
1135
|
+
outputExample: {
|
|
1136
|
+
mode: "search",
|
|
1137
|
+
query: "Tesco",
|
|
1138
|
+
total_results: 356,
|
|
1139
|
+
start_index: 0,
|
|
1140
|
+
items_per_page: 20,
|
|
1141
|
+
count: 1,
|
|
1142
|
+
companies: [
|
|
1143
|
+
{
|
|
1144
|
+
title: "TESCO PLC",
|
|
1145
|
+
company_number: "00445790",
|
|
1146
|
+
company_status: "active",
|
|
1147
|
+
company_type: "plc",
|
|
1148
|
+
date_of_creation: "1947-11-27",
|
|
1149
|
+
address_snippet: "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA"
|
|
1150
|
+
}
|
|
1151
|
+
],
|
|
1152
|
+
source: "UK Companies House Public Data API (api.company-information.service.gov.uk)",
|
|
1153
|
+
timestamp: "2026-06-25T12:00:00Z",
|
|
1154
|
+
disclaimer: "Indicative data from the UK Companies House register, not a compliance opinion.",
|
|
1155
|
+
cached: false
|
|
1156
|
+
},
|
|
1157
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1158
|
+
network: "eip155:8453",
|
|
1159
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1160
|
+
},
|
|
1161
|
+
{
|
|
1162
|
+
tool: "patents_search",
|
|
1163
|
+
action: "X402_PATENTS_SEARCH",
|
|
1164
|
+
path: "/patents/search",
|
|
1165
|
+
method: "GET",
|
|
1166
|
+
price: "$0.05",
|
|
1167
|
+
description: "European patent search and bibliographic lookup by number, title, applicant or inventor against the official European Patent Office (EPO) Open Patent Services \u2014 returns publication number, country, kind code, dates, titles, applicants, inventors, IPC/CPC classifications and family id. Coverage EU and worldwide (100+ patent offices).",
|
|
1168
|
+
llm_usage_prompt: "European patent search and bibliographic lookup via the official EPO Open Patent Services (OPS). By publication number, or CQL search by title, applicant, inventor and publication-date range. Returns publication number, country, kind code, dates, multilingual titles, applicants, inventors, IPC/CPC classifications and INPADOC family id. Coverage EU and worldwide (100+ patent offices). For IP due-diligence, freedom-to-operate, prior-art and R&D agents. Input: patent number or search criteria.",
|
|
1169
|
+
tags: [
|
|
1170
|
+
"patents",
|
|
1171
|
+
"epo",
|
|
1172
|
+
"ip",
|
|
1173
|
+
"research"
|
|
1174
|
+
],
|
|
1175
|
+
inputSchema: {
|
|
1176
|
+
type: "object",
|
|
1177
|
+
properties: {
|
|
1178
|
+
publication_number: {
|
|
1179
|
+
type: "string",
|
|
1180
|
+
description: "If set, biblio lookup for this number, e.g. 'EP1000000'"
|
|
1181
|
+
},
|
|
1182
|
+
title: {
|
|
1183
|
+
type: "string",
|
|
1184
|
+
description: "Title keyword (CQL ti=), e.g. 'quantum computing'"
|
|
1185
|
+
},
|
|
1186
|
+
applicant: {
|
|
1187
|
+
type: "string",
|
|
1188
|
+
description: "Applicant / assignee (CQL pa=), e.g. 'Siemens'"
|
|
1189
|
+
},
|
|
1190
|
+
inventor: {
|
|
1191
|
+
type: "string",
|
|
1192
|
+
description: "Inventor name (CQL in=), e.g. 'Shannon'"
|
|
1193
|
+
},
|
|
1194
|
+
date_from: {
|
|
1195
|
+
type: "string",
|
|
1196
|
+
description: "Publication date from, ISO YYYY-MM-DD"
|
|
1197
|
+
},
|
|
1198
|
+
date_to: {
|
|
1199
|
+
type: "string",
|
|
1200
|
+
description: "Publication date to, ISO YYYY-MM-DD"
|
|
1201
|
+
},
|
|
1202
|
+
limit: {
|
|
1203
|
+
type: "integer",
|
|
1204
|
+
description: "Max patents [1-50], e.g. 20"
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
},
|
|
1208
|
+
outputExample: {
|
|
1209
|
+
mode: "publication",
|
|
1210
|
+
count: 1,
|
|
1211
|
+
patents: [
|
|
1212
|
+
{
|
|
1213
|
+
publication_number: "EP1000000A1",
|
|
1214
|
+
country: "EP",
|
|
1215
|
+
doc_number: "1000000",
|
|
1216
|
+
kind_code: "A1",
|
|
1217
|
+
publication_date: "20000517",
|
|
1218
|
+
family_id: "19768124",
|
|
1219
|
+
titles: {
|
|
1220
|
+
en: "Apparatus for manufacturing green bricks for the brick manufacturing industry",
|
|
1221
|
+
de: "Vorrichtung zur Herstellung von Steinformlingen f\xFCr die Ziegelindustrie"
|
|
1222
|
+
},
|
|
1223
|
+
applicants: [
|
|
1224
|
+
"BEHEERMIJ DE BOER NIJMEGEN BV [NL]"
|
|
1225
|
+
],
|
|
1226
|
+
inventors: [
|
|
1227
|
+
"KOSMAN WILHELMUS JACOBUS MARIA [NL]"
|
|
1228
|
+
],
|
|
1229
|
+
ipc_classifications: [
|
|
1230
|
+
"B28B1/29",
|
|
1231
|
+
"B28B5/02",
|
|
1232
|
+
"B28B7/00"
|
|
1233
|
+
],
|
|
1234
|
+
cpc_classifications: [
|
|
1235
|
+
"B28B1/29"
|
|
1236
|
+
]
|
|
1237
|
+
}
|
|
1238
|
+
],
|
|
1239
|
+
source: "EPO Open Patent Services v3.2 (ops.epo.org)",
|
|
1240
|
+
timestamp: "2026-06-25T12:00:00Z",
|
|
1241
|
+
cached: false
|
|
1242
|
+
},
|
|
1243
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1244
|
+
network: "eip155:8453",
|
|
1245
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
tool: "fr_sirene_lookup",
|
|
1249
|
+
action: "X402_FR_SIRENE_LOOKUP",
|
|
1250
|
+
path: "/fr-sirene/lookup",
|
|
1251
|
+
method: "GET",
|
|
1252
|
+
price: "$0.01",
|
|
1253
|
+
description: "French company/establishment lookup by SIREN, SIRET or name against the official INSEE Sirene register (France) \u2014 returns legal name, administrative status, NAF/APE code, creation date, headcount band and registered address. KYB, official France coverage.",
|
|
1254
|
+
llm_usage_prompt: "French company/establishment verification via the official INSEE Sirene register. Lookup by SIRET, SIREN or name: legal name, administrative status (active/closed), legal form, NAF/APE activity code, creation date, headcount band and registered address. For KYB, AML and supplier due-diligence agents (France). Input: SIRET, SIREN or company name.",
|
|
1255
|
+
tags: [
|
|
1256
|
+
"sirene",
|
|
1257
|
+
"insee",
|
|
1258
|
+
"france",
|
|
1259
|
+
"kyb"
|
|
1260
|
+
],
|
|
1261
|
+
inputSchema: {
|
|
1262
|
+
type: "object",
|
|
1263
|
+
properties: {
|
|
1264
|
+
siret: {
|
|
1265
|
+
type: "string",
|
|
1266
|
+
description: "14-digit SIRET (establishment), e.g. '44306184100047'"
|
|
1267
|
+
},
|
|
1268
|
+
siren: {
|
|
1269
|
+
type: "string",
|
|
1270
|
+
description: "9-digit SIREN (legal unit), e.g. '443061841'"
|
|
1271
|
+
},
|
|
1272
|
+
q: {
|
|
1273
|
+
type: "string",
|
|
1274
|
+
description: `Free-text / multi-criteria search, e.g. 'denominationUniteLegale:"GOOGLE FRANCE"'`
|
|
1275
|
+
},
|
|
1276
|
+
limit: {
|
|
1277
|
+
type: "integer",
|
|
1278
|
+
description: "Max results for search [1-100], e.g. 20"
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
},
|
|
1282
|
+
outputExample: {
|
|
1283
|
+
mode: "siret",
|
|
1284
|
+
etablissement: {
|
|
1285
|
+
siren: "443061841",
|
|
1286
|
+
nic: "00047",
|
|
1287
|
+
siret: "44306184100047",
|
|
1288
|
+
denomination: "GOOGLE FRANCE",
|
|
1289
|
+
etat_administratif: "A",
|
|
1290
|
+
etat_unite_legale: "A",
|
|
1291
|
+
date_creation: "2011-05-13",
|
|
1292
|
+
categorie_juridique: "5499",
|
|
1293
|
+
activite_principale_naf: "62.02A",
|
|
1294
|
+
tranche_effectifs: "42",
|
|
1295
|
+
etablissement_siege: true,
|
|
1296
|
+
statut_diffusion: "O",
|
|
1297
|
+
adresse: "8 RUE DE LONDRES 75009 PARIS"
|
|
1298
|
+
},
|
|
1299
|
+
source: "INSEE Sirene V3.11 (api.insee.fr)",
|
|
1300
|
+
timestamp: "2026-06-25T12:00:00Z",
|
|
1301
|
+
disclaimer: "Indicative data from the INSEE Sirene register, not a compliance opinion.",
|
|
1302
|
+
cached: false
|
|
1303
|
+
},
|
|
1304
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1305
|
+
network: "eip155:8453",
|
|
1306
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1307
|
+
},
|
|
1308
|
+
{
|
|
1309
|
+
tool: "iban_validate",
|
|
1310
|
+
action: "X402_IBAN_VALIDATE",
|
|
1311
|
+
path: "/iban/validate",
|
|
1312
|
+
method: "GET",
|
|
1313
|
+
price: "$0.01",
|
|
1314
|
+
description: "IBAN format validation (ISO 13616 mod-97) \u2014 SEPA/EU IBAN structural validation and country/bank-code extraction. Returns valid/invalid with reason, country code, check digits, bank code and grouped formatting. Format check, NOT account existence. SEPA/EU coverage.",
|
|
1315
|
+
llm_usage_prompt: "IBAN format validation via the ISO 13616 mod-97 algorithm (local, deterministic). SEPA/EU structural validation: returns valid/invalid with a clear reason, country code, check digits, bank code and grouped formatting. Format check only \u2014 does NOT verify the account exists. For payment, onboarding and treasury agents. Input: IBAN.",
|
|
1316
|
+
tags: [
|
|
1317
|
+
"iban",
|
|
1318
|
+
"sepa",
|
|
1319
|
+
"payments",
|
|
1320
|
+
"validation"
|
|
1321
|
+
],
|
|
1322
|
+
inputSchema: {
|
|
1323
|
+
type: "object",
|
|
1324
|
+
properties: {
|
|
1325
|
+
iban: {
|
|
1326
|
+
type: "string",
|
|
1327
|
+
description: "IBAN to validate, e.g. 'FR1420041010050500013M02606'"
|
|
1328
|
+
}
|
|
1329
|
+
},
|
|
1330
|
+
required: [
|
|
1331
|
+
"iban"
|
|
1332
|
+
]
|
|
1333
|
+
},
|
|
1334
|
+
outputExample: {
|
|
1335
|
+
iban: "FR1420041010050500013M02606",
|
|
1336
|
+
country_code: "FR",
|
|
1337
|
+
check_digits: "14",
|
|
1338
|
+
formatted: "FR14 2004 1010 0505 0001 3M02 606",
|
|
1339
|
+
valid: true,
|
|
1340
|
+
reason: null,
|
|
1341
|
+
bank_code: "20041",
|
|
1342
|
+
source: "ISO 13616 mod-97 local validation (no external source)",
|
|
1343
|
+
timestamp: "2026-06-25T12:00:00Z",
|
|
1344
|
+
disclaimer: "FORMAT validation (structure + ISO 13616 checksum), NOT a check that the account exists.",
|
|
1345
|
+
cached: false
|
|
1346
|
+
},
|
|
1347
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1348
|
+
network: "eip155:8453",
|
|
1349
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1350
|
+
},
|
|
1351
|
+
{
|
|
1352
|
+
tool: "fr_legifrance_search",
|
|
1353
|
+
action: "X402_FR_LEGIFRANCE_SEARCH",
|
|
1354
|
+
path: "/fr-legifrance/search",
|
|
1355
|
+
method: "GET",
|
|
1356
|
+
price: "$0.05",
|
|
1357
|
+
description: "Official L\xE9gifrance (French law, via DILA/PISTE) \u2014 French legal texts, codes and articles search and lookup by keyword and corpus (codes, laws/decrees, JORF), or consult a text by id. Complements EUR-Lex (EU law) on the national French side. Official France coverage.",
|
|
1358
|
+
llm_usage_prompt: "French law search and lookup via the official L\xE9gifrance (DILA/PISTE). Keyword search across codes, laws/decrees (LODA) and the Journal Officiel (JORF), or consult a text by id. Returns title, identifier (id/cid), nature, date and legal status (in force/repealed). Complements EUR-Lex on the national French side. For legal-research, regulatory and compliance agents. Input: keyword (+corpus) or text id.",
|
|
1359
|
+
tags: [
|
|
1360
|
+
"legifrance",
|
|
1361
|
+
"france",
|
|
1362
|
+
"law",
|
|
1363
|
+
"legislation"
|
|
1364
|
+
],
|
|
1365
|
+
inputSchema: {
|
|
1366
|
+
type: "object",
|
|
1367
|
+
properties: {
|
|
1368
|
+
q: {
|
|
1369
|
+
type: "string",
|
|
1370
|
+
description: "Keyword search in French legal texts, e.g. 'donn\xE9es personnelles'"
|
|
1371
|
+
},
|
|
1372
|
+
fond: {
|
|
1373
|
+
type: "string",
|
|
1374
|
+
description: "Corpus: LODA_DATE (laws/decrees) | CODE_DATE | JORF (default LODA_DATE)"
|
|
1375
|
+
},
|
|
1376
|
+
text_id: {
|
|
1377
|
+
type: "string",
|
|
1378
|
+
description: "If set, consult a specific text by id/cid instead of searching"
|
|
1379
|
+
},
|
|
1380
|
+
limit: {
|
|
1381
|
+
type: "integer",
|
|
1382
|
+
description: "Max results [1-50], e.g. 10"
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
},
|
|
1386
|
+
outputExample: {
|
|
1387
|
+
mode: "search",
|
|
1388
|
+
query: "donn\xE9es personnelles",
|
|
1389
|
+
fond: "LODA_DATE",
|
|
1390
|
+
total: 107757,
|
|
1391
|
+
count: 1,
|
|
1392
|
+
results: [
|
|
1393
|
+
{
|
|
1394
|
+
id: "LEGITEXT000048853940_01-01-2024",
|
|
1395
|
+
cid: "JORFTEXT000048736062",
|
|
1396
|
+
title: "D\xE9cret n\xB0 2023-1397 du 29 d\xE9cembre 2023 relatif au traitement des donn\xE9es personnelles et au contr\xF4le du placement en activit\xE9 partielle",
|
|
1397
|
+
nature: "DECRET",
|
|
1398
|
+
date: "2024-01-01T00:00:00.000+0000",
|
|
1399
|
+
etat: "VIGUEUR",
|
|
1400
|
+
text_summary: null
|
|
1401
|
+
}
|
|
1402
|
+
],
|
|
1403
|
+
source: "L\xE9gifrance via DILA/PISTE (api.piste.gouv.fr)",
|
|
1404
|
+
timestamp: "2026-06-25T12:00:00Z",
|
|
1405
|
+
disclaimer: "Indicative data from L\xE9gifrance (DILA), not legal advice.",
|
|
1406
|
+
cached: false
|
|
1407
|
+
},
|
|
1408
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1409
|
+
network: "eip155:8453",
|
|
1410
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1411
|
+
},
|
|
1412
|
+
{
|
|
1413
|
+
tool: "ecb_exchange_rate",
|
|
1414
|
+
action: "X402_ECB_EXCHANGE_RATE",
|
|
1415
|
+
path: "/ecb/exchange-rate",
|
|
1416
|
+
method: "GET",
|
|
1417
|
+
price: "$0.01",
|
|
1418
|
+
description: "Official European Central Bank (ECB) euro reference exchange rates \u2014 EUR foreign exchange reference rate lookup by currency (29 currencies), latest or by date. Reference rates (published ~16:00 CET on working days), not live market rates. EU/worldwide coverage.",
|
|
1419
|
+
llm_usage_prompt: "Euro foreign-exchange reference rate lookup via the official European Central Bank (ECB) SDMX data portal. Returns the EUR reference rate for a currency (29 currencies), latest or by date, with the real observation date. Reference rates (published ~16:00 CET on working days), not live market rates. For pricing, accounting, FX and treasury agents. Input: currency (+frequency, date).",
|
|
1420
|
+
tags: [
|
|
1421
|
+
"ecb",
|
|
1422
|
+
"forex",
|
|
1423
|
+
"eur",
|
|
1424
|
+
"reference-rate"
|
|
1425
|
+
],
|
|
1426
|
+
inputSchema: {
|
|
1427
|
+
type: "object",
|
|
1428
|
+
properties: {
|
|
1429
|
+
currency: {
|
|
1430
|
+
type: "string",
|
|
1431
|
+
description: "3-letter ISO currency code, e.g. 'USD', 'GBP', 'CHF', 'JPY'"
|
|
1432
|
+
},
|
|
1433
|
+
frequency: {
|
|
1434
|
+
type: "string",
|
|
1435
|
+
description: "D (daily, default) or M (monthly)"
|
|
1436
|
+
},
|
|
1437
|
+
date: {
|
|
1438
|
+
type: "string",
|
|
1439
|
+
description: "Optional observation date ISO YYYY-MM-DD; default = latest available"
|
|
1440
|
+
}
|
|
1441
|
+
},
|
|
1442
|
+
required: [
|
|
1443
|
+
"currency"
|
|
1444
|
+
]
|
|
1445
|
+
},
|
|
1446
|
+
outputExample: {
|
|
1447
|
+
currency: "USD",
|
|
1448
|
+
base: "EUR",
|
|
1449
|
+
rate: 1.134,
|
|
1450
|
+
observation_date: "2026-06-24",
|
|
1451
|
+
frequency: "D",
|
|
1452
|
+
series_key: "D.USD.EUR.SP00.A",
|
|
1453
|
+
source: "European Central Bank \u2014 euro reference rates, SDMX 2.1 (data-api.ecb.europa.eu)",
|
|
1454
|
+
timestamp: "2026-06-25T12:00:00Z",
|
|
1455
|
+
disclaimer: "ECB reference rates (informational, published ~16:00 CET on working days), not a real-time market rate.",
|
|
1456
|
+
cached: false
|
|
1457
|
+
},
|
|
1458
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1459
|
+
network: "eip155:8453",
|
|
1460
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
tool: "crypto_token_safety",
|
|
1464
|
+
action: "X402_CRYPTO_TOKEN_SAFETY",
|
|
1465
|
+
path: "/crypto/token-safety",
|
|
1466
|
+
method: "GET",
|
|
1467
|
+
price: "$0.05",
|
|
1468
|
+
description: "Token safety check before buying \u2014 is this token a honeypot or a rug pull? Bundles honeypot detection, buy/sell tax, holder concentration, LP lock and liquidity (GoPlus, Honeypot.is, DexScreener) into a single 0-100 token security risk score with a clear buy/avoid verdict. One call replaces three lookups. EVM chains.",
|
|
1469
|
+
llm_usage_prompt: "Token safety check before buying: is this token a honeypot or rug pull? Honeypot, buy/sell tax, holder concentration, LP lock and liquidity bundled into a 0-100 token security risk score with a buy/avoid verdict. For trading agents screening a token. Input: token contract address + chain.",
|
|
1470
|
+
tags: [
|
|
1471
|
+
"token-safety",
|
|
1472
|
+
"honeypot",
|
|
1473
|
+
"rug-check",
|
|
1474
|
+
"token-security",
|
|
1475
|
+
"risk-score"
|
|
1476
|
+
],
|
|
1477
|
+
inputSchema: {
|
|
1478
|
+
type: "object",
|
|
1479
|
+
properties: {
|
|
1480
|
+
token: {
|
|
1481
|
+
type: "string",
|
|
1482
|
+
description: "Token contract address (0x + 40 hex)"
|
|
1483
|
+
},
|
|
1484
|
+
chain: {
|
|
1485
|
+
type: "string",
|
|
1486
|
+
description: "base | ethereum | bsc | polygon | arbitrum | optimism | avalanche (default base)"
|
|
1487
|
+
}
|
|
1488
|
+
},
|
|
1489
|
+
required: [
|
|
1490
|
+
"token"
|
|
1491
|
+
]
|
|
1492
|
+
},
|
|
1493
|
+
outputExample: {
|
|
1494
|
+
safety_score: 95,
|
|
1495
|
+
rating: "safe",
|
|
1496
|
+
verdict: "Low risk on automated checks. Always DYOR.",
|
|
1497
|
+
honeypot: false,
|
|
1498
|
+
flags: []
|
|
1499
|
+
},
|
|
1500
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1501
|
+
network: "eip155:8453",
|
|
1502
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
tool: "crypto_derivatives_radar",
|
|
1506
|
+
action: "X402_CRYPTO_DERIVATIVES_RADAR",
|
|
1507
|
+
path: "/crypto/derivatives-radar",
|
|
1508
|
+
method: "GET",
|
|
1509
|
+
price: "$0.05",
|
|
1510
|
+
description: "Perpetual funding rates, open interest and long/short ratios across Binance, Bybit, OKX and Hyperliquid in one call, plus the computed funding-rate arbitrage spread between venues and a crowding signal. Multi-venue perp derivatives data, resilient: returns whatever venues respond. For trading and funding-arbitrage agents.",
|
|
1511
|
+
llm_usage_prompt: "Perpetual funding rates, open interest and long/short ratios across Binance/Bybit/OKX/Hyperliquid in one call, plus the computed funding-rate arbitrage spread and crowding signal. For trading and funding-arb agents. Input: coin ticker.",
|
|
1512
|
+
tags: [
|
|
1513
|
+
"funding-rate",
|
|
1514
|
+
"perp",
|
|
1515
|
+
"open-interest",
|
|
1516
|
+
"long-short",
|
|
1517
|
+
"derivatives"
|
|
1518
|
+
],
|
|
1519
|
+
inputSchema: {
|
|
1520
|
+
type: "object",
|
|
1521
|
+
properties: {
|
|
1522
|
+
symbol: {
|
|
1523
|
+
type: "string",
|
|
1524
|
+
description: "Coin ticker, e.g. 'BTC', 'ETH', 'SOL'"
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
},
|
|
1528
|
+
outputExample: {
|
|
1529
|
+
venues_count: 4,
|
|
1530
|
+
funding_arbitrage: {
|
|
1531
|
+
funding_spread: 15e-5,
|
|
1532
|
+
long_on: "okx",
|
|
1533
|
+
short_on: "binance"
|
|
1534
|
+
}
|
|
1535
|
+
},
|
|
1536
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1537
|
+
network: "eip155:8453",
|
|
1538
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1539
|
+
},
|
|
1540
|
+
{
|
|
1541
|
+
tool: "crypto_wallet_xray",
|
|
1542
|
+
action: "X402_CRYPTO_WALLET_XRAY",
|
|
1543
|
+
path: "/crypto/wallet-xray",
|
|
1544
|
+
method: "GET",
|
|
1545
|
+
price: "$0.05",
|
|
1546
|
+
description: "Wallet risk analysis in one call \u2014 native + ERC-20 balances, USD portfolio valuation, token count and an OFAC sanctions flag (Blockscout, DexScreener, OFAC list). A full on-chain wallet x-ray with risk flags, where primitives serve one field per call this returns the whole valued portfolio plus risk. EVM chains.",
|
|
1547
|
+
llm_usage_prompt: "Wallet risk analysis: native + ERC-20 balances, USD portfolio valuation, token count and an OFAC sanctions flag, bundled in one call. For on-chain analysis, compliance and trading agents. Input: wallet address + chain.",
|
|
1548
|
+
tags: [
|
|
1549
|
+
"wallet",
|
|
1550
|
+
"risk-analysis",
|
|
1551
|
+
"portfolio",
|
|
1552
|
+
"sanctions",
|
|
1553
|
+
"onchain"
|
|
1554
|
+
],
|
|
1555
|
+
inputSchema: {
|
|
1556
|
+
type: "object",
|
|
1557
|
+
properties: {
|
|
1558
|
+
address: {
|
|
1559
|
+
type: "string",
|
|
1560
|
+
description: "Wallet address (0x + 40 hex)"
|
|
1561
|
+
},
|
|
1562
|
+
chain: {
|
|
1563
|
+
type: "string",
|
|
1564
|
+
description: "base | ethereum | optimism | arbitrum | polygon | gnosis (default base)"
|
|
1565
|
+
}
|
|
1566
|
+
},
|
|
1567
|
+
required: [
|
|
1568
|
+
"address"
|
|
1569
|
+
]
|
|
1570
|
+
},
|
|
1571
|
+
outputExample: {
|
|
1572
|
+
sanction_check: {
|
|
1573
|
+
ofac_listed: false
|
|
1574
|
+
},
|
|
1575
|
+
portfolio: {
|
|
1576
|
+
total_value_usd: 52e5,
|
|
1577
|
+
token_count: 42
|
|
1578
|
+
}
|
|
1579
|
+
},
|
|
1580
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1581
|
+
network: "eip155:8453",
|
|
1582
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1583
|
+
},
|
|
1584
|
+
{
|
|
1585
|
+
tool: "crypto_dex_cex_spread",
|
|
1586
|
+
action: "X402_CRYPTO_DEX_CEX_SPREAD",
|
|
1587
|
+
path: "/crypto/dex-cex-spread",
|
|
1588
|
+
method: "GET",
|
|
1589
|
+
price: "$0.05",
|
|
1590
|
+
description: "DEX vs CEX arbitrage spread \u2014 the price difference between DEX and CEX with the fee-adjusted NET spread and execution direction, not two raw prices. Compares the most liquid DEX pair (DexScreener) to CEX spot (Binance/Bybit), subtracts taker+swap fees, and flags any profitable arbitrage opportunity. For arbitrage agents.",
|
|
1591
|
+
llm_usage_prompt: "DEX vs CEX arbitrage spread: the price difference between DEX and CEX with the fee-adjusted NET spread (after taker+swap fees) and execution direction, plus whether the arbitrage is profitable. For arbitrage agents. Input: coin ticker.",
|
|
1592
|
+
tags: [
|
|
1593
|
+
"arbitrage",
|
|
1594
|
+
"dex",
|
|
1595
|
+
"cex",
|
|
1596
|
+
"spread",
|
|
1597
|
+
"trading"
|
|
1598
|
+
],
|
|
1599
|
+
inputSchema: {
|
|
1600
|
+
type: "object",
|
|
1601
|
+
properties: {
|
|
1602
|
+
symbol: {
|
|
1603
|
+
type: "string",
|
|
1604
|
+
description: "Coin ticker, e.g. 'ETH', 'WBTC', 'ARB'"
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
},
|
|
1608
|
+
outputExample: {
|
|
1609
|
+
dex: {
|
|
1610
|
+
price_usd: 2405
|
|
1611
|
+
},
|
|
1612
|
+
cex: {
|
|
1613
|
+
venue: "binance",
|
|
1614
|
+
price_usd: 2400
|
|
1615
|
+
},
|
|
1616
|
+
spread: {
|
|
1617
|
+
net_spread_pct: -0.19,
|
|
1618
|
+
profitable: false
|
|
1619
|
+
}
|
|
1620
|
+
},
|
|
1621
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1622
|
+
network: "eip155:8453",
|
|
1623
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1624
|
+
},
|
|
1625
|
+
{
|
|
1626
|
+
tool: "web_extract",
|
|
1627
|
+
action: "X402_WEB_EXTRACT",
|
|
1628
|
+
path: "/web/extract",
|
|
1629
|
+
method: "GET",
|
|
1630
|
+
price: "$0.05",
|
|
1631
|
+
description: "Web search and webpage extraction for AI agents \u2014 returns clean, LLM-ready markdown (deduplicated, with source URLs), not raw HTML. Give 'query' to search the web or 'url' to scrape and extract a page into markdown ready to drop into a prompt. Powered by Jina Reader.",
|
|
1632
|
+
llm_usage_prompt: "Web search and webpage extraction for AI agents, returned as clean LLM-ready markdown with source URLs. Give 'query' to search the web or 'url' to scrape and extract a page. For research and RAG agents.",
|
|
1633
|
+
tags: [
|
|
1634
|
+
"web-search",
|
|
1635
|
+
"scrape",
|
|
1636
|
+
"extract",
|
|
1637
|
+
"markdown",
|
|
1638
|
+
"llm"
|
|
1639
|
+
],
|
|
1640
|
+
inputSchema: {
|
|
1641
|
+
type: "object",
|
|
1642
|
+
properties: {
|
|
1643
|
+
query: {
|
|
1644
|
+
type: "string",
|
|
1645
|
+
description: "Web search query"
|
|
1646
|
+
},
|
|
1647
|
+
url: {
|
|
1648
|
+
type: "string",
|
|
1649
|
+
description: "If set, scrape and extract this page as clean markdown instead of searching"
|
|
1650
|
+
},
|
|
1651
|
+
limit: {
|
|
1652
|
+
type: "integer",
|
|
1653
|
+
description: "Max search results [1-10]"
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
},
|
|
1657
|
+
outputExample: {
|
|
1658
|
+
mode: "search",
|
|
1659
|
+
count: 3,
|
|
1660
|
+
results: [
|
|
1661
|
+
{
|
|
1662
|
+
title: "Base - DefiLlama",
|
|
1663
|
+
url: "https://defillama.com/chain/Base"
|
|
1664
|
+
}
|
|
1665
|
+
]
|
|
1666
|
+
},
|
|
1667
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1668
|
+
network: "eip155:8453",
|
|
1669
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1670
|
+
},
|
|
1671
|
+
{
|
|
1672
|
+
tool: "crypto_new_pairs",
|
|
1673
|
+
action: "X402_CRYPTO_NEW_PAIRS",
|
|
1674
|
+
path: "/crypto/new-pairs",
|
|
1675
|
+
method: "GET",
|
|
1676
|
+
price: "$0.05",
|
|
1677
|
+
description: "Newly launched DEX pairs and pools per chain (GeckoTerminal) with an instant per-pair safety check bundled in (GoPlus honeypot/tax/verified + mini score) \u2014 a sniping agent filters rugs without a second call. Returns pool, base token, price, liquidity and age. EVM safety; Solana lists pairs only.",
|
|
1678
|
+
llm_usage_prompt: "Newly launched DEX pairs and pools per chain with an instant per-pair safety check bundled in (honeypot/tax/verified + mini score), so a sniping agent filters rugs without a second call. Input: chain + limit.",
|
|
1679
|
+
tags: [
|
|
1680
|
+
"new-pairs",
|
|
1681
|
+
"new-pools",
|
|
1682
|
+
"sniping",
|
|
1683
|
+
"dex",
|
|
1684
|
+
"token-safety"
|
|
1685
|
+
],
|
|
1686
|
+
inputSchema: {
|
|
1687
|
+
type: "object",
|
|
1688
|
+
properties: {
|
|
1689
|
+
chain: {
|
|
1690
|
+
type: "string",
|
|
1691
|
+
description: "base | ethereum | bsc | polygon | arbitrum | optimism | avalanche | solana"
|
|
1692
|
+
},
|
|
1693
|
+
limit: {
|
|
1694
|
+
type: "integer",
|
|
1695
|
+
description: "Max new pairs [1-15]"
|
|
1696
|
+
},
|
|
1697
|
+
safety: {
|
|
1698
|
+
type: "boolean",
|
|
1699
|
+
description: "Bundle a GoPlus safety check per pair (EVM only), default true"
|
|
1700
|
+
}
|
|
1701
|
+
}
|
|
1702
|
+
},
|
|
1703
|
+
outputExample: {
|
|
1704
|
+
count: 1,
|
|
1705
|
+
pairs: [
|
|
1706
|
+
{
|
|
1707
|
+
pool_name: "PEPE / WETH",
|
|
1708
|
+
liquidity_usd: 45e3,
|
|
1709
|
+
safety: {
|
|
1710
|
+
safety_score: 70,
|
|
1711
|
+
honeypot: false
|
|
1712
|
+
}
|
|
1713
|
+
}
|
|
1714
|
+
]
|
|
1715
|
+
},
|
|
1716
|
+
payTo: "0x1D1B81247C407521E2A01F3E21514870dcf1620f",
|
|
1717
|
+
network: "eip155:8453",
|
|
1718
|
+
asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
1719
|
+
}
|
|
1720
|
+
]
|
|
1721
|
+
};
|
|
1722
|
+
|
|
1723
|
+
// src/catalog.ts
|
|
1724
|
+
var catalog = catalog_default;
|
|
1725
|
+
var endpoints = catalog.endpoints;
|
|
1726
|
+
Object.fromEntries(
|
|
1727
|
+
endpoints.map((e) => [e.action, e])
|
|
1728
|
+
);
|
|
1729
|
+
var seen = /* @__PURE__ */ new Set();
|
|
1730
|
+
for (const e of endpoints) {
|
|
1731
|
+
if (seen.has(e.action)) {
|
|
1732
|
+
throw new Error(`Duplicate x402 action name: ${e.action} (${e.path})`);
|
|
1733
|
+
}
|
|
1734
|
+
seen.add(e.action);
|
|
1735
|
+
}
|
|
1736
|
+
var ENDPOINT_COUNT = endpoints.length;
|
|
1737
|
+
|
|
1738
|
+
// src/client.ts
|
|
1739
|
+
function resolveConfig(getSetting) {
|
|
1740
|
+
const get = (k) => {
|
|
1741
|
+
const v = getSetting(k);
|
|
1742
|
+
return v == null ? void 0 : String(v).trim() || void 0;
|
|
1743
|
+
};
|
|
1744
|
+
const baseUrl = (get("X402_BASE_URL") || catalog.baseUrl).replace(/\/+$/, "");
|
|
1745
|
+
const network = get("X402_NETWORK") || catalog.network;
|
|
1746
|
+
const buyerPrivateKey = get("X402_BUYER_PRIVATE_KEY") || get("EVM_PRIVATE_KEY") || get("WALLET_PRIVATE_KEY") || void 0;
|
|
1747
|
+
const autoPayFlag = (get("X402_AUTO_PAY") || "1").toLowerCase();
|
|
1748
|
+
const autoPay = !!buyerPrivateKey && !["0", "false", "no", "off"].includes(autoPayFlag);
|
|
1749
|
+
return { baseUrl, network, buyerPrivateKey, autoPay };
|
|
1750
|
+
}
|
|
1751
|
+
var _paidFetch = null;
|
|
1752
|
+
var _paidFetchKey = null;
|
|
1753
|
+
async function getPaidFetch(cfg) {
|
|
1754
|
+
if (!cfg.autoPay || !cfg.buyerPrivateKey) return null;
|
|
1755
|
+
if (_paidFetch && _paidFetchKey === cfg.buyerPrivateKey) return _paidFetch;
|
|
1756
|
+
const { wrapFetchWithPayment } = await import('x402-fetch');
|
|
1757
|
+
const { privateKeyToAccount } = await import('viem/accounts');
|
|
1758
|
+
const raw = cfg.buyerPrivateKey;
|
|
1759
|
+
const pk = raw.startsWith("0x") ? raw : `0x${raw}`;
|
|
1760
|
+
const account = privateKeyToAccount(pk);
|
|
1761
|
+
_paidFetch = wrapFetchWithPayment(fetch, account);
|
|
1762
|
+
_paidFetchKey = cfg.buyerPrivateKey;
|
|
1763
|
+
return _paidFetch;
|
|
1764
|
+
}
|
|
1765
|
+
function buildUrl(baseUrl, path, params) {
|
|
1766
|
+
const url = new URL(baseUrl + path);
|
|
1767
|
+
for (const [k, v] of Object.entries(params)) {
|
|
1768
|
+
if (v === void 0 || v === null || v === "") continue;
|
|
1769
|
+
url.searchParams.set(k, String(v));
|
|
1770
|
+
}
|
|
1771
|
+
return url.toString();
|
|
1772
|
+
}
|
|
1773
|
+
function decodeBase64Json(value) {
|
|
1774
|
+
try {
|
|
1775
|
+
const json = typeof Buffer !== "undefined" ? Buffer.from(value, "base64").toString("utf-8") : atob(value);
|
|
1776
|
+
return JSON.parse(json);
|
|
1777
|
+
} catch {
|
|
1778
|
+
return null;
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1781
|
+
function decodePaymentRequired(header, body) {
|
|
1782
|
+
if (header) {
|
|
1783
|
+
const decoded = decodeBase64Json(header);
|
|
1784
|
+
if (decoded) return decoded;
|
|
1785
|
+
}
|
|
1786
|
+
if (body && typeof body === "object" && ("accepts" in body || "x402Version" in body)) {
|
|
1787
|
+
return body;
|
|
1788
|
+
}
|
|
1789
|
+
return null;
|
|
1790
|
+
}
|
|
1791
|
+
function toPaymentTerms(ep, decoded, cfg) {
|
|
1792
|
+
const accepts = decoded?.accepts || [];
|
|
1793
|
+
const a = accepts[0] || {};
|
|
1794
|
+
return {
|
|
1795
|
+
x402PaymentRequired: true,
|
|
1796
|
+
tool: ep.tool,
|
|
1797
|
+
resource: cfg.baseUrl + ep.path,
|
|
1798
|
+
price: ep.price,
|
|
1799
|
+
network: a.network || ep.network || cfg.network,
|
|
1800
|
+
asset: a.asset || ep.asset,
|
|
1801
|
+
payTo: a.payTo || a.pay_to || ep.payTo || catalog.payTo,
|
|
1802
|
+
scheme: a.scheme || "exact",
|
|
1803
|
+
maxTimeoutSeconds: a.maxTimeoutSeconds || a.max_timeout_seconds || 300,
|
|
1804
|
+
howToPay: "This endpoint requires an x402 micropayment (USDC on Base mainnet). Configure X402_BUYER_PRIVATE_KEY (a funded Base wallet) on this agent to auto-pay and receive live data, or complete the payment with any x402-aware HTTP client.",
|
|
1805
|
+
exampleOutput: ep.outputExample
|
|
1806
|
+
};
|
|
1807
|
+
}
|
|
1808
|
+
async function readBody(resp) {
|
|
1809
|
+
const text = await resp.text();
|
|
1810
|
+
if (!text) return null;
|
|
1811
|
+
try {
|
|
1812
|
+
return JSON.parse(text);
|
|
1813
|
+
} catch {
|
|
1814
|
+
return text;
|
|
1815
|
+
}
|
|
1816
|
+
}
|
|
1817
|
+
async function callEndpoint(ep, params, cfg) {
|
|
1818
|
+
const url = buildUrl(cfg.baseUrl, ep.path, params);
|
|
1819
|
+
const headers = { accept: "application/json" };
|
|
1820
|
+
const paidFetch = await getPaidFetch(cfg).catch(() => null);
|
|
1821
|
+
if (paidFetch) {
|
|
1822
|
+
try {
|
|
1823
|
+
const resp2 = await paidFetch(url, { method: "GET", headers });
|
|
1824
|
+
const body2 = await readBody(resp2);
|
|
1825
|
+
if (resp2.status === 200) return { kind: "data", status: 200, data: body2 };
|
|
1826
|
+
if (resp2.status === 402) {
|
|
1827
|
+
const decoded = decodePaymentRequired(resp2.headers.get("payment-required"), body2);
|
|
1828
|
+
return { kind: "payment_required", terms: toPaymentTerms(ep, decoded, cfg) };
|
|
1829
|
+
}
|
|
1830
|
+
return {
|
|
1831
|
+
kind: "error",
|
|
1832
|
+
status: resp2.status,
|
|
1833
|
+
message: `upstream returned HTTP ${resp2.status}`,
|
|
1834
|
+
detail: typeof body2 === "string" ? body2.slice(0, 500) : JSON.stringify(body2).slice(0, 500)
|
|
1835
|
+
};
|
|
1836
|
+
} catch (err) {
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
let resp;
|
|
1840
|
+
try {
|
|
1841
|
+
resp = await fetch(url, { method: "GET", headers });
|
|
1842
|
+
} catch (err) {
|
|
1843
|
+
return { kind: "error", message: "request failed", detail: `${err?.name}: ${err?.message}` };
|
|
1844
|
+
}
|
|
1845
|
+
const body = await readBody(resp);
|
|
1846
|
+
if (resp.status === 200) return { kind: "data", status: 200, data: body };
|
|
1847
|
+
if (resp.status === 402) {
|
|
1848
|
+
const decoded = decodePaymentRequired(resp.headers.get("payment-required"), body);
|
|
1849
|
+
return { kind: "payment_required", terms: toPaymentTerms(ep, decoded, cfg) };
|
|
1850
|
+
}
|
|
1851
|
+
return {
|
|
1852
|
+
kind: "error",
|
|
1853
|
+
status: resp.status,
|
|
1854
|
+
message: `unexpected HTTP ${resp.status}`,
|
|
1855
|
+
detail: typeof body === "string" ? body.slice(0, 500) : JSON.stringify(body).slice(0, 500)
|
|
1856
|
+
};
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
// src/actions.ts
|
|
1860
|
+
var MODEL_TEXT_SMALL = "TEXT_SMALL";
|
|
1861
|
+
function actionDescription(ep) {
|
|
1862
|
+
const parts = [
|
|
1863
|
+
ep.description.trim(),
|
|
1864
|
+
`Price: ${ep.price} per call (x402 payment, USDC on Base mainnet).`
|
|
1865
|
+
];
|
|
1866
|
+
if (ep.llm_usage_prompt) parts.push(ep.llm_usage_prompt.trim());
|
|
1867
|
+
return parts.filter(Boolean).join(" ");
|
|
1868
|
+
}
|
|
1869
|
+
function buildSimiles(ep) {
|
|
1870
|
+
const out = /* @__PURE__ */ new Set();
|
|
1871
|
+
const toolUpper = ep.tool.toUpperCase();
|
|
1872
|
+
out.add(toolUpper);
|
|
1873
|
+
out.add(`GET_${toolUpper}`);
|
|
1874
|
+
for (const tag of ep.tags || []) {
|
|
1875
|
+
out.add(tag.toUpperCase().replace(/[^A-Z0-9]+/g, "_"));
|
|
1876
|
+
}
|
|
1877
|
+
out.delete(ep.action);
|
|
1878
|
+
return [...out];
|
|
1879
|
+
}
|
|
1880
|
+
function exampleQuery(ep) {
|
|
1881
|
+
const required = ep.inputSchema.required || [];
|
|
1882
|
+
const props = ep.inputSchema.properties || {};
|
|
1883
|
+
const keys = required.length ? required : Object.keys(props).slice(0, 1);
|
|
1884
|
+
const hints = keys.map((k) => {
|
|
1885
|
+
const d = props[k]?.description || "";
|
|
1886
|
+
const m = d.match(/e\.g\.\s*'([^']+)'/i) || d.match(/e\.g\.\s*"([^"]+)"/i);
|
|
1887
|
+
return m ? `${k}=${m[1]}` : k;
|
|
1888
|
+
}).join(", ");
|
|
1889
|
+
return hints;
|
|
1890
|
+
}
|
|
1891
|
+
function buildExamples(ep) {
|
|
1892
|
+
const q = exampleQuery(ep);
|
|
1893
|
+
const userText = q ? `Use ${ep.tool} for ${q}` : `Use the ${ep.tool} tool`;
|
|
1894
|
+
return [
|
|
1895
|
+
[
|
|
1896
|
+
{ name: "{{user}}", content: { text: userText } },
|
|
1897
|
+
{
|
|
1898
|
+
name: "{{agent}}",
|
|
1899
|
+
content: {
|
|
1900
|
+
text: `Calling the paid x402 tool ${ep.tool} (${ep.price}).`,
|
|
1901
|
+
actions: [ep.action]
|
|
1902
|
+
}
|
|
1903
|
+
}
|
|
1904
|
+
]
|
|
1905
|
+
];
|
|
1906
|
+
}
|
|
1907
|
+
function parseJsonObject(text) {
|
|
1908
|
+
if (!text) return null;
|
|
1909
|
+
const start = text.indexOf("{");
|
|
1910
|
+
const end = text.lastIndexOf("}");
|
|
1911
|
+
if (start === -1 || end === -1 || end <= start) return null;
|
|
1912
|
+
try {
|
|
1913
|
+
const obj = JSON.parse(text.slice(start, end + 1));
|
|
1914
|
+
return obj && typeof obj === "object" ? obj : null;
|
|
1915
|
+
} catch {
|
|
1916
|
+
return null;
|
|
1917
|
+
}
|
|
1918
|
+
}
|
|
1919
|
+
function pickSchemaParams(source, ep) {
|
|
1920
|
+
if (!source || typeof source !== "object") return {};
|
|
1921
|
+
const props = ep.inputSchema.properties || {};
|
|
1922
|
+
const out = {};
|
|
1923
|
+
for (const key of Object.keys(props)) {
|
|
1924
|
+
const v = source[key];
|
|
1925
|
+
if (v !== void 0 && v !== null && v !== "") out[key] = v;
|
|
1926
|
+
}
|
|
1927
|
+
return out;
|
|
1928
|
+
}
|
|
1929
|
+
async function extractParams(runtime, message, ep, options) {
|
|
1930
|
+
const optsObj = options;
|
|
1931
|
+
const fromOptions = pickSchemaParams(optsObj?.params ?? optsObj, ep);
|
|
1932
|
+
if (Object.keys(fromOptions).length) return fromOptions;
|
|
1933
|
+
const content = message?.content ?? {};
|
|
1934
|
+
const fromContent = pickSchemaParams(content.params ?? content, ep);
|
|
1935
|
+
if (Object.keys(fromContent).length) return fromContent;
|
|
1936
|
+
const text = typeof content.text === "string" ? content.text : "";
|
|
1937
|
+
if (text && typeof runtime?.useModel === "function") {
|
|
1938
|
+
const props = ep.inputSchema.properties || {};
|
|
1939
|
+
const required = ep.inputSchema.required || [];
|
|
1940
|
+
const schemaDesc = Object.entries(props).map(
|
|
1941
|
+
([k, v]) => `- ${k} (${v.type}${required.includes(k) ? ", required" : ""}): ${v.description || ""}`
|
|
1942
|
+
).join("\n");
|
|
1943
|
+
const prompt = `Extract the call parameters for the tool "${ep.tool}" from the user message. Respond with ONLY a JSON object of parameter values, no prose, no markdown.
|
|
1944
|
+
|
|
1945
|
+
Parameters:
|
|
1946
|
+
${schemaDesc}
|
|
1947
|
+
|
|
1948
|
+
User message: """${text}"""
|
|
1949
|
+
|
|
1950
|
+
JSON:`;
|
|
1951
|
+
try {
|
|
1952
|
+
const out = await runtime.useModel(MODEL_TEXT_SMALL, { prompt });
|
|
1953
|
+
const raw = typeof out === "string" ? out : out?.text ?? "";
|
|
1954
|
+
const parsed = parseJsonObject(raw);
|
|
1955
|
+
if (parsed) return pickSchemaParams(parsed, ep);
|
|
1956
|
+
} catch {
|
|
1957
|
+
}
|
|
1958
|
+
}
|
|
1959
|
+
return {};
|
|
1960
|
+
}
|
|
1961
|
+
function formatData(ep, data) {
|
|
1962
|
+
let body;
|
|
1963
|
+
try {
|
|
1964
|
+
body = JSON.stringify(data, null, 2);
|
|
1965
|
+
} catch {
|
|
1966
|
+
body = String(data);
|
|
1967
|
+
}
|
|
1968
|
+
if (body.length > 4e3) body = body.slice(0, 4e3) + "\n\u2026 (truncated)";
|
|
1969
|
+
return `${ep.tool} (paid x402 call, ${ep.price}) returned:
|
|
1970
|
+
${body}`;
|
|
1971
|
+
}
|
|
1972
|
+
var asData = (x) => x;
|
|
1973
|
+
function buildAction(ep) {
|
|
1974
|
+
return {
|
|
1975
|
+
name: ep.action,
|
|
1976
|
+
similes: buildSimiles(ep),
|
|
1977
|
+
description: actionDescription(ep),
|
|
1978
|
+
examples: buildExamples(ep),
|
|
1979
|
+
// Available whenever the user intent maps here; missing params are handled in the handler.
|
|
1980
|
+
validate: async (_runtime, _message) => true,
|
|
1981
|
+
handler: async (runtime, message, _state, options, callback) => {
|
|
1982
|
+
const cfg = resolveConfig((k) => runtime.getSetting?.(k));
|
|
1983
|
+
const params = await extractParams(runtime, message, ep, options);
|
|
1984
|
+
const required = ep.inputSchema.required || [];
|
|
1985
|
+
const missing = required.filter((r) => params[r] === void 0 || params[r] === "");
|
|
1986
|
+
if (missing.length) {
|
|
1987
|
+
const text2 = `The ${ep.tool} tool needs ${missing.join(", ")} to run (${ep.description.split(".")[0]}.). Please provide ${missing.join(" and ")}.`;
|
|
1988
|
+
await callback?.({ text: text2, actions: [ep.action], source: message?.content?.source });
|
|
1989
|
+
return { success: false, text: text2, data: asData({ missing }), error: new Error(`missing params: ${missing.join(", ")}`) };
|
|
1990
|
+
}
|
|
1991
|
+
const result = await callEndpoint(ep, params, cfg);
|
|
1992
|
+
if (result.kind === "data") {
|
|
1993
|
+
const text2 = formatData(ep, result.data);
|
|
1994
|
+
await callback?.({ text: text2, actions: [ep.action], source: message?.content?.source });
|
|
1995
|
+
return { success: true, text: text2, data: asData(result.data) };
|
|
1996
|
+
}
|
|
1997
|
+
if (result.kind === "payment_required") {
|
|
1998
|
+
const t = result.terms;
|
|
1999
|
+
const text2 = `${ep.tool} requires an x402 micropayment of ${t.price} (USDC on ${t.network}). Pay to ${t.payTo} via the x402 protocol, or configure X402_BUYER_PRIVATE_KEY to auto-pay. Example output:
|
|
2000
|
+
${JSON.stringify(t.exampleOutput, null, 2)}`;
|
|
2001
|
+
await callback?.({ text: text2, actions: [ep.action], source: message?.content?.source });
|
|
2002
|
+
return { success: true, text: text2, data: asData(t) };
|
|
2003
|
+
}
|
|
2004
|
+
const text = `Call to ${ep.tool} failed: ${result.message}${result.detail ? ` (${result.detail})` : ""}`;
|
|
2005
|
+
await callback?.({ text, actions: [ep.action], source: message?.content?.source });
|
|
2006
|
+
return { success: false, text, data: asData(result), error: new Error(result.message) };
|
|
2007
|
+
}
|
|
2008
|
+
};
|
|
2009
|
+
}
|
|
2010
|
+
function buildActions() {
|
|
2011
|
+
return endpoints.map(buildAction);
|
|
2012
|
+
}
|
|
2013
|
+
|
|
2014
|
+
// src/provider.ts
|
|
2015
|
+
function firstSentence(s) {
|
|
2016
|
+
const m = s.match(/^.*?[.!?](\s|$)/);
|
|
2017
|
+
return (m ? m[0] : s).trim();
|
|
2018
|
+
}
|
|
2019
|
+
var x402CatalogProvider = {
|
|
2020
|
+
name: "X402_CATALOG",
|
|
2021
|
+
description: "Catalogue of paid x402 data tools (official EU/global registries + crypto pre-trade data) callable by this agent.",
|
|
2022
|
+
// Not dynamic: always surface the catalogue so the agent can pick a paid tool.
|
|
2023
|
+
dynamic: false,
|
|
2024
|
+
get: async (runtime, _message, _state) => {
|
|
2025
|
+
const cfg = resolveConfig((k) => runtime.getSetting?.(k));
|
|
2026
|
+
const mode = cfg.autoPay ? "auto-pay (a funded buyer wallet is configured; calls return live data)" : "discovery (no buyer wallet; calls return payment terms until X402_BUYER_PRIVATE_KEY is set)";
|
|
2027
|
+
const lines = endpoints.map(
|
|
2028
|
+
(e) => `- ${e.action} (${e.price}): ${firstSentence(e.description)}`
|
|
2029
|
+
);
|
|
2030
|
+
const text = `# x402 paid tools available (${endpoints.length})
|
|
2031
|
+
Billed per call via the x402 protocol (USDC on Base mainnet). Mode: ${mode}.
|
|
2032
|
+
` + lines.join("\n");
|
|
2033
|
+
return {
|
|
2034
|
+
text,
|
|
2035
|
+
values: { x402_tool_count: endpoints.length, x402_mode: cfg.autoPay ? "auto-pay" : "discovery" },
|
|
2036
|
+
data: { baseUrl: cfg.baseUrl, network: cfg.network, count: endpoints.length }
|
|
2037
|
+
};
|
|
2038
|
+
}
|
|
2039
|
+
};
|
|
2040
|
+
|
|
2041
|
+
// src/index.ts
|
|
2042
|
+
var x402Plugin = {
|
|
2043
|
+
name: "x402-endpoints",
|
|
2044
|
+
description: `Exposes the ${ENDPOINT_COUNT} paid x402-endpoints data tools (official EU/global registries: GLEIF, VIES, BODACC, EUR-Lex, Companies House, EPO, sanctions, CVE, FDA\u2026 + crypto pre-trade data: token-safety, derivatives-radar, wallet-xray, dex-cex-spread) as native ElizaOS actions, billed per call via x402 (USDC on Base mainnet). Set X402_BUYER_PRIVATE_KEY to auto-pay and receive live data; otherwise actions return exact payment terms for discovery.`,
|
|
2045
|
+
actions: buildActions(),
|
|
2046
|
+
providers: [x402CatalogProvider]
|
|
2047
|
+
};
|
|
2048
|
+
var index_default = x402Plugin;
|
|
2049
|
+
|
|
2050
|
+
exports.ENDPOINT_COUNT = ENDPOINT_COUNT;
|
|
2051
|
+
exports.buildActions = buildActions;
|
|
2052
|
+
exports.callEndpoint = callEndpoint;
|
|
2053
|
+
exports.catalog = catalog;
|
|
2054
|
+
exports.default = index_default;
|
|
2055
|
+
exports.endpoints = endpoints;
|
|
2056
|
+
exports.resolveConfig = resolveConfig;
|
|
2057
|
+
exports.x402CatalogProvider = x402CatalogProvider;
|
|
2058
|
+
exports.x402Plugin = x402Plugin;
|
|
2059
|
+
//# sourceMappingURL=index.cjs.map
|
|
2060
|
+
//# sourceMappingURL=index.cjs.map
|