<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Prune</title>
    <description>The latest articles on DEV Community by Prune (@y_ustsinovich).</description>
    <link>https://dev.to/y_ustsinovich</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1225947%2Fd7483d9a-5d4e-4cd7-926e-c93794c06a55.webp</url>
      <title>DEV Community: Prune</title>
      <link>https://dev.to/y_ustsinovich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/y_ustsinovich"/>
    <language>en</language>
    <item>
      <title>Five registries, one prompt: Polish accounting firm's AML/KYC checks - KRS, CEIDG, CRBR, and sanctions screening - in one prompt.</title>
      <dc:creator>Prune</dc:creator>
      <pubDate>Thu, 27 Aug 2026 20:00:00 +0000</pubDate>
      <link>https://dev.to/y_ustsinovich/five-registries-one-prompt-polish-accounting-firms-amlkyc-checks-krs-ceidg-crbr-and-20kk</link>
      <guid>https://dev.to/y_ustsinovich/five-registries-one-prompt-polish-accounting-firms-amlkyc-checks-krs-ceidg-crbr-and-20kk</guid>
      <description>&lt;p&gt;&lt;em&gt;How an AI assistant can check a client against Poland's company register, VAT list, beneficial-owner registry, and sanctions lists - and hand you a ready-to-file compliance document before your coffee gets cold.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;registries and lists to check by hand for every new client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;~60–90 min&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;what a thorough manual check of one company usually takes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;prompt to an AI assistant to get a finished risk card&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  An obligation nobody enjoys
&lt;/h2&gt;

&lt;p&gt;Under Polish AML law, an accounting firm is an "obligated institution" - the same legal category as banks and notaries, just a lot smaller - regardless of whether it serves a one-person business or a company with foreign shareholders.&lt;/p&gt;

&lt;p&gt;In practice that means mandatory customer due diligence before you can even start working with a client: identify the entity, establish its beneficial owner, screen it against sanctions and PEP lists, and produce a documented risk assessment.&lt;/p&gt;

&lt;p&gt;Done by hand, that looks like: one tab for the court register (KRS), a second for the VAT payer list, a third for the beneficial-owners registry - which happens to sit behind a CAPTCHA — a fourth for some sanctions list, and a fifth: a blank document where all of it has to be stitched into something coherent. At ten new clients a month, that's realistically a full day of work that is neither bookkeeping nor advisory — it's just copying data between&lt;br&gt;
systems.&lt;/p&gt;

&lt;p&gt;And if the regulator's audit turns up a missing or incomplete file, the Act allows administrative fines of up to &lt;strong&gt;EUR 1,000,000&lt;/strong&gt;. In practice, small firms typically see something closer to &lt;strong&gt;PLN 15,000–25,000&lt;/strong&gt; (roughly EUR 3,500–6,000) - plus something that stings more than the fine itself: the firm's name published in the public register of violations.&lt;/p&gt;
&lt;h2&gt;
  
  
  One conversation instead of five tabs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Ustingit/Ustin.Integrations.AML.Poland.Mcp" rel="noopener noreferrer"&gt;AML Poland MCP&lt;/a&gt; connects an AI assistant — Claude, for instance — directly to the registries you already have to use. Instead of clicking through pages, you just ask.&lt;/p&gt;

&lt;p&gt;Under the hood, it's an implementation of &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;, the open standard that lets a language model reach for real data instead of guessing. This particular server gives an assistant four concrete tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;verify_company_basic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Registry status (court register or sole-trader register), legal form, address, board members, VAT payer status, and reported bank accounts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fetch_crbr_beneficiaries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Beneficial owners from Poland's Central Register of Beneficial Owners — name, citizenship, and the nature of their control.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;screen_sanctions_and_pep&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Screens a person against EU/UN/OFAC sanctions lists and the Polish national list, plus PEP (politically exposed person) status.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generate_aml_risk_card&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ties all of the above together, computes the risk level and required procedure (standard or enhanced diligence), and generates the finished document — Markdown or PDF.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In a conversation, it looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; Check client NIP 7740001454 for AML and generate a risk card.

