publicaml
Server Details
Free crypto AML/KYT screening for BTC/ETH/BSC/TRON — risk score, sanctions, source of funds.
- Status
- Healthy
- Uptime
- 100.0% over 43 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- saloprj/publicaml-examples
- GitHub Stars
- 0
TDQS
Scored across 7 tools
Most tools target distinct resources/actions (screen_address vs screen_transaction, trace_funds vs trace_source_of_funds), but screen_address's 'source-of-funds' output overlaps with trace_source_of_funds, and list_transactions includes counterparty info that list_counterparties also provides. These overlaps could lead to misselection for source-of-funds or counterparty queries.
All tools use snake_case with a consistent verb_noun structure (follow_swap, list_counterparties, screen_address, trace_funds, etc.). No deviations in case or verb style.
Seven tools is well-scoped for a read-only AML API, covering screening, tracing, and listing without redundancy. Each tool has a clear investigative purpose.
The surface covers core AML workflows: address/transaction screening, outbound/inbound tracing, transaction/counterparty listing, and swap following. However, it lacks bulk screening, paginated full-history retrieval, or detailed entity profiles, which are minor gaps for thorough investigations.
Available Tools
7 toolsfollow_swapFollow funds through a swapARead-onlyIdempotentInspect
For one transaction that went through a DEX or aggregator, show the net balance change per address and asset and flag who the swap was actually for. Use it to continue a trace past a swap. EVM chains (ethereum, bsc). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | ethereum or bsc. | |
| tx_hash | Yes | 0x-prefixed transaction hash. | |
| block_number | No | Optional. Looked up automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered and the repeated 'Read-only' is redundant. The description still adds real behavioral scope: the tool is conditioned on DEX/aggregator transactions and limited to EVM chains, and it explains the interpretive output ('flag who the swap was actually for'). It does not describe failure behavior for non-swap inputs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core behavior, then usage, then scope, then a safety note. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully sketches what comes back (per-address, per-asset net balance delta plus a 'who was the swap for' flag) and the chain scope. The only gap is how it behaves on a transaction that never touched a DEX or aggregator.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only 3 simple parameters (tx_hash, chain, optional block_number), so the schema already carries the parameter burden. The description adds no syntax, format, or resolution details beyond what the schema states, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('show the net balance change per address and asset') plus the trigger condition ('one transaction that went through a DEX or aggregator'), which separates it from the broader trace_funds/trace_source_of_funds siblings. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to continue a trace past a swap' ties usage directly to the trace family, and the EVM chain constraint (ethereum, bsc) narrows applicability. No explicit when-not or guidance on what to do for non-DEX transactions, so it stops just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_counterpartiesList counterpartiesARead-onlyIdempotentInspect
List the counterparties an address has transacted with — optionally filtered by entity category (cex, mixer, gambling, bridge, ...). Set with_risk=true to attach AML risk per counterparty. Read-only: it only lists existing on-chain counterparties, it never writes anything.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Blockchain: bitcoin, ethereum, bsc or tron. | |
| limit | No | Max counterparties to return. | |
| address | Yes | The wallet whose counterparties to look at. | |
| category | No | Optional. Only return counterparties of this entity type: cex, mixer, gambling, bridge, etc. Leave empty to list all significant counterparties. | |
| with_risk | No | Attach aml_score/risk_level/sanctioned to each counterparty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the closing 'Read-only ... never writes anything' sentence largely restates structured data rather than adding new context. The genuinely additive behavioral detail is that with_risk attaches AML scoring metadata, which is useful but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and followed by the optional modifiers. The trailing read-only clause is somewhat redundant given the annotations, but the overall structure is tight and waste-free.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter read tool with no output schema, the description covers the purpose, both optional behaviors, and the safety profile. It omits how 'significant counterparties' is defined and gives no hint at result shape or pagination, but the annotations and 100% schema coverage carry most of the remaining burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including the category enum values and with_risk semantics. The description's mention of category examples and the risk flag duplicates that, adding no format, default, or boundary detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('List the counterparties an address has transacted with') and clarifies the filtering scope, so an agent can distinguish it from list_transactions or trace_funds. It stops short of naming any sibling explicitly for disambiguation, which keeps it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how to use the optional arguments ('filtered by entity category', 'Set with_risk=true to attach AML risk'), which implies usage, but never states when to choose this tool over trace_funds or list_transactions. The reader must infer the scenario from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transactionsList an address's transfersARead-onlyIdempotentInspect
A wallet's recent transfers, newest first, with direction and counterparty for each, plus what we know about each counterparty. Optionally only transfers with one kind of counterparty (e.g. 'did this wallet deposit to a casino'). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Blockchain: bitcoin, ethereum, bsc or tron. | |
| limit | No | Max transfers to return. Default 25. | |
| since | No | Optional start date, ISO-8601 (e.g. 2026-09-01). | |
| until | No | Optional end date, ISO-8601. | |
| address | Yes | The wallet to list. | |
| counterparty_category | No | Optional. Only transfers whose counterparty is of this type: cex, mixer, gambling, bridge, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), so the description isn't burdened with that. It usefully adds ordering semantics ("newest first") and discloses the shape of each returned item (direction, counterparty, counterparty metadata), which is real value beyond structured fields; it stops short of describing truncation or pagination when limit is exceeded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the resource and ordering front-loaded, followed by the optional filter and its rationale. No filler and nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with 100% schema coverage and no output schema, the description compensates by describing what each returned transfer contains. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description earns above baseline by framing what counterparty_category actually answers for the caller, adding intent-level meaning beyond the schema's "Only transfers whose counterparty is of this type." Other params (since/until/limit) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and operation: a wallet's recent transfers, newest first, with per-transfer direction and counterparty. It distinguishes itself from tracing/screening siblings implicitly (transfer listing with counterparty enrichment) but never names an alternative, so the differentiation is inferential.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete usage case for the optional filter ("did this wallet deposit to a casino"), which implies the general when-to-use. However, it offers no exclusions and no routing against siblings like list_counterparties or trace_funds, so an agent must infer which tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_addressScreen address for AML riskARead-onlyIdempotentInspect
Screen a crypto wallet address for AML/KYT risk. Returns an AML score (0-100), risk_level (LOW/MEDIUM/HIGH/CRITICAL), category, sanctioned exposure and source-of-funds. Read-only: it only looks the address up, it never changes anything.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Blockchain: bitcoin, ethereum, bsc or tron. | |
| address | Yes | The wallet address to screen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, and the description's read-only sentence largely restates them. However, it earns credit by disclosing the return shape (AML score 0-100, risk_level, category, sanctioned exposure, source-of-funds) in the absence of any output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the purpose and closing on output fields. The read-only clause is slightly redundant against the annotations but is short and harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only two required params, the description covers both the operation and the key return values, which is most of what an agent needs. It could still note supported chains or error behavior, but the schema already carries the chain enum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters and the chain enum fully documented in the schema, so the description adds no syntax or format detail beyond it. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Screen a crypto wallet address for AML/KYT risk') and enumerates what it returns. The address-level scope implicitly separates it from the sibling screen_transaction, so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the AML/KYT framing, but the description never says when to pick this over screen_transaction or trace_source_of_funds, nor does it state prerequisites or exclusions. Adequate but with a clear routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_transactionScreen a transactionARead-onlyIdempotentInspect
Screen one transaction by hash: what moved, who took part, a label and AML risk for every participant, and an overall verdict. Pass focus_address (e.g. your own deposit address) to get the verdict from that wallet's point of view. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Blockchain: bitcoin, ethereum, bsc or tron. | |
| tx_hash | Yes | Transaction hash (0x-prefixed on EVM chains, bare hex txid on bitcoin). | |
| block_number | No | Optional. Looked up automatically on ethereum and bsc. | |
| focus_address | No | Optional. The wallet you are screening for, to scope the verdict to it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered and 'Read-only' merely repeats it. The description does add useful substance by specifying what the response contains (per-participant AML risk, labels, verdict), but says nothing about auth, cost, latency, or what happens when a hash is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then output contents, then the focus_address hint. Efficient overall, though the trailing 'Read-only.' duplicates readOnlyHint and earns no new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by naming the returned artifacts (movements, participants, labels, risk, verdict). Combined with a fully documented 4-param schema and rich annotations, an agent has enough to call it correctly; only failure/edge-case behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including focus_address scoping the verdict. The description's example ('your own deposit address') and 'from that wallet's point of view' add only marginal clarification over the schema wording, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Screen one transaction by hash') and then enumerates the payload the agent gets back: movements, participants, labels, AML risk, overall verdict. This is clearly distinguishable from sibling screen_address, which operates on an address rather than a tx.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete usage cue for focus_address ('e.g. your own deposit address... to get the verdict from that wallet's point of view'), which is genuinely helpful. But it never says when to prefer this over screen_address or trace_funds, and offers no prerequisites or exclusions, so usage is only partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_fundsTrace outgoing fundsARead-onlyIdempotentInspect
Follow the OUTGOING funds from an address across the chain and report where the money ends up (exchanges, mixers, sanctioned wallets) and how many hops away. Read-only: it only reads on-chain history, it never moves or changes funds.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Blockchain: bitcoin, ethereum, bsc or tron. | |
| address | Yes | The address whose outgoing funds to follow. | |
| max_hops | No | How many hops to follow. Default 3 (6 on bitcoin); raise it only if the result is incomplete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and idempotentHint=true, so the description's "Read-only... never moves or changes funds" largely restates structured data. It does add some value by disclosing what the trace surfaces (exchanges, mixers, sanctioned wallets, hop counts), but says nothing about runtime cost, rate limits, or how partial/deep traces behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and its output. The trailing "it never moves or changes funds" duplicates the annotation and is internally redundant with "Read-only," which is the only minor waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully characterizes the return (destinations and hops). Combined with 100% schema coverage and explicit read-only annotations, an agent has enough to call it correctly, though performance or partial-result behavior for deep traces remains unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so chain, address, and max_hops (including the default and the 1-12 range) are already fully documented in the schema. The description only alludes to hop distance and adds no format or syntax detail beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Follow the OUTGOING funds from an address") and states what it produces (destination categories and hop distance). The capitalized "OUTGOING" directly contrasts with the sibling trace_source_of_funds, so an agent can pick the right direction without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The direction emphasis implies when this tool applies, but it never names trace_source_of_funds or any alternative, nor does it state exclusions such as supported-chains-only or when to prefer screen_address. Usage is left to inference from the OUTGOING framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_source_of_fundsTrace where funds came fromARead-onlyIdempotentInspect
Walk an address's INCOMING funds backwards to answer 'where did this wallet's money come from'. Stops at labelled entities (exchanges, mixers, services) and reports them with hop distance. Answers source-of-funds questions. Read-only: it only reads on-chain history.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Blockchain: bitcoin, ethereum, bsc or tron. | |
| address | Yes | The address whose funding to trace. | |
| max_hops | No | How far back to walk. Default set by the API. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description adds real behavioral context beyond them: tracing halts at labelled entities (exchanges, mixers, services) and results carry hop distance, which tells the agent how far the walk goes and what it returns. It does not mention rate limits or cost, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core mechanic and terminated with the direction constraint. The sentence 'Answers source-of-funds questions' largely restates the preceding clause, a minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully discloses the shape of the result (labelled entities plus hop distance) and the stopping condition, which is what an agent needs. It stops short of describing result ordering or how deep traces behave at the max_hops boundary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so chain, address and max_hops are already documented with the enum values and the 1-8 bound. The description only alludes to hop-walking ('walk backwards') without adding format or default guidance beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('walk an address's INCOMING funds backwards') and defines the terminal scope ('stops at labelled entities... with hop distance'). The emphasis on incoming/backwards direction functionally distinguishes it from the sibling trace_funds, so an agent can pick the right tracer without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case: 'Answers source-of-funds questions' and 'where did this wallet's money come from'. That is a clear when-to-use context, but no exclusions or sibling alternatives (e.g. trace_funds for the opposite direction) are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- Added
follow_swap - Changed
list_counterparties1 field changed- changed
Input schema / properties / category / descriptionPrevious value: -"Entity type to match: cex, mixer, gambling, bridge, etc."New value: +"Optional. Only return counterparties of this entity type: cex, mixer, gambling, bridge, etc. Leave empty to list all significant counterparties."
- Added
list_transactions - Added
screen_transaction - Changed
trace_funds1 field changed- changed
Input schema / properties / max_hops / descriptionPrevious value: -"How many hops to follow. Default 5 (8 on bitcoin)."New value: +"How many hops to follow. Default 3 (6 on bitcoin); raise it only if the result is incomplete."
- Added
trace_source_of_funds
3 tool updates
- First observed
list_counterparties - First observed
screen_address - First observed
trace_funds
Related MCP Connectors
Pre-transaction risk screening for Ethereum addresses: signed score, sanctions, audit trail.
Free crypto scam checks: token and contract risk, scam or sanctioned addresses, phishing links.
Blockchain intelligence for tracing funds, screening addresses, and investigating on-chain activity.
OFAC and global sanctions screening: crypto addresses, emails, websites, IDs, countries, VPN, geo
Related MCP Servers
AlicenseAqualityBmaintenanceEnables blockchain AML screening of addresses in plain language inside any MCP client, covering sanctions and freeze checks, risk scoring, fund tracing, and counterparty classification across bitcoin, ethereum, bsc, and tron. Works without an account, with an optional API key that lifts rate limits and unlocks outgoing tracing.339 npmMIT- AlicenseNot gradedqualityCmaintenanceEnables AML screening of blockchain addresses against OFAC SDN lists and chain heuristics, returning risk scores and flags.MIT

traql MCP serverofficial
AlicenseAqualityAmaintenanceEnables AI agents to perform AML and compliance risk scoring for crypto addresses and transactions on Ethereum, BSC, TRON, TON, and Bitcoin, returning 0–100 risk scores, bands, flags, and detailed signals.250 npmMIT- AlicenseBqualityBmaintenanceProvides on-chain forensic checks for evaluating transaction risks, including token verification, rug-pull detection, and fund tracing, using public blockchain endpoints.1239 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.