Skip to main content
Glama
aiexp1

Tanod MCP server

pactlint: scan a deployed contract by address

scan_contract_address
Read-onlyIdempotent

Scan a verified contract by address on Ethereum or Base for security bugs, using Slither and DeFi detectors. Returns findings with severity, fixes and a JSON report.

Instructions

pactlint: Scan a deployed, verified contract on Ethereum or Base for security bugs, by address. For source you hold use scan_contract_source. Fetches the verified source from Sourcify. Runs solc, Slither and custom DeFi detectors (unchecked ERC-20 returns, zero slippage limits, oracle misuse, ERC-4626 inflation, signature replay, ...). Returns a JSON report (findings with severity, confidence, file:line and a fix) plus Markdown. Price: USD 0.25 up to 3,000 nSLOC, USD 0.75 up to 15,000; refused inputs are never charged. Free: 3 scans or 30 txpeek checks per IP per UTC day. Unverified contracts are refused (not charged): use check_contract_before_interaction. Typically 3-30 s; at most 60 s; a full queue is a 503 with Retry-After (not charged). Automated and heuristic, not an audit: findings can be false positives and an empty report does not prove the code is free of bugs. Docs: https://tanod.dev/learn/smart-contract-scanner-api.html

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
chainYesChain the contract is deployed on.
addressYesContract address (0x + 40 hex).
include_noisyNoAlso report detectors dropped by default as noisy (high false-positive rate); default false.
include_dependenciesNoAlso report findings in dependencies, tests and mocks (lib/, node_modules/, OpenZeppelin, ...); default false.
include_informationalNoAlso report informational (style and best-practice) findings; default false.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoOnly on an error result: an object {code, message}, or the reason string of an x402 PaymentRequired object.
statsNo
statusNo
scan_idNo
findingsNo
disclaimerNo
schema_versionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnly, idempotent, non-destructive): it discloses pricing tiers, the free daily quota, that refused/unverified inputs are never charged, a 503+Retry-After queue behavior, and a candid disclaimer that results are heuristic and can produce false positives. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose and sibling routing come first, then mechanics, then pricing/safety caveats. Every sentence carries operational information, though the pricing/quota/latency block is long and could be trimmed slightly without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, paid, networked analysis tool this is complete: it covers inputs, refusal conditions, latency, failure modes, cost, safety caveats, and a docs link. Return contents are summarized briefly and an output schema exists to carry the detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (chain enum, address pattern, the three include_* booleans) is already documented in the schema. The description adds no syntax or format detail beyond it; the 'verified source fetched from Sourcify' line is contextual, not parameter-level. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Scan a deployed, verified contract on Ethereum or Base for security bugs, by address') and explicitly names the sibling it is not ('For source you hold use scan_contract_source'). An agent can distinguish it from scan_contract_source and check_contract_before_interaction without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules: use scan_contract_source for source you hold, and check_contract_before_interaction when the contract is unverified (which this tool refuses). It also states the tool's operational envelope (3-30s, 60s max, 503 on queue), so an agent knows exactly when this tool applies versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools