Screen names against the US Consolidated Screening List: OFAC SDN, BIS Entity List + 10 more, keyless
Three well-named, read-only tools with clear descriptions (194 - 392 chars, within baseline). All tools have explicit input schemas with typed properties and descriptions. sanctions_screen has comprehensive parameter documentation (name, list, type, country, limit); sanctions_entry documents uid and entity_number; sanctions_lists is minimal but appropriate for a no-arg tool. Output shaping is present (shapeMatch function strips internal fields, caps alt_names to 8, addresses to 3, remarks to 300 chars). Error handling returns structured {error, message} objects with actionable guidance. Main gaps: no output schema documentation in tool definitions, no enum constraints on list/type/country parameters (LLMs may hallucinate invalid values), no pagination support despite potentially large result sets, and no tool annotations (readOnlyHint, idempotentHint) in the schema.
Get the full Consolidated Screening List record for one entry by its uid (from sanctions_screen results, e.g. "SDN:12345") or by OFAC entity number. Returns every field: all aliases, addresses, identity documents (passports, tax IDs, IMO numbers, crypto wallet addresses), sanction programs, license requirements, Federal Register notice, vessel details, and remarks.
List the 12 US restricted-party lists covered by the Consolidated Screening List with entry counts and data freshness (last sync time). Use to cite coverage in a compliance report: OFAC SDN/SSI/CMIC, BIS Entity List/DPL/UVL/MEU, State ITAR-Debarred/ISN, and more.
Screen a person, company, vessel, or aircraft name against the US Consolidated Screening List — OFAC SDN sanctions, Sectoral Sanctions (SSI), Chinese Military-Industrial Complex (CMIC), BIS Entity List / Denied Persons / Military End User, State ITAR Debarred, and 5 more US restricted-party lists (~26k entries, synced daily). Fuzzy name matching with a 0-1 relevance score, matched aliases, programs, addresses, and which list each hit is on. Use for KYB / KYC / AML / export-control compliance checks. Returns an empty matches array when the name is clear.
No enum constraints on list, type, country parameters. sanctions_screen accepts 'list' as free-form string; should declare enum: [SDN, SSI, CMIC, NS-MBS, CAP, PLC, EL, DPL, UVL, MEU, DTC, ISN]. LLMs will hallucinate invalid values without formal constraints.
Output schemas not documented in tool definitions. LLMs cannot plan downstream calls or extract fields without knowing the response structure. shapeMatch() shapes the response, but the schema is invisible to callers.
No pagination support. sanctions_screen returns up to 50 matches (enforced via Math.min/max), but no next_cursor, offset, or total_count. Large result sets risk context window exhaustion; no way to iterate through all matches.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
No tool annotations in inputSchema. sanctions_screen and sanctions_entry are read-only and idempotent, but lack readOnlyHint and idempotentHint annotations. Agents cannot infer safety properties without explicit hints.
Supabase credentials injected via _supabaseUrl and _supabaseKey in args. While not exposed as user-facing parameters, this pattern couples the tool to a specific backend. Consider documenting the injection mechanism and validating credentials early.