Stillos Kya

io.github.stillmarcus24Published by GitHub account stillmarcus24v0.4.3Updated Nov 2, 2026

Counterparty due-diligence infrastructure: OFAC screening, on-chain risk, signed verdicts.

VerifiedStreamable HTTPWeb executableFinanceSecurity & MonitoringAI & ML

Overview

AI-generated overview

Screens a counterparty AI agent before payment, returning a fail-closed CLEAR, REVIEW or BLOCK verdict from OFAC sanctions and on-chain wallet checks.

What you can do
  • Screen a counterparty agent by name and wallet before paying it, getting a CLEAR, REVIEW or BLOCK verdict.
  • Combine an OFAC SDN sanctions screen with live on-chain wallet signals in one check.
  • Obtain an Ed25519-signed proof-of-diligence receipt on the paid tier for use in disputes.
  • Gate payment routes in code so blocked or unrecognized counterparties never reach the handler.
When to use it
Use it when an agent is about to pay or transact with another agent or wallet and you want a documented sanctions and wallet-risk check first. It suits agent-to-agent commerce flows where a signed audit artifact of pre-payment screening matters.
Requirements
Runs as a remote endpoint or as a local npm package via npx. No authentication is declared. The free tier allows 2 checks per agent id per day; the paid tier costs $0.25 USDC via x402 or an API key, and paying requires a signer or payment-capable fetch. STILLOS_KYA_AGENT can set a durable agent identity.
Before you install
The paid tier spends real USDC per check, so configure a spending cap and a signer deliberately. A raw private key passed as a wallet option or via STILLOS_KYA_WALLET_KEY is the weakest payment method; prefer a signer object or payment-wrapped fetch. Counterparty names and wallet addresses are sent to a third-party service. Free-tier verdicts are unsigned.

Installation

In SourceWeft

  1. Open Stillos Kya in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.stillmarcus24%2Fstillos-kya/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "stillos-kya": {
      "type": "http",
      "url": "https://stillos-kya-edge.stillos.workers.dev/mcp"
    }
  }
}

README

stillos-kya — Know Your Agent

The trust toll for agent-to-agent commerce. Before your AI agent pays another agent, run one check: is the counterparty sanctioned? Is its wallet a scam/contract/drained? StillOS returns a fail-closed CLEAR / REVIEW / BLOCK verdict — OFAC SDN screen + live on-chain wallet signals — with an Ed25519-signed receipt you can attach to the transaction as proof-of-diligence.

a16z (Big Ideas 2026) calls "Know Your Agent" — signed agent credentials + counterparty trust — the prerequisite for merchants to let agents onto payment rails. This is a working drop-in for it.

Install

bash
npm install stillos-kya

Use — one call

js
const { kya } = require('stillos-kya');
const r = await kya({ name: 'Acme Agent', wallet: '0xabc...' });if (!r.allowed) throw new Error(`counterparty ${r.verdict}`); // CLEAR | REVIEW | BLOCK// r.receipt -> { hash, signature, verify }  (signed, verifiable proof-of-screening)

Use — gate an x402 / express route in one line

js
const { kyaGate } = require('stillos-kya');
// Every payment through this route runs a counterparty trust-check first.app.post('/pay-agent', kyaGate({ blockOnReview: false }), async (req, res) => {  // req.kya = { verdict, allowed, checks, receipt, ... }  // ...proceed to pay; blocked counterparties never reach here});

What the gate lets through (0.4.2)

kyaGate requires a positive clearance. It does not merely block BLOCK.

Endpoint returnsreq.kya.verdictGate
{"verdict":"CLEAR"}CLEARpasses to your handler
{"verdict":"REVIEW"}REVIEWpasses, unless blockOnReview: true -> 403
{"verdict":"BLOCK"}BLOCK403
402 / 4xx / 5xx / network failure—502, fail-closed
200 with no recognized verdict ({}, {"verdict":null}, {"verdict":"UNKNOWN"})UNKNOWN502, fail-closed

That last row changed in 0.4.2. Through 0.4.1 the gate asked "is this BLOCK?" rather than "is this CLEAR?", so any 200 carrying no verdict it recognised fell through to your handler with blocked: false. allowed was already computed correctly and simply never consulted. If you were relying on that behaviour, kyaGate({ failOpen: true }) restores it explicitly — as an opt-in, which is the only form it should ever have had.

