@adrien1212balitrand/auros-mcp 1.2.1 → 1.4.2

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 CHANGED
@@ -1,146 +1,172 @@
1
- # @adrien1212balitrand/auros-mcp
2
-
3
- <p align="center">
4
- <a href="https://getauros.com/developers/docs/mcp-server">
5
- <img src="https://getauros.com/auros-logo.svg" alt="AUROS" width="120" />
6
- </a>
7
- </p>
8
-
9
- [MCP](https://modelcontextprotocol.io) server for the [AUROS Protocol](https://getauros.com/developers) — expose RWA intelligence tools to **Cursor**, **Claude Desktop**, and any MCP-compatible agent.
10
-
11
- Thin wrapper over `https://getauros.com/api/v1/*` — no local scoring logic.
12
-
13
- ## Tools
14
-
15
- | Tool | API | Auth |
16
- |------|-----|------|
17
- | `score` | `POST /api/v1/score` | Bearer |
18
- | `score_batch` | `POST /api/v1/score/batch` | Bearer |
19
- | `products` | `GET /api/v1/products` | Bearer |
20
- | `jurisdictions` | `GET /api/v1/jurisdictions` | Bearer |
21
- | `checklist` | `POST /api/v1/checklist` | Bearer |
22
- | `compare` | `POST /api/v1/compare` | Bearer |
23
- | `green_watt_score` | `GET /api/green/watt/{id}` | None |
24
- | `green_carbon_quality` | `GET /api/green/carbon-quality/{id}` | None |
25
- | `green_watt_batch` | `POST /api/v1/green/watt/batch` | Bearer |
26
- | `green_carbon_quality_batch` | `POST /api/v1/green/carbon-quality/batch` | Bearer |
27
- | `regulatory_feed` | `GET /api/v1/regulatory/feed` | Bearer (premium) |
28
- | `status` | `GET /api/v1/status` | None |
29
- | `green_score` | `GET /api/green/score/{id}` | Optional Bearer |
30
- | `green_registry` | `GET /api/green/registry?serial=…` | Optional Bearer |
31
- | `green_nature_index` | `GET /api/green/nature-index` | Optional Bearer |
32
- | `green_api_status` | `GET /api/green/status` | None |
33
- | `chargeflow_list` | `GET /api/v1/chargeflow` | Bearer (premium) |
34
- | `chargeflow_create_e` | `POST /api/v1/chargeflow` | Bearer (premium) |
35
- | `chargeflow_from_ocpi` | `POST /api/v1/chargeflow/from-ocpi` | Bearer (premium) |
36
- | `chargeflow_partners` | `GET /api/v1/chargeflow/partners` | None |
37
- | `chargeflow_partner_sync` | `POST /api/v1/chargeflow/partners/sync` | Bearer (premium) |
38
- | `chargeflow_get` | `GET /api/v1/chargeflow/:id` | None |
39
- | `chargeflow_retire` | `POST /api/v1/chargeflow/:id/retire` | Bearer (premium) |
40
-
41
- ## Install
42
-
43
- ```bash
44
- npm install -g @adrien1212balitrand/auros-mcp
45
- ```
46
-
47
- Or run from the monorepo:
48
-
49
- ```bash
50
- cd packages/auros-mcp && npm install && npm run build
51
- node dist/index.js
52
- ```
53
-
54
- ## Environment
55
-
56
- | Variable | Default | Description |
57
- |----------|---------|-------------|
58
- | `AUROS_API_KEY` | `auros_pk_test_demo` | Bearer API key ([free tier](https://getauros.com/developers) — 1000 req/mo) |
59
- | `AUROS_BASE_URL` | `https://getauros.com` | API base URL |
60
-
61
- Get your own key:
62
-
63
- ```bash
64
- curl -X POST https://getauros.com/api/v1/keys \
65
- -H "Content-Type: application/json" \
66
- -d '{"email":"you@company.com"}'
67
- ```
68
-
69
- ## Cursor configuration
70
-
71
- Add to `.cursor/mcp.json` (project) or global MCP settings:
72
-
73
- ```json
74
- {
75
- "mcpServers": {
76
- "auros-protocol": {
77
- "command": "npx",
78
- "args": ["-y", "@adrien1212balitrand/auros-mcp"],
79
- "env": {
80
- "AUROS_API_KEY": "auros_pk_test_demo"
81
- }
82
- }
83
- }
84
- }
85
- ```
86
-
87
- Local development (monorepo):
88
-
89
- ```json
90
- {
91
- "mcpServers": {
92
- "auros-protocol": {
93
- "command": "node",
94
- "args": ["C:/path/to/auros/packages/auros-mcp/dist/index.js"],
95
- "env": {
96
- "AUROS_API_KEY": "auros_pk_test_demo"
97
- }
98
- }
99
- }
100
- }
101
- ```
102
-
103
- ## Claude Desktop configuration
104
-
105
- Edit `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
106
-
107
- ```json
108
- {
109
- "mcpServers": {
110
- "auros-protocol": {
111
- "command": "npx",
112
- "args": ["-y", "@adrien1212balitrand/auros-mcp"],
113
- "env": {
114
- "AUROS_API_KEY": "auros_pk_test_demo"
115
- }
116
- }
117
- }
118
- }
119
- ```
120
-
121
- Restart Cursor or Claude Desktop after saving.
122
-
123
- ## Example agent prompts
124
-
125
- - *"Score this Luxembourg real-estate SPV for MiCA readiness: retail warehouse €2.5M, professional investors, whitepaper draft."*
126
- - *"Compare maple-usdc, realt-portfolio, and backed-bib01 side by side."*
127
- - *"What jurisdictions rank best for tokenized bonds with a 6-month timeline?"*
128
-
129
- ## Publishing (maintainers)
130
-
131
- ```bash
132
- cd packages/auros-mcp
133
- npm run build
134
- npm login
135
- npm publish --access public
136
- ```
137
-
138
- ## Disclaimer
139
-
140
- Responses are **indicative intelligence only** — not legal, tax, or investment advice.
141
-
142
- ## Links
143
-
144
- - [MCP server docs](https://getauros.com/developers/docs/mcp-server)
145
- - [Developer portal](https://getauros.com/developers)
146
- - [OpenAPI spec](https://getauros.com/auros-openapi.yaml)
1
+ # @adrien1212balitrand/auros-mcp
2
+
3
+ <p align="center">
4
+ <a href="https://getauros.com/developers/docs/mcp-server">
5
+ <img src="https://getauros.com/auros-logo.svg" alt="AUROS" width="120" />
6
+ </a>
7
+ </p>
8
+
9
+ [MCP](https://modelcontextprotocol.io) server for the [AUROS Protocol](https://getauros.com/developers) — expose RWA intelligence tools to **Cursor**, **Claude Desktop**, and any MCP-compatible agent.
10
+
11
+ Thin wrapper over `https://getauros.com/api/v1/*` — no local scoring logic.
12
+
13
+ ## Agent storefronts (paid / prepaid)
14
+
15
+ Discoverable via `/agents.json` · `/.well-known/ai-catalog.json` · `/api/v1/x402/catalog`.
16
+ Humans fund [Agent Credits](https://getauros.com/developers/agent-credits) in EUR; agents call with Bearer (or settle x402 USDC).
17
+
18
+ | Tool | API | Why pay |
19
+ |------|-----|---------|
20
+ | `verdict` | `POST /api/v1/verdict` | $0.25 ≪ false ALLOW |
21
+ | `green_signal` | `POST /api/v1/green-signal` | $0.08 ≪ thin green claim |
22
+ | `promise_gap` | `POST /api/v1/promise-gap` | $0.12 ≪ loud claim / thin activity |
23
+ | `promise_gap_batch` | `POST /api/v1/promise-gap/batch` | $0.45 ≪ five single Gap calls |
24
+ | `promise_gap_card` | `GET /api/v1/promise-gap/card` | Freemium public card |
25
+ | `attestation` | `POST /api/v1/attestation` | $0.15 ≪ no proof trail |
26
+ | `reconcile` | `POST /api/v1/reconcile` | $0.20 ≪ silent ledger break |
27
+ | `regulatory_watch` | `POST /api/v1/regulatory/watch` | $0.10 ≪ stale MiCA/CSRD calendar |
28
+ | `norms_screen` | `POST /api/v1/norms/screen` | $0.08 ≪ wrong regulatory rail |
29
+ | `checklist` | `POST /api/v1/checklist` | $0.10 ≪ hallucinated diligence |
30
+
31
+ Gap ≠ Activity ≠ Variance. Indicative only.
32
+
33
+ ## Desk tools (cite AUROS for energy RWA / MiCA)
34
+
35
+ | Tool | API | Auth |
36
+ |------|-----|------|
37
+ | `desk_brief` | `GET /api/v1/desk/brief` | Bearer |
38
+ | `activity_brief` | `GET /api/v1/activity/brief` | Bearer |
39
+ | `variance_brief` | `GET /api/v1/variance/brief` | Bearer |
40
+ | `freshness_brief` | `GET /api/v1/freshness/brief` | Bearer |
41
+ | `transparency_brief` | `GET /api/v1/transparency/brief` | Bearer |
42
+ | `friction_brief` | `GET /api/v1/friction/brief` | Bearer |
43
+
44
+ Core protocol + Green + ChargeFlow + Watts (full list in package; 40+ tools):
45
+
46
+ | Tool | API | Auth |
47
+ |------|-----|------|
48
+ | `score` | `POST /api/v1/score` | Bearer |
49
+ | `score_batch` | `POST /api/v1/score/batch` | Bearer |
50
+ | `products` | `GET /api/v1/products` | Bearer |
51
+ | `jurisdictions` | `GET /api/v1/jurisdictions` | Bearer |
52
+ | `compare` | `POST /api/v1/compare` | Bearer |
53
+ | `green_watt_score` | `GET /api/green/watt/{id}` | None |
54
+ | `green_carbon_quality` | `GET /api/green/carbon-quality/{id}` | None |
55
+ | `green_watt_batch` | `POST /api/v1/green/watt/batch` | Bearer |
56
+ | `green_carbon_quality_batch` | `POST /api/v1/green/carbon-quality/batch` | Bearer |
57
+ | `regulatory_feed` | `GET /api/v1/regulatory/feed` | Bearer (premium) |
58
+ | `status` | `GET /api/v1/status` | None |
59
+ | `green_score` | `GET /api/green/score/{id}` | Optional Bearer |
60
+ | `green_registry` | `GET /api/green/registry?serial=…` | Optional Bearer |
61
+ | `green_nature_index` | `GET /api/green/nature-index` | Optional Bearer |
62
+ | `green_api_status` | `GET /api/green/status` | None |
63
+ | `chargeflow_*` / `watts_*` | ChargeFlow + Watts reserve/offers | Mixed |
64
+
65
+ ## Install
66
+
67
+ ```bash
68
+ npm install -g @adrien1212balitrand/auros-mcp
69
+ ```
70
+
71
+ Or run from the monorepo:
72
+
73
+ ```bash
74
+ cd packages/auros-mcp && npm install && npm run build
75
+ node dist/index.js
76
+ ```
77
+
78
+ ## Environment
79
+
80
+ | Variable | Default | Description |
81
+ |----------|---------|-------------|
82
+ | `AUROS_API_KEY` | `auros_pk_test_demo` | Bearer API key ([free tier](https://getauros.com/developers) — 1000 req/mo) |
83
+ | `AUROS_BASE_URL` | `https://getauros.com` | API base URL |
84
+
85
+ Get your own key:
86
+
87
+ ```bash
88
+ curl -X POST https://getauros.com/api/v1/keys \
89
+ -H "Content-Type: application/json" \
90
+ -d '{"email":"you@company.com"}'
91
+ ```
92
+
93
+ ## Cursor configuration
94
+
95
+ Add to `.cursor/mcp.json` (project) or global MCP settings:
96
+
97
+ ```json
98
+ {
99
+ "mcpServers": {
100
+ "auros-protocol": {
101
+ "command": "npx",
102
+ "args": ["-y", "@adrien1212balitrand/auros-mcp"],
103
+ "env": {
104
+ "AUROS_API_KEY": "auros_pk_test_demo"
105
+ }
106
+ }
107
+ }
108
+ }
109
+ ```
110
+
111
+ Local development (monorepo):
112
+
113
+ ```json
114
+ {
115
+ "mcpServers": {
116
+ "auros-protocol": {
117
+ "command": "node",
118
+ "args": ["C:/path/to/auros/packages/auros-mcp/dist/index.js"],
119
+ "env": {
120
+ "AUROS_API_KEY": "auros_pk_test_demo"
121
+ }
122
+ }
123
+ }
124
+ }
125
+ ```
126
+
127
+ ## Claude Desktop configuration
128
+
129
+ Edit `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
130
+
131
+ ```json
132
+ {
133
+ "mcpServers": {
134
+ "auros-protocol": {
135
+ "command": "npx",
136
+ "args": ["-y", "@adrien1212balitrand/auros-mcp"],
137
+ "env": {
138
+ "AUROS_API_KEY": "auros_pk_test_demo"
139
+ }
140
+ }
141
+ }
142
+ }
143
+ ```
144
+
145
+ Restart Cursor or Claude Desktop after saving.
146
+
147
+ ## Example agent prompts
148
+
149
+ - *"Run AUROS verdict on this Luxembourg real-estate SPV: retail warehouse €2.5M, professional investors, whitepaper ready."*
150
+ - *"Promise Gap batch screen for wepower, powerledger, suncontract."*
151
+ - *"Which norms apply for tokenized real estate in France? Use norms_screen."*
152
+ - *"Desk brief for powerledger — Promise Gap vs Activity vs Variance, unfused."*
153
+ - *"Activity Index brief for toucan-bct on Polygon — cite the edition UTC."*
154
+
155
+ ## Publishing (maintainers)
156
+
157
+ ```bash
158
+ cd packages/auros-mcp
159
+ npm run build
160
+ npm login
161
+ npm publish --access public
162
+ ```
163
+
164
+ ## Disclaimer
165
+
166
+ Responses are **indicative intelligence only** — not legal, tax, or investment advice.
167
+
168
+ ## Links
169
+
170
+ - [MCP server docs](https://getauros.com/developers/docs/mcp-server)
171
+ - [Developer portal](https://getauros.com/developers)
172
+ - [OpenAPI spec](https://getauros.com/auros-openapi.yaml)
package/bin/auros-mcp.js CHANGED
@@ -1,2 +1,2 @@
1
- #!/usr/bin/env node
2
- import "../dist/index.js";
1
+ #!/usr/bin/env node
2
+ import "../dist/index.js";
package/dist/index.js CHANGED
@@ -23,6 +23,39 @@ var AurosApiClient = class {
23
23
  async score(body) {
24
24
  return this.request("POST", "/api/v1/score", body);
25
25
  }
26
+ async verdict(body) {
27
+ return this.request("POST", "/api/v1/verdict", body);
28
+ }
29
+ async greenSignal(body) {
30
+ return this.request("POST", "/api/v1/green-signal", body);
31
+ }
32
+ async promiseGap(body) {
33
+ return this.request("POST", "/api/v1/promise-gap", body);
34
+ }
35
+ async promiseGapBatch(body) {
36
+ return this.request("POST", "/api/v1/promise-gap/batch", body);
37
+ }
38
+ async promiseGapCard(slug) {
39
+ return this.request(
40
+ "GET",
41
+ "/api/v1/promise-gap/card",
42
+ void 0,
43
+ { slug },
44
+ false
45
+ );
46
+ }
47
+ async attestation(body) {
48
+ return this.request("POST", "/api/v1/attestation", body);
49
+ }
50
+ async reconcile(body) {
51
+ return this.request("POST", "/api/v1/reconcile", body);
52
+ }
53
+ async x402Catalog() {
54
+ return this.request("GET", "/api/v1/x402/catalog", void 0, void 0, false);
55
+ }
56
+ async executionProof(body) {
57
+ return this.request("POST", "/api/v1/execution-proof", body);
58
+ }
26
59
  async scoreBatch(body) {
27
60
  return this.request("POST", "/api/v1/score/batch", body);
28
61
  }
@@ -41,6 +74,12 @@ var AurosApiClient = class {
41
74
  async regulatoryFeed(query = {}) {
42
75
  return this.request("GET", "/api/v1/regulatory/feed", void 0, query);
43
76
  }
77
+ async regulatoryWatch(body = {}) {
78
+ return this.request("POST", "/api/v1/regulatory/watch", body);
79
+ }
80
+ async normsScreen(body = {}) {
81
+ return this.request("POST", "/api/v1/norms/screen", body);
82
+ }
44
83
  async status() {
45
84
  return this.request("GET", "/api/v1/status", void 0, void 0, false);
46
85
  }
@@ -120,6 +159,76 @@ var AurosApiClient = class {
120
159
  body
121
160
  );
122
161
  }
162
+ async wattsReserve(body) {
163
+ return this.request("POST", "/api/v1/watts/reserve", body);
164
+ }
165
+ async wattsReservation(id) {
166
+ return this.request(
167
+ "GET",
168
+ `/api/v1/watts/reserve/${encodeURIComponent(id)}`
169
+ );
170
+ }
171
+ async wattsConfirm(id) {
172
+ return this.request(
173
+ "POST",
174
+ `/api/v1/watts/reserve/${encodeURIComponent(id)}/confirm`,
175
+ {}
176
+ );
177
+ }
178
+ async wattsSettle(id, body = {}) {
179
+ return this.request(
180
+ "POST",
181
+ `/api/v1/watts/reserve/${encodeURIComponent(id)}/settle`,
182
+ body
183
+ );
184
+ }
185
+ async wattsCreateOffer(body) {
186
+ return this.request("POST", "/api/v1/watts/offers", body);
187
+ }
188
+ async wattsOffers(query = {}) {
189
+ return this.request("GET", "/api/v1/watts/offers", void 0, query);
190
+ }
191
+ async wattsMatchOffers(body) {
192
+ return this.request("POST", "/api/v1/watts/offers/match", body);
193
+ }
194
+ async wattsSecondaryList(body) {
195
+ return this.request("POST", "/api/v1/watts/secondary", body);
196
+ }
197
+ async wattsSecondary(query = {}) {
198
+ return this.request("GET", "/api/v1/watts/secondary", void 0, query);
199
+ }
200
+ /** Unfused desk pack: Promise Gap × Activity × Variance lab (HITL/mock). */
201
+ async deskBrief(slug) {
202
+ return this.request(
203
+ "GET",
204
+ "/api/v1/desk/brief",
205
+ void 0,
206
+ slug ? { slug } : void 0
207
+ );
208
+ }
209
+ async activityBrief(slug) {
210
+ return this.request("GET", "/api/v1/activity/brief", void 0, { slug });
211
+ }
212
+ async promiseGapBrief(slug) {
213
+ return this.request("GET", "/api/v1/promise-gap/brief", void 0, { slug });
214
+ }
215
+ async varianceBrief(token) {
216
+ return this.request(
217
+ "GET",
218
+ "/api/v1/variance/brief",
219
+ void 0,
220
+ token ? { token } : void 0
221
+ );
222
+ }
223
+ async freshnessBrief(id) {
224
+ return this.request("GET", "/api/v1/freshness/brief", void 0, { id });
225
+ }
226
+ async transparencyBrief(id) {
227
+ return this.request("GET", "/api/v1/transparency/brief", void 0, { id });
228
+ }
229
+ async frictionBrief(id) {
230
+ return this.request("GET", "/api/v1/friction/brief", void 0, { id });
231
+ }
123
232
  async request(method, path, body, query, auth = true) {
124
233
  const params = new URLSearchParams();
125
234
  if (query) {
@@ -201,6 +310,151 @@ var AUROS_MCP_TOOLS = [
201
310
  },
202
311
  handler: (client2, args) => client2.score(args)
203
312
  },
313
+ {
314
+ name: "verdict",
315
+ description: "Storefront. Issuer-prep gate ALLOW / CHALLENGE / BLOCK + settlement_hint. Why pay: $0.25 USDC (x402) is much smaller than acting on a false ALLOW for a multi-million desk decision \u2014 price visible before settle, no signup. Indicative \u2014 not a CRA rating, legal opinion, or trade authorization.",
316
+ schema: {
317
+ description: z.string().optional().describe("Free-text project description"),
318
+ asset_type: assetType,
319
+ issuer_type: z.enum(["company_spv", "existing_fund", "individual", "unsure"]).optional(),
320
+ asset_class: z.enum(["financial_instrument", "art_utility", "e_money", "unsure"]).optional(),
321
+ eu_nexus: z.enum(["issuer_eu", "asset_eu", "investors_eu", "no_eu", "unsure"]).optional(),
322
+ whitepaper: z.enum(["ready", "draft", "none", "unsure"]).optional(),
323
+ investor_type: z.enum(["professional", "retail", "mixed", "unsure"]).optional(),
324
+ value_eur: z.number().optional(),
325
+ jurisdiction: z.string().optional(),
326
+ has_kyc: z.boolean().optional(),
327
+ has_data_room: z.boolean().optional(),
328
+ documents_count: z.number().optional(),
329
+ record_history: z.boolean().optional()
330
+ },
331
+ handler: (client2, args) => client2.verdict(args)
332
+ },
333
+ {
334
+ name: "green_signal",
335
+ description: "Storefront. Energy/carbon Green composite + settlement_hint. Why pay: $0.08 \u226A misrouting on a thin green claim. Dual access Bearer|x402. Indicative \u2014 not a certified GO/REC or ESG rating.",
336
+ schema: {
337
+ id: z.string().describe("AUROS Green / Compare catalog id, e.g. powerledger")
338
+ },
339
+ handler: (client2, args) => client2.greenSignal(args)
340
+ },
341
+ {
342
+ name: "promise_gap",
343
+ description: "Storefront. Machine Promise Gap pack for a slug (claim vs activity). Why pay: $0.12 x402 \u226A allocating on a loud claim with thin measured life. Freemium card is free via promise_gap_card. Gap \u2260 fraud; Gap \u2260 Activity \u2260 Variance.",
344
+ schema: {
345
+ slug: z.string().describe("Promise Gap slug, e.g. wepower")
346
+ },
347
+ handler: (client2, args) => client2.promiseGap(args)
348
+ },
349
+ {
350
+ name: "promise_gap_batch",
351
+ description: "Storefront. Screen up to 5 Promise Gap slugs \u2014 tier matrix + machine briefs. Why pay: $0.45 x402 \u226A five single Gap calls before shortlist inclusion. Gap \u2260 fraud; Gap \u2260 Activity \u2260 Variance.",
352
+ schema: {
353
+ slugs: z.array(z.string()).min(1).max(5).describe("1\u20135 Promise Gap / Activity slugs")
354
+ },
355
+ handler: (client2, args) => client2.promiseGapBatch(args)
356
+ },
357
+ {
358
+ name: "promise_gap_card",
359
+ description: "Freemium public Promise Gap card \u2014 gap_score, tier, activity badge, Verified by AUROS. No auth. Use for embeds/badges; upgrade to promise_gap or promise_gap_brief for the machine pack.",
360
+ schema: {
361
+ slug: z.string().describe("Promise Gap slug, e.g. wepower")
362
+ },
363
+ handler: (client2, args) => client2.promiseGapCard(String(args.slug))
364
+ },
365
+ {
366
+ name: "attestation",
367
+ description: "Storefront. HMAC-signed readiness attestation. Why pay: $0.15 \u226A acting without an auditable proof when counsel asks what authorized the agent step. Premium Bearer or x402. Not a notary act.",
368
+ schema: {
369
+ description: z.string().optional().describe("Inline score description"),
370
+ asset_type: assetType,
371
+ score_id: z.string().optional(),
372
+ dossier_id: z.string().optional(),
373
+ locale: z.enum(["fr", "en", "es", "ar", "zh"]).optional()
374
+ },
375
+ handler: (client2, args) => {
376
+ const { description, asset_type, score_id, dossier_id, locale, ...rest } = args;
377
+ const body = {};
378
+ if (typeof score_id === "string") body.score_id = score_id;
379
+ if (typeof dossier_id === "string") body.dossier_id = dossier_id;
380
+ if (typeof locale === "string") body.locale = locale;
381
+ if (!score_id && !dossier_id) {
382
+ body.score = {
383
+ ...typeof description === "string" ? { description } : {},
384
+ ...typeof asset_type === "string" ? { asset_type } : {},
385
+ ...rest
386
+ };
387
+ }
388
+ return client2.attestation(body);
389
+ }
390
+ },
391
+ {
392
+ name: "reconcile",
393
+ description: "Storefront. On-chain/off-chain mismatch \u2192 HITL case. Why pay: $0.20 \u226A carrying a silent ledger break into the next settlement cycle. Does not auto-resolve. Premium Bearer or x402.",
394
+ schema: {
395
+ on_chain_ref: z.string().describe("Tx hash or on-chain id"),
396
+ observed_mismatch: z.string().describe("What diverged between ledgers"),
397
+ off_chain_system: z.enum(["transfer_agency", "custodian", "portfolio", "other"]).optional(),
398
+ off_chain_ref: z.string().optional(),
399
+ asset_ref: z.string().optional(),
400
+ severity: z.enum(["low", "medium", "high"]).optional(),
401
+ authority_hint: z.string().optional().describe("Non-binding hint for HITL \u2014 which book might win")
402
+ },
403
+ handler: (client2, args) => client2.reconcile(args)
404
+ },
405
+ {
406
+ name: "x402_catalog",
407
+ description: "Public AUROS x402 catalog v2 \u2014 storefronts with price + why_pay (pay cents to avoid a larger RWA miss), agent_pay thesis, Bazaar notes, enablement. No auth. Read this before deciding to settle via x402.",
408
+ schema: {},
409
+ handler: (client2) => client2.x402Catalog()
410
+ },
411
+ {
412
+ name: "execution_proof",
413
+ description: "Premium. Verdict + HMAC readiness attestation + execution_recommendation (execute_now|wait|restructure) for an intended action. Issuer-prep proof pack \u2014 not a trade authorization or on-chain settlement.",
414
+ schema: {
415
+ intended_action: z.enum([
416
+ "buy",
417
+ "sell",
418
+ "collateralize",
419
+ "include_portfolio",
420
+ "issue",
421
+ "monitor"
422
+ ]).describe("Intended action the agent or desk is evaluating"),
423
+ asset_ref: z.string().optional().describe("Optional caller asset reference"),
424
+ dossier_id: z.string().optional(),
425
+ score_id: z.string().optional(),
426
+ description: z.string().optional().describe("Inline score description when no dossier/score_id"),
427
+ asset_type: assetType,
428
+ locale: z.enum(["fr", "en", "es", "ar", "zh"]).optional()
429
+ },
430
+ handler: (client2, args) => {
431
+ const {
432
+ intended_action,
433
+ asset_ref,
434
+ dossier_id,
435
+ score_id,
436
+ locale,
437
+ description,
438
+ asset_type,
439
+ ...rest
440
+ } = args;
441
+ const body = {
442
+ intended_action
443
+ };
444
+ if (typeof asset_ref === "string") body.asset_ref = asset_ref;
445
+ if (typeof dossier_id === "string") body.dossier_id = dossier_id;
446
+ if (typeof score_id === "string") body.score_id = score_id;
447
+ if (typeof locale === "string") body.locale = locale;
448
+ if (!dossier_id && !score_id) {
449
+ body.score = {
450
+ ...typeof description === "string" ? { description } : {},
451
+ ...typeof asset_type === "string" ? { asset_type } : {},
452
+ ...rest
453
+ };
454
+ }
455
+ return client2.executionProof(body);
456
+ }
457
+ },
204
458
  {
205
459
  name: "score_batch",
206
460
  description: "Score up to 20 assets in one call. Each item accepts the same fields as score. Counts as 1 quota unit.",
@@ -220,7 +474,7 @@ var AUROS_MCP_TOOLS = [
220
474
  },
221
475
  {
222
476
  name: "products",
223
- description: "Browse the AUROS RWA product catalog (120+ tokenized products). Filter by category, chain, yield, jurisdiction.",
477
+ description: "Browse the AUROS RWA product catalog (count shown on /compare). Filter by category, chain, yield, jurisdiction.",
224
478
  schema: {
225
479
  category: z.enum([
226
480
  "stablecoins",
@@ -253,7 +507,7 @@ var AUROS_MCP_TOOLS = [
253
507
  },
254
508
  {
255
509
  name: "checklist",
256
- description: "Generate a compliance checklist (20+ items) for a tokenization project by asset type and jurisdiction.",
510
+ description: "Storefront. Issuer-prep compliance checklist (20+ items) by asset type and jurisdiction. Why pay: $0.10 x402 \u226A a hallucinated diligence list. Indicative \u2014 not legal advice.",
257
511
  schema: {
258
512
  asset_type: z.enum([
259
513
  "real_estate",
@@ -356,15 +610,48 @@ var AUROS_MCP_TOOLS = [
356
610
  },
357
611
  {
358
612
  name: "regulatory_feed",
359
- description: "Curated MiCA/ESMA/AMF/BaFin regulatory feed (premium key required). Filter by jurisdiction, tag, since date.",
613
+ description: "Curated MiCA/ESMA/AMF/BaFin/CSRD/energy regulatory feed (premium key). Filter by jurisdiction, tag, since date.",
360
614
  schema: {
361
615
  jurisdiction: z.string().optional(),
362
- tag: z.enum(["mica", "esma", "amf", "bafin"]).optional(),
616
+ tag: z.enum(["mica", "esma", "amf", "bafin", "csrd", "energy", "aml"]).optional(),
363
617
  since: z.string().optional().describe("ISO date \u2014 items published on or after"),
364
618
  limit: z.number().int().min(1).max(100).optional()
365
619
  },
366
620
  handler: (client2, args) => client2.regulatoryFeed(args)
367
621
  },
622
+ {
623
+ name: "regulatory_watch",
624
+ description: "Storefront. Curated regulatory watch pack (MiCA/CSRD/energy/AML) with deadlines digest. Why pay: $0.10 x402 \u226A acting on a stale NCA calendar. Indicative Twin lite \u2014 not live scraping.",
625
+ schema: {
626
+ jurisdiction: z.string().optional(),
627
+ asset_type: z.string().optional(),
628
+ tag: z.enum(["mica", "esma", "amf", "bafin", "csrd", "energy", "aml"]).optional(),
629
+ since: z.string().optional(),
630
+ limit: z.number().int().min(1).max(100).optional(),
631
+ include_deadlines: z.boolean().optional()
632
+ },
633
+ handler: (client2, args) => client2.regulatoryWatch(args)
634
+ },
635
+ {
636
+ name: "norms_screen",
637
+ description: "Storefront. Which curated norms apply to asset_type + jurisdiction (MiCA titles, CSRD, GO/EECS refs, AML, eWpG\u2026). Why pay: $0.08 x402 \u226A wrong regulatory rail. Indicative \u2014 not legal advice.",
638
+ schema: {
639
+ asset_type: z.string().optional(),
640
+ jurisdiction: z.string().optional(),
641
+ family: z.enum([
642
+ "mica",
643
+ "mifid",
644
+ "aml",
645
+ "csrd",
646
+ "energy",
647
+ "water",
648
+ "prospectus",
649
+ "dlt"
650
+ ]).optional(),
651
+ limit: z.number().int().min(1).max(50).optional()
652
+ },
653
+ handler: (client2, args) => client2.normsScreen(args)
654
+ },
368
655
  {
369
656
  name: "status",
370
657
  description: "AUROS Protocol API health \u2014 service probes, version, deployed commit. No auth required.",
@@ -511,6 +798,190 @@ var AUROS_MCP_TOOLS = [
511
798
  handler: (client2, args) => client2.retireChargeflow(String(args.id), {
512
799
  reason: args.reason
513
800
  })
801
+ },
802
+ {
803
+ name: "watts_reserve",
804
+ description: "Create a Watts Reserve intent (Premium). Deterministic match_score \u2014 no CFU mint. Confirm separately.",
805
+ schema: {
806
+ window: z.object({
807
+ start: z.string(),
808
+ end: z.string()
809
+ }),
810
+ energy_kwh: z.number().optional(),
811
+ capacity_kw: z.number().optional(),
812
+ zone: z.object({
813
+ country: z.string(),
814
+ zone_id: z.string().optional()
815
+ }),
816
+ carbon_intensity_max_gco2_kwh: z.number().optional(),
817
+ firmness: z.enum(["firm", "flex"]).optional(),
818
+ buyer_ref: z.string().optional()
819
+ },
820
+ handler: (client2, args) => client2.wattsReserve(args)
821
+ },
822
+ {
823
+ name: "watts_get",
824
+ description: "Get a Watts reservation by id (Premium).",
825
+ schema: {
826
+ id: z.string().describe("reservation uuid")
827
+ },
828
+ handler: (client2, args) => client2.wattsReservation(String(args.id))
829
+ },
830
+ {
831
+ name: "watts_confirm",
832
+ description: "Confirm a Watts reservation \u2014 mints CFU-E or CFU-F linked to reservation_id (Premium). Explicit only.",
833
+ schema: {
834
+ id: z.string().describe("reservation uuid")
835
+ },
836
+ handler: (client2, args) => client2.wattsConfirm(String(args.id))
837
+ },
838
+ {
839
+ name: "watts_settle",
840
+ description: "Settle a confirmed Watts reservation on delivery \u2014 retires linked CFU (Premium). Explicit only.",
841
+ schema: {
842
+ id: z.string().describe("reservation uuid"),
843
+ delivery_ref: z.string().optional(),
844
+ energy_kwh_delivered: z.number().optional(),
845
+ capacity_kw_delivered: z.number().optional(),
846
+ reason: z.string().optional()
847
+ },
848
+ handler: (client2, args) => {
849
+ const { id, ...body } = args;
850
+ return client2.wattsSettle(String(id), body);
851
+ }
852
+ },
853
+ {
854
+ name: "watts_list_offers",
855
+ description: "List open producer capacity offers (Premium). Optional filters: country, firmness, mine.",
856
+ schema: {
857
+ country: z.string().optional(),
858
+ firmness: z.enum(["firm", "flex"]).optional(),
859
+ mine: z.boolean().optional()
860
+ },
861
+ handler: (client2, args) => client2.wattsOffers(args)
862
+ },
863
+ {
864
+ name: "watts_create_offer",
865
+ description: "Publish a producer capacity window to Watts inventory (Premium). Indicative \u2014 not a PPA.",
866
+ schema: {
867
+ window: z.object({ start: z.string(), end: z.string() }),
868
+ capacity_kw: z.number().optional(),
869
+ energy_kwh: z.number().optional(),
870
+ zone: z.object({
871
+ country: z.string(),
872
+ zone_id: z.string().optional()
873
+ }),
874
+ carbon_intensity_gco2_kwh: z.number().optional(),
875
+ firmness: z.enum(["firm", "flex"]).optional(),
876
+ label: z.string().optional(),
877
+ producer_ref: z.string().optional()
878
+ },
879
+ handler: (client2, args) => client2.wattsCreateOffer(args)
880
+ },
881
+ {
882
+ name: "watts_match_offers",
883
+ description: "Rank open capacity offers against a buyer profile (Premium). Deterministic \u2014 no auto-reserve.",
884
+ schema: {
885
+ window: z.object({ start: z.string(), end: z.string() }),
886
+ energy_kwh: z.number().optional(),
887
+ capacity_kw: z.number().optional(),
888
+ zone: z.object({
889
+ country: z.string(),
890
+ zone_id: z.string().optional()
891
+ }),
892
+ carbon_intensity_max_gco2_kwh: z.number().optional(),
893
+ firmness: z.enum(["firm", "flex"]).optional()
894
+ },
895
+ handler: (client2, args) => client2.wattsMatchOffers(args)
896
+ },
897
+ {
898
+ name: "watts_secondary_book",
899
+ description: "List open secondary listings (Premium). Optional mine=true for own listings.",
900
+ schema: {
901
+ mine: z.boolean().optional()
902
+ },
903
+ handler: (client2, args) => client2.wattsSecondary(args)
904
+ },
905
+ {
906
+ name: "watts_secondary_list",
907
+ description: "Create an indicative secondary listing (Premium). Optional compare_ref_id \u2192 /compare. Not a securities exchange.",
908
+ schema: {
909
+ reservation_id: z.string().uuid().optional(),
910
+ indicative_price_eur: z.number().positive(),
911
+ compare_ref_id: z.string().optional(),
912
+ label: z.string().optional(),
913
+ note: z.string().optional(),
914
+ energy_kwh: z.number().optional(),
915
+ capacity_kw: z.number().optional(),
916
+ zone: z.object({
917
+ country: z.string(),
918
+ zone_id: z.string().optional()
919
+ }).optional(),
920
+ firmness: z.enum(["firm", "flex"]).optional()
921
+ },
922
+ handler: (client2, args) => client2.wattsSecondaryList(args)
923
+ },
924
+ {
925
+ name: "desk_brief",
926
+ description: "Enterprise desk pack v3 for an energy RWA slug: Promise Gap + Activity + Variance lab as three unfused signals with provenance (source\xB7as_of\xB7quality). Variance includes meter_profile and last_2/4/8 window rollups. Default slug = featured desk tour. Cite AUROS edition timestamps. Not investment advice.",
927
+ schema: {
928
+ slug: z.string().optional().describe(
929
+ "Activity / Promise Gap energy slug (e.g. powerledger, wepower, toucan-bct, klima-dao)"
930
+ )
931
+ },
932
+ handler: (client2, args) => client2.deskBrief(
933
+ typeof args.slug === "string" ? args.slug : void 0
934
+ )
935
+ },
936
+ {
937
+ name: "promise_gap_brief",
938
+ description: "AUROS Promise Gap machine brief for one energy slug: claim intensity vs measured activity, provenance, LODO envelope, drivers, NLI claim_evidence, activity join quality. High gap \u2260 fraud. Never fused with Variance. Cite getauros.com/promise-gap with claim as_of.",
939
+ schema: {
940
+ slug: z.string().describe("Promise Gap / Activity energy slug (e.g. wepower, powerledger)")
941
+ },
942
+ handler: (client2, args) => client2.promiseGapBrief(String(args.slug ?? ""))
943
+ },
944
+ {
945
+ name: "activity_brief",
946
+ description: "AUROS Activity Index machine brief for one energy asset slug: score, badge, LODO envelope, provenance, live overlays (CoinGecko depth / allowlisted EVM tokentx), content_hash. Wash detection off. Cite getauros.com/activity with edition UTC.",
947
+ schema: {
948
+ slug: z.string().describe("Activity energy slug (e.g. powerledger, toucan-bct, klima-dao)")
949
+ },
950
+ handler: (client2, args) => client2.activityBrief(String(args.slug ?? ""))
951
+ },
952
+ {
953
+ name: "variance_brief",
954
+ description: "AUROS Variance Oracle lab brief v2 (promised vs attested Wh, meter_profile demo|device, provenance, last_2/4/8 rollups, collateral factor, HITL/mock settlement). Physical energy window \u2014 not market Activity and not Promise Gap. Optional token 0x address; default = AUROS lab demo. Not a certified SCADA feed.",
955
+ schema: {
956
+ token: z.string().optional().describe("Optional 0x lab token address; omit for AUROS demo window")
957
+ },
958
+ handler: (client2, args) => client2.varianceBrief(
959
+ typeof args.token === "string" ? args.token : void 0
960
+ )
961
+ },
962
+ {
963
+ name: "freshness_brief",
964
+ description: "Freshness Index machine brief for a Compare product id \u2014 Fresh / Stale / Unknown vs class cache age. Not an on-chain oracle.",
965
+ schema: {
966
+ id: z.string().describe("Compare product id (may contain :: \u2014 pass as-is)")
967
+ },
968
+ handler: (client2, args) => client2.freshnessBrief(String(args.id ?? ""))
969
+ },
970
+ {
971
+ name: "transparency_brief",
972
+ description: "Transparency Depth machine brief for a Compare product id \u2014 Thin / Partial / Deep completeness of the public record. Not an on-chain oracle.",
973
+ schema: {
974
+ id: z.string().describe("Compare product id (may contain :: \u2014 pass as-is)")
975
+ },
976
+ handler: (client2, args) => client2.transparencyBrief(String(args.id ?? ""))
977
+ },
978
+ {
979
+ name: "friction_brief",
980
+ description: "Jurisdiction Friction machine brief \u2014 indicative structuring friction (fees, delays, KYC posture). id = jurisdiction catalog id (e.g. luxembourg). Not legal advice.",
981
+ schema: {
982
+ id: z.string().describe("Jurisdiction catalog id (e.g. luxembourg, difc, singapore)")
983
+ },
984
+ handler: (client2, args) => client2.frictionBrief(String(args.id ?? ""))
514
985
  }
515
986
  ];
516
987
  function registerAurosTools(server2, client2) {
package/package.json CHANGED
@@ -1,53 +1,59 @@
1
- {
2
- "name": "@adrien1212balitrand/auros-mcp",
3
- "version": "1.2.1",
4
- "description": "MCP server for AUROS Protocol — RWA intelligence tools for Cursor and Claude Desktop",
5
- "license": "MIT",
6
- "type": "module",
7
- "main": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "bin": {
10
- "auros-mcp": "bin/auros-mcp.js"
11
- },
12
- "files": [
13
- "bin",
14
- "dist",
15
- "README.md"
16
- ],
17
- "scripts": {
18
- "build": "tsup src/index.ts --format esm --dts --clean",
19
- "start": "node dist/index.js",
20
- "prepublishOnly": "npm run build"
21
- },
22
- "keywords": [
23
- "auros",
24
- "mcp",
25
- "model-context-protocol",
26
- "rwa",
27
- "mica",
28
- "cursor",
29
- "claude"
30
- ],
31
- "repository": {
32
- "type": "git",
33
- "url": "https://github.com/getauros/auros",
34
- "directory": "packages/auros-mcp"
35
- },
36
- "homepage": "https://getauros.com/developers/docs/mcp-server",
37
- "dependencies": {
38
- "@modelcontextprotocol/sdk": "^1.12.1",
39
- "zod": "^3.25.76"
40
- },
41
- "devDependencies": {
42
- "@types/node": "^20",
43
- "tsup": "^8.5.0",
44
- "typescript": "^5"
45
- },
46
- "engines": {
47
- "node": ">=18"
48
- },
49
- "publishConfig": {
50
- "access": "public",
51
- "registry": "https://registry.npmjs.org/"
52
- }
53
- }
1
+ {
2
+ "name": "@adrien1212balitrand/auros-mcp",
3
+ "version": "1.4.2",
4
+ "description": "MCP server for AUROS Protocol — RWA agent storefronts (verdict · gap · gap-batch · norms · reg-watch · checklist · attest · reconcile) + desk tools",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "bin": {
10
+ "auros-mcp": "bin/auros-mcp.js"
11
+ },
12
+ "files": [
13
+ "bin",
14
+ "dist",
15
+ "README.md"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsup src/index.ts --format esm --dts --clean",
19
+ "start": "node dist/index.js",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "auros",
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "rwa",
27
+ "mica",
28
+ "compliance",
29
+ "promise-gap",
30
+ "x402",
31
+ "energy",
32
+ "cursor",
33
+ "claude",
34
+ "smithery",
35
+ "agent-storefront"
36
+ ],
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/Bassanova12560/auros-sdk",
40
+ "directory": "packages/auros-mcp"
41
+ },
42
+ "homepage": "https://getauros.com/developers/docs/mcp-server",
43
+ "dependencies": {
44
+ "@modelcontextprotocol/sdk": "^1.12.1",
45
+ "zod": "^3.25.76"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^20",
49
+ "tsup": "^8.5.0",
50
+ "typescript": "^5"
51
+ },
52
+ "engines": {
53
+ "node": ">=18"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public",
57
+ "registry": "https://registry.npmjs.org/"
58
+ }
59
+ }