{
  "markdown": "# traql MCP server\n\n[![npm](https://img.shields.io/npm/v/@traql/mcp)](https://www.npmjs.com/package/@traql/mcp)\n[![CI](https://github.com/traql/mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/traql/mcp-server/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n[![Glama](https://glama.ai/mcp/servers/traql/mcp-server/badges/score.svg)](https://glama.ai/mcp/servers/traql/mcp-server)\n\nAML and compliance risk scoring for crypto addresses and transactions, exposed to\nAI agents over the [Model Context Protocol](https://modelcontextprotocol.io).\n\nAsk your agent *\"is it safe to send to this address?\"* and it gets back a\n0–100 risk score, a band, the risk categories behind it, and — with an API key —\nevery individual signal with its source and confidence.\n\n```\nethereum address 0x8589427373d6d84e98730d7795d8f6f8731fda16\nRISK 100/100 — CRITICAL\nFlags: sanctions, mixer, scam\n\nSignals (21):\n  +80  [sanctions/eth_labels] direct.sanctions — sanctions label \"Tornado.Cash: Donate\" [entity Tornado.Cash: Donate, confidence 0.80]\n  +68  [mixer/eth_labels] direct.mixer — mixer label \"Tornado.Cash: Donate\" [entity Tornado.Cash: Donate, confidence 0.80]\n  +10  [mixer] behavior.mixer_contact — direct contact with mixer 0xdd4c48c0b24039969fc16d1cdf626eab821d3384\n  +9   [sanctions/ofac_sdn] indirect.sanctions — sent to Semenov Roman (sanctions, 18% of USDC volume) [entity Semenov Roman, confidence 1.00]\n  ... and 17 more\n\nComputed at 2026-08-23T11:42:49Z.\n```\n\nBacked by [traql](https://traql.io): OFAC SDN, UK OFSI, EU and UN sanctions\nlists, Tether/Circle freeze events, curated hack and mixer attributions, and\ncounterparty exposure analysis across **Ethereum, BSC, TRON, TON and Bitcoin**.\n\n## Quick start\n\nRequires Node.js 18+.\n\n```bash\nnpx -y @traql/mcp\n```\n\nThe server speaks MCP over stdio, so you normally point a client at it rather\nthan running it by hand.\n\n### Claude Code\n\n```bash\nclaude mcp add traql --env TRAQL_API_KEY=your_key -- npx -y @traql/mcp\n```\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"traql\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@traql/mcp\"],\n      \"env\": { \"TRAQL_API_KEY\": \"your_key\" }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `~/.cursor/mcp.json` (or `.cursor/mcp.json` in a project) using the same\n`mcpServers` block as above.\n\n### VS Code\n\nAdd to `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"traql\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@traql/mcp\"],\n      \"env\": { \"TRAQL_API_KEY\": \"your_key\" }\n    }\n  }\n}\n```\n\n## Getting an API key\n\nSign up at [app.traql.io](https://app.traql.io/signup), confirm your email —\nfree checks are included — and issue a key under **API keys**. The secret is\nshown once; it can be rotated or revoked at any time.\n\nWithout a key the server still runs, on the keyless tier: the hosted API serves\n**3 free checks per IP per day** so you can try it immediately, then asks for\nper-call payment over [x402](https://x402.org). Keyless responses are also\ncoarser — a single reason phrase instead of itemized signals — and rate limits\nare tighter. For anything beyond a first look, set a key.\n\n## Configuration\n\n| Variable | Required | Default | Description |\n| --- | --- | --- | --- |\n| `TRAQL_API_KEY` | recommended | — | API key from the traql dashboard. Sent as `X-API-Key`. Unlocks itemized signals and higher limits. |\n| `TRAQL_API_URL` | no | `https://api.traql.io` | Base URL of the API. Point it at your own deployment if you self-host traql. |\n| `TRAQL_TIMEOUT_MS` | no | `30000` | Per-request timeout in milliseconds. |\n\n## Tools\n\n### `check_address`\n\nScores a single address.\n\n| Argument | Type | Required | Description |\n| --- | --- | --- | --- |\n| `chain` | `ethereum` \\| `bsc` \\| `tron` \\| `ton` \\| `bitcoin` | yes | Network the address belongs to. |\n| `address` | string | yes | Address in the chain's native format. |\n\n### `screen_transaction`\n\nScores both sides of a transfer, in one of two modes:\n\n- **Pre-flight** — pass `from` and `to` (optionally `amount` and `asset`) to\n  screen a transfer before broadcasting it. Works on every supported chain.\n- **By hash** — pass `tx_hash` alone to look up a transaction that is already\n  on-chain. Supported on Ethereum, BSC, TRON and TON.\n\n| Argument | Type | Required | Description |\n| --- | --- | --- | --- |\n| `chain` | chain enum | yes | Network the transaction belongs to. |\n| `from` | string | pre-flight | Sender address. |\n| `to` | string | pre-flight | Recipient address. |\n| `amount` | string | no | Integer amount in the asset's **base units** (e.g. `1000000` for 1 USDT). |\n| `asset` | string | no | Asset or token symbol, e.g. `USDT`. |\n| `tx_hash` | string | by-hash | Hash of a broadcast transaction. Mutually exclusive with `from`/`to`. |\n\n### Response\n\nBoth tools return human-readable text plus `structuredContent`:\n\n```json\n{\n  \"subject\": { \"type\": \"address\", \"chain\": \"ethereum\", \"address\": \"0x…\" },\n  \"result\": {\n    \"score\": 100,\n    \"band\": \"critical\",\n    \"flags\": [\"sanctions\", \"mixer\", \"scam\"],\n    \"partial\": false,\n    \"computed_at\": \"2026-08-23T11:42:49Z\",\n    \"reasons\": [\n      {\n        \"code\": \"direct.sanctions\",\n        \"message\": \"sanctions label \\\"Tornado.Cash: Donate\\\" from eth_labels (severity 100 × confidence 0.80 = 80.0)\",\n        \"contribution\": 80,\n        \"category\": \"sanctions\",\n        \"source\": \"eth_labels\",\n        \"entity\": \"Tornado.Cash: Donate\",\n        \"severity\": 100,\n        \"confidence\": 0.8,\n        \"eff\": 80.0\n      }\n    ]\n  }\n}\n```\n\nScore bands: `clean` 0–9, `low` 10–39, `elevated` 40–69, `high` 70–89,\n`critical` 90–100.\n\n`partial: true` means an upstream data source was degraded while computing the\nresult — read the score as a lower bound, not a final verdict.\n\nEach successful call consumes one check from the configured account. Malformed\ninput is rejected locally where possible, so it costs nothing.\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm test\n```\n\n## Notes\n\nScores are advisory signals for triage and automation. They are not a legal\ndetermination of wrongdoing, and they do not by themselves discharge any\nregulatory obligation.\n\n## Links\n\n- [traql.io](https://traql.io) — product\n- [API documentation](https://api.traql.io/docs)\n- [Dashboard](https://app.traql.io)\n\n## License\n\nMIT\n",
  "bytes": 6358,
  "sha": "7e347a686eb6d899996611fe9ac43dbbe12ab50a7221eae47815be237064975d",
  "repo_slug": "traql/mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_traql_mcp_server_e22bfe92/readme"
}