Checking the court register, the VAT list, the beneficial-owners
registry, and sanctions lists. Here's the summary:

  Name              ORLEN SPÓŁKA AKCYJNA
  Registry status   Active
  VAT status        Active payer
  Beneficial owners manual check required (CAPTCHA)

  Risk level        Medium
  Procedure         Standard
  Document          risk_card.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's not a made-up example - it's the exact result the server returns for a real NIP, checked live against the public registries while this tool was being tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens under the hood
&lt;/h2&gt;

&lt;p&gt;No database of its own, no middleman that could go stale. Every query goes straight to the official source.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Accounting firm
      │
      ▼
AI assistant  (Claude + MCP)
      │
      ▼
KRS / CEIDG · VAT White List · CRBR (UBO) · Sanctions &amp;amp; PEP
      │
      ▼
Risk card  (PDF / Markdown)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four tools reach into five official sources — the Ministry of Justice (the KRS company register), the Ministry of Finance (the VAT White List and the CRBR beneficial-owners registry), Poland's Ministry of Interior (its national sanctions list), and the &lt;a href="https://www.opensanctions.org/" rel="noopener noreferrer"&gt;OpenSanctions&lt;/a&gt; aggregator (EU/UN/OFAC sanctions plus global PEP data) - and a risk engine combines the results into one assessment, following the Act's own thresholds: any sanctions or PEP hit automatically raises the risk to high and triggers enhanced due diligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this tool does &lt;em&gt;not&lt;/em&gt; pretend to do
&lt;/h2&gt;

&lt;p&gt;Public registries have real limitations - and we'd rather the tool say so plainly than quietly skip a step.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CRBR&lt;/strong&gt; — The public beneficial-owners search is protected by an invisible Google CAPTCHA. This tool &lt;strong&gt;does not attempt to bypass it&lt;/strong&gt; - instead it clearly reports that a given entity needs manual verification, with a link to the official search UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KRS&lt;/strong&gt; — The public company-register API masks board members' personal data (e.g. &lt;code&gt;J*****&lt;/code&gt;). Full identification still has to rest on the representative's ID document anyway
— the tool flags this itself instead of falsely reporting "all clear."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CEIDG&lt;/strong&gt; — The sole-trader register requires its own API token (free after registration). Without it, company checks work normally and the sole-trader check is simply skipped — with a clear note explaining why.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A finished document, not raw data
&lt;/h2&gt;

&lt;p&gt;Every check ends in a &lt;strong&gt;Client AML Risk Assessment Card&lt;/strong&gt; - the exact document a firm has to keep on file anyway, just already written.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Markdown&lt;/strong&gt; - to paste into an internal system, edit further, or feed into your own automation. Plain text, no locked-in format.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF&lt;/strong&gt; - to sign, print, and send to the client. Full Polish diacritics render correctly - even inside the bank-account table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The document defaults to Polish, since that's the language a Polish firm's records are kept in, but every tool takes a language parameter - switch it to English with a single word if a client or auditor needs that. The server itself stores nothing: no client database, no query history beyond your own environment. The five-year retention duty stays exactly where it should: with the firm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An independent accounting firm&lt;/strong&gt; - install it once in Claude Desktop or Claude Code, and from then on every new client is one prompt, not thirty minutes of clicking through registries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An accounting-software vendor&lt;/strong&gt; - the code is open (MIT license) and embeddable as an integration inside a platform like Comarch Optima, inFakt, or wFirma - an AML module as a built-in feature, not one more browser tab.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Five registries. One prompt. The rest is coffee.
&lt;/h2&gt;

&lt;p&gt;The source is fully open on GitHub — browse it, run it locally, or self-host it so client data never leaves your own infrastructure except for calls to the official registries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Ustingit/Ustin.Integrations.AML.Poland.Mcp" rel="noopener noreferrer"&gt;→ View the repository on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MIT License · Python + FastMCP · data from KRS, CEIDG, the Finance Ministry's White List, CRBR, OpenSanctions, and the MSWiA list.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AML Poland MCP is an open tool for accounting firms. It does not replace the judgment of a designated AML/compliance officer.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>poland</category>
    </item>
  </channel>
</rss>
