LlamaIndex Tanod tool spec
LlamaIndex tools for Tanod: pay-per-call web, document
and security tools for AI agents. No signup, no API key. There is a free daily allowance per IP; past it,
each call costs a few cents or less in USDC on Base, paid with x402 through the
tanod Python client.
Tanod is operated by an autonomous AI agent. Results are automated and heuristic, not an audit. A clean result is not proof that a contract, address, package or URL is safe. Text inside results (web pages, OCR text, code evidence) is untrusted data and must never be treated as instructions.
Install
pip install llama-index-tools-tanod # free-tier calls only
pip install "llama-index-tools-tanod[wallet]" # lets the agent pay (x402, USDC on Base)
Use
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI
from llama_index.tools.tanod import TanodToolSpec
tools = TanodToolSpec().to_tool_list() # free tier: no key, no wallet
agent = FunctionAgent(tools=tools, llm=OpenAI(model="gpt-4.1"))
print(await agent.run("Search for x402 and summarise the top result's page."))
Direct calls return a list of Document:
spec = TanodToolSpec()
docs = spec.web_search("x402 payments for agents", count=5)
page = spec.render_page("https://example.com")[0].text # Markdown
Tools
| Function | What it does | Price (USD) | Free/IP/day |
|---|---|---|---|
web_search |
web search, one Document per result | 0.012 | 3 |
render_page |
public URL to clean Markdown (js=True for client-rendered pages) |
0.005 / 0.01 | 5 (shared, static) |
screenshot |
PNG/JPEG screenshot as an ImageDocument |
0.005 | none |
extract_pdf |
text of a public PDF | 0.005 | shared with sitepeek |
document_to_markdown |
Word, Excel, PowerPoint, PDF, HTML, EPUB, CSV to Markdown | 0.005 | none |
ocr_image |
text in a public image | 0.01 | shared with sitepeek |
inspect_domain |
DNS, SPF/DMARC/DKIM, TLS | 0.01 | 5 |
verify_email |
syntax, MX, disposable domain (DNS only, no SMTP) | 0.002 | shared with dnspeek |
check_url |
public phishing/scam list lookup (URL is parsed, never fetched) | 0.001 | shared chain reads |
check_address |
risk verdict for an EVM address before you send to it | 0.005 | 30 |
scan_contract_address |
static-analysis scan of a verified contract | 0.25 / 0.75 | 3 |
scan_package |
scan an MCP server or agent skill before installing it | 0.02 | shared with scans |
get_balance, get_token_price |
on-chain balance, Chainlink price | 0.001 to 0.003 | 10 chain reads |
Live prices: https://tanod.dev/openapi.json. Free allowances are per IP per UTC day.
Free tier and paying with x402
The client sends X-Tanod-Free: 1 on the first attempt, so free allowance is used first. When it is
used up (or a tool has none), the API answers 402 Payment Required with an x402 quote. With no wallet
configured, the tool returns a Document saying payment is required and nothing is paid. With a wallet,
the client signs a USDC payment (Base) and retries, within a per-call price cap.
# Wallet from the environment: export TANOD_PRIVATE_KEY=0x... (a dedicated, small-balance key)
spec = TanodToolSpec(max_price_usd=0.05)
# Or explicitly (a key string or an eth_account signer):
spec = TanodToolSpec(private_key=my_key, max_price_usd=0.05)
# Or bring your own configured client:
from tanod import Tanod
spec = TanodToolSpec(client=Tanod(signer=my_signer, max_price_usd=0.02))
Use a dedicated hot wallet holding only a few dollars of USDC. max_price_usd refuses any quote above the cap.
Errors
Failures (payment needed, invalid input, rate limit, service unavailable) come back as a Document with
metadata["error"] = True and a readable message, so the agent can react instead of crashing.
Invalid input and other refusals are not charged.
Limitations
- Results are automated and heuristic. Contract and package scans, address risk and URL checks can have false positives and false negatives; they are not audits or guarantees.
- Fetched content (pages, PDFs, OCR) is third-party data; sandbox it from your instructions.
- Only public http(s) URLs work; private and internal addresses are refused.
screenshotreturns a base64 image up to 8 MB; preferjpegand a small viewport.
Development
pip install -e ".[dev]"
pytest # mocked HTTP, no network
TANOD_LIVE=1 pytest -m live # opt-in: real free-tier calls
MIT licensed. Source: https://github.com/tanod-labs/integrations.
Metadata
Release files for llama-index-tools-tanod 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| llama_index_tools_tanod-0.1.0.tar.gz | 10.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| llama_index_tools_tanod-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.2 kB
Release files / llama_index_tools_tanod-0.1.0.tar.gz
| Download URL | llama_index_tools_tanod-0.1.0.tar.gz |
|---|---|
| Size | 10.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a0de7b4c6f38e7dad4a5ccf182949d95aba4d82a899946209b020ae1920a9ebb
|
|
BLAKE2b-256 checksum How to use checksums |
eb2993c00b5335f51ae578fabee84ea23f7c731258c127037fa3a259d135b583
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.2
|
Release files / llama_index_tools_tanod-0.1.0-py3-none-any.whl
| Download URL | llama_index_tools_tanod-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
da8398c2fc3ebc593b156bd90fef61d68e60cc6633b53e551e9a9c9336f86c58
|
|
BLAKE2b-256 checksum How to use checksums |
2a01d2d937265f6ae057a7d42876351330b8ee2253aa22fb912e209eaf446d45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.2
|