About Frisk
Frisk is an MCP server for agents and other clients to inspect x402 payment counterparties before payment. It runs deterministic checks locally by default and returns an advisory allow, review, or block verdict with reasons.
Key features
- 01Counterparty address checks
- 02Dynamic payTo comparison
- 03Transport safety checks
- 04Spending policy checks
- 05Verdicts with reasons
Use cases
- 01Inspect an x402 recipient before payment
- 02Check that returned payTo matches the intended address
- 03Apply per-call spending and asset limits
MCP support
Exposes the screen_payment tool to MCP clients, returning a verdict, trust score, confidence, reasons, policy hits, and whether payment is allowed. Optional hosted mode adds reputation-graph signals.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y frisk-mcpFRISK_API_KEYSecretHosted API key. Without it the server screens entirely offline.FRISK_BASE_URLOverride the hosted endpoint. Defaults to https://api.tryfrisk.dev.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
1Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset | string | No | Asset symbol, e.g. USDC. |
| amount | number | No | Amount the agent is about to pay. |
| endpoint | string | No | URL that quoted the payment. Used to check transport safety. |
| maxPerCall | number | No | Spending ceiling for a single call. |
| strictness | number | No | 0 is permissive, 1 is paranoid. Defaults to 0.3. |
| counterparty | string | Yes | The address the agent intends to pay, e.g. an 0x EVM address. |
| allowedAssets | array | No | Assets the agent is permitted to pay in. |
| observedPayTo | string | No | The payTo address the endpoint actually returned for this request. If it differs from the counterparty, that is the dynamic-payTo swap. |
Details
From the project READMEfrisk-mcp
An MCP server for Frisk: screen the counterparty of an x402 payment before an agent pays it.
It exposes one tool, screen_payment, which runs Frisk's deterministic checks —
address sanity, dynamic-payTo comparison, transport safety, and your own
spending policy — and returns allow / review / block with reasons.
Where this belongs, and where it does not
An MCP tool runs when a model decides to call it. A payment check that the model can skip is a weaker guarantee than the same check on the code path that signs the payment.
So:
- Use the library —
frisk-screen— where the money actually moves. It is MIT, dependency-free, and runs locally. - Use this server for inspection ("is this address safe to pay?"), and for agents that cannot import a library.
Frisk is advisory in both cases: it returns a verdict and your code decides. It never holds funds and cannot stop a payment by itself.
Install
npx frisk-mcp
In any MCP client's server configuration:
{
"mcpServers": {
"frisk": {
"command": "npx",
"args": ["-y", "frisk-mcp"]
}
}
}
No API key, no account, no network call: with no configuration the server screens entirely on your machine.
Hosted mode (optional)
Set FRISK_API_KEY to have the same tool answered by the hosted service, which
adds reputation-graph signals and returns higher-confidence verdicts:
{
"mcpServers": {
"frisk": {
"command": "npx",
"args": ["-y", "frisk-mcp"],
"env": { "FRISK_API_KEY": "..." }
}
}
}
The hosted tier is in early access — email [email protected]. Everything above works without it.
| variable | default | meaning |
|---|---|---|
FRISK_API_KEY | unset | Enables hosted screening. Unset means fully offline. |
FRISK_BASE_URL | https://api.tryfrisk.dev | Override the hosted endpoint. |
The tool
screen_payment
| argument | type | notes |
|---|---|---|
counterparty | string, required | The address the agent intends to pay. |
endpoint | string | URL that quoted the payment; checked for plaintext transport. |
amount | number | Amount about to be paid. |
asset | string | Asset symbol, e.g. USDC. |
observedPayTo | string | The payTo the endpoint actually returned. If it differs from counterparty, that is the dynamic-payTo swap. |
strictness | number 0–1 | 0 permissive, 1 paranoid. Default 0.3. |
maxPerCall | number | Spending ceiling for one call. |
allowedAssets | string[] | Assets the agent may pay in. |
Returns verdict, trustScore, confidence, reasons, policyHits,
source (lite or hosted), and allowed.
What it does not do
It does not detect Sybil clusters, and offline it has no view of an address's
history — lite screening always reports "low" confidence for that reason. It
also cannot repair the protocol underneath a payment: replay, settlement races,
and facilitator trust live in x402 itself, not in the request being signed.
Those limits are discussed in
Five ways an x402 payment can go wrong.
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.