You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: financial-services/README.md
+18-18Lines changed: 18 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
-
# financial-services: EU Credit Risk Agent Demo
1
+
# financial-services: EU Credit Risk Agent Demo
2
2
3
-
End-to-end demo of a credit risk agent processing client financial documents through a cMCP gateway with Cedar policy enforcement and TRACE Trust Records for EU regulatory compliance (EU AI Act, MiFID II, DORA, GDPR).
3
+
End-to-end demo of a credit risk agent processing client financial documents through a cMCP Runtime with Cedar policy enforcement and TRACE Trust Records for EU regulatory compliance (EU AI Act, MiFID II, DORA, GDPR).
4
4
5
5
End-to-end example: AI agent compliance for European private banks using cMCP and TRACE attestation.
6
6
@@ -11,7 +11,7 @@ End-to-end example: AI agent compliance for European private banks using cMCP an
11
11
This example demonstrates:
12
12
13
13
**1. Cryptographic proof of which tools an AI agent called**
14
-
The cMCP gateway intercepts every MCP tool call and records it in a signed TRACE Trust Record. An auditor or regulator can verify after the fact exactly which tools ran, in what order, with what data classifications — without trusting the agent process itself.
14
+
The cMCP Runtime intercepts every MCP tool call and records it in a signed TRACE Trust Record. An auditor or regulator can verify after the fact exactly which tools ran, in what order, with what data classifications — without trusting the agent process itself.
15
15
16
16
**2. Cedar policy as machine-readable compliance**
17
17
The three Cedar rules in `policy/allow.cedar` encode the bank's compliance requirements directly: which workflows may call which tools, when a large credit recommendation must go to a human reviewer, and how to prevent accidental data-class downgrade. Policy-as-code means the same rules that block a call are the rules that go into the audit file.
@@ -23,7 +23,7 @@ Article 12 requires high-risk AI systems to automatically log sufficient informa
23
23
MiFID II Article 25 requires that investment firms document the basis for any investment recommendation. For an AI-assisted credit decision, the TRACE record provides the tool-call audit trail showing that credit bureau data was consulted and a human reviewer was required for exposures above €500k.
24
24
25
25
**5. DORA Article 9 ICT risk — immutable logs**
26
-
The gateway runs in an attested environment (TEE or TPM). The TRACE record is signed by the gateway's attestation key. If a log is tampered with, the signature verification fails.
26
+
The runtime runs in an attested environment (TEE or TPM). The TRACE record is signed by the runtime's attestation key. If a log is tampered with, the signature verification fails.
27
27
28
28
**6. GDPR data minimisation in tool definitions**
29
29
The catalog schema enforces `sensitivity_level` and `compliance_domain` on every tool. The Cedar policy forbids confidential-data tools if the session sensitivity has been downgraded to `public`. This is the machine-enforceable equivalent of the GDPR data-minimisation principle.
@@ -40,7 +40,7 @@ The catalog schema enforces `sensitivity_level` and `compliance_domain` on every
No hardware TEE or TPM is required for this demo. The gateway runs in `CMCP_DEV_MODE=1`.
73
+
No hardware TEE or TPM is required for this demo. The runtime runs in `CMCP_DEV_MODE=1`.
74
74
75
75
---
76
76
@@ -102,7 +102,7 @@ cmcp-verify --version
102
102
103
103
```
104
104
financial-services/
105
-
cmcp-config.yaml Gateway configuration
105
+
cmcp-config.yaml Runtime configuration
106
106
catalog.json Three-tool catalog
107
107
policy/
108
108
manifest.json Policy bundle metadata
@@ -164,7 +164,7 @@ forbid (
164
164
};
165
165
```
166
166
167
-
Prevents a session that has been flagged `public` from calling tools that handle confidential data. This enforces the GDPR data-minimisation principle at the gateway layer.
167
+
Prevents a session that has been flagged `public` from calling tools that handle confidential data. This enforces the GDPR data-minimisation principle at the runtime layer.
168
168
169
169
**Rule 4 — Catch-all permit**
170
170
@@ -178,7 +178,7 @@ Any call not matched by a forbid is allowed. Removes the need to enumerate every
178
178
179
179
## Step 5 — Review the catalog
180
180
181
-
`catalog.json` registers three tools with their approved definitions, data classifications, and definition hashes. The definition hash is `sha256(json.dumps(approved_definition, sort_keys=True, separators=(',',':')))`. The gateway rejects any tool call where the server returns a definition that does not match the hash — preventing prompt-injection via MCP tool description tampering.
181
+
`catalog.json` registers three tools with their approved definitions, data classifications, and definition hashes. The definition hash is `sha256(json.dumps(approved_definition, sort_keys=True, separators=(',',':')))`. The runtime rejects any tool call where the server returns a definition that does not match the hash — preventing prompt-injection via MCP tool description tampering.
Edit `credit_risk_agent.py` and change `AMOUNT_EUR = 250_000` to `AMOUNT_EUR = 750_000`. Re-run the agent. The gateway will return an advisory deny for the `finance.risk_report_writer` call:
401
+
Edit `credit_risk_agent.py` and change `AMOUNT_EUR = 250_000` to `AMOUNT_EUR = 750_000`. Re-run the agent. The runtime will return an advisory deny for the `finance.risk_report_writer` call:
402
402
403
403
```json
404
404
{
@@ -418,14 +418,14 @@ Edit `credit_risk_agent.py` and change `AMOUNT_EUR = 250_000` to `AMOUNT_EUR = 7
418
418
419
419
### Switch to enforcing mode
420
420
421
-
Change `enforcement_mode: enforcing` in `cmcp-config.yaml` (it is already set to `enforcing`). In dev mode the gateway enforces the policy but the attestation is not hardware-backed. Change `CMCP_DEV_MODE=1` to use a real TPM or TEE for production.
421
+
Change `enforcement_mode: enforcing` in `cmcp-config.yaml` (it is already set to `enforcing`). In dev mode the runtime enforces the policy but the attestation is not hardware-backed. Change `CMCP_DEV_MODE=1` to use a real TPM or TEE for production.
422
422
423
423
### Add a new tool
424
424
425
425
1. Define the tool in your MCP server.
426
426
2. Add an entry to `catalog.json` with the correct `definition_hash`.
427
427
3. Add a Cedar rule in `allow.cedar` if needed.
428
-
4. Restart the gateway with `cmcp start --config financial-services/cmcp-config.yaml --reload`.
428
+
4. Restart the runtime with `cmcp start --config financial-services/cmcp-config.yaml --reload`.
1. Provision an Azure VM with Trusted Launch enabled (Trusted Launch is the default for most VM sizes as of 2025).
443
443
2. Install the vTPM extension if not already present.
444
444
3. Remove `CMCP_DEV_MODE=1` from the startup command.
445
-
4. The gateway will automatically use the vTPM. The `runtime.tee_type` field in the TRACE record will be `tpm2` and `runtime.measurement` will contain the PCR0 value.
445
+
4. The runtime will automatically use the vTPM. The `runtime.tee_type` field in the TRACE record will be `tpm2` and `runtime.measurement` will contain the PCR0 value.
446
446
447
447
### Connect an agent manifest
448
448
449
-
If you publish an agent manifest with `agent-manifest`, the gateway can cross-check the manifest's `allowed_tools` list against the catalog:
449
+
If you publish an agent manifest with `agent-manifest`, the runtime can cross-check the manifest's `allowed_tools` list against the catalog:
Copy file name to clipboardExpand all lines: startup-tpm/README.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,12 @@
1
-
# startup-tpm: 15-Minute cMCP Quickstart
1
+
# startup-tpm: 15-Minute cMCP Quickstart
2
2
3
-
Get a cMCP gateway running with TPM-backed TRACE Trust Records in under 15 minutes. Works on any cloud VM with TPM 2.0 (Azure Trusted Launch, AWS Nitro, GCP Shielded VM) or with `CMCP_DEV_MODE=1` for local development — no hardware required for testing.
3
+
Get a cMCP Runtime running with TPM-backed TRACE Trust Records in under 15 minutes. Works on any cloud VM with TPM 2.0 (Azure Trusted Launch, AWS Nitro, GCP Shielded VM) or with `CMCP_DEV_MODE=1` for local development — no hardware required for testing.
4
4
5
5
---
6
6
7
7
## What you will have at the end
8
8
9
-
- A cMCP gateway running on port 8443
9
+
- A cMCP Runtime running on port 8443
10
10
- A Cedar policy that permits all tool calls (replace before production)
11
11
- A one-tool catalog (`test.echo`)
12
12
- A TRACE Trust Record you can inspect and verify
@@ -24,7 +24,7 @@ Estimated time: 15 minutes on a fresh VM, 5 minutes if Python is already install
24
24
| curl | any | For the test tool call |
25
25
| TPM 2.0 | optional | Required for hardware attestation; omit with `CMCP_DEV_MODE=1`|
26
26
27
-
No MCP server is required — the gateway runs a built-in echo responder for the `test.echo` tool.
27
+
No MCP server is required — the runtime runs a built-in echo responder for the `test.echo` tool.
28
28
29
29
---
30
30
@@ -55,7 +55,7 @@ The directory contains:
55
55
56
56
```
57
57
startup-tpm/
58
-
cmcp-config.yaml gateway configuration
58
+
cmcp-config.yaml runtime configuration
59
59
catalog.json one-tool catalog (test.echo)
60
60
policy/
61
61
manifest.json policy bundle metadata
@@ -78,29 +78,29 @@ attestation:
78
78
enforcement_mode: advisory
79
79
```
80
80
81
-
`enforcement_mode: advisory` means the gateway logs policy violations but does not block calls. Change to `enforcing` before production.
81
+
`enforcement_mode: advisory` means the runtime logs policy violations but does not block calls. Change to `enforcing` before production.
82
82
83
83
`provider: auto` selects the best available attestation source: TPM 2.0 if present, software-only otherwise.
`CMCP_DEV_MODE=1` sets `tee_type: dev-mode` in the TRACE record and marks the measurement `DEVELOPMENT_ONLY_NOT_FOR_PRODUCTION`. The gateway is fully functional but the attestation is not hardware-backed.
103
+
`CMCP_DEV_MODE=1` sets `tee_type: dev-mode` in the TRACE record and marks the measurement `DEVELOPMENT_ONLY_NOT_FOR_PRODUCTION`. The runtime is fully functional but the attestation is not hardware-backed.
The TRACE record covers the entire session (all tool calls since the gateway started). Example output:
148
+
The TRACE record covers the entire session (all tool calls since the runtime started). Example output:
149
149
150
150
```json
151
151
{
@@ -229,6 +229,6 @@ $env:CMCP_DEV_MODE = "1"
229
229
cmcp start --config startup-tpm/cmcp-config.yaml
230
230
```
231
231
232
-
**Gateway exits immediately**
232
+
**Runtime exits immediately**
233
233
234
234
Check that `policy/` and `catalog.json` exist relative to the working directory from which you run `cmcp start`. The `policy_bundle_path` and `catalog_path` in `cmcp-config.yaml` are resolved relative to the config file's location, not the working directory.
0 commit comments