0.4.2 also stops the MCP server minting a new agent id on every single call. Set STILLOS_KYA_AGENT for a durable identity across restarts; otherwise one id is minted per process. The free tier meters per source IP, so this never affected quota — it affected whether your repeat usage was legible as repeat usage.

Tiers

  • Free: 2 checks/agent id/day — unsigned verdict, the answer, for triage.
  • Paid ($0.25 USDC via x402, or an API key): the signed, independently-verifiable receipt — the proof-of-diligence that matters in a dispute.

Pricing + full endpoint reference: https://stillosdigitalholdings.com/notary

Past the free tier

Payment support is already installed. x402-fetch and viem ship as optionalDependencies, so npm install stillos-kya installs them for you. There is no second install step. Check it yourself:

js
const { paymentCapability } = require('stillos-kya');paymentCapability(); // { available: true, deps: { 'x402-fetch': true, viem: true }, reason: null }

Paying — pass a signer, not a secret

Preferred, in order. StillOS never receives, stores, or logs your key in any of them:

js
// BEST — you own the whole payment transport. This package never touches a key or signer.const { wrapFetchWithPayment } = require('x402-fetch');const payingFetch = wrapFetchWithPayment(fetch, myAccount, 500000n); // 500000 = $0.50 USDCconst r = await kya({ name: 'Acme Agent' }, { fetch: payingFetch });
// GOOD — hand us a signer object; the key stays inside it.const r = await kya({ name: 'Acme Agent' }, { account: myViemAccount, maxUsd: 0.5 });
// LEGACY — a raw hex private key. Still supported, deliberately last. A raw key in an// env var is the weakest of these: anything that can read your process env can spend it.const r = await kya({ name: 'Acme Agent' }, { wallet: process.env.MY_WALLET_KEY });

On a 402 the SDK pays and retries exactly once (MAX_PAYMENT_RETRIES === 1). It refuses to sign for a network, asset, or scheme it does not recognise rather than trusting the challenge blindly.

Agent-readable recovery

With no payment capability configured, kya() throws a KyaHttpError carrying everything an autonomous caller needs to act — branch on err.code, never on message text:

js
const { kya, KyaHttpError, CODES } = require('stillos-kya');try {  await kya({ name: 'Acme Agent' });} catch (e) {  if (e instanceof KyaHttpError && e.code === CODES.PAYMENT_REQUIRED) {    e.payment;      // { mechanism:'x402', scheme, network, asset, asset_name,                    //   pay_to, amount_usd, amount_base_units, resource, max_timeout_seconds }    e.remediation;  // { action:'configure_payment_capability', accepted:[...],                    //   free_tier_alternative: '...' }  }}

Codes: PAYMENT_REQUIRED · PAYMENT_CAPABILITY_MISSING · PAYMENT_CONSTRUCTION_FAILED · PAYMENT_REJECTED · PAYMENT_UNSUPPORTED · BAD_402 · BAD_REQUEST · SERVER_ERROR.

Security

StillOS never asks for, receives, transmits, or stores your private key. Payment is signed entirely on your side and reaches us only as a standard x402 X-PAYMENT authorization header. Your own wallet pays your own request.

Key material is never placed in an error message, a log line, or telemetry — including when a malformed key fails to parse, where the underlying library's own error text is deliberately suppressed rather than re-thrown.

STILLOS_KYA_WALLET_KEY remains supported for the CLI and for backward compatibility. It is a legacy convenience, not the recommended architecture: prefer fetch or account in code.

CLI: STILLOS_KYA_WALLET_KEY=0x... stillos-kya check "Acme Agent"

Why signed matters

An unsigned "looks fine" is worthless if a counterparty later turns out sanctioned or fraudulent. A StillOS signed receipt is cryptographic proof that you screened before you paid — the audit artifact that protects you.

Source: README.md at commit 196e5fa

Tools

1

kya_check

Know Your Agent (KYA): screen a counterparty agent BEFORE paying it. Returns a fail-closed verdict -- CLEAR, REVIEW, or BLOCK -- from an OFAC SDN sanctions screen plus live on-chain wallet signals, with an Ed25519-signed proof-of-diligence receipt on the paid tier. Call this before any agent-to-agent payment.

Parametersnamewallet

Version history

2
  1. v0.4.3LatestSep 23, 2026
  2. v0.3.1Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.