Skip to content

MCP tools reference

All six tools are exposed by the MCP server and are also available in-process via the VerifiableMemory adapter (same names, same semantics). Entity names are free-form strings; a convention of type:id (e.g. account:admin, drone:d1) is recommended because the reasoning layer infers structural types from the name prefix.

Store one observation — a hyperedge linking members at a point in time. Writes a base fact with provenance; never a rule or a conclusion.

ParamTypeDefaultMeaning
membersstring[]Entity names to link (required, non-empty)
event_tsint | nullnowEpoch seconds for the event
weightfloat1.0Strength of the relationship
formationstring""Relationship label (engine metadata)
// → returns
{
"stored": true, "table": "MEMORY", "event_ts": 1700000000,
"formation": "LOGIN", "weight": 1.0,
"members": ["account:admin", "host:db01"], "member_ids": [1, 2],
"source": "agent"
}

Deterministically retrieve the most relevant remembered hyperedges for a natural-language query (entities and a time window are parsed out of it). No LLM.

ParamTypeDefaultMeaning
querystring""Natural-language query (entities + time parsed out)
top_kint20Max edges to return
// → returns
{ "count": 2, "edges": [ { "edge_idx": 0, "member_ids": [1, 2], "hedge_tag": "HEDGE-0", "timestamp": 1700000000, ... } ] }

Each edge carries a hedge_tag (HEDGE-N) — the citation tag used by prove and verify.

Run LLM-free stratified forward-chaining over the trusted rule store on the edges relevant to query. Returns derived conclusions with confidence and the rule that produced each.

ParamTypeDefault
querystring""
top_kint40
// → returns
{
"derived": [ {"fact": "coordinated_threat(0)", "pred": "coordinated_threat", "args": [0], "confidence": 0.9, "rule_id": "rule:coordinated_threat"} ],
"rules_fired": ["rule:coordinated_threat"],
"iterations": 2, "timed_out": false, "edges_considered": 3
}

Reason, then return a proof tree for each conclusion (optionally only those with predicate goal_pred). Proof leaves bind back to the supporting hyperedges, so the host can verify every claim.

ParamTypeDefault
querystring""
goal_predstring | nullnull
top_kint40
// → returns
{
"count": 1, "derived_count": 1, "edges_considered": 3,
"proofs": [ {"proof_id": "proof-0", "status": "proved", "confidence": 0.9,
"nodes": [ {"kind": "evidence", "hedge_tag": "HEDGE-0", ...},
{"kind": "conclusion", "rule_tag": "RULE-0", "step_tag": "STEP-1", ...} ],
"edges": [...]} ]
}

Gate the host’s own generated answer against verifiable memory — the hallucination firewall. Reasons + proves, assembles the allowed citation tags, then strips any factual sentence that doesn’t cite one. With require_proof it abstains when nothing is proved.

ParamTypeDefaultMeaning
answerstringThe host-generated answer to gate (required)
querystring""Scope for reasoning/proof
require_proofboolfalseAbstain entirely if nothing was proved
goal_predstring | nullnullRestrict proofs to this predicate
top_kint40Edges considered
// → returns
{
"outcome": "supported", // supported | stripped | abstained
"abstained": false,
"coverage": 1.0, // supported / factual sentences
"supported_count": 1, "stripped_count": 0, "stripped": [],
"answer": "The two drones converged into a coordinated threat [HEDGE-0].",
"allowed_tags": ["HEDGE-0", "RULE-0", "STEP-1"],
"proved": true, "derived_count": 1
}

The host should surface answer (the sanitized text) and can use coverage / outcome to decide whether to show it, ask for more evidence, or abstain.

Scan memory for structural and temporal patterns and return findings plus a risk score.

ParamTypeDefaultMeaning
full_scanboolfalseAdd the heavier lateral-movement / beaconing detectors
// → returns
{ "findings": [ {"pattern": "hub", "score": 0.8, "nodes": [...]} ], "summary": {"risk_score": 0.6, ...} }

The fast pass covers hubs, bursts, dense clusters, fan-out, and spectral anomalies; full_scan: true adds the more expensive detectors.