Skip to content

Demo

The exact output of examples/demo_session.py, which loads all three servers in one process and makes five real tool calls through the in-memory MCP client. Reproduce it with:

uv run python examples/demo_session.py

Latencies are measured per call on the machine that produced this transcript, with the safety middleware (rate limiting, size caps, audit) in the path. examples/demo.tape records the same session as a GIF, with the caveats in examples/README.md.

$ finos-mcp: read-only MCP servers for FINOS standards (AIGF, CDM, FDC3)

# AIGF: resolve a control by its short id and see what it mitigates
$ aigf > get_control {"id": "mi-20", "include_sections": false}
AIR-PREV-020  MCP Server Security Governance  [Preventative, Approved-Specification]
mitigates        AIR-SEC-026, AIR-SEC-008, AIR-RC-001
related controls AIR-PREV-007, AIR-DET-004
crosswalks to    9 references across 3 frameworks
cite             aigf://control/AIR-PREV-020
[54 ms, read-only, rate-limited, audited]

# AIGF: reverse crosswalk, which records cite NIST SP 800-53 SA-9?
$ aigf > find_by_external_reference {"key": "sa-9"}
4 AIGF records cite this reference:
  control AIR-DET-001  AI Data Leakage Prevention and Detection
  control AIR-PREV-007  Legal and Contractual Frameworks for AI Systems
  control AIR-PREV-014  Encryption of AI Data at Rest
  control AIR-PREV-020  MCP Server Security Governance
[29 ms, read-only, rate-limited, audited]

# AIGF: search in plain language, every hit is citable
$ aigf > search_framework {"query": "an employee pastes client data into a public chatbot", "k": 3}
  AIR-RC-023  Intellectual Property (IP) and Copyright
      aigf://risk/AIR-RC-023
  AIR-SEC-010  Prompt Injection
      aigf://risk/AIR-SEC-010
  AIR-PREV-017  AI Firewall Implementation and Management
      aigf://control/AIR-PREV-017
[35 ms, read-only, rate-limited, audited]

# CDM: validate a Rune BusinessEvent an agent got wrong (3 planted defects)
$ cdm > validate_object {"object": "<broken_execution.json>"}
valid=False   format=rune   type=cdm.event.common.BusinessEvent
validator: json-schema draft4 (cdm-json-schema 7.2.0) via Rune normalisation
3 issue(s):
  [enum       ] $.instruction[0].primitiveInstruction.execution.product.economicTerms.payout[0].@type
      'InterestRatePayoutt' is not an alternative of Payout; expected one of ['AssetPayout', 'Commodit
  [required   ] $.after[0]
      'trade' is a required property
  [required   ] $.instruction[0].primitiveInstruction.execution
      'executionDetails' is a required property
[59 ms, read-only, rate-limited, audited]

# FDC3: which intents can I raise for an instrument, and which shows a chart?
$ fdc3 > suggest_intent {"context": {"type": "fdc3.instrument", "id": {"ticker": "AAPL"}}, "goal": "show a price chart"}
context fdc3.instrument (detected by type_field); ranked intents:
  1.44  ViewChart          ViewChart accepts fdc3.instrument; matches goal 'show a pr
  1.31  ViewQuote          ViewQuote accepts fdc3.instrument; matches goal 'show a pr
  1.22  ViewResearch       ViewResearch accepts fdc3.instrument; matches goal 'show a
  1.00  ViewInstrument     ViewInstrument accepts fdc3.instrument; matches goal 'show
  0.80  ViewAnalysis       ViewAnalysis accepts fdc3.instrument; matches goal 'show a
[43 ms, read-only, rate-limited, audited]

$ every tool is read-only; nothing here writes to any external system.
DEMO DONE

The CDM step validates examples/broken_execution.json: a real CDM 7 Rune-format BusinessEvent with three deliberate defects (a misspelled payout alternative, a removed required trade, and a missing executionDetails). Each is reported with the JSON path in the submitted document, which is what lets an agent fix its own output.