Koskamo

GCC Sanctions & Terror-List Screener MCP

An MCP server that screens names against OFAC, UN, EU, UK, and UAE terrorist lists with Arabic-aware matching, providing explainable scores, batch screening, and HTML audit reports for compliance and AML/CFT purposes.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

GCC Sanctions & Terror-List Screener MCP logo, by Noah's ArchVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Noah's Arch
You need:A key is a monthly plan with a usage cap that fits youWithout a key the catalogue and a few free tools work; paid tools answer 402 until a key is setRequest a key → · usually answered within a day
MCP endpoint (Streamable HTTP)
https://screen.noahsarch.tech/mcp
Vendor documentation

What its tools do

5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

5 of 5 have a description · 5 of 5 declare behavior hints · 4 of 4 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to noahsarch.tech ·
  • Passed Endpoint is on the registry namespace domain ·
  • Uptime 100% over 90 days
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Screen individual names against global sanctions lists
  • Perform batch screening of multiple entities
  • Generate HTML audit reports for compliance files
  • Explain matching scores and disambiguate names

Source and maintenance

Vendor evidenceRegistry 0.1.1

Protocol and capabilities

Server
sanctions-screener 0.1.0
MCP protocol negotiated in check
2025-06-18
Tools
5 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Screen customer, counterparty and beneficial-owner names against OFAC (SDN + Consolidated), the UN Security Council Consolidated List, the EU and UK sanctions lists and the UAE Local Terrorist List — from a bundled, versioned snapshot of the official files, with Arabic-aware deterministic matching. screen_name(name, dob?, nationality?, entity_type?, id_number?) returns scored hits (0–100) with match_strength exact/strong/possible/weak, matched_on explanations and a decision_hint: clear (no hit above min_score), review (possible hits) or likely_match (exact/strong). Pass dob and nationality whenever you have them — they are what separates a common name from a real match. screen_batch for up to 500 subjects; audit_report for a printable HTML record of the check (keep it on the client file); list_status to see how fresh each list is; explain_match to see why two names score the way they do. Arabic input works directly (e.g. 'محمد حسن آخوند'). Treat every hit as something a human must verify against the source list entry. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.

Tools

5 advertised

screen_name — Screen one name against sanctions and terror lists
Advertised by the server during the last successful anonymous check.
Advertised read-only

Screen a person, company, vessel or aircraft name against OFAC SDN + Consolidated, UN, EU, UK and the UAE Local Terrorist List. Returns up to 20 hits sorted by score with list, listed_name, aliases_matched, score, match_strength (exact / strong / possible / weak), matched_on (which alias, which normalisation, DOB / nationality / type agreement), programs, listed_on, DOBs, nationalities, id_numbers, reference and source_url, plus decision_hint. Example: name 'Mohamed Hussein Al-Tikriti', dob '1966', nationality 'IQ', entity_type 'individual'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.

screen_name input schema
{
  "type": "object",
  "title": "screen_nameArguments",
  "required": [
    "name"
  ],
  "properties": {
    "dob": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Dob",
      "default": null,
      "description": "Date of birth 'YYYY', 'YYYY-MM' or 'YYYY-MM-DD'. Year match adds, mismatch subtracts; omit if unknown."
    },
    "name": {
      "type": "string",
      "title": "Name",
      "description": "Full name to screen, Latin or Arabic script (e.g. 'Mohamed Al Rashid' or 'محمد الراشد')."
    },
    "lists": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "enum": [
              "ofac_sdn",
              "ofac_cons",
              "un",
              "eu",
              "uk",
              "uae"
            ],
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Lists",
      "default": null,
      "description": "Subset of lists to screen (default all): ofac_sdn, ofac_cons, un, eu, uk, uae."
    },
    "id_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Id Number",
      "default": null,
      "description": "Passport / national ID / registration number. An exact match on a listed number is reported as 'exact' (score 100)."
    },
    "min_score": {
      "type": "number",
      "title": "Min Score",
      "default": 85,
      "description": "Minimum score (0–100) for a hit to be returned; default 85. 80 widens the net for onboarding, 92 for alert review."
    },
    "entity_type": {
      "enum": [
        "individual",
        "entity",
        "vessel",
        "aircraft",
        "any"
      ],
      "type": "string",
      "title": "Entity Type",
      "default": "any",
      "description": "individual | entity | vessel | aircraft | any (default). Disagreement with the listed type costs 20 points."
    },
    "nationality": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Nationality",
      "default": null,
      "description": "Nationality / country of incorporation as ISO 3166-1 alpha-2 ('AE', 'IR', 'GB'). Omit if unknown."
    }
  }
}
screen_name output schema
{
  "type": "object",
  "title": "screen_nameDictOutput",
  "additionalProperties": true
}
screen_name annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
screen_batch — Screen up to 500 names in one call
Advertised by the server during the last successful anonymous check.
Advertised read-only

