Skip to main content
Glama
aiexp1

Tanod MCP server

pactlint: scan Solidity source

scan_contract_source
Read-onlyIdempotent

Scan Solidity source code for security bugs before deployment, review, or dependency use, returning JSON and Markdown findings with severity, confidence, file:line, and fixes.

Instructions

pactlint: Scan Solidity source code for security bugs before you deploy, review or depend on it. For a deployed verified contract use scan_contract_address. 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. Typically 1-5 s, up to about 30 s for a large project; 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
sourceNoA single Solidity file (no imports; at most 200 KB). Give either source or standard_json.
filenameNoFile name for `source` (ends in .sol; default Contract.sol); findings cite it in file:line.Contract.sol
include_noisyNoAlso report detectors dropped by default as noisy (high false-positive rate); default false.
standard_jsonNosolc standard-JSON input with inline 'content' for every file (at most 1 MB and 500 files).
compiler_versionNoExact solc version (default: from pragma).
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?

Annotations already establish read-only, non-destructive, idempotent, closed-world behavior, and the description layers on non-schema facts: the toolchain it runs (solc, Slither, custom DeFi detectors), output formats (JSON findings with severity/confidence/file:line/fix, plus Markdown), latency bounds (1-5 s typical, 60 s cap), rate limits, error semantics, and an honest false-positive disclaimer. That is unusually rich behavioral disclosure.

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?

Front-loaded with purpose, then the routing rule, then mechanism, output, price, availability, timing, and caveats — a sensible priority order. It is dense and every clause carries information, but the pricing/free-tier/timing block makes it longer than most agents need in one pass.

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 7-parameter, zero-required tool with an output schema (so return shape needs no full exposition), the description still covers selection, cost, rate limits, latency, failure behavior, and the epistemic limits of the result. An agent has everything needed to decide and invoke.

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% and each parameter (source vs standard_json, filename, the three include_* toggles, compiler_version) is already documented in the schema. The description adds no per-parameter meaning beyond the nSLOC pricing tiers loosely implying input size, so the 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 Solidity source code for security bugs) plus the use context (before deploy, review, or dependency). It explicitly names the sibling it must not be confused with: 'For a deployed verified contract use scan_contract_address.' An agent can route correctly 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.

Usage Guidelines5/5

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

Gives explicit when-to-use ('before you deploy, review or depend on it'), the when-not/alternative ('For a deployed verified contract use scan_contract_address'), and operational guidance (free tier limits, 503 + Retry-After on a full queue, refused inputs never charged). Nothing about selection is left to inference.

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