An agent that needs to close a mutual NDA with court-checkable artifacts composes two already-shipped nodes: assemble the agreement from Cover Page Key Terms, then have each party bind their acceptance to the exact assembled artifact by hash. No new node type — this page documents the composition, the receipt trio it produces, and where real signing happens.
assemble_mutual_nda with purpose, effective date, term settings, governing law, and jurisdiction. The Standard Terms body is vendored verbatim (Common Paper Mutual NDA v1.0, CC BY 4.0) and never touched by this step. No party identity is passed in. Output: an artifact with an execution_hash and a contract_api variable-map twin.bind_agreement_acceptance with referenced_execution_hash, template_id, and body_sha256 copied from Step 1's output, plus accepting_party_role: "party_a". No prior acceptance exists yet, so previous_proof_hash stays empty. The receipt references the agreement by hash — it never re-embeds the text.bind_agreement_acceptance again with the same referenced_execution_hash/template_id/body_sha256, accepting_party_role: "party_b", and previous_proof_hash set to Party A's acceptance execution_hash. This is the proof-chain hook: the resulting artifact carries the PROOF_CHAIN_REFERENCED compliance flag and links both parties' acceptances into one verifiable sequence.eddsa-jcs-2022 Proof Binding, turning a stated acceptance into a countersignable receipt. Real party identity and e-signature collection happen off-platform at anchor.ainumbers.co/sign (Anchorproof) — never at a retired browser.ainumbers.co link.1. assemble_mutual_nda({
purpose: "Evaluating a potential commercial integration",
effective_date: "2026-07-10",
mnda_term_mode: "expires_after_period", mnda_term_years: 2,
confidentiality_term_mode: "fixed_period", confidentiality_term_years: 5,
governing_law: "Delaware", jurisdiction: "Delaware"
}) → { execution_hash: H0, output_payload: { template_id, body_sha256, ... } }
2. bind_agreement_acceptance({
referenced_execution_hash: H0, template_id, body_sha256,
accepting_party_role: "party_a"
}) → { execution_hash: H1, output_payload: { previous_proof_hash: null, ... } }
3. bind_agreement_acceptance({
referenced_execution_hash: H0, template_id, body_sha256,
accepting_party_role: "party_b", previous_proof_hash: H1
}) → { execution_hash: H2, output_payload: { previous_proof_hash: H1, ... }, compliance_flags: [..., "PROOF_CHAIN_REFERENCED"] }
mcp_name, and makes no chaingraph.json change.