Each subject may carry dob, nationality, entity_type, id_number and your reference. Identical rows are screened once (charged once). Returns per-subject decision_hint, hit_count, top_score and the top 5 hits, plus summary counts (clear / review / likely_match). Charged per unique name. Example: subjects [{name:'Ali Kony', reference:'C-17'}, {name:'شركة الأمل للتجارة', entity_type:'entity'}], default_nationality 'AE'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.

screen_batch input schema
{
  "type": "object",
  "$defs": {
    "Subject": {
      "type": "object",
      "title": "Subject",
      "required": [
        "name"
      ],
      "properties": {
        "dob": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 10
            },
            {
              "type": "null"
            }
          ],
          "title": "Dob",
          "default": null,
          "description": "Date of birth 'YYYY', 'YYYY-MM' or 'YYYY-MM-DD'. Year match adds, mismatch subtracts; omit if unknown."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "maxLength": 300,
          "minLength": 1,
          "description": "Full name, Latin or Arabic script."
        },
        "id_number": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ],
          "title": "Id Number",
          "default": null,
          "description": "Passport / national ID / registration number. An exact match on a listed number is reported as 'exact' (score 100)."
        },
        "reference": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 120
            },
            {
              "type": "null"
            }
          ],
          "title": "Reference",
          "default": null,
          "description": "Your own row id / customer reference, echoed back."
        },
        "entity_type": {
          "enum": [
            "individual",
            "entity",
            "vessel",
            "aircraft",
            "any"
          ],
          "type": "string",
          "title": "Entity Type",
          "default": "any",
          "description": "individual | entity | vessel | aircraft | any (default). Disagreement with the listed type costs 20 points."
        },
        "nationality": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2
            },
            {
              "type": "null"
            }
          ],
          "title": "Nationality",
          "default": null,
          "description": "Nationality / country of incorporation as ISO 3166-1 alpha-2 ('AE', 'IR', 'GB'). Omit if unknown."
        }
      },
      "additionalProperties": false
    }
  },
  "title": "screen_batchArguments",
  "required": [
    "subjects"
  ],
  "properties": {
    "lists": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "enum": [
              "ofac_sdn",
              "ofac_cons",
              "un",
              "eu",
              "uk",
              "uae"
            ],
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Lists",
      "default": null,
      "description": "Subset of lists to screen (default all): ofac_sdn, ofac_cons, un, eu, uk, uae."
    },
    "subjects": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Subject"
      },
      "title": "Subjects",
      "description": "Up to 500 subjects (name + optional dob / nationality / entity_type / id_number / reference). Identical rows are screened once."
    },
    "min_score": {
      "type": "number",
      "title": "Min Score",
      "default": 85,
      "description": "Minimum score (0–100) for a hit to be returned; default 85. 80 widens the net for onboarding, 92 for alert review."
    },
    "default_nationality": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Default Nationality",
      "default": null,
      "description": "ISO2 applied to rows without a nationality."
    }
  }
}
screen_batch output schema
{
  "type": "object",
  "title": "screen_batchDictOutput",
  "additionalProperties": true
}
screen_batch annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
audit_report — Produce an HTML audit report of a screening
Advertised by the server during the last successful anonymous check.
Advertised read-only

Screens 1–50 subjects and returns a self-contained HTML report (result.html): timestamp, each list with its version / fetched-at / SHA-256, the inputs, every hit with its explanation, and an explicit no-match statement for clear subjects — suitable for the client's AML file (open in a browser, print to PDF). One charge per report. Example: subjects [{name:'Qusay Saddam Hussein', dob:'1966'}], case_reference 'KYC-2026-0412', prepared_by 'MLRO'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.

audit_report input schema
{
  "type": "object",
  "$defs": {
    "Subject": {
      "type": "object",
      "title": "Subject",
      "required": [
        "name"
      ],
      "properties": {
        "dob": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 10
            },
            {
              "type": "null"
            }
          ],
          "title": "Dob",
          "default": null,
          "description": "Date of birth 'YYYY', 'YYYY-MM' or 'YYYY-MM-DD'. Year match adds, mismatch subtracts; omit if unknown."
        },
        "name": {
          "type": "string",
          "title": "Name",
          "maxLength": 300,
          "minLength": 1,
          "description": "Full name, Latin or Arabic script."
        },
        "id_number": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 64
            },
            {
              "type": "null"
            }
          ],
          "title": "Id Number",
          "default": null,
          "description": "Passport / national ID / registration number. An exact match on a listed number is reported as 'exact' (score 100)."
        },
        "reference": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 120
            },
            {
              "type": "null"
            }
          ],
          "title": "Reference",
          "default": null,
          "description": "Your own row id / customer reference, echoed back."
        },
        "entity_type": {
          "enum": [
            "individual",
            "entity",
            "vessel",
            "aircraft",
            "any"
          ],
          "type": "string",
          "title": "Entity Type",
          "default": "any",
          "description": "individual | entity | vessel | aircraft | any (default). Disagreement with the listed type costs 20 points."
        },
        "nationality": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2
            },
            {
              "type": "null"
            }
          ],
          "title": "Nationality",
          "default": null,
          "description": "Nationality / country of incorporation as ISO 3166-1 alpha-2 ('AE', 'IR', 'GB'). Omit if unknown."
        }
      },
      "additionalProperties": false
    }
  },
  "title": "audit_reportArguments",
  "required": [
    "subjects"
  ],
  "properties": {
    "lists": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "enum": [
              "ofac_sdn",
              "ofac_cons",
              "un",
              "eu",
              "uk",
              "uae"
            ],
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Lists",
      "default": null,
      "description": "Subset of lists to screen (default all): ofac_sdn, ofac_cons, un, eu, uk, uae."
    },
    "subjects": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Subject"
      },
      "title": "Subjects",
      "description": "1 to 50 subjects to include in one report."
    },
    "min_score": {
      "type": "number",
      "title": "Min Score",
      "default": 85,
      "description": "Minimum score (0–100) for a hit to be returned; default 85. 80 widens the net for onboarding, 92 for alert review."
    },
    "prepared_by": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Prepared By",
      "default": null,
      "description": "Name / role of the compliance officer, printed on the report."
    },
    "case_reference": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Case Reference",
      "default": null,
      "description": "Your case / client file reference, printed on the report."
    }
  }
}
audit_report output schema
{
  "type": "object",
  "title": "audit_reportDictOutput",
  "additionalProperties": true
}
audit_report annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_status — Freshness and provenance of every bundled list
Advertised by the server during the last successful anonymous check.
Advertised read-only

Per list: entries (individuals / entities / vessels / aircraft), aliases, fetched_at, days_since_fetch (stale flag when older than 7 days), official source URL and page, SHA-256 of the downloaded file, licence/terms, and any failures of the last refresh. Free. Call it before relying on a 'clear' result in a regulated process. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.

list_status input schema
{
  "type": "object",
  "title": "list_statusArguments",
  "properties": {}
}
list_status output schema
{
  "type": "object",
  "title": "list_statusDictOutput",
  "additionalProperties": true
}
list_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
explain_match — Show why two names do or don't match
Advertised by the server during the last successful anonymous check.
Advertised read-only

Normalises both names step by step (Unicode, Arabic letter folding, honorifics/particles dropped, merged 'Abdul…' forms split, romanisation variants folded) and returns every score component (token_sort, token_set, Jaro-Winkler, subset, or the cross-script skeleton) and the resulting score / strength. Free. Example: name_a 'Abd al-Rahman Al Shaikh', name_b 'عبدالرحمن الشيخ'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.

explain_match input schema
{
  "type": "object",
  "title": "explain_matchArguments",
  "required": [
    "name_a",
    "name_b"
  ],
  "properties": {
    "name_a": {
      "type": "string",
      "title": "Name A",
      "description": "First name to compare (Latin or Arabic)."
    },
    "name_b": {
      "type": "string",
      "title": "Name B",
      "description": "Second name to compare (Latin or Arabic)."
    }
  }
}
explain_match output schema
{
  "type": "object",
  "title": "explain_matchDictOutput",
  "additionalProperties": true
}
explain_match annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

2 advertised

data_version — Data version

Advertised by the server during the last successful anonymous check.

Current data/rules version.

data_version URI
sanctions-screener://data-version

MIME type: text/plain

metrics — Aggregate metrics

Advertised by the server during the last successful anonymous check.

Aggregate counters only (tool, status, latency bucket). No queries are logged.

metrics URI
sanctions-screener://metrics

MIME type: text/plain

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

100% (20 of 20 checks answered)

  1. 2026-11-02: 3 of 3 checks answered
  2. 2026-11-03: 4 of 4 checks answered
  3. 2026-11-04: 4 of 4 checks answered
  4. 2026-11-05: 4 of 4 checks answered
  5. 2026-11-06: 4 of 4 checks answered
  6. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2527 ms
95th percentile latency
2527 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2527 ms · metadata changed · 5 tool(s), 2 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http gcc-sanctions-terror-list-screener-mcp https://screen.noahsarch.tech/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add gcc-sanctions-terror-list-screener-mcp --url https://screen.noahsarch.tech/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable gcc-sanctions-terror-list-screener-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "gcc-sanctions-terror-list-screener-mcp": {
      "url": "https://screen.noahsarch.tech/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "gcc-sanctions-terror-list-screener-mcp": {
      "type": "streamableHttp",
      "url": "https://screen.noahsarch.tech/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start gcc-sanctions-terror-list-screener-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "gcc-sanctions-terror-list-screener-mcp": {
      "type": "http",
      "url": "https://screen.noahsarch.tech/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http gcc-sanctions-terror-list-screener-mcp https://screen.noahsarch.tech/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://screen.noahsarch.tech/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "gcc-sanctions-terror-list-screener-mcp": {
      "serverUrl": "https://screen.noahsarch.tech/mcp"
    }
  }
}

Let your agent find its tools

Find servers like GCC Sanctions & Terror-List Screener MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run GCC Sanctions & Terror-List Screener MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing