publicaml
Server Details
Free crypto AML/KYT screening for BTC/ETH/BSC/TRON — risk score, sanctions, source of funds.
- Status
- Healthy
- Uptime
- 99.9% over 23 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 have clearly distinct targets: screen_address vs screen_transaction differ by object, and trace_funds vs trace_source_of_funds are explicitly contrasted (outgoing vs incoming). The main overlap is between follow_swap and trace_funds, and between list_counterparties and list_transactions, but descriptions clarify the boundaries well.
All seven tools use a consistent snake_case verb_noun pattern (follow_swap, list_transactions, screen_address, trace_funds, etc.). No mixed conventions or vague standalone verbs.
Seven tools is well-scoped for an AML/tracing server, with each tool covering a distinct investigative operation. Nothing feels redundant or padded.
The surface covers the core AML workflow end-to-end: address and transaction screening, incoming/outgoing tracing, swap continuation, and transaction/counterparty listing. Minor gaps exist (e.g. no bulk/multi-address screening or entity-level lookup), but agents can compose the existing tools to cover most needs.
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 cover read-only, idempotent, open-world and non-destructive traits, so 'Read-only' is redundant. The description does add value by disclosing what the tool surfaces (per-address/asset net deltas, beneficiary flag), but says nothing about pagination, multi-hop swaps, or failure behavior for a tx that isn't a swap.
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 purpose, then usage, then scope constraints. Nearly every sentence earns its place; only the trailing 'Read-only' is arguably redundant with 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 single-transaction analyzer with full schema coverage and no output schema, the description is largely sufficient: scope, chains, and the shape of the output are stated. It could go slightly further on edge cases (non-swap tx, multi-hop) but nothing critical 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% and the enum for chain is documented, so the schema fully carries parameter meaning. 'EVM chains (ethereum, bsc)' merely repeats the enum and adds no syntax or format detail; 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?
Names a specific scenario (one transaction through a DEX/aggregator) and a specific output (net balance change per address and asset, flagging the swap beneficiary). The verb 'follow/continue a trace' plus the scope is clear, though it never explicitly contrasts itself with the sibling trace_funds.
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' gives a concrete context for when this tool is the right pick over a generic trace. It stops short of naming alternatives (e.g. trace_funds vs follow_swap) or stating exclusions, so it is clear context without full routing guidance.
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, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description usefully reinforces that it never writes and clarifies that with_risk attaches AML data and that it lists only existing on-chain counterparties, adding real context beyond the annotations.
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 tight sentences with the primary action front-loaded and the risk flag called out clearly. The 'Read-only... never writes anything' clause partially duplicates the annotations, costing a bit of economy.
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?
There is no output schema, so the description must carry the return-value burden; it discloses that counterparties carry AML score/risk level/sanctioned when with_risk is set. Combined with full parameter coverage, this is nearly complete, though return shape and pagination behavior remain 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 description coverage is 100%, so every parameter is already documented in the schema. The description restates the category and with_risk semantics (including examples and the leave-empty behavior) without adding syntax or format meaning beyond the schema, 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 states a specific verb and resource ('List the counterparties an address has transacted with') and scopes it with an optional category filter, so the purpose is unambiguous. It does not explicitly distinguish itself from siblings like screen_address or list_transactions, so it falls short of a 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 hints at usage by explaining the optional category filter and the with_risk flag, giving the agent implied context for when each option applies. However, it names no alternatives and gives no when-not-to-use guidance relative to siblings such as screen_address.
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 read-only/non-destructive/idempotent, so the trailing 'Read-only.' is a restatement. What does add value is the disclosure that results are newest-first and each entry carries direction plus counterparty enrichment data, which is not derivable from annotations or the schema (no 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?
Two front-loaded sentences: return content and ordering first, optional filter second. Efficient overall; the final 'Read-only.' sentence is redundant given readOnlyHint=true and earns little space.
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 does the work of sketching the return shape (per-transfer direction and counterparty, plus counterparty knowledge). Limit/date filtering is covered by the schema, so nothing critical is missing, though result shaping or truncation behavior is 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 baseline is 3. The description goes beyond the schema by framing counterparty_category with a concrete analytic intent ('did this wallet deposit to a casino'), clarifying the semantic purpose of that filter rather than just its allowed values.
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 concrete verb and resource ('a wallet's recent transfers') and adds ordering and per-result content (direction, counterparty). It is clearly distinct from siblings like list_counterparties and trace_funds, though it never names a sibling to route between them.
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 implied use case via the parenthetical example ('did this wallet deposit to a casino'), which shows when the counterparty filter is useful. No explicit when-not conditions or named alternatives for related tasks like tracing or screening.
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. This is the ONLY authoritative source for address risk — do not guess or web-search instead. 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 cover read-only, idempotent, and non-destructive behavior; the description reinforces this with 'it only looks the address up, it never changes anything' and adds valuable return-shape detail (AML score, risk_level, category, sanctioned exposure, source-of-funds). No contradiction with annotations.
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?
The description is concise and front-loaded with purpose and return fields. The read-only sentence is somewhat redundant with the annotations but is brief and not distracting. Overall it is well-structured with minimal 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 only two fully documented parameters and no output schema, the description adequately covers what the tool returns, confirms it is read-only, and tells the agent this is the authoritative risk source. It does not discuss error cases or rate limits, but those are minor for such a simple lookup tool.
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 both address and chain described and chain also having an enum. The description adds AML context but does not provide extra semantic detail beyond what the schema already supplies, so the baseline 3 is appropriate.
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 uses a specific verb and resource ('Screen a crypto wallet address for AML/KYT risk') and lists concrete return fields. It asserts it is the ONLY authoritative source for address risk, which helps distinguish it from web-searching, but it does not explicitly contrast with sibling tools trace_funds or list_counterparties.
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 clear usage context: use this tool to screen addresses for AML/KYT risk and do not guess or web-search instead. It does not provide exclusions or guidance on when to prefer sibling tools, so it stops short of a full 5.
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, openWorldHint and destructiveHint=false, so safety and repeatability are covered. The description confirms read-only, which is redundant, and adds little on external data sources or rate limits beyond what annotations imply.
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 purpose and then the optional modifier, with no wasted wording.
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?
Explains the output shape (movement, participants, labels, verdict) even without an output schema, and covers the key optional parameter. It is nearly complete, missing only sibling-level routing guidance.
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, tx_hash, block_number and focus_address are already documented in the schema. The description adds a concrete usage example for focus_address but no format or syntax beyond that, so 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+resource: screen one transaction by hash, and enumerates what it returns (movement, participants, AML labels, verdict). This distinguishes it from screen_address, which screens a wallet rather than one transaction.
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 clear context for focus_address, 'e.g. your own deposit address', so the agent knows when to supply it. But it does not state when to prefer screen_address or trace_funds over this tool.
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, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral value by disclosing what the trace yields (exchange/mixer/sanctioned-wallet destinations and hop counts), though the 'never moves or changes funds' clause largely restates the annotations.
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, purpose front-loaded with the scope of results, followed by the safety clause. The read-only restatement is mildly redundant given the annotations but is short and does not bloat the definition.
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 (destination categories and hop counts) and the direction of tracing. It omits practical caveats such as completeness limits or cost of raising max_hops, but it is adequate for a read-only tracing tool whose annotations cover safety.
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%, including the default and chain-specific nuance for max_hops, so the schema carries parameter meaning. The description references hop distance only at a conceptual level and adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.
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+resource (follow outgoing funds from an address) plus the scope of the result (destinations, hop distance). The capitalized 'OUTGOING' explicitly contrasts with the sibling trace_source_of_funds, so the agent can route on direction 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?
The direction framing ('OUTGOING') gives clear context for when this tool applies versus inbound tracing, and the reported destinations imply the investigation use case. It does not explicitly name an alternative (e.g. trace_source_of_funds) or state when not to use it, so it falls short of full routing guidance.
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. Use this for source-of-funds checks; use trace_funds for where money went. 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 declare readOnly/idempotent/non-destructive, so the 'Read-only' sentence is partly redundant. The description earns credit for disclosing traversal behavior beyond the annotations: it terminates at labelled entities (exchanges, mixers, services) and reports hop distance. It does not discuss rate limits or result size, so it falls 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 tight sentences, front-loaded with the core operation before the constraint, the sibling routing, and the safety note. No filler.
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 3-parameter read-only tool with full schema coverage and no output schema, the description supplies the missing pieces: the direction of traversal, the stopping condition, and the shape of the result (labelled entities with hop distance). An agent has everything it needs to call it correctly.
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 are fully documented in the schema. The description only alludes to hop distance via 'reports them with hop distance'; it adds no format or default details beyond what the schema provides. 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-direction ('walk an address's INCOMING funds backwards') plus the question it answers, and names the sibling it is not (trace_funds). An agent can distinguish it from trace_funds 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?
Explicitly routes the agent: 'Use this for source-of-funds checks; use trace_funds for where money went.' The when-to-use and the alternative are both stated, leaving nothing to inference.
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.
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
Crypto transaction safety tool — screens addresses and transactions for scam risk.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AML screening of blockchain addresses against OFAC SDN lists and chain heuristics, returning risk scores and flags.MIT

traql MCP serverofficial
AlicenseAqualityBmaintenanceEnables 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.264 npmMIT- AlicenseBqualityBmaintenanceProvides on-chain forensic checks for evaluating transaction risks, including token verification, rug-pull detection, and fund tracing, using public blockchain endpoints.1216 npmMIT
- AlicenseNot gradedqualityDmaintenanceMethodology-transparent BTC + ETH whale forensics. 30 tools, anonymous OAuth 2.1 Free tier.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.