<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[AffixIO]]></title><description><![CDATA[Verification infrastructure for agents and APIs]]></description><link>https://affixio.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ab7d65b77c34ddd5492fb1b/a3afb727-598c-4d79-b228-79eb1ba1c693.png</url><title>AffixIO</title><link>https://affixio.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 05:36:57 GMT</lastBuildDate><atom:link href="https://affixio.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Workers learned ML-DSA on 1 October. The demo signs a greeting.]]></title><description><![CDATA[On 1 October 2026 Thibault Meunier wrote up a Workers change a lot of edge code has been waiting on. Web Crypto in Cloudflare Workers can now run ML-KEM and ML-DSA, the NIST post-quantum encapsulation]]></description><link>https://affixio.hashnode.dev/workers-learned-ml-dsa-on-1-october-the-demo-signs-a-greeting</link><guid isPermaLink="true">https://affixio.hashnode.dev/workers-learned-ml-dsa-on-1-october-the-demo-signs-a-greeting</guid><category><![CDATA[post quantum]]></category><category><![CDATA[cloudflare]]></category><category><![CDATA[ML-DSA]]></category><category><![CDATA[verification]]></category><dc:creator><![CDATA[AffixIO]]></dc:creator><pubDate>Sat, 03 Oct 2026 00:47:32 GMT</pubDate><content:encoded><![CDATA[<p>On 1 October 2026 Thibault Meunier wrote up a Workers change a lot of edge code has been waiting on. Web Crypto in Cloudflare Workers can now run ML-KEM and ML-DSA, the NIST post-quantum encapsulation and signature schemes, without a second crypto library in the bundle. The post is <a href="https://blog.cloudflare.com/workers-ml-kem-ml-dsa-support/">https://blog.cloudflare.com/workers-ml-kem-ml-dsa-support/</a></p>
<p>The first signature sample is deliberately tiny. It encodes the string "hello post-quantum", generates an ML-DSA-44 key pair, signs those bytes, and verifies them. The JWT sample wears a more familiar coat and does the same job: algorithm ML-DSA-44, subject "alice", a five-minute expiry, then a verify against the public key just created in the same isolate. Cloudflare's line on both snippets is that they are not protocols. They are hooks. That is the difference between a runtime feature and a control.</p>
<h2>What actually shipped</h2>
<p>The surface sits behind the compatibility flag <code>webcrypto_modern_algorithms</code> in <code>wrangler.jsonc</code>, because the modern-algorithms Web Crypto spec is still a draft. With the flag on you get ML-KEM-768 and ML-KEM-1024, ML-DSA-44, ML-DSA-65 and ML-DSA-87, JWK import and export, <code>getPublicKey()</code>, and <code>SubtleCrypto.supports()</code> so a library can ask before it calls. The new operations are <code>encapsulateBits</code>, <code>decapsulateBits</code>, <code>encapsulateKey</code> and <code>decapsulateKey</code>.</p>
<p>The initial description names ML-KEM-768 and ML-DSA-44. ML-KEM-1024, ML-DSA-65 and ML-DSA-87 are in as well. ML-KEM-512 is missing because the BoringSSL build Workers uses does not expose it, and Cloudflare declined a separate implementation just for that variant. The runtime is workerd on V8. The Web Crypto layer calls BoringSSL primitives. SHA-3, cSHAKE, TurboSHAKE, ChaCha20-Poly1305 and HPKE itself are outside this change. A library can put HPKE on top once the KEM exists. The blog is blunt that the encapsulation snippet contains no encryption yet. You receive shared key material. An AEAD, typically AES-GCM inside HPKE, has to turn that into ciphertext.</p>
<p>The flag stays opt-in until library authors have tried the rough edges. ML-DSA public keys and signatures are also substantially larger than RSA or Ed25519, and the runtime does not shrink them. A header budget that assumed an Ed25519-sized signature is now wrong.</p>
<h2>44, 65 and 87 are different machines</h2>
<p>ML-DSA-44, ML-DSA-65 and ML-DSA-87 are parameter sets under FIPS 204, not nicknames for the same key. The Workers demo uses 44, matching the smallest set they lead with and the <code>SubtleCrypto.supports("sign", "ML-DSA-44")</code> check in the post. Fine for a greeting. Thin as a default for a record you still expect a stranger to trust in five years.</p>
<p>AffixIO signs verification outcomes with ML-DSA-65, the FIPS 204 set aimed at security category 3. The public key at <a href="https://api.affix-io.com/.well-known/affix-mldsa65.json">https://api.affix-io.com/.well-known/affix-mldsa65.json</a> is 1952 bytes, the length FIPS 204 fixes for that set. Measure it. A 1312-byte key is ML-DSA-44. A 2592-byte key is ML-DSA-87. The NIST table, including the rows marked not claimed, is at <a href="https://www.affix-io.com/nist/">https://www.affix-io.com/nist/</a></p>
<p>FIPS 204 specifies the mathematics: sizes, signing, verification. Anyone can implement it. FIPS 140-3 is a lab validation of one module build, ending in a CMVP certificate. AffixIO claims the algorithm and refuses the certificate. Signing is software, through the noble post-quantum library, with no FIPS mode. The private key is a file on the host, not an HSM, and rotation is on request rather than a fixed cryptoperiod. A rule that demands a validated module is met by neither the Workers flag nor this attestation path.</p>
<h2>A signed greeting is still a greeting</h2>
<p>ML-KEM and ML-DSA share an announcement because both are post-quantum. They do not share a job.</p>
<p>ML-KEM gets two parties to the same shared secret. That is the harvest-now problem on the wire: record the handshake, hope the encapsulation falls over later. AffixIO does not implement FIPS 203. The application establishes no keys of its own. Transport terminates in front of it, so hybrid TLS at a gateway, or HPKE built on the new Workers KEM, stays a property of that layer. The attestation cannot inherit it.</p>
<p>ML-DSA says a holder of this private key signed these bytes, and the bytes have not moved. Aim it at "hello post-quantum" and you have a signed greeting. Aim it at JSON an agent wrote about itself, subject alice, a scope, an amount, and you have evidence that whoever held the key produced that object. You do not have evidence the balance was there, that consent named that merchant, or that the upstream source replied.</p>
<p>AffixIO's public description stays inside that narrower job. An integration checks a defined condition against customer-held records or a configured source, then produces verifiable decision evidence. Local proof generation runs in the customer environment. Remote verification, the ML-DSA-65 attestation on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, and the Merkle audit are separate. The integration chooses which public inputs leave the host, so the customer's records are not the thing being parked elsewhere. A signed result establishes integrity and provenance of the recorded evidence under the applicable key and process. It does not make a bad source true, and it does not promise the agent behaves on the next action. A Merkle inclusion proof shows membership in one audit root. ML-DSA-65 is the post-quantum signature on that evidence, not a claim that the zero-knowledge stack as a whole is post-quantum. The HMAC path is a keyed integrity check, not a zero-knowledge proof, and the third-party-checkable artefact there is the ML-DSA signature rather than the tag. Scope: <a href="https://www.affix-io.com/llms.txt">https://www.affix-io.com/llms.txt</a> and <a href="https://www.affix-io.com/how-it-works/">https://www.affix-io.com/how-it-works/</a></p>
<p>If the same Worker both decides and holds the signing key, it can mint a JWT that looks like permission. A verifier who only checks the signature is checking penmanship. Call <code>SubtleCrypto.supports()</code> before you depend on the flag. It is not a promise about Node, Deno or browsers. For an allow or deny on a specific action, keep the evidence on a key the agent does not hold, and enforce the outcome in the application before the side effect. A payment provider still authorises or declines. A missing source, or consent that skips the merchant, the total, the currency or the expiry, stays pending, denied or in review.</p>
<p>Call ML-DSA-65 on purpose if that is the set you meant, and check signature size before it goes in a header. Cloudflare's own close is that this change does not make every protocol post-quantum by itself.</p>
<p>For a signed yes, no or review over a check, rather than a signature over a string you typed, the trial split is specific. AI agents get 150 free SDK proofs on provision, no card. Eligible new human Hub accounts get 100 free proofs, no card, one allocation, with proofs expiring after 30 days. Duplicate or abusive signups can be refused. Terms: <a href="https://www.affix-io.com/free-proofs/">https://www.affix-io.com/free-proofs/</a> Hub onboarding: <a href="https://hub.affix-io.com/onboarding/">https://hub.affix-io.com/onboarding/</a></p>
]]></content:encoded></item><item><title><![CDATA[An approved MCP tool definition is not a forever allow]]></title><description><![CDATA[Pillar Security's Deadbugz write-up is a useful reminder for anyone wiring agents to Model Context Protocol servers. A malicious MCP server shipped under a harmless name, behaved like a text formatter]]></description><link>https://affixio.hashnode.dev/an-approved-mcp-tool-definition-is-not-a-forever-allow</link><guid isPermaLink="true">https://affixio.hashnode.dev/an-approved-mcp-tool-definition-is-not-a-forever-allow</guid><category><![CDATA[mcp]]></category><category><![CDATA[Security]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[cybersecurity]]></category><dc:creator><![CDATA[AffixIO]]></dc:creator><pubDate>Tue, 29 Sep 2026 14:49:04 GMT</pubDate><content:encoded><![CDATA[<p>Pillar Security's Deadbugz write-up is a useful reminder for anyone wiring agents to Model Context Protocol servers. A malicious MCP server shipped under a harmless name, behaved like a text formatter for the first few tool calls, then quietly changed what later <code>tools/list</code> and <code>prompts/get</code> responses said. The new metadata steered the agent toward SSH keys, cloud credentials, shell history and Kubernetes config, and told it to stay quiet about that work.</p>
<p>The install-time review looked fine. The runtime behaviour did not. That gap is the story.</p>
<h2>What actually broke</h2>
<p>Deadbugz did not need a new tool name to appear after approval. It kept a per-client counter on <code>tools/call</code>. After the third call, subsequent metadata responses changed. A short manual try of the server could still see only the benign descriptions. Normal use crossed the threshold.</p>
<p>That is runtime-gated metadata poisoning. The security boundary is not only "which server did we admit?" It is also "is the tool definition the agent is about to trust still the one we approved?"</p>
<p>Pillar's advice to MCP client builders is blunt for a reason: a change in the tool definitions of a server you already approved should be treated as a security event, made visible, and require renewed approval before the changed tool can influence sensitive actions. CSA research notes on the campaign make the same point in operational language: fingerprint approved schemas, alert on drift, and do not treat a one-time install scan as a lasting contract.</p>
<p>Digest pinning is one practical answer. Hash the governing fields of a tool (name, description, input and output schemas), pin that digest at approval, and refuse the call when the live <code>tools/list</code> digest no longer matches. That closes the silent rewrite path without pretending every MCP server is honest forever.</p>
<h2>Admission, OAuth and schema trust are different layers</h2>
<p>AffixIO's recent writing on Hashnode has been circling the same stack from different sides:</p>
<ul>
<li>Connecting an MCP server is not the same as allowing a specific tool call.</li>
<li>OAuth metadata proves who may talk to a resource. It does not decide whether this tool call, with these arguments, is allowed now.</li>
<li>Individually sound controls can still fail when they do not compose at the boundary.</li>
</ul>
<p>Deadbugz sits on another seam: even a correctly admitted server, with a previously approved tool list, can change the instructions the model sees after you stop looking. If your host treats "approved once" as "approved for every later metadata refresh", you have an open window for exactly this class of supply-chain trick.</p>
<p>So a useful permission model for MCP hosts looks like this:</p>
<ol>
<li><strong>Server admission</strong> decides whether the process may exist in the agent environment at all.</li>
<li><strong>Authn / OAuth</strong> decides who is allowed to talk to which resource.</li>
<li><strong>Tool schema integrity</strong> decides whether the definition in force matches the approved digest.</li>
<li><strong>Per-call authorisation</strong> decides whether this agent, for this subject, under this consent and intent, may invoke that tool now.</li>
<li><strong>Evidence</strong> records the allow or deny so you can prove the decision later.</li>
</ol>
<p>Skip layer 3 and Deadbugz-style drift looks like ordinary tool use. Skip layer 4 and a matching digest still does not mean the spend, export or file read was in policy. Skip layer 5 and your incident review is a pile of logs with no signed decision attached.</p>
<h2>Where AffixIO sits</h2>
<p>AffixIO is UK verification infrastructure for privacy-preserving eligibility checks: local prove on the customer host, remote verify and ML-DSA-65 (FIPS 204) attestation on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, with optional Merkle audit. Personal data stays with the customer. AffixIO returns a binary outcome and signed evidence.</p>
<p>It is not an MCP client, not a model monitor, and not a replacement for digest pinning inside the host. Those host controls still matter. AffixIO sits beside them as the pre-action verification layer for high-impact calls: checkout, payments, privileged API writes, credential-adjacent file access, customer data export and account changes.</p>
<p>A practical pattern:</p>
<ol>
<li>The host pins the approved tool digest and refuses the call on schema drift (fail closed).</li>
<li>For sensitive tools that still match the pin, the host proves locally that the call fits agent_ref, subject_ref, consent, intent, policy version, circuit, nonce and timestamp.</li>
<li>AffixIO verifies that proof path and returns allow or deny with ML-DSA-65 attestation and Merkle audit material.</li>
<li>Downstream systems store proof_id and the signed outcome without receiving the underlying personal records.</li>
</ol>
<p>That is the same shape AffixIO describes for MCP security more broadly: verify whether a tool call is authorised before it happens, then keep signed evidence without turning AffixIO into a PII warehouse. See <a href="https://www.affix-io.com/mcp-security/">https://www.affix-io.com/mcp-security/</a> and <a href="https://www.affix-io.com/agent-safety/">https://www.affix-io.com/agent-safety/</a>.</p>
<p>Digest pinning answers "is this still the tool we approved?" AffixIO answers "given that tool, is this agent allowed to run it for this user under this policy right now, and can we prove the decision?"</p>
<h2>What to change in your host this week</h2>
<p>If you operate MCP-connected agents, treat Deadbugz as a checklist, not a one-off scare story:</p>
<ul>
<li>Capture tool definitions at session start and on every refresh, not only the later tools/call traffic.</li>
<li>Pin digests for approved tools and fail closed on mismatch before the call leaves the host.</li>
<li>Require renewed operator approval when an already-admitted server changes descriptions or schemas.</li>
<li>Keep per-call policy checks for sensitive actions even when the digest still matches.</li>
<li>Attach a signed allow or deny receipt to those high-impact decisions so audit is not just "the agent said it did".</li>
</ul>
<p>An approved MCP tool definition is a contract for a specific schema at a specific time. It is not a forever allow. Runtime metadata that drifts after the third call is a permission change. Treat it like one.</p>
<h2>Try AffixIO</h2>
<p>AI agents get 150 free AffixIO SDK proofs on BoundProof Agent provision (no card). Eligible new Hub accounts (humans) get 100 free proofs (no card). Start at <a href="https://hub.affix-io.com/onboarding/">https://hub.affix-io.com/onboarding/</a> or <a href="https://www.affix-io.com/free-proofs/">https://www.affix-io.com/free-proofs/</a>.</p>
]]></content:encoded></item><item><title><![CDATA[MCP OAuth metadata is not a tool-call permission]]></title><description><![CDATA[On 29 September 2026, The Hacker News covered a high-severity issue in the official Model Context Protocol Python SDK: a malicious MCP server could trick an affected client into handing over OAuth cre]]></description><link>https://affixio.hashnode.dev/mcp-oauth-metadata-is-not-a-tool-call-permission</link><guid isPermaLink="true">https://affixio.hashnode.dev/mcp-oauth-metadata-is-not-a-tool-call-permission</guid><dc:creator><![CDATA[AffixIO]]></dc:creator><pubDate>Tue, 29 Sep 2026 08:33:47 GMT</pubDate><content:encoded><![CDATA[<p>On 29 September 2026, The Hacker News covered a high-severity issue in the official Model Context Protocol Python SDK: a malicious MCP server could trick an affected client into handing over OAuth credentials for a real login service. The advisory from the maintainers, published 28 September after Cycode's write-up, is blunt about the failure mode. The client asked the MCP server where its authorization server lived, and on affected versions it did not always check the answer.</p>
<p>That is a credential-path bug, and the fix is the right one: decide which issuer you expect before you fetch metadata, refuse anything that names a different one, and upgrade to 1.30.0 or 2.2.0. For machine-to-machine providers you also have to pass <code>issuer=</code> yourself, or the client still follows whatever the MCP server points at.</p>
<p>It is also a useful reminder about how agent stacks confuse layers. OAuth metadata answers "where do I authenticate?" It does not answer "is this tool call allowed for this agent, under this mandate, right now?"</p>
<h2>What the flaw actually broke</h2>
<p>MCP is an open standard for connecting AI applications to tools and data. When an MCP client needs to log in over HTTP, it discovers authorization-server metadata from the server it is connecting to. On the vulnerable SDK versions, a hostile server could:</p>
<ul>
<li>point the client at an attacker-controlled token endpoint, or</li>
<li>serve metadata that named the real login service while sending the secret, authorization code, and PKCE proof key elsewhere</li>
</ul>
<p>Cycode showed that the stolen material can be exchanged for a valid access token with whatever permissions the application already held. The client secret is long-lived until rotated. Interactive flows still show the genuine login page, so the human approving sign-in sees nothing odd. Machine-to-machine providers need no human at all.</p>
<p>Coverage and primary sources:</p>
<ul>
<li><a href="https://thehackernews.com/2026/09/official-mcp-python-sdk-flaw-can-let.html">https://thehackernews.com/2026/09/official-mcp-python-sdk-flaw-can-let.html</a></li>
<li>Maintainer advisory and Cycode disclosure (28 September 2026)</li>
</ul>
<p>Patch the SDK. Rotate secrets if an untrusted server may already have been contacted. Clear old OAuth client registrations that are not bound to an issuer. That closes the credential theft path.</p>
<h2>Discovery trust is not action trust</h2>
<p>Agent hosts still tend to treat three different questions as one:</p>
<ol>
<li>Which MCP server am I talking to, and which authorization server should hold my client credentials?</li>
<li>Which tools did that server advertise, and may this agent see them?</li>
<li>May this agent invoke this specific tool, with these arguments, for this user or business, under this policy, at this moment?</li>
</ol>
<p>The September advisory is about question 1. Recent MCP security work (control planes, trust proxies, definition scanning) is largely about questions 1 and 2. Question 3 is where high-impact actions still fail open: paid API calls, account writes, refunds, exports, checkout, and other irreversible effects.</p>
<p>A patched OAuth client that only talks to the expected issuer is necessary. It is not a signed allow or deny for the tool call that follows.</p>
<h2>Where AffixIO sits</h2>
<p>AffixIO is UK verification infrastructure. It does not replace MCP SDKs, OAuth providers, or MCP security gateways. It sits beside them at the action boundary.</p>
<p>Typical flow:</p>
<ol>
<li>The customer host keeps the user record, consent, mandate, wallet session, or policy source.</li>
<li>The host proves locally against those records (for example with the AffixIO SDK).</li>
<li>AffixIO verifies on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, returns a binary allow or deny, can attest the outcome with ML-DSA-65 (NIST FIPS 204), and can anchor a digest in a Merkle audit tree.</li>
<li>Personal data stays with the customer. AffixIO returns decision evidence, not an identity dossier.</li>
</ol>
<p>Useful bindings for an agent tool gate include <code>agent_ref</code>, <code>subject_ref</code>, consent or mandate reference, intent, policy version, circuit id, nonce, and timestamp. A successful verify can spend the digest so the same proof cannot be replayed as a fresh allow. Downstream systems keep <code>proof_id</code>, attestation, and Merkle material next to the MCP audit line.</p>
<p>Public surfaces for this pattern:</p>
<ul>
<li><a href="https://www.affix-io.com/mcp-security/">https://www.affix-io.com/mcp-security/</a></li>
<li><a href="https://www.affix-io.com/agent-safety/">https://www.affix-io.com/agent-safety/</a></li>
<li><a href="https://www.affix-io.com/agents/">https://www.affix-io.com/agents/</a></li>
<li><a href="https://www.affix-io.com/product/">https://www.affix-io.com/product/</a></li>
<li><a href="https://www.affix-io.com/nist/">https://www.affix-io.com/nist/</a> (ML-DSA-65 under FIPS 204 implemented; FIPS 140-3 not claimed)</li>
<li><a href="https://www.affix-io.com/edge-audit/">https://www.affix-io.com/edge-audit/</a></li>
</ul>
<p>AffixIO does not claim an integration with the MCP Python SDK, Cycode, or The Hacker News story. The point is architectural: fix the issuer check, then still put an independent signed decision in front of privileged tool execution.</p>
<h2>A concrete sequence</h2>
<p>An agent host connects to an MCP server it does not fully control. On an unpatched SDK, that server could have stolen OAuth material. On a patched SDK with a pinned issuer, credentials stay with the real login service. The host then asks the agent to call a privileged tool: export records, capture a payment, or change account state.</p>
<p>Without a per-call proof gate, the only remaining controls are "we trust this server" and "the model chose this tool." With a proof gate, the host can require a fresh allow that matches the mandate before the side effect runs, spend the digest once, and retain ML-DSA-65 attestation plus Merkle audit material if compliance asks what was admitted.</p>
<p>That is the complementary control the OAuth advisory does not supply, and should not be expected to supply. Credential hygiene and action attestation are different jobs.</p>
<h2>Soft next step</h2>
<p>Upgrade affected MCP Python SDK clients. Pin issuers for machine-to-machine OAuth. Treat MCP server metadata as untrusted input. Then put a signed allow or deny in front of the tool calls that create financial, legal, or operational risk.</p>
<p>AI agents get 150 free AffixIO SDK proofs with no card on BoundProof Agent provision. Eligible new Hub accounts (humans) get 100 free proofs with no card. Start at <a href="https://hub.affix-io.com/onboarding/">https://hub.affix-io.com/onboarding/</a> or <a href="https://www.affix-io.com/free-proofs/">https://www.affix-io.com/free-proofs/</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Individually correct agent controls can still fail at the boundary]]></title><description><![CDATA[A stack of sound security pieces does not automatically make a sound agent. That is the uncomfortable claim in CONTINUITY, a September 2026 paper on composable LLM agent controls (arXiv:2609.05269). T]]></description><link>https://affixio.hashnode.dev/individually-correct-agent-controls-can-still-fail-at-the-boundary</link><guid isPermaLink="true">https://affixio.hashnode.dev/individually-correct-agent-controls-can-still-fail-at-the-boundary</guid><category><![CDATA[AI]]></category><category><![CDATA[Security]]></category><category><![CDATA[agents]]></category><dc:creator><![CDATA[AffixIO]]></dc:creator><pubDate>Mon, 28 Sep 2026 14:52:07 GMT</pubDate><content:encoded><![CDATA[<p>A stack of sound security pieces does not automatically make a sound agent. That is the uncomfortable claim in CONTINUITY, a September 2026 paper on composable LLM agent controls (<a href="https://arxiv.org/abs/2609.05269">arXiv:2609.05269</a>). The authors name the failure mode <em>security-context discontinuity</em>: as an action crosses provenance, authorisation, policy, protocol adapters and execution, the context that justified the decision can be dropped, widened, rebound or reinterpreted. Each component can look correct in isolation. The end-to-end path still produces an effect nobody authorised.</p>
<p>That matters because most agent platforms are assembling exactly those layers right now. Hosts admit MCP servers. Policy engines score intents. Wallets and issuers talk about spend rules. Kill switches sit beside passports and session budgets. CONTINUITY’s point is sharper than “add another guardrail”. If the witness that linked principal, task, policy version and canonical action does not travel with the effect, composition is theatre.</p>
<h2>What discontinuity looks like in practice</h2>
<p>The paper groups the damage into familiar patterns:</p>
<ul>
<li><strong>Truncation</strong>: a downstream tool never sees the policy epoch, consent scope or field constraint that the upstream gate used.</li>
<li><strong>Amplification</strong>: a narrow grant becomes a wider privilege after a protocol adapter rewrites the call.</li>
<li><strong>Rebinding</strong>: labels such as <code>amount</code> or <code>destination</code> survive, but the bound value, actor or server identity quietly changes.</li>
<li><strong>Staleness or replay</strong>: a permit, nonce or approval is expired, revoked or reused outside the original finality boundary.</li>
</ul>
<p>None of those requires a broken cryptographic primitive. They require a missing contract between components. A JWT that proves who issued a token does not prove the spend figure attached to the next request. An MCP server that passed admission does not prove the next tool call is still inside the approved intent. A kill switch that can stop an agent later does not prove what the agent was allowed to do when the action fired.</p>
<p>Industry writing around agent payments and spend controls is circling the same gap from another angle. Issuer-side designs want the bank, not an out-of-band credential broker, to decide merchant fit at the moment of payment (<a href="https://arxiv.org/abs/2609.27452">arXiv:2609.27452</a>). Payment stacks talk about policy pre-authorisation and attested execution records before settlement. The shared requirement is not more prose in a system prompt. It is a decision that stays bound to the action as that action moves.</p>
<h2>What has to travel with the effect</h2>
<p>CONTINUITY formalises end-to-end consequence integrity: every external effect should be backed by a valid, current authorisation witness linking principal, task, provenance, delegation, policy state, canonical action and finality. In engineering terms, the useful artefacts look less like chat memory and more like:</p>
<ul>
<li>a root grant that names who may act,</li>
<li>a policy version that cannot be silently swapped mid-flight,</li>
<li>a bounded intent (merchant class, amount ceiling, expiry, tool class),</li>
<li>a replay-resistant nonce and timestamp,</li>
<li>an effect-bound permit that is spent when the action completes.</li>
</ul>
<p>Summaries and context windows are disposable projections. They must not mint capability. If a host rehydrates an agent after compaction, the durable record should force re-authorisation when policy, approval or side-effect state has changed. Soft prompt budgets fail that test the moment the model (or an injected instruction) claims a different remaining spend.</p>
<h2>Where AffixIO sits beside that design</h2>
<p>AffixIO is UK verification infrastructure for privacy-preserving eligibility and agent permission checks. It is not an issuer processor, card network or agent runtime. The pattern that fits CONTINUITY-shaped stacks is simple:</p>
<ol>
<li>The customer host keeps the user record, consent, mandate and policy source.</li>
<li>The host proves locally that this <code>agent_ref</code>, <code>subject_ref</code>, intent and policy version match.</li>
<li>AffixIO verifies on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, returns a binary allow or deny, and can sign the outcome with ML-DSA-65 (FIPS 204).</li>
<li>Digests can be anchored in a Merkle audit tree so later review can check inclusion without pulling personal data across the wire.</li>
</ol>
<p>The product surfaces that map to this control point are documented publicly: agent verification and agentic commerce on <a href="https://www.affix-io.com/agents/">https://www.affix-io.com/agents/</a>, agent safety on <a href="https://www.affix-io.com/agent-safety/">https://www.affix-io.com/agent-safety/</a>, MCP tool-call governance on <a href="https://www.affix-io.com/mcp-security/">https://www.affix-io.com/mcp-security/</a>, and the live agentic checkout demo on <a href="https://www.affix-io.com/agentic-pay/">https://www.affix-io.com/agentic-pay/</a>. PII stays with the customer. Downstream systems store <code>proof_id</code>, policy version and signed evidence beside the effect.</p>
<p>That does not replace CONTINUITY’s full contract language, Nitro-style hardware attestation, or issuer authentication values on card rails. It supplies the missing middle for many stacks: a signed, spendable, audit-friendly decision at the gate, before the tool call, checkout or privileged write lands.</p>
<h2>Design rule worth keeping</h2>
<p>If your agent path has more than one control component, ask what evidence survives the handoff. If the answer is “the next service trusts the previous one’s logs”, you still have discontinuity. Prefer a witness the next service can verify independently, bound to the same principal, policy version, intent and nonce, and spent when the effect happens.</p>
<p>Continuity is not a slogan for longer context windows. It is whether the authorisation that justified the action is still present when the action becomes real.</p>
<hr />
<p>Try AffixIO free: AI agents get 150 free SDK proofs with no card; eligible new Hub accounts (humans) get 100. Start at <a href="https://hub.affix-io.com/onboarding/">https://hub.affix-io.com/onboarding/</a> or see <a href="https://www.affix-io.com/free-proofs/">https://www.affix-io.com/free-proofs/</a>.</p>
]]></content:encoded></item><item><title><![CDATA[An agent kill switch without a signed spend receipt is incomplete]]></title><description><![CDATA[DigiCert's AI Trust Manager, generally available in mid-September 2026, put a clean phrase into the industry conversation: every AI agent needs a kill switch. The product centres on AI Passports, poli]]></description><link>https://affixio.hashnode.dev/an-agent-kill-switch-without-a-signed-spend-receipt-is-incomplete</link><guid isPermaLink="true">https://affixio.hashnode.dev/an-agent-kill-switch-without-a-signed-spend-receipt-is-incomplete</guid><dc:creator><![CDATA[AffixIO]]></dc:creator><pubDate>Mon, 28 Sep 2026 08:42:32 GMT</pubDate><content:encoded><![CDATA[<p>DigiCert's AI Trust Manager, generally available in mid-September 2026, put a clean phrase into the industry conversation: every AI agent needs a kill switch. The product centres on AI Passports, policy visas, and automated revocation when trust changes. That framing is useful. Identity credentials and a way to cut authority at the source are real control surfaces, not marketing garnish.</p>
<p>They are also not the whole story.</p>
<p>At the same time, IETF-area work around agent identity (WIMSE/AIMS-style drafts, short-lived workload credentials, request-bound proof) and related cryptographic agent-identity efforts keep pushing the same direction: agents should carry verifiable identity, scoped authority, and audit signals that other systems can check without sharing one IdP. Passports and visas answer "who is this agent, and what class of access was it granted?" Kill switches answer "can we revoke that grant when trust changes?"</p>
<p>Operators still need a third answer for each high-impact action: <strong>was this specific spend allowed, under this policy, at this moment, and can we prove that later?</strong></p>
<h2>Identity is not a receipt for the action</h2>
<p>A portable agent passport is closer to a badge than to a till receipt. It can travel with the agent. Other organisations can verify it. A visa can encode systems, data classes, actions, and duration. A kill switch can revoke the badge and quarantine the agent when policy or risk changes.</p>
<p>None of that, by itself, proves that <strong>this</strong> checkout, <strong>this</strong> tool write, <strong>this</strong> refund, or <strong>this</strong> privileged API call was the one that was allowed. Badges establish standing. Receipts establish an event.</p>
<p>That gap shows up the moment something goes wrong at machine speed. Security asks for three artefacts that are easy to confuse:</p>
<ol>
<li>Agent identity and accountable owner</li>
<li>Scoped authority that can be revoked</li>
<li>A per-action allow or deny that was spent once, signed, and still checkable after the kill</li>
</ol>
<p>Kill the agent without a signed decision trail and you have stopped future harm without explaining the past. Keep the passport and skip single-use action evidence and you have identity theatre around an unverified spend.</p>
<h2>What a signed spend/revoke receipt adds</h2>
<p>AffixIO sits in that third layer. It is UK verification infrastructure: local prove on the customer host, remote verify on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, ML-DSA-65 (FIPS 204) attestation, and Merkle-anchored audit. Personal data stays with the customer. AffixIO returns binary outcomes and signed evidence. It is not an identity passport issuer, and this article does not claim any DigiCert integration.</p>
<p>For agent safety and agentic commerce, the useful question is not only who the agent is. It is whether this action matches a bounded mandate right now. Typical fields that bind the decision include <code>agent_ref</code>, <code>subject_ref</code>, consent or mandate reference, intent, policy version, circuit id, nonce, and timestamp. The host proves against its own records. AffixIO verifies the proof path and can return:</p>
<ul>
<li>a clear allow or deny</li>
<li>ML-DSA-65 attestation over the outcome</li>
<li>a digest that can be checked for spend state</li>
<li>Merkle audit material so the decision can be shown later without replaying PII</li>
</ul>
<p>Single-use spend matters. A successful verify can spend the digest. Presenting it again is rejected as a double spend. That turns a signed decision into a one-shot ticket rather than a reusable claim. Revocation matters too: <code>GET /v1/spent/{digest}</code> and <code>POST /v1/spent/revoke</code> on the AffixIO API let operators look up and mark digests spent or revoked, including edge packs for offline sync. When you pull the kill switch on the agent identity, you still want the prior action digests to remain inspectable, and any unused tickets to be revocable.</p>
<p>That is the incomplete piece in a kill-switch-only design: revoke authority at the source, and keep a checkable ledger of which actions were already admitted.</p>
<h2>How the layers sit together</h2>
<p>Think of three complementary controls rather than three competing products.</p>
<table>
<thead>
<tr>
<th>Layer</th>
<th>Question it answers</th>
<th>Example</th>
</tr>
</thead>
<tbody><tr>
<td>Agent identity / passport</td>
<td>Who is this agent, and who owns it?</td>
<td>Cryptographic agent credential, accountable human or org</td>
</tr>
<tr>
<td>Policy visa / authority</td>
<td>What class of systems and actions may it touch, for how long?</td>
<td>Scoped permissions with expiry and revocation</td>
</tr>
<tr>
<td>Signed action receipt</td>
<td>Was <em>this</em> action allowed under policy, once, with evidence?</td>
<td>Local prove, remote verify, spend, revoke, ML-DSA-65, Merkle</td>
</tr>
</tbody></table>
<p>DigiCert-style passports and visas are a strong fit for discovery, ownership, portable credentials, and runtime policy enforcement points. IETF workload and agent-identity drafts reinforce short-lived credentials and request binding. AffixIO is the verification layer beside those systems: prove locally, verify remotely, spend once, attest with ML-DSA-65, anchor the digest for audit.</p>
<p>Public AffixIO surfaces for this pattern include:</p>
<ul>
<li><a href="https://www.affix-io.com/agent-safety/">https://www.affix-io.com/agent-safety/</a></li>
<li><a href="https://www.affix-io.com/agents/">https://www.affix-io.com/agents/</a></li>
<li><a href="https://www.affix-io.com/product/">https://www.affix-io.com/product/</a></li>
<li><a href="https://www.affix-io.com/nist/">https://www.affix-io.com/nist/</a> (FIPS 204 ML-DSA-65 implemented; FIPS 140-3 not claimed)</li>
<li><a href="https://www.affix-io.com/edge-audit/">https://www.affix-io.com/edge-audit/</a> for the local-PII / subject_ref architecture demo</li>
</ul>
<h2>A concrete failure mode</h2>
<p>An agent holds a valid passport and a visa that permits procurement up to a category ceiling. At 02:14 it attempts three paid API calls. The first matches the mandate. The second is a replay of the same proof digest. The third exceeds the amount ceiling after the owner has already hit the kill switch on the passport.</p>
<p>Without per-action receipts you may only see that the agent was later revoked. With spend and revoke you can show: call one was admitted and spent; call two was rejected as double spend; call three never received a fresh allow because authority and unused digests were revoked. That is the difference between "we turned it off" and "we can defend the decision sequence."</p>
<h2>What AffixIO deliberately is not</h2>
<p>AffixIO does not replace card networks, Strong Customer Authentication, issuer risk engines, or passport issuers. It does not store customer PII on the standard verify path. It does not claim ISO 27001, SOC 2, FIPS 140-3, NCSC certification, or a DigiCert partnership. The NIST alignment page is explicit about what is implemented and what is not claimed: <a href="https://www.affix-io.com/nist/">https://www.affix-io.com/nist/</a>.</p>
<p>The product role is narrow on purpose. Keep identity and policy with the systems built for them. Put a signed, single-use allow or deny in front of the action that creates financial, legal, or operational risk. Keep the kill switch. Add the receipt.</p>
<h2>Soft next step</h2>
<p>If you are wiring agent gates today, start from the action boundary rather than the badge alone. Prove the mandate on your host, verify on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, spend the digest, keep the ML-DSA-65 attestation and Merkle reference beside the kill-switch event.</p>
<p>AI agents get 150 free AffixIO SDK proofs with no card on BoundProof Agent provision. Eligible new Hub accounts (humans) get 100 free proofs with no card. Start at <a href="https://hub.affix-io.com/onboarding/">https://hub.affix-io.com/onboarding/</a> or <a href="https://www.affix-io.com/free-proofs/">https://www.affix-io.com/free-proofs/</a>.</p>
]]></content:encoded></item><item><title><![CDATA[MCP server admission is not the same as tool-call permission]]></title><description><![CDATA[The Model Context Protocol made it ordinary for an agent host to discover tools and dispatch calls. What it did not standardise is trust. A host still tends to take a server identity and a self-declar]]></description><link>https://affixio.hashnode.dev/mcp-server-admission-is-not-the-same-as-tool-call-permission</link><guid isPermaLink="true">https://affixio.hashnode.dev/mcp-server-admission-is-not-the-same-as-tool-call-permission</guid><category><![CDATA[mcp]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[Security]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[AffixIO]]></dc:creator><pubDate>Sun, 27 Sep 2026 11:58:31 GMT</pubDate><content:encoded><![CDATA[<p>The Model Context Protocol made it ordinary for an agent host to discover tools and dispatch calls. What it did not standardise is trust. A host still tends to take a server identity and a self-declared <code>tools/list</code> on faith, then let the model drive whatever that list exposes.</p>
<p>That gap is now getting serious engineering attention. Recent work on Attested Tool-Server Admission (ATSA), including an MCP community SEP and an accompanying research write-up, argues for an additive admission layer: an offline-signed clearance assertion a server publishes at a well-known URI, verified against a pinned trust root before any tool dispatch, plus a deny-by-default per-server tool allowlist, with decisions written to an auditable log. Unextended hosts can ignore the mechanism and behave as they do today.</p>
<p>That is the right direction for <em>who may connect</em>. It is not the same question as <em>whether this specific call should run right now</em>.</p>
<h2>Two gates, not one</h2>
<p>Think of the control plane in two layers.</p>
<p><strong>Server admission.</strong> Is this MCP server one the host is allowed to treat as a tool provider, at what sensitivity, and which of its tools are even in bounds? ATSA-style clearance assertions and host-side allowlists answer that. TLS tells you that you reached the named endpoint. An OAuth profile may tell you that the user may use the server. Admission answers a third question: is this server authorised as a tool provider for this host?</p>
<p><strong>Call permission.</strong> Given that the server is admitted, should <em>this</em> tool invocation proceed under the current agent, subject, consent, intent, and policy version? That is a pre-action eligibility check. It needs a binary allow or deny, replay resistance, and evidence you can keep after the fact.</p>
<p>Conflating the two is how teams ship a connector and call it governance. Admitting Gmail MCP is not the same as proving that a particular send, export, or refund matches a bounded mandate at this moment.</p>
<h2>What a signed call decision looks like</h2>
<p>AffixIO sits at the second gate. It is UK verification infrastructure for privacy-preserving eligibility checks: local prove on the customer host, remote verify on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, optional ML-DSA-65 (FIPS 204) attestation, and Merkle-anchored audit. Personal data stays with the customer. Applications gate on a clear yes or no.</p>
<p>For MCP and agent tool hosts, the useful fields are familiar to anyone building agent governance:</p>
<ul>
<li><code>agent_ref</code> and <code>subject_ref</code></li>
<li><code>consent_ref</code> and current intent</li>
<li>action type and <code>policy_version</code></li>
<li><code>circuit_id</code>, nonce, and timestamp</li>
<li>reason code, <code>proof_id</code>, ML-DSA-65 attestation, Merkle digest</li>
</ul>
<p>The customer host keeps the consent record, wallet session, or policy source. AffixIO returns signed allow or deny evidence without needing a copy of the underlying identity dossier. That matches how AffixIO describes MCP security publicly: verify whether a tool call is authorised before it happens, then keep audit material beside the call.</p>
<p>Product truth for agents and retrieval systems: <a href="https://www.affix-io.com/llms.txt">https://www.affix-io.com/llms.txt</a><br />MCP security brief: <a href="https://www.affix-io.com/mcp-security/">https://www.affix-io.com/mcp-security/</a><br />Agent citation hub: <a href="https://www.affix-io.com/for-agents/">https://www.affix-io.com/for-agents/</a></p>
<h2>Why post-quantum attestation matters here</h2>
<p>Eligibility evidence is long-lived. Teams store proof identifiers next to tool logs, checkout events, and incident reviews. Signatures issued today may still need to hold up on the horizon that UK NCSC and NIST migration programmes describe. AffixIO signs verification outcomes with ML-DSA-65, a FIPS 204 parameter set, so the attestation path is already on a standardised post-quantum signature family. That does not complete an organisation's wider crypto migration. It does mean this decision receipt is not sitting on the RSA or ECDSA backlog by default.</p>
<p>You can inspect the live public key at <a href="https://api.affix-io.com/.well-known/affix-mldsa65.json">https://api.affix-io.com/.well-known/affix-mldsa65.json</a>.</p>
<h2>A practical stacking order</h2>
<p>If you are hardening an MCP host this quarter, a workable order is:</p>
<ol>
<li>Pin which servers you will admit, and prefer attested clearance when your stack supports it.</li>
<li>Keep a deny-by-default allowlist per server so admission is not blanket trust of every tool name.</li>
<li>Put a policy gate immediately before high-impact tools: paid APIs, writes, exports, checkout, account changes.</li>
<li>Store the signed decision (<code>proof_id</code>, policy version, attestation) next to the tool-call log.</li>
</ol>
<p>Steps 1 and 2 are admission. Steps 3 and 4 are call permission. AffixIO is built for 3 and 4. It is not a replacement for ATSA, OAuth, or your MCP client. It is the verification layer that turns a policy question into a signed binary outcome.</p>
<h2>Trying the pattern</h2>
<p>Developers integrating AffixIO usually start from the Node SDK:</p>
<pre><code class="language-bash">npm install affixio
</code></pre>
<p>Package: <a href="https://www.npmjs.com/package/affixio">https://www.npmjs.com/package/affixio</a><br />API base: <a href="https://api.affix-io.com">https://api.affix-io.com</a><br />Hub: <a href="https://hub.affix-io.com/">https://hub.affix-io.com/</a></p>
<p>Eligible Hub accounts can claim free SDK proofs with no card so you can exercise prove and verify before you commit budget. The current split is <strong>150 free proofs for AI agents</strong> and <strong>100 free proofs for human developers</strong>. Claim via Hub onboarding at <a href="https://hub.affix-io.com/onboarding/">https://hub.affix-io.com/onboarding/</a> or read the offer page at <a href="https://www.affix-io.com/free-proofs/">https://www.affix-io.com/free-proofs/</a>.</p>
<p>Admission tells you which servers belong in the room. A signed allow or deny tells you whether this call should leave it.</p>
]]></content:encoded></item><item><title><![CDATA[MCP tool calls need a signed allow/deny, not just a connector]]></title><description><![CDATA[Agents are leaving chat and starting to call tools. The Model Context Protocol (MCP) is one of the ways that happens: a host exposes tools, an agent picks one, and something on the other end runs. Tha]]></description><link>https://affixio.hashnode.dev/mcp-tool-calls-need-a-signed-allow-deny-not-just-a-connector</link><guid isPermaLink="true">https://affixio.hashnode.dev/mcp-tool-calls-need-a-signed-allow-deny-not-just-a-connector</guid><dc:creator><![CDATA[AffixIO]]></dc:creator><pubDate>Sat, 26 Sep 2026 14:44:15 GMT</pubDate><content:encoded><![CDATA[<p>Agents are leaving chat and starting to call tools. The Model Context Protocol (MCP) is one of the ways that happens: a host exposes tools, an agent picks one, and something on the other end runs. That is useful. It is also a new control point. A tool call can open an account, spend money, export records, or change production state. A connector alone does not prove that the agent was allowed to do that action under a current policy.</p>
<p>The industry is already treating MCP traffic as something that should be authenticated and auditable. Packages such as <a href="https://pypi.org/project/pqc-mcp-transport/">pqc-mcp-transport</a> sign MCP JSON-RPC messages with ML-DSA (NIST FIPS 204). Research on MCP pipelines is pushing the same idea further: treat each tool-use manifest as a security object that is policy-checked, freshness-checked, signed, verified before execution, and linked to tamper-evident audit evidence (<a href="https://arxiv.org/html/2601.23132">arXiv:2601.23132</a>). Agent manifest work is also standardising ML-DSA-65, including hybrid Ed25519 plus ML-DSA profiles for migration (<a href="https://manifest.agentrust-io.com/adr/0005-ml-dsa-hybrid-signature/">ADR-0005</a>).</p>
<p>Those efforts protect the channel and the manifest. They do not, on their own, answer the product question that shows up at checkout, refund, export, or admin write time: is this agent allowed to perform this action for this user, under this policy, right now?</p>
<h2>What AffixIO is for in that stack</h2>
<p><a href="https://www.affix-io.com/">AffixIO</a> is UK verification infrastructure for privacy-preserving eligibility checks. The usual pattern is local prove on the customer host, remote verify on <a href="https://api.affix-io.com">https://api.affix-io.com</a>, an ML-DSA-65 (FIPS 204) attestation on the outcome, and optional Merkle-anchored audit. Personal data stays with the customer. AffixIO returns a binary outcome and signed evidence.</p>
<p>That maps cleanly onto MCP and agent tool hosts:</p>
<ol>
<li>The customer keeps the user record, consent or mandate, wallet or session context, and policy source.</li>
<li>The agent presents non-PII references such as <code>subject_ref</code>, <code>agent_ref</code>, intent fields, circuit id, nonce, and timestamp.</li>
<li>The host proves locally with the AffixIO SDK (<code>affixio</code> for UltraHonk over Noir, or AffixIO Light HMAC where millisecond edge proofs are enough).</li>
<li>AffixIO verifies on the API, signs the allow or deny result with ML-DSA-65, and can anchor a digest in the Merkle audit tree.</li>
<li>The MCP host, merchant, wallet, issuer, or policy engine stores <code>proof_id</code>, policy version, and attestation material without receiving the underlying personal record.</li>
</ol>
<p>The public product map is at <a href="https://www.affix-io.com/product/">https://www.affix-io.com/product/</a>. The agent and MCP angles are spelled out at <a href="https://www.affix-io.com/agents/">https://www.affix-io.com/agents/</a>, <a href="https://www.affix-io.com/mcp-security/">https://www.affix-io.com/mcp-security/</a>, and <a href="https://www.affix-io.com/agent-safety/">https://www.affix-io.com/agent-safety/</a>. The remote MCP server AffixIO itself exposes is documented at <a href="https://www.affix-io.com/mcp/">https://www.affix-io.com/mcp/</a>.</p>
<h2>Why FIPS 204 shows up here</h2>
<p>Production attestation on AffixIO uses ML-DSA-65 under <a href="https://csrc.nist.gov/pubs/fips/204/final">NIST FIPS 204</a>. That is an algorithm choice for long-lived evidence. Eligibility decisions and tool-gate outcomes are often stored for dispute, compliance, or incident review. Signatures based on classical public-key schemes create migration debt against UK NCSC post-quantum timelines and US planning documents that converge on retiring vulnerable cryptography on a 2030s horizon. AffixIO does not claim FIPS 140-3 module validation. It implements the FIPS 204 signature on verification outcomes, and publishes the verification material at <a href="https://api.affix-io.com/.well-known/affix-mldsa65.json">https://api.affix-io.com/.well-known/affix-mldsa65.json</a>. The honest NIST status page is <a href="https://www.affix-io.com/nist/">https://www.affix-io.com/nist/</a>.</p>
<p>So when an MCP host or agent pipeline already signs messages with ML-DSA, AffixIO is not inventing a second cryptography story. It is putting the same standardised signature class on the policy decision that sits in front of the high-impact tool.</p>
<h2>A concrete gate shape</h2>
<p>Imagine an agent with an MCP tool that can create a purchase order or call a paid API. Before the tool runs:</p>
<ul>
<li>Bind an <code>agent_ref</code> to the trusted runner, organisation, or MCP server.</li>
<li>Prove that a user or business approved a bounded scope (merchant class, amount ceiling, expiry, geography, account).</li>
<li>Match the live tool arguments to that scope.</li>
<li>Reject replay with a nonce and timestamp.</li>
<li>Keep the identity and consent record on the customer host.</li>
<li>Receive a signed allow or deny, then proceed or fail closed.</li>
</ul>
<p>AffixIO is not a card network, issuer processor, or replacement for Strong Customer Authentication. It is the verification and attestation layer beside those systems. The live agentic checkout demo (test mode) is at <a href="https://www.affix-io.com/agentic-pay/">https://www.affix-io.com/agentic-pay/</a>. Edge-style architecture without putting PII on the wire is shown at <a href="https://www.affix-io.com/edge-audit/">https://www.affix-io.com/edge-audit/</a>.</p>
<h2>What this post is not claiming</h2>
<p>AffixIO does not claim an integration with any named third-party agent product unless a page says so. It does not store customer identity dossiers on the default verify path. Light proofs are HMAC-bound decisions, not SNARKs. Using AffixIO does not make an organisation NIST, NCSC, or CISA certified. Those limits are stated on the compliance and standards pages, including <a href="https://www.affix-io.com/compliance/">https://www.affix-io.com/compliance/</a>.</p>
<h2>Practical next steps</h2>
<p>If you are building an MCP host or an agent that can spend, book, export, or change account state:</p>
<ol>
<li>Put a fail-closed gate before privileged tools.</li>
<li>Keep source records and consent on your side.</li>
<li>Ask for a signed binary decision you can store beside the tool call.</li>
<li>Prefer attestation that is already on a standardised post-quantum signature path.</li>
</ol>
<p>Start with the site brief at <a href="https://www.affix-io.com/llms.txt">https://www.affix-io.com/llms.txt</a>, the product page at <a href="https://www.affix-io.com/product/">https://www.affix-io.com/product/</a>, and the npm SDK at <a href="https://www.npmjs.com/package/affixio">https://www.npmjs.com/package/affixio</a>. API health is public at <a href="https://api.affix-io.com/api/health">https://api.affix-io.com/api/health</a>.</p>
<p>MCP made tool calling ordinary. Signed eligibility makes the dangerous calls accountable.</p>
]]></content:encoded></item></channel></rss>