MCP server for Frisk: screen an x402 payment counterparty before an agent pays.
Single tool 'screen_payment' has a well-structured schema with 8 parameters, all typed and described. Tool description is clear and contextual (changes based on mode: hosted vs offline). Input schema uses Zod with proper type constraints (min/max for strictness, array for allowedAssets). However, output schema is not documented in the source, only a ScreenResult type is imported from frisk-screen library without visible field definitions. Error handling is minimal; no recovery guidance or actionable error messages visible. Tool naming is verb-noun compliant ('screen_payment'). Parameter descriptions are adequate (72 chars average) but lack format/constraint details in some cases (e.g., 'counterparty' should specify EVM address format more explicitly).
Screen a counterparty an agent is about to pay. Runs the local deterministic checks and the hosted reputation graph, and returns allow / review / block with reasons. Advisory: the caller decides.
Output schema not documented. ScreenResult type is imported but fields (verdict, trustScore, confidence, source, reasons, policyHits) are not visible in the MCP server definition. LLMs cannot plan downstream actions without knowing what fields to expect.
No error handling guidance. Tool can fail (invalid address, API timeout, policy violation) but no recovery hints provided. LLM receives raw errors with no actionable next steps.
Parameter 'counterparty' description says 'e.g. an 0x EVM address' but does not specify format constraints (length, checksum validation, chain context). LLMs may pass invalid addresses.
No idempotency guarantee documented. Tool modifies state (screens against reputation graph, may log to hosted service) but does not declare idempotent behavior. Agents retrying on ambiguous failures risk duplicate screening records.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2025-06-18+ | v2 |
Tool description mentions 'Advisory: the caller decides' but does not explain what the LLM should do with each verdict (allow/review/block). Guidance on decision-making is missing.