@buildaureon/mcp 0.1.8 → 0.1.10
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/CHANGELOG.md +81 -0
- package/README.md +487 -401
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/docs/agent-guide.md +652 -652
- package/docs/architecture.md +384 -377
- package/docs/auth.md +361 -351
- package/docs/security.md +335 -335
- package/docs/setup.md +406 -347
- package/docs/tools.md +767 -765
- package/examples/claude-desktop.json +11 -11
- package/examples/cursor.hosted.mcp.json +7 -0
- package/examples/cursor.hosted.user.mcp.json +10 -0
- package/examples/cursor.mcp.json +11 -11
- package/package.json +3 -2
package/docs/security.md
CHANGED
|
@@ -1,335 +1,335 @@
|
|
|
1
|
-
# Security
|
|
2
|
-
|
|
3
|
-
Threat model and operational guidance for running `@buildaureon/mcp` against the live AUREON API.
|
|
4
|
-
|
|
5
|
-
This document is for operators configuring agent hosts and for AI agents that must respect custody and credential boundaries. It complements `architecture.md`: the adapter is thin, but the **blast radius of a leaked API key or a mis-hosted MCP process** is not.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. Trust boundaries (light threat model)
|
|
10
|
-
|
|
11
|
-
| Boundary | Assumption | Failure mode if broken |
|
|
12
|
-
| --- | --- | --- |
|
|
13
|
-
| MCP process | Local stdio child of a trusted host |
|
|
14
|
-
| Issued API key | Equivalent to “act as this developer / wallet scope” on the control plane | Attacker creates objectives, restores, prepares vault steps, manages keys |
|
|
15
|
-
| Private key | Never enters MCP env or process | Full fund theft if combined with broadcast capability |
|
|
16
|
-
| Host LLM / agent | Can call any enabled tool | Prompt injection or confused deputy may trigger writes |
|
|
17
|
-
| Operator utility | Separate wallet-Bearer UI | Unrelated to MCP, but same API identity if same wallet |
|
|
18
|
-
| HTTP(S) to API | Default
|
|
19
|
-
|
|
20
|
-
```mermaid
|
|
21
|
-
flowchart LR
|
|
22
|
-
Host[MCP_host_and_LLM] -->|
|
|
23
|
-
MCP -->|API_key_and_optional_Bearer| API[
|
|
24
|
-
MCP -.->|never_holds| PK[private_keys]
|
|
25
|
-
Human[Human_operator] -->|reviews_and_signs| Chain[Robinhood_Chain]
|
|
26
|
-
API --> Vault[Smart_Vault]
|
|
27
|
-
Vault --> Chain
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### Assets worth protecting
|
|
31
|
-
|
|
32
|
-
1. **Issued API keys** — long-lived control-plane credentials.
|
|
33
|
-
2. **Bearer session tokens** — short-lived wallet sessions in process memory.
|
|
34
|
-
3. **Unsigned prepare payloads** — not spendable alone, but valuable for phishing / wrong-chain tricks if altered.
|
|
35
|
-
4. **Agent conversation logs** — may accidentally echo secrets if tools or prompts dump env.
|
|
36
|
-
|
|
37
|
-
### Adversaries (simplified)
|
|
38
|
-
|
|
39
|
-
- Malicious or compromised MCP host configuration.
|
|
40
|
-
- Prompt injection that steers an agent toward write tools.
|
|
41
|
-
- Leaked key material from chat logs, screenshots, or shared configs.
|
|
42
|
-
- Insider with host access but without wallet keys (still dangerous for control plane).
|
|
43
|
-
|
|
44
|
-
This is a **light** threat model: enough to drive defaults, not a formal audit report.
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## 2. Credential handling
|
|
49
|
-
|
|
50
|
-
### Issued API keys (`AUREON_API_KEY`)
|
|
51
|
-
|
|
52
|
-
- Created via developer tools / utility Developers surface; **plaintext shown once** at issuance.
|
|
53
|
-
- Treat as a **secret password** for the AUREON control plane.
|
|
54
|
-
- Store in the host’s MCP env configuration or a secret manager — **never** commit to git, never paste into public issues, never embed in prompts as standing instructions.
|
|
55
|
-
- Prefer **one key per agent host** (e.g. Cursor workspace vs Claude Desktop vs CI agent).
|
|
56
|
-
- Pause or revoke immediately on suspicion of leak (`aureon_toggle_api_key`, `aureon_revoke_api_key`, or utility equivalents).
|
|
57
|
-
|
|
58
|
-
### Bearer tokens (`AUREON_AUTH_TOKEN` / session)
|
|
59
|
-
|
|
60
|
-
- Obtained from wallet verify flows (`aureon_get_auth_nonce` → sign off-MCP → `aureon_verify_wallet`) or optional env bootstrap.
|
|
61
|
-
- Held **in-process only** by the SDK session provider; MCP does not write them to disk.
|
|
62
|
-
- Clear with `aureon_logout` on shared long-lived hosts when the human session ends.
|
|
63
|
-
- Do not log, print, or ask the model to “show the token.”
|
|
64
|
-
|
|
65
|
-
### What travels on the wire
|
|
66
|
-
|
|
67
|
-
- Issued key: `X-Aureon-Api-Key` (SDK).
|
|
68
|
-
- Bearer: `Authorization` (SDK).
|
|
69
|
-
- Both are composed inside the SDK HTTP client. MCP handlers should not re-implement header injection.
|
|
70
|
-
|
|
71
|
-
### Private keys
|
|
72
|
-
|
|
73
|
-
- **Never** place a wallet private key or seed in MCP environment variables.
|
|
74
|
-
- Required only to **broadcast** transactions after prepare tools return unsigned steps.
|
|
75
|
-
- Keep keys in the operator wallet, hardware wallet, or a dedicated signing service **outside** the MCP child process.
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## 3. What MCP never does
|
|
80
|
-
|
|
81
|
-
`@buildaureon/mcp` deliberately omits capabilities that would collapse the custody boundary:
|
|
82
|
-
|
|
83
|
-
| Capability | MCP behavior |
|
|
84
|
-
| --- | --- |
|
|
85
|
-
| Hold private keys | Never |
|
|
86
|
-
| Sign transactions | Never |
|
|
87
|
-
| Broadcast to chain | Never |
|
|
88
|
-
| Custodial withdraw | Never |
|
|
89
|
-
| Silent auto-trade without a plan | Never — restores are explicit tool calls |
|
|
90
|
-
| Persist secrets to disk | Never |
|
|
91
|
-
| Expose a public HTTP MCP endpoint | Not supported / not recommended |
|
|
92
|
-
| Claim `settlement: "vault"` when staged | Never — pass through API honesty fields |
|
|
93
|
-
| Print API keys in tool results | Must not |
|
|
94
|
-
|
|
95
|
-
If a fork or wrapper adds signing inside the MCP process, it is **no longer** the same trust model. Treat that as a different product with a different review bar.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 4. Deposit / withdraw trust boundary
|
|
100
|
-
|
|
101
|
-
Vault tools are split on purpose:
|
|
102
|
-
|
|
103
|
-
1. **Read** — `aureon_get_vault`, `aureon_get_vault_status` (and related reads) show state.
|
|
104
|
-
2. **Prepare** — `aureon_prepare_vault_deposit` / `aureon_prepare_vault_withdraw` return **unsigned** steps / calldata descriptions.
|
|
105
|
-
3. **Sign & broadcast** — human or external signer only.
|
|
106
|
-
4. **Observe** — later reads confirm chain effects.
|
|
107
|
-
|
|
108
|
-
```mermaid
|
|
109
|
-
sequenceDiagram
|
|
110
|
-
participant Agent
|
|
111
|
-
participant MCP
|
|
112
|
-
participant API
|
|
113
|
-
participant Signer as External_signer
|
|
114
|
-
participant Chain
|
|
115
|
-
|
|
116
|
-
Agent->>MCP: prepare_vault_withdraw
|
|
117
|
-
MCP->>API: prepare request
|
|
118
|
-
API-->>MCP: unsigned steps
|
|
119
|
-
MCP-->>Agent: JSON calldata description
|
|
120
|
-
Note over Agent,Signer: Human review required
|
|
121
|
-
Signer->>Chain: signed broadcast
|
|
122
|
-
Agent->>MCP: get_vault_status
|
|
123
|
-
MCP->>API: status
|
|
124
|
-
API-->>Agent: updated state
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Operator checklist for prepare flows
|
|
128
|
-
|
|
129
|
-
- Confirm the **amount**, **asset**, and **destination** in the prepare payload before signing.
|
|
130
|
-
- Confirm you are on the intended network (Robinhood Chain context as documented by AUREON).
|
|
131
|
-
- Do not ask the agent to “just sign it” with a key the agent can access.
|
|
132
|
-
- Treat unexpected prepare output (wrong recipient, odd calldata) as a stop-ship signal.
|
|
133
|
-
|
|
134
|
-
Prepare without broadcast cannot move funds. Broadcast without review can. Keep the human (or a hardened signing policy engine) in that gap.
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## 5. Key rotation, pause, and revoke
|
|
139
|
-
|
|
140
|
-
### Rotation pattern
|
|
141
|
-
|
|
142
|
-
1. Create a new issued key (`aureon_create_api_key` or utility).
|
|
143
|
-
2. Update host MCP env to the new key.
|
|
144
|
-
3. Restart the MCP host / child process so config reloads.
|
|
145
|
-
4. Verify with a read tool (`aureon_ping`, `aureon_me`, or overview).
|
|
146
|
-
5. **Revoke** or **pause** the old key.
|
|
147
|
-
|
|
148
|
-
Avoid long dual-key windows on untrusted machines. Prefer short overlap only while validating the new host config.
|
|
149
|
-
|
|
150
|
-
### Pause vs revoke
|
|
151
|
-
|
|
152
|
-
| Action | Intent |
|
|
153
|
-
| --- | --- |
|
|
154
|
-
| Pause / toggle off | Temporary disable without destroying the key record |
|
|
155
|
-
| Revoke | Permanent invalidation after leak or decommission |
|
|
156
|
-
| Logout (Bearer) | Clear in-memory session only; does not revoke issued keys |
|
|
157
|
-
|
|
158
|
-
### Least privilege habits
|
|
159
|
-
|
|
160
|
-
- Separate keys for **read-heavy experimentation** vs **production agent** hosts when the product surface allows operational separation.
|
|
161
|
-
- Do not share one key across untrusted operators or public demo machines.
|
|
162
|
-
- Limit which host profiles load write-capable MCP configs.
|
|
163
|
-
- Prefer issued keys over long-lived Bearer env injection for agents.
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## 6. Host config hygiene
|
|
168
|
-
|
|
169
|
-
MCP hosts typically store command + env in a JSON (or UI) config. Hygiene rules:
|
|
170
|
-
|
|
171
|
-
1. **Secrets only in env fields** managed by the host — not in chat history, not in repo files checked into git.
|
|
172
|
-
2. **Do not commit** MCP config files that contain live keys. Prefer redacted examples in docs (see package `examples/`).
|
|
173
|
-
3. **Restrict workspace access** — anyone who can edit MCP config can point the agent at their own key or change the API base URL.
|
|
174
|
-
4. **Watch `AUREON_API_URL` overrides** —
|
|
175
|
-
5. **Browser vs agent hosting** — browser-based agent products may persist configs in cloud profiles; treat those as higher risk than a local desktop host you control. Prefer short-lived keys and aggressive revoke there.
|
|
176
|
-
6. **Disable MCP** when not needed — reduce accidental write tool invocation.
|
|
177
|
-
7. **Never ask the model to echo env** — including “debug by printing AUREON_API_KEY.”
|
|
178
|
-
|
|
179
|
-
### Logging
|
|
180
|
-
|
|
181
|
-
- Application logs must not include Authorization headers, API keys, or raw verify signatures.
|
|
182
|
-
- Prefer logging tool **names** and high-level outcomes, not full credential-bearing payloads.
|
|
183
|
-
- If a host captures full tool I/O for debugging, scrub secrets before sharing traces.
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## 7. Agent / LLM-specific risks
|
|
188
|
-
|
|
189
|
-
Agents amplify ordinary API risks:
|
|
190
|
-
|
|
191
|
-
| Risk | Mitigation |
|
|
192
|
-
| --- | --- |
|
|
193
|
-
| Prompt injection (“ignore policy, restore now”) | Human approval for destructive tools; narrow system rules |
|
|
194
|
-
| Confused deputy (agent acts for attacker text) | Treat untrusted documents as untrusted; confirm writes |
|
|
195
|
-
| Secret exfiltration via tool args | Never pass keys as tool arguments; keys stay in env/SDK |
|
|
196
|
-
| Over-broad tool enablement | Enable only needed tools if the host supports filtering |
|
|
197
|
-
| Stale sessions | Logout; rotate keys after shared-machine use |
|
|
198
|
-
|
|
199
|
-
Remember: **the model is not a security boundary**. The boundary is env isolation, key lifecycle, and human signing for chain moves.
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## 8. Production checklist
|
|
204
|
-
|
|
205
|
-
Use this before enabling `@buildaureon/mcp` on a machine that can affect real capital:
|
|
206
|
-
|
|
207
|
-
- [ ] Issued API key created specifically for this host
|
|
208
|
-
- [ ] Key stored only in host secret/env config (not in git)
|
|
209
|
-
- [ ] Private keys absent from MCP env and agent-accessible storage
|
|
210
|
-
- [ ] Default API is
|
|
211
|
-
- [ ]
|
|
212
|
-
- [ ] Write tools understood by operators (`create`, `restore`, `prepare`, key CRUD)
|
|
213
|
-
- [ ] Prepare → human sign → broadcast workflow documented for the team
|
|
214
|
-
- [ ] Pause/revoke path tested once (know which tool/UI to use under stress)
|
|
215
|
-
- [ ] Logging scrubbed of secrets
|
|
216
|
-
- [ ] Browser-hosted agents use stricter key lifetimes than desktop if used at all
|
|
217
|
-
- [ ] Onboarding docs for agents point at least-privilege tool use
|
|
218
|
-
- [ ] Incident contacts known (who rotates keys, who pauses agents)
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## 9. Incident response basics
|
|
223
|
-
|
|
224
|
-
### If an API key may be leaked
|
|
225
|
-
|
|
226
|
-
1. **Pause or revoke** the key immediately (developer tools or utility).
|
|
227
|
-
2. **Restart** hosts so stale processes drop the old env after config update.
|
|
228
|
-
3. **Inventory** recent objectives, restores, prepares, and key CRUD via timeline / executions / key list tools.
|
|
229
|
-
4. **Issue a replacement key**; update only trusted hosts.
|
|
230
|
-
5. **Review** whether Bearer sessions were also exposed; logout and re-verify if needed.
|
|
231
|
-
6. **Communicate** to operators: stop signing prepare payloads from unknown sessions until review completes.
|
|
232
|
-
|
|
233
|
-
### If a private key may be leaked
|
|
234
|
-
|
|
235
|
-
1. This is **outside MCP** but higher severity — move funds / rotate wallets per your chain runbook.
|
|
236
|
-
2. Revoke associated API keys as a secondary control-plane lockdown.
|
|
237
|
-
3. Assume any unsigned prepare history could be replayed by an attacker who also has the key.
|
|
238
|
-
|
|
239
|
-
### If an agent mis-fired writes
|
|
240
|
-
|
|
241
|
-
1. Pause the objective or agent host.
|
|
242
|
-
2. Inspect health, timeline, and executions for settlement honesty (`vault` vs `staged`).
|
|
243
|
-
3. Do not “fix forward” with more restores until intent is clear.
|
|
244
|
-
4. Rotate keys if the mis-fire suggests prompt injection with data exfil attempts.
|
|
245
|
-
|
|
246
|
-
### Evidence to preserve
|
|
247
|
-
|
|
248
|
-
- Timestamps of tool calls (host logs, if scrubbed).
|
|
249
|
-
- Objective ids and execution receipts.
|
|
250
|
-
- Key ids (not secret material) involved.
|
|
251
|
-
|
|
252
|
-
Do not paste live secrets into tickets.
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## 10. Browser vs desktop agent hosting
|
|
257
|
-
|
|
258
|
-
| Hosting style | Typical risk | Guidance |
|
|
259
|
-
| --- | --- | --- |
|
|
260
|
-
| Local desktop MCP (Cursor / Claude Desktop style) | Config files on disk; local malware | Disk encryption; least-privilege OS user; no shared accounts |
|
|
261
|
-
| Cloud / browser agent with remote tool runner | Broader persistence and sharing surfaces | Short-lived keys; revoke often; avoid high-value wallets |
|
|
262
|
-
| Shared demo machine | Key reuse across people | Unique keys; revoke after demo; no private keys nearby |
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## 11. Honest settlement and integrity
|
|
269
|
-
|
|
270
|
-
Security is not only custody; it is also **truthfulness of outcomes**:
|
|
271
|
-
|
|
272
|
-
- Agents must surface `settlement` fields accurately.
|
|
273
|
-
- Staged settlement is not the same as vault/on-chain completion.
|
|
274
|
-
- Do not coach models to rewrite receipts as “done on-chain” when the API said `staged`.
|
|
275
|
-
|
|
276
|
-
Integrity failures (lying about settlement) create operator errors that look like security incidents later.
|
|
277
|
-
|
|
278
|
-
---
|
|
279
|
-
|
|
280
|
-
## 12. Dependency and supply-chain notes
|
|
281
|
-
|
|
282
|
-
- Install `@buildaureon/mcp` from the published package registry you trust.
|
|
283
|
-
- Pin versions when reproducibility and change control matter.
|
|
284
|
-
- The MCP package depends on `@buildaureon/sdk` and `@modelcontextprotocol/sdk`.
|
|
285
|
-
- Review release notes when upgrading — new tools expand the agent’s write surface.
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## 13. FAQ
|
|
290
|
-
|
|
291
|
-
**Is an issued API key as powerful as my wallet private key?**
|
|
292
|
-
No. It does not sign chain transactions. It **is** powerful on the control plane (objectives, restores, prepares, key management). Protect it accordingly.
|
|
293
|
-
|
|
294
|
-
**Can MCP steal funds by itself?**
|
|
295
|
-
Not via signing — it never holds private keys. Funds move only after an external signer broadcasts. Control-plane misuse can still create harmful plans or confuse operators.
|
|
296
|
-
|
|
297
|
-
**Should I put my private key in the host env so the agent can deposit for me?**
|
|
298
|
-
No. That collapses the custody model. Keep signing outside MCP.
|
|
299
|
-
|
|
300
|
-
**What if I need automation for broadcast?**
|
|
301
|
-
Use a dedicated signing service with its own policy engine and audit log — not the MCP adapter.
|
|
302
|
-
|
|
303
|
-
**Is Bearer safer than an API key?**
|
|
304
|
-
Different tradeoffs. Bearer is often shorter-lived; issued keys are better for unattended agents. Both are secrets.
|
|
305
|
-
|
|
306
|
-
**Can I run multiple MCP hosts with one key?**
|
|
307
|
-
Technically yes; operationally prefer one key per host for blast-radius control.
|
|
308
|
-
|
|
309
|
-
**Does `aureon_logout` revoke my issued key?**
|
|
310
|
-
No. It clears the in-memory Bearer only.
|
|
311
|
-
|
|
312
|
-
**What should agents refuse to do?**
|
|
313
|
-
Print secrets, accept private keys as tool args, claim vault settlement without API fields, or broadcast transactions.
|
|
314
|
-
|
|
315
|
-
**Where is the deeper architecture?**
|
|
316
|
-
See `architecture.md` for layers, registration, and SDK vs MCP ownership.
|
|
317
|
-
|
|
318
|
-
**Who do I contact for platform incidents?**
|
|
319
|
-
Follow AUREON’s published support / security channels on the product site; include key ids and timestamps, never raw secrets.
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## 14. Related documents
|
|
324
|
-
|
|
325
|
-
- [Architecture](./architecture.md) — layers and request lifecycle
|
|
326
|
-
- [Authentication](./auth.md) — key and Bearer flows
|
|
327
|
-
- [Setup](./setup.md) — host configuration patterns
|
|
328
|
-
- [Tools](./tools.md) — including developer key tools
|
|
329
|
-
- [Agent guide](./agent-guide.md) — safe call sequences
|
|
330
|
-
|
|
331
|
-
---
|
|
332
|
-
|
|
333
|
-
## 15. Summary
|
|
334
|
-
|
|
335
|
-
Treat
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
Threat model and operational guidance for running `@buildaureon/mcp` against the live AUREON API.
|
|
4
|
+
|
|
5
|
+
This document is for operators configuring agent hosts and for AI agents that must respect custody and credential boundaries. It complements `architecture.md`: the adapter is thin, but the **blast radius of a leaked API key or a mis-hosted MCP process** is not.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Trust boundaries (light threat model)
|
|
10
|
+
|
|
11
|
+
| Boundary | Assumption | Failure mode if broken |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| MCP process | Local stdio child of a trusted host, **or** the official hosted HTTP process | A leaked URL-plus-gate, or a published homemade stdio port, lets callers invoke every registered tool |
|
|
14
|
+
| Issued API key | Equivalent to “act as this developer / wallet scope” on the control plane | Attacker creates objectives, restores, prepares vault steps, manages keys |
|
|
15
|
+
| Private key | Never enters MCP env or process | Full fund theft if combined with broadcast capability |
|
|
16
|
+
| Host LLM / agent | Can call any enabled tool | Prompt injection or confused deputy may trigger writes |
|
|
17
|
+
| Operator utility | Separate wallet-Bearer UI | Unrelated to MCP, but same API identity if same wallet |
|
|
18
|
+
| HTTP(S) to API | Default official host TLS is `https://api.aureonlabs.network` (mainnet by omit) | MITM if URL pointed at attacker |
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart LR
|
|
22
|
+
Host[MCP_host_and_LLM] -->|stdio_or_hosted_HTTP| MCP[MCP_adapter]
|
|
23
|
+
MCP -->|API_key_and_optional_Bearer| API[official_api_aureonlabs_network]
|
|
24
|
+
MCP -.->|never_holds| PK[private_keys]
|
|
25
|
+
Human[Human_operator] -->|reviews_and_signs| Chain[Robinhood_Chain]
|
|
26
|
+
API --> Vault[Smart_Vault]
|
|
27
|
+
Vault --> Chain
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Assets worth protecting
|
|
31
|
+
|
|
32
|
+
1. **Issued API keys** — long-lived control-plane credentials.
|
|
33
|
+
2. **Bearer session tokens** — short-lived wallet sessions in process memory.
|
|
34
|
+
3. **Unsigned prepare payloads** — not spendable alone, but valuable for phishing / wrong-chain tricks if altered.
|
|
35
|
+
4. **Agent conversation logs** — may accidentally echo secrets if tools or prompts dump env.
|
|
36
|
+
|
|
37
|
+
### Adversaries (simplified)
|
|
38
|
+
|
|
39
|
+
- Malicious or compromised MCP host configuration.
|
|
40
|
+
- Prompt injection that steers an agent toward write tools.
|
|
41
|
+
- Leaked key material from chat logs, screenshots, or shared configs.
|
|
42
|
+
- Insider with host access but without wallet keys (still dangerous for control plane).
|
|
43
|
+
|
|
44
|
+
This is a **light** threat model: enough to drive defaults, not a formal audit report.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 2. Credential handling
|
|
49
|
+
|
|
50
|
+
### Issued API keys (`AUREON_API_KEY`)
|
|
51
|
+
|
|
52
|
+
- Created via developer tools / utility Developers surface; **plaintext shown once** at issuance.
|
|
53
|
+
- Treat as a **secret password** for the AUREON control plane.
|
|
54
|
+
- Store in the host’s MCP env configuration or a secret manager — **never** commit to git, never paste into public issues, never embed in prompts as standing instructions.
|
|
55
|
+
- Prefer **one key per agent host** (e.g. Cursor workspace vs Claude Desktop vs CI agent).
|
|
56
|
+
- Pause or revoke immediately on suspicion of leak (`aureon_toggle_api_key`, `aureon_revoke_api_key`, or utility equivalents).
|
|
57
|
+
|
|
58
|
+
### Bearer tokens (`AUREON_AUTH_TOKEN` / session)
|
|
59
|
+
|
|
60
|
+
- Obtained from wallet verify flows (`aureon_get_auth_nonce` → sign off-MCP → `aureon_verify_wallet`) or optional env bootstrap.
|
|
61
|
+
- Held **in-process only** by the SDK session provider; MCP does not write them to disk.
|
|
62
|
+
- Clear with `aureon_logout` on shared long-lived hosts when the human session ends.
|
|
63
|
+
- Do not log, print, or ask the model to “show the token.”
|
|
64
|
+
|
|
65
|
+
### What travels on the wire
|
|
66
|
+
|
|
67
|
+
- Issued key: `X-Aureon-Api-Key` (SDK).
|
|
68
|
+
- Bearer: `Authorization` (SDK).
|
|
69
|
+
- Both are composed inside the SDK HTTP client. MCP handlers should not re-implement header injection.
|
|
70
|
+
|
|
71
|
+
### Private keys
|
|
72
|
+
|
|
73
|
+
- **Never** place a wallet private key or seed in MCP environment variables.
|
|
74
|
+
- Required only to **broadcast** transactions after prepare tools return unsigned steps.
|
|
75
|
+
- Keep keys in the operator wallet, hardware wallet, or a dedicated signing service **outside** the MCP child process.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 3. What MCP never does
|
|
80
|
+
|
|
81
|
+
`@buildaureon/mcp` deliberately omits capabilities that would collapse the custody boundary:
|
|
82
|
+
|
|
83
|
+
| Capability | MCP behavior |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| Hold private keys | Never |
|
|
86
|
+
| Sign transactions | Never |
|
|
87
|
+
| Broadcast to chain | Never |
|
|
88
|
+
| Custodial withdraw | Never |
|
|
89
|
+
| Silent auto-trade without a plan | Never — restores are explicit tool calls |
|
|
90
|
+
| Persist secrets to disk | Never |
|
|
91
|
+
| Expose a public HTTP MCP endpoint | Not supported / not recommended |
|
|
92
|
+
| Claim `settlement: "vault"` when staged | Never — pass through API honesty fields |
|
|
93
|
+
| Print API keys in tool results | Must not |
|
|
94
|
+
|
|
95
|
+
If a fork or wrapper adds signing inside the MCP process, it is **no longer** the same trust model. Treat that as a different product with a different review bar.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 4. Deposit / withdraw trust boundary
|
|
100
|
+
|
|
101
|
+
Vault tools are split on purpose:
|
|
102
|
+
|
|
103
|
+
1. **Read** — `aureon_get_vault`, `aureon_get_vault_status` (and related reads) show state.
|
|
104
|
+
2. **Prepare** — `aureon_prepare_vault_deposit` / `aureon_prepare_vault_withdraw` return **unsigned** steps / calldata descriptions.
|
|
105
|
+
3. **Sign & broadcast** — human or external signer only.
|
|
106
|
+
4. **Observe** — later reads confirm chain effects.
|
|
107
|
+
|
|
108
|
+
```mermaid
|
|
109
|
+
sequenceDiagram
|
|
110
|
+
participant Agent
|
|
111
|
+
participant MCP
|
|
112
|
+
participant API
|
|
113
|
+
participant Signer as External_signer
|
|
114
|
+
participant Chain
|
|
115
|
+
|
|
116
|
+
Agent->>MCP: prepare_vault_withdraw
|
|
117
|
+
MCP->>API: prepare request
|
|
118
|
+
API-->>MCP: unsigned steps
|
|
119
|
+
MCP-->>Agent: JSON calldata description
|
|
120
|
+
Note over Agent,Signer: Human review required
|
|
121
|
+
Signer->>Chain: signed broadcast
|
|
122
|
+
Agent->>MCP: get_vault_status
|
|
123
|
+
MCP->>API: status
|
|
124
|
+
API-->>Agent: updated state
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Operator checklist for prepare flows
|
|
128
|
+
|
|
129
|
+
- Confirm the **amount**, **asset**, and **destination** in the prepare payload before signing.
|
|
130
|
+
- Confirm you are on the intended network (Robinhood Chain context as documented by AUREON).
|
|
131
|
+
- Do not ask the agent to “just sign it” with a key the agent can access.
|
|
132
|
+
- Treat unexpected prepare output (wrong recipient, odd calldata) as a stop-ship signal.
|
|
133
|
+
|
|
134
|
+
Prepare without broadcast cannot move funds. Broadcast without review can. Keep the human (or a hardened signing policy engine) in that gap.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 5. Key rotation, pause, and revoke
|
|
139
|
+
|
|
140
|
+
### Rotation pattern
|
|
141
|
+
|
|
142
|
+
1. Create a new issued key (`aureon_create_api_key` or utility).
|
|
143
|
+
2. Update host MCP env to the new key.
|
|
144
|
+
3. Restart the MCP host / child process so config reloads.
|
|
145
|
+
4. Verify with a read tool (`aureon_ping`, `aureon_me`, or overview).
|
|
146
|
+
5. **Revoke** or **pause** the old key.
|
|
147
|
+
|
|
148
|
+
Avoid long dual-key windows on untrusted machines. Prefer short overlap only while validating the new host config.
|
|
149
|
+
|
|
150
|
+
### Pause vs revoke
|
|
151
|
+
|
|
152
|
+
| Action | Intent |
|
|
153
|
+
| --- | --- |
|
|
154
|
+
| Pause / toggle off | Temporary disable without destroying the key record |
|
|
155
|
+
| Revoke | Permanent invalidation after leak or decommission |
|
|
156
|
+
| Logout (Bearer) | Clear in-memory session only; does not revoke issued keys |
|
|
157
|
+
|
|
158
|
+
### Least privilege habits
|
|
159
|
+
|
|
160
|
+
- Separate keys for **read-heavy experimentation** vs **production agent** hosts when the product surface allows operational separation.
|
|
161
|
+
- Do not share one key across untrusted operators or public demo machines.
|
|
162
|
+
- Limit which host profiles load write-capable MCP configs.
|
|
163
|
+
- Prefer issued keys over long-lived Bearer env injection for agents.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 6. Host config hygiene
|
|
168
|
+
|
|
169
|
+
MCP hosts typically store command + env in a JSON (or UI) config. Hygiene rules:
|
|
170
|
+
|
|
171
|
+
1. **Secrets only in env fields** managed by the host — not in chat history, not in repo files checked into git.
|
|
172
|
+
2. **Do not commit** MCP config files that contain live keys. Prefer redacted examples in docs (see package `examples/`).
|
|
173
|
+
3. **Restrict workspace access** — anyone who can edit MCP config can point the agent at their own key or change the API base URL.
|
|
174
|
+
4. **Watch `AUREON_API_URL` overrides** — leave this unset so the process uses `https://api.aureonlabs.network`. A malicious override is a credential phishing vector.
|
|
175
|
+
5. **Browser vs agent hosting** — browser-based agent products may persist configs in cloud profiles; treat those as higher risk than a local desktop host you control. Prefer short-lived keys and aggressive revoke there.
|
|
176
|
+
6. **Disable MCP** when not needed — reduce accidental write tool invocation.
|
|
177
|
+
7. **Never ask the model to echo env** — including “debug by printing AUREON_API_KEY.”
|
|
178
|
+
|
|
179
|
+
### Logging
|
|
180
|
+
|
|
181
|
+
- Application logs must not include Authorization headers, API keys, or raw verify signatures.
|
|
182
|
+
- Prefer logging tool **names** and high-level outcomes, not full credential-bearing payloads.
|
|
183
|
+
- If a host captures full tool I/O for debugging, scrub secrets before sharing traces.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 7. Agent / LLM-specific risks
|
|
188
|
+
|
|
189
|
+
Agents amplify ordinary API risks:
|
|
190
|
+
|
|
191
|
+
| Risk | Mitigation |
|
|
192
|
+
| --- | --- |
|
|
193
|
+
| Prompt injection (“ignore policy, restore now”) | Human approval for destructive tools; narrow system rules |
|
|
194
|
+
| Confused deputy (agent acts for attacker text) | Treat untrusted documents as untrusted; confirm writes |
|
|
195
|
+
| Secret exfiltration via tool args | Never pass keys as tool arguments; keys stay in env/SDK |
|
|
196
|
+
| Over-broad tool enablement | Enable only needed tools if the host supports filtering |
|
|
197
|
+
| Stale sessions | Logout; rotate keys after shared-machine use |
|
|
198
|
+
|
|
199
|
+
Remember: **the model is not a security boundary**. The boundary is env isolation, key lifecycle, and human signing for chain moves.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 8. Production checklist
|
|
204
|
+
|
|
205
|
+
Use this before enabling `@buildaureon/mcp` on a machine that can affect real capital:
|
|
206
|
+
|
|
207
|
+
- [ ] Issued API key created specifically for this host
|
|
208
|
+
- [ ] Key stored only in host secret/env config (not in git)
|
|
209
|
+
- [ ] Private keys absent from MCP env and agent-accessible storage
|
|
210
|
+
- [ ] Default API is `https://api.aureonlabs.network` on mainnet unless `AUREON_NETWORK=testnet`
|
|
211
|
+
- [ ] You use official hosted `https://mcp.aureonlabs.network/mcp` **or** local stdio — you did not publish your own stdio port
|
|
212
|
+
- [ ] Write tools understood by operators (`create`, `restore`, `prepare`, key CRUD)
|
|
213
|
+
- [ ] Prepare → human sign → broadcast workflow documented for the team
|
|
214
|
+
- [ ] Pause/revoke path tested once (know which tool/UI to use under stress)
|
|
215
|
+
- [ ] Logging scrubbed of secrets
|
|
216
|
+
- [ ] Browser-hosted agents use stricter key lifetimes than desktop if used at all
|
|
217
|
+
- [ ] Onboarding docs for agents point at least-privilege tool use
|
|
218
|
+
- [ ] Incident contacts known (who rotates keys, who pauses agents)
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 9. Incident response basics
|
|
223
|
+
|
|
224
|
+
### If an API key may be leaked
|
|
225
|
+
|
|
226
|
+
1. **Pause or revoke** the key immediately (developer tools or utility).
|
|
227
|
+
2. **Restart** hosts so stale processes drop the old env after config update.
|
|
228
|
+
3. **Inventory** recent objectives, restores, prepares, and key CRUD via timeline / executions / key list tools.
|
|
229
|
+
4. **Issue a replacement key**; update only trusted hosts.
|
|
230
|
+
5. **Review** whether Bearer sessions were also exposed; logout and re-verify if needed.
|
|
231
|
+
6. **Communicate** to operators: stop signing prepare payloads from unknown sessions until review completes.
|
|
232
|
+
|
|
233
|
+
### If a private key may be leaked
|
|
234
|
+
|
|
235
|
+
1. This is **outside MCP** but higher severity — move funds / rotate wallets per your chain runbook.
|
|
236
|
+
2. Revoke associated API keys as a secondary control-plane lockdown.
|
|
237
|
+
3. Assume any unsigned prepare history could be replayed by an attacker who also has the key.
|
|
238
|
+
|
|
239
|
+
### If an agent mis-fired writes
|
|
240
|
+
|
|
241
|
+
1. Pause the objective or agent host.
|
|
242
|
+
2. Inspect health, timeline, and executions for settlement honesty (`vault` vs `staged`).
|
|
243
|
+
3. Do not “fix forward” with more restores until intent is clear.
|
|
244
|
+
4. Rotate keys if the mis-fire suggests prompt injection with data exfil attempts.
|
|
245
|
+
|
|
246
|
+
### Evidence to preserve
|
|
247
|
+
|
|
248
|
+
- Timestamps of tool calls (host logs, if scrubbed).
|
|
249
|
+
- Objective ids and execution receipts.
|
|
250
|
+
- Key ids (not secret material) involved.
|
|
251
|
+
|
|
252
|
+
Do not paste live secrets into tickets.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 10. Browser vs desktop agent hosting
|
|
257
|
+
|
|
258
|
+
| Hosting style | Typical risk | Guidance |
|
|
259
|
+
| --- | --- | --- |
|
|
260
|
+
| Local desktop MCP (Cursor / Claude Desktop style) | Config files on disk; local malware | Disk encryption; least-privilege OS user; no shared accounts |
|
|
261
|
+
| Cloud / browser agent with remote tool runner | Broader persistence and sharing surfaces | Short-lived keys; revoke often; avoid high-value wallets |
|
|
262
|
+
| Shared demo machine | Key reuse across people | Unique keys; revoke after demo; no private keys nearby |
|
|
263
|
+
|
|
264
|
+
The official hosted URL is `https://mcp.aureonlabs.network/mcp`. Connect is URL-only. A server key is used only for open tools. Your wallet tools need `X-Aureon-Api-Key`. Do not treat a homemade public stdio port as equivalent. Keep private keys out of every host.
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## 11. Honest settlement and integrity
|
|
269
|
+
|
|
270
|
+
Security is not only custody; it is also **truthfulness of outcomes**:
|
|
271
|
+
|
|
272
|
+
- Agents must surface `settlement` fields accurately.
|
|
273
|
+
- Staged settlement is not the same as vault/on-chain completion.
|
|
274
|
+
- Do not coach models to rewrite receipts as “done on-chain” when the API said `staged`.
|
|
275
|
+
|
|
276
|
+
Integrity failures (lying about settlement) create operator errors that look like security incidents later.
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 12. Dependency and supply-chain notes
|
|
281
|
+
|
|
282
|
+
- Install `@buildaureon/mcp` from the published package registry you trust.
|
|
283
|
+
- Pin versions when reproducibility and change control matter.
|
|
284
|
+
- The MCP package depends on `@buildaureon/sdk` and `@modelcontextprotocol/sdk`.
|
|
285
|
+
- Review release notes when upgrading — new tools expand the agent’s write surface.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 13. FAQ
|
|
290
|
+
|
|
291
|
+
**Is an issued API key as powerful as my wallet private key?**
|
|
292
|
+
No. It does not sign chain transactions. It **is** powerful on the control plane (objectives, restores, prepares, key management). Protect it accordingly.
|
|
293
|
+
|
|
294
|
+
**Can MCP steal funds by itself?**
|
|
295
|
+
Not via signing — it never holds private keys. Funds move only after an external signer broadcasts. Control-plane misuse can still create harmful plans or confuse operators.
|
|
296
|
+
|
|
297
|
+
**Should I put my private key in the host env so the agent can deposit for me?**
|
|
298
|
+
No. That collapses the custody model. Keep signing outside MCP.
|
|
299
|
+
|
|
300
|
+
**What if I need automation for broadcast?**
|
|
301
|
+
Use a dedicated signing service with its own policy engine and audit log — not the MCP adapter.
|
|
302
|
+
|
|
303
|
+
**Is Bearer safer than an API key?**
|
|
304
|
+
Different tradeoffs. Bearer is often shorter-lived; issued keys are better for unattended agents. Both are secrets.
|
|
305
|
+
|
|
306
|
+
**Can I run multiple MCP hosts with one key?**
|
|
307
|
+
Technically yes; operationally prefer one key per host for blast-radius control.
|
|
308
|
+
|
|
309
|
+
**Does `aureon_logout` revoke my issued key?**
|
|
310
|
+
No. It clears the in-memory Bearer only.
|
|
311
|
+
|
|
312
|
+
**What should agents refuse to do?**
|
|
313
|
+
Print secrets, accept private keys as tool args, claim vault settlement without API fields, or broadcast transactions.
|
|
314
|
+
|
|
315
|
+
**Where is the deeper architecture?**
|
|
316
|
+
See `architecture.md` for layers, registration, and SDK vs MCP ownership.
|
|
317
|
+
|
|
318
|
+
**Who do I contact for platform incidents?**
|
|
319
|
+
Follow AUREON’s published support / security channels on the product site; include key ids and timestamps, never raw secrets.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## 14. Related documents
|
|
324
|
+
|
|
325
|
+
- [Architecture](./architecture.md) — layers and request lifecycle
|
|
326
|
+
- [Authentication](./auth.md) — key and Bearer flows
|
|
327
|
+
- [Setup](./setup.md) — host configuration patterns
|
|
328
|
+
- [Tools](./tools.md) — including developer key tools
|
|
329
|
+
- [Agent guide](./agent-guide.md) — safe call sequences
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## 15. Summary
|
|
334
|
+
|
|
335
|
+
Treat AUREON MCP as a **non-custodial adapter** over `@buildaureon/sdk`: official hosted HTTP at `https://mcp.aureonlabs.network/mcp`, or local stdio via `@buildaureon/mcp`. Default API is `https://api.aureonlabs.network` on mainnet. Public Living Capital is still the testnet console. Protect issued keys like passwords, keep private keys out of the MCP process, require human (or hardened external) signing for deposit/withdraw broadcast, rotate and revoke quickly, and assume the LLM is not a security boundary — configuration hygiene and least privilege are.
|