2s
OfficialThe 2s.io MCP server provides 570+ pay-per-call APIs across 112+ categories, giving AI agents instant access to ground-truth data — no accounts or API keys required (paid per call via USDC).
Search & Research
Live web & news search, USPTO patent search, US trademark search/verification, federal/state case law search, legal citation verification, court opinions
Law & Compliance
OFAC sanctions screening, CFR/USC/Federal Register retrieval, federal court docket search (PACER/RECAP), attorney & judge lookup, EU VAT validation
Finance & Markets
End-of-day stock quotes, SEC filings (10-K/10-Q/8-K), XBRL company financials, insider trades (Form 4), 13F institutional holdings, FX rates, US Treasury data
Crypto: address validation (BTC, ETH, SOL, LTC, TRX, XRP, BCH), live EVM transaction status, gas oracle (Base/ETH/Polygon/Arbitrum/Optimism), ENS resolution, token prices via CoinGecko
Business & KYC
Secretary of State entity lookup (NY/CO/CT), entity KYC screen (registry + OFAC), LEI/GLEIF validation, nonprofit 501(c) lookup + sanctions screen, lobbying disclosures, US HTS tariff lookup
Data Validation
IBAN, ABA routing, BIC, GTIN, GLN, SSCC, ISIN, CUSIP — full checksum validation; batch validate up to 100 mixed identifiers in one call
Health & Medical
ICD-10-CM code lookup, RxNorm drug normalization, hospital quality ratings (CMS), Medicare provider data, 360° provider profile (NPPES + Open Payments + Medicare), CDC mortality statistics
Geo, Weather & Earth
Forward/reverse geocoding, IP geolocation, current US weather by ZIP, NWS alerts, NOAA tide predictions, historical climate data, sunrise/sunset/twilight, timezone lookup, recent earthquakes, NASA EONET natural events, nearby airports/schools/climate stations
Space & Astronomy
Upcoming rocket launches, near-Earth asteroid close approaches, live satellite positions (SGP4), exoplanet data, asteroid/comet orbital parameters, local sky almanac, ISS tracking, habitable zone computation
Aviation & Vehicles
Live flight status, US aircraft registry lookup, airport info by IATA/ICAO or proximity, VIN decode + NHTSA recalls & complaints
AI & Content Processing
Webpage summarization, text translation, structured data extraction (custom JSON Schema), image description, headless browser screenshots, audio transcription with diarization, HTML/URL to Markdown
Reference & Utilities
Unit conversion, holiday calendar (200+ countries), business-day calculation, USDA nutrition data (~400k foods), DNS lookup, TLS certificate inspection, NCBI gene & UniProt protein data, GBIF species lookup, US public K-12 school lookup, occupational & real-estate license verification (TX), person cross-registry sweep (FINRA, attorneys, inmates, licenses), federal inmate locator, USAspending, FEC campaign finance, image compression, barcode/QR, EDI parsing, hashing
Provides tools to search academic papers from arXiv, enabling retrieval of paper metadata and full-text.
Provides tools to look up airports by IATA or ICAO codes, and find the nearest airport to a given coordinate.
Provides tools to search academic papers from PubMed, enabling retrieval of biomedical literature.
Provides tools to search academic papers from Semantic Scholar, enabling retrieval of paper metadata and citations.
Provides tools to fetch Wikipedia article summaries and content.
Provides tools for validating XRP addresses as part of multi-chain cryptocurrency address validation.
2s.io SDK
Client SDK + MCP server for 2s.io — the (most) everything API. One pay-per-call API giving AI agents ground-truth data across hundreds of endpoints, paid per call in USDC on Base or Solana via x402.
This repo ships SDKs for every major agent-development language plus an MCP server for any MCP-aware host:
Language | Package | Install | Status |
TypeScript / Node |
| ✅ x402 | |
TypeScript / Node |
| ✅ MCP server, x402 | |
Python |
| ✅ x402 | |
Python / LangChain |
| ✅ Tool adapters | |
Python / LlamaIndex |
| ✅ Tool adapters | |
Go |
| 🚧 x402 wire-up pending | |
Rust |
| 🚧 x402 wire-up pending |
No accounts. No API keys. No credit cards. Buyers sign an EIP-3009 USDC authorization (Base) or an SPL USDC transfer (Solana) on-the-fly, the facilitator verifies + settles in ~2 seconds on mainnet, and the API returns typed data. Prices start at $0.0025/call.
🎁 Try before you buy — free, no wallet
Want to confirm an endpoint actually works before funding anything? Every endpoint serves one free real call per endpoint per hour — no key, no wallet, no signup. Add ?trial=1 (or header X-2s-Trial: 1), or flip the SDK into trial mode:
import { TwoS } from '@2sio/sdk'
const trial = new TwoS({ trial: true }) // no key required
const { data } = await trial.validate.iban({ iban: 'GB82WEST12345698765432' })
console.log(data.items[0].valid) // real result; response meta.trial = { free: true, ... }from twosio import TwoS
trial = TwoS(trial=True) # no key required
print(trial.validate.iban(iban="GB82WEST12345698765432").data["items"][0]["valid"])curl "https://2s.io/api/validate/iban?iban=GB82WEST12345698765432&trial=1"npx -y @2sio/mcp --trial # MCP host with free trial calls; or set TWOS_TRIAL=1The trial runs the real handler and returns real data. Once the hourly trial is used, the endpoint returns the normal 402 — drop trial and pass a privateKey/signer to pay per call for unlimited access.
Related MCP server: CorteX402
🔔 Watchers — get woken up, don't poll
Most endpoints are reads. Watchers flip that: arm one once and 2s pushes you a signed callback the instant something happens — a wallet moves on Base/Ethereum/Bitcoin, a US stock crosses your price, a company reports earnings. No polling loop, no wasted calls. Flat $0.05 to arm; callbacks are EIP-191-signed (verify offline), retried with exponential backoff, with a pull backstop via watchers.status. A new class of stateful, agent-native primitives.
const client = new TwoS({ privateKey: process.env.EVM_PRIVATE_KEY })
const { data } = await client.watchers.stockPrice({
ticker: 'AAPL', conditionType: 'above', threshold: 250,
callbackUrl: 'https://your-agent.app/hooks/aapl',
})
// also: watchers.cryptoAddressActivity, watchers.earnings — see https://2s.io/watchersHosted MCP (connect by URL)
Don't want to install anything? Point any MCP host at the hosted server:
https://2s.io/mcpStreamable-HTTP; set header X-EVM-Private-Key: 0x… (USDC on Base) and 2s signs + settles x402 per call. Tradeoff: a hosted signer means your private key transits 2s's infrastructure — for keys that never leave your machine, run npx @2sio/mcp locally or use the SDK above (the more private, secure path).
30-second demo
TypeScript:
import { TwoS } from '@2sio/sdk'
import { privateKeyToAccount } from 'viem/accounts'
const client = new TwoS({ signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`) })
const { data } = await client.patents.search({ q: 'neural network', limit: 5 })
console.log(data.items[0].title) // normalized envelope: { ok, items, total, source, meta? }Python:
from eth_account import Account
from twosio import TwoS
client = TwoS(signer=Account.from_key(os.environ["EVM_PRIVATE_KEY"]))
r = client.patents.search(q="neural network", limit=5)
print(r.data["hits"][0]["title"])30-second Claude Desktop install
{
"mcpServers": {
"2sio": {
"command": "npx",
"args": ["-y", "@2sio/mcp"],
"env": { "EVM_PRIVATE_KEY": "0x..." }
}
}
}Restart Claude. The model can now call patents.search, law.sanctions-check, ai.summarize, geocode.address, vehicle.vin-decode, agent.knowledge-delta, security.cve, and 340+ other paid tools — paying per call, no human in the loop.
What's behind the API
575+ endpoints across 113+ groups (live count in the directory) across:
AI: webpage summarization, translation, typed extraction, image description, transcription, screenshots
Agent primitives: persistent key-value memory, agent-to-agent marketplace (register / discover / review), knowledge-delta ("what changed in X since date Y"), atomic batch settlement
Control plane: wallet-scoped agent infrastructure — distributed locks/leases, durable message queues, cron-style scheduled callbacks, pub/sub topics with fan-out
Storage: pay-per-call wallet-keyed persistence — key-value, documents, vector / full-text search, private blob upload
Watchers (push, not poll): arm once, get a signed callback the instant a wallet moves, a stock crosses a price, or a company reports earnings
Security: CVE lookup (NVD + CISA KEV + EPSS), email-security, HTTP security headers, password-exposure (HIBP), RPKI, CT logs, IOC reputation, CWE / ATT&CK / CAPEC, exploit availability
Patents & trademarks: USPTO Open Data Portal search + full file-wrapper detail + document list; trademark full-text search + status
Law: federal/state case search, citation verification, OFAC sanctions screening, Federal Register, CFR & USC, opinions, dockets
Government: Congress bills/votes/members, FEC campaign finance, FDA drug/device/food events + recalls, OSHA/MSHA, USAspending, EPA facilities, USGS water (50+ endpoints)
Finance & treasury: SEC EDGAR company facts, filings, insider trades, 13F holdings; US Treasury debt + cash; stock quotes; FX rates
Vehicles & aviation: VIN decode, recalls, complaints, investigations (NHTSA); aircraft registry, airports, flight data
Health & medical: ICD-10 / HCPCS / RxNorm, hospital quality, Medicare provider + open-payments, clinical trials, drug pricing
Business & registries: Secretary-of-State entity search, GLEIF LEI entity-match, KYB screening, IRS nonprofit search, bank routing
Energy, agriculture, maritime & telecom: energy prices & production, USDA agriculture, soil surveys, vessel & port data, phone/number intelligence
Geo / weather / earth: forward + reverse geocoding, US weather by ZIP, NOAA tides, sunrise/sunset, climate stations, recent earthquakes, IP geolocation (single + bulk)
Space: launches, close approaches, satellites, exoplanets, sky-tonight, space weather
Internet: DNS lookup, RDAP whois, TLS inspection, URL unfurl (Open Graph), URL → clean Markdown
Wikipedia / academic papers: summaries, multi-source paper search (arXiv + PubMed + Semantic Scholar)
Crypto: multi-chain address validation (BTC, ETH, SOL, LTC, TRX, XRP, BCH), live EVM gas oracle
Economics & labor: BLS series, inflation, World Bank indicators, ACS demographics, occupations, USAJOBS, College Scorecard
Data & utilities: 10+ validators (IBAN, email, phone, VAT…), EDI parsing, ISO codes, unit/currency conversion, hashing, image compression, barcode/QR, countdown GIFs
Live catalog: https://2s.io/api/directory. OpenAPI 3.1: https://2s.io/api/openapi. Machine-discovery manifest: https://2s.io/.well-known/x402.
Safety
The SDK refuses to sign payments above a configurable
maxPriceUsd. There is no default cap (maxPriceUsddefaults toInfinity) — set it to opt into a ceiling.Every x402 payment is a single-use EIP-3009 authorization with a 60-second deadline. No allowances are issued; a leaked key can only spend what's in the wallet at the moment of signing, only at advertised prices.
Optional
onPaymentRequestedhook lets callers approve/deny each call programmatically.
Repo layout
packages/
├── 2s-sdk/ @2sio/sdk — typed TypeScript client
├── 2s-mcp/ @2sio/mcp — MCP server (depends on 2s-sdk)
├── python/ 2sio — Python client
├── python-langchain/ langchain-twosio — LangChain tool adapters
├── python-llamaindex/ llama-index-tools-twosio — LlamaIndex tool adapters
├── go/ Go client (x402 wire-up pending)
└── rust/ Rust client (x402 wire-up pending)
examples/sdk/ minimal paying-agent samples + Claude Desktop wiringLicense
MIT. See LICENSE.
Links
API site: https://2s.io
npm:
x402 protocol: https://x402.org
MCP protocol: https://modelcontextprotocol.io
Available Tools
201 toolsagent.knowledge-deltaA
What's happened in since ? Multi-source delta (regulations, court opinions, papers, House+Senate votes) deduplicated and ranked. Designed so an agent can spend one call to catch up since its LLM training cutoff.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | Earliest date (YYYY-MM-DD). | |
| topic | Yes | Free-text domain of interest. | |
| until | No | Latest date (YYYY-MM-DD). Default today. | |
| maxEvents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full burden for behavioral disclosure. It discloses that the tool aggregates from multiple sources, deduplicates, and ranks results. However, it does not mention potential rate limits, pagination, or what happens if no results are found, leaving some gaps.
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 two sentences, front-loaded with the typical usage pattern, and every sentence provides essential information. It is concise with no wasted words.
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?
No output schema exists, but the description covers inputs, purpose, sources, deduplication, ranking, and the intended use case (catching up from training cutoff). This is sufficient for an agent to understand the tool's capabilities and when to invoke it.
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 75%, and the description adds context by mapping 'topic' and 'since' to the natural language example. However, it does not elaborate on 'until' or 'maxEvents' beyond what the schema already provides. The schema descriptions are adequate, so the description adds marginal value.
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 clearly states the tool's purpose: listing what's happened in a topic since a date, aggregating multiple sources (regulations, court opinions, papers, House+Senate votes), deduplicating and ranking results. This distinguishes it from sibling tools that focus on single sources (e.g., gov.house-votes, law.opinion).
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 description explicitly states the tool is designed for an agent to 'catch up since its LLM training cutoff' in one call, providing clear context for when to use it. It does not explicitly state when not to use it or name alternative tools, but the use case is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.marketplace.discoverA
Discover agents in the marketplace. Filter by free-text q, comma-separated required capabilities, and network. Each result includes the listing + aggregated reputation stats.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| limit | No | ||
| offset | No | ||
| network | No | ||
| capabilities | No | Comma-separated capability tags; ALL must match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It discloses returned data (listing + reputation stats) but omits pagination behavior (limit/offset) and read-only nature.
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 concise sentences with zero fluff. Every sentence adds value: purpose and filtering options.
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?
Given 5 parameters, no output schema, and no annotations, the description covers basic purpose and result shape but lacks pagination details and sorting behavior, leaving gaps.
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 low (20%). Description adds meaning for q (free-text), capabilities (comma-separated, ALL must match), and network, but ignores limit and offset parameters.
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 clearly states the tool discovers agents in the marketplace, with filtering options. This distinguishes it from sibling tools like agent.marketplace.profile (single agent details) and agent.marketplace.register (registration).
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 description implies usage for discovery via filters but does not explicitly state when to use this tool versus alternatives like agent.marketplace.profile for specific agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.marketplace.profileA
Fetch one agent's full marketplace profile (listing + stats + up to 25 recent reviews).
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | Yes | Target agent pubkey. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure burden. It states the output includes listing, stats, and reviews but does not mention error handling, permissions, rate limits, or what happens if the agent profile does not exist. The description is adequate but not thorough.
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 a single sentence that clearly communicates the core functionality and return components. It is concise and front-loaded with the action and resource, with no unnecessary words.
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?
Given the tool has one parameter with full schema coverage and no output schema, the description adequately covers the scope and return format. It could mention potential limitations (e.g., only 25 reviews) but overall is complete for a simple fetch 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?
The input schema already describes 'namespace' as 'Target agent pubkey.' with 100% coverage. The tool description does not add any additional meaning or context beyond the schema, so baseline score of 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 clearly states the action 'Fetch', the resource 'one agent's full marketplace profile', and the components 'listing + stats + up to 25 recent reviews'. It distinguishes from sibling tools like 'agent.marketplace.discover' (which presumably lists multiple) and 'agent.marketplace.review'.
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 description implies usage for fetching a specific agent's profile but does not explicitly state when to use it vs. alternatives like 'agent.marketplace.discover' or when not to use it. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.marketplace.registerB
Register/update the calling agent in the agent-to-agent marketplace. One listing per pubkey, idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| payTo | No | ||
| status | No | ||
| network | No | ||
| metadata | No | ||
| priceUsd | No | ||
| description | Yes | ||
| endpointUrl | No | ||
| capabilities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions idempotency and uniqueness per pubkey, but lacks details on mutation behavior, required permissions, error handling, or return values. Significant gaps for a registration tool.
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 are concise and front-loaded, but the terse style leaves out critical information. It is efficient but could include more detail without becoming verbose.
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?
Given the lack of annotations, output schema, and the complexity of 9 parameters with nested objects, the description is far from complete. It doesn't explain what the registration does, success/failure behavior, or prerequisites, leaving major gaps for an agent.
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?
The input schema has 9 parameters (3 required) with 0% schema description coverage. The description adds no explanation for any parameter, such as the meaning of 'metadata', 'payTo', 'capabilities', or 'status' enum values. This forces the agent to guess parameter semantics.
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 clearly states the action (register/update) and the target (calling agent in agent-to-agent marketplace). It adds specificity with 'one listing per pubkey' and 'idempotent', distinguishing it from siblings like discover, profile, and review.
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 description implies this tool is for registering or updating your own agent listing, but does not explicitly state when to use it vs alternatives like discover or profile. No exclusions or alternative tool names are mentioned, though context provides sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.marketplace.reviewA
Post an insert-only review of another agent. Outcome = success|failure|partial; optional rating 1-5, comment, txHash, network.
| Name | Required | Description | Default |
|---|---|---|---|
| rating | No | ||
| txHash | No | ||
| comment | No | ||
| network | No | ||
| outcome | Yes | ||
| reviewed | Yes | Target agent namespace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds behavioral context by stating 'insert-only' and listing the outcome values and optional fields, though it lacks details on authentication, rate limits, or response behavior.
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?
A single sentence that includes the core action, constraints, and parameter summary with no redundant information.
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?
While the description covers the basic purpose and required parameters, it omits details on the response format and the exact meaning of optional fields like txHash and network, leaving gaps for an agent.
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?
The schema coverage is low (17%), but the description mentions rating range and lists optional fields. However, it does not explain txHash or network semantics fully, so only partial compensation.
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 'Post' and resource 'review of another agent' with the constraint 'insert-only', clearly distinguishing it from sibling tools like agent.marketplace.profile or agent.marketplace.register.
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 description implies when to use the tool (for posting reviews) but does not explicitly state when not to use it or mention alternative tools for other review actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.memory.deleteA
Delete a memory entry. Idempotent — non-existent keys return { deleted: false }.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses idempotency and the specific return value for non-existent keys. This gives the agent clear knowledge of safety and outcome beyond the annotation-free context.
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, no filler, front-loaded with the action. Every word adds value.
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?
Covers essential behavior (idempotency, return shape) for a simple delete operation. Could potentially mention persistence guarantees, but adequate given the tool's simplicity.
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 0% and the description does not explain what the 'key' parameter represents or any constraints on its format. The parameter is left ambiguous, relying solely on the name.
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 explicitly states 'Delete a memory entry' with a clear verb and resource. The idempotent behavior further clarifies the action. Although it doesn't contrast with siblings like 'put', the purpose is unambiguous.
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?
No guidance on when to use this tool versus alternatives like 'memory.put' or 'memory.get'. The description does not mention prerequisites, exclusions, or context-specific usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.memory.getA
Read a memory entry by key. Returns the value, etag, sizeBytes, timestamps. 404 if missing/expired.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses return values (value, etag, sizeBytes, timestamps) and error conditions (404 if missing/expired). With no annotations provided, this adds valuable behavioral context beyond the input 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?
The description is extremely concise with two sentences. It front-loads the primary purpose and covers key details without extraneous information.
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 simple read tool with one parameter and no output schema, the description is complete. It explains the action, return fields, and an important error condition (404). No further context is necessary.
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?
The description mentions 'by key,' indicating the role of the key parameter. However, it does not add additional meaning beyond what the schema provides (e.g., format, length, or constraints). With schema description coverage at 0%, the description is adequate but not richer.
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 clearly states 'Read a memory entry by key,' specifying the resource (memory entry) and action (read). It distinguishes itself from sibling tools like put, delete, and list, which have different purposes.
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 description does not provide explicit guidance on when to use this tool versus alternatives (e.g., agent.memory.list, agent.memory.put). There is no mention of when not to use it or specific prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.memory.listA
List keys in the calling agent's memory namespace, newest-first by updatedAt. Cursor-paginated. Optional prefix filter. Returns metadata only — fetch values via agent.memory.get.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | Opaque cursor from previous call. | |
| prefix | No | Optional key-prefix filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors: returns metadata only (no values), cursor-paginated ordering, optional prefix filter. It does not cover authentication, rate limits, or side effects, but as a read operation this is acceptable.
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 concise sentences front-load core purpose and ordering, then quickly cover pagination, filter, and guidance to sibling tool. No wasted words.
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?
Given no output schema, the description explains that it returns metadata and directs to another tool for values. It could be more explicit about the response fields (e.g., keys with updatedAt), but for a list tool with three parameters, it is reasonably complete.
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 67% with descriptions for all three parameters. The tool description adds 'newest-first by updatedAt' which contextualizes the order but does not elaborate on parameter semantics beyond what the schema provides. 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 clearly states the verb 'list', the resource 'keys in memory namespace', the ordering 'newest-first by updatedAt', pagination method 'cursor-paginated', and an optional prefix filter. It distinguishes from siblings like agent.memory.get (fetch values) and agent.memory.put (store).
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 description provides clear context for usage: it returns metadata only and directs to agent.memory.get for values. It implies when to use (listing keys) but does not explicitly list exclusions or prerequisites. The mention of an alternative tool enhances guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent.memory.putA
Write/replace a memory entry in the calling agent's private KV store. Namespace = your x402 signing pubkey. Value is arbitrary JSON ≤64 KiB. Optional TTL.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | 1-200 chars from [A-Za-z0-9._/-]. | |
| value | Yes | Arbitrary JSON. | |
| ttlSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full burden. It discloses the ≤64 KiB value limit and optional TTL, but does not cover write semantics (e.g., atomicity, error conditions) or authentication details beyond the namespace.
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 concise sentences with front-loaded main action. Every sentence adds essential information without redundancy.
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?
Covers purpose, key format, value size, TTL, but does not mention return value or error handling. For a write operation with no output schema, this is acceptable but could be more complete.
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?
The description adds the ≤64 KiB constraint for the value parameter and clarifies 'Optional TTL' for ttlSeconds, which supplements the schema. For key and value, schema already provides descriptions, so marginal addition.
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 clearly states 'Write/replace a memory entry in the calling agent's private KV store,' specifying the verb and resource. It distinguishes from sibling tools like agent.memory.get, delete, and list.
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 description mentions the namespace but does not provide explicit when-to-use or when-not-to-use guidance. It implies usage through contrast with sibling names but lacks direct alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai.describe-imageA
Describe an image (JPEG/PNG/GIF/WebP, ≤1MB) via Claude Haiku vision. Returns caption + structured details.
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | HTTPS URL of the image. | |
| instruction | No | Optional focus hint, e.g. "describe the chart axes". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions using Claude Haiku and the output, but does not disclose potential delays, accuracy limitations, or side effects (though likely read-only). Adequate but not rich.
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, front-loaded with purpose, efficient with no fluff. Every word adds value.
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?
Given no output schema, the description could be more specific about what 'structured details' entails. It covers formats, size limit, and model, but omits error scenarios or access requirements beyond the schema's URI format.
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 baseline is 3. The tool description adds no additional semantics beyond the schema's parameter descriptions (e.g., 'HTTPS URL' and 'Optional focus hint').
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 clearly states the verb ('Describe'), the resource ('an image'), supported formats, size limit, and what is returned ('caption + structured details'). It is distinct from sibling AI tools like ai.screenshot or ai.extract.
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?
No guidance on when to use this tool versus alternatives (e.g., ai.extract for text extraction). The description implies usage for image description but does not specify exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai.extractA
Fetch a URL and extract typed data from its content per a user-supplied JSON Schema. Use when you need a structured payload conforming to your own shape.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| schema | Yes | JSON Schema describing the desired output. | |
| instruction | No | Optional extraction guidance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully bears the burden of behavioral disclosure. It mentions fetching a URL and extraction but does not disclose potential side effects, authorization needs, rate limits, or error handling, which are critical for a tool making network requests.
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 two sentences long, front-loads the action first ('Fetch a URL and extract typed data'), and contains no extraneous information. Every sentence serves a purpose.
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?
Given the tool's complexity (3 parameters, no output schema, network request), the description is too brief. It omits important context such as return format, error behavior, content type support, and any limitations, making it incomplete for an agent to use safely and effectively.
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?
The input schema covers 2 of 3 parameters with descriptions, and the tool description adds context that the schema is user-supplied and describes desired output. However, this adds minimal value beyond the schema itself, and the 'url' parameter lacks any description in both the schema and the tool description.
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 clearly states the tool fetches a URL and extracts typed data based on a user-supplied JSON Schema. It distinguishes itself from sibling tools by specifying a unique action of structured data extraction.
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 description explicitly says 'Use when you need a structured payload conforming to your own shape,' providing clear usage context. It does not mention alternatives or when not to use, but the guidance is sufficient for basic decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aircraft.lookupA
Look up a US-registered aircraft by tail number (N-number, e.g. N757F) or icao24 Mode-S hex (e.g. aa3487). Pass exactly one. Returns make/model/owner/operator + the icao24 that links to live ADS-B flight-tracking. ~307k US airframes (OpenSky, CC-BY-SA).
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Tail / N-number (e.g. N757F). | |
| icao24 | No | 24-bit Mode-S hex (e.g. aa3487). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the data source (~307k US airframes, OpenSky, CC-BY-SA) and return fields (make/model/owner/operator + icao24), providing useful behavioral context beyond the schema. It does not mention error cases or rate limits, but is sufficiently transparent for a lookup tool.
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 two concise sentences with no fluff. Every sentence adds meaningful information: input constraints, return content, data source. Front-loaded with the core action and examples.
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?
Given the lack of output schema, the description covers return fields (make/model/owner/operator + icao24) and context (regional scope, data attribution). It is complete for a straightforward lookup, though missing details on error handling or authentication.
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 baseline is 3. The description adds value by explicitly stating 'Pass exactly one' and giving examples (N757F, aa3487), guiding parameter semantics beyond the schema definitions.
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 specific verbs ('Look up') and resources ('US-registered aircraft') with concrete examples (tail number, icao24). It clearly distinguishes from siblings like aircraft.profile by specifying the output includes icao24 for flight tracking, and targets US airframes. The purpose is unambiguous.
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 description provides usage instructions ('Pass exactly one') but omits when to use this tool over alternatives like aircraft.profile or flight.status. No explicit exclusions or context for sibling differentiation, making the guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aircraft.profileA
Identify a US-registered aircraft by tail (N-number) or icao24, AND screen its owner + operator against OFAC sanctions in one call. Returns the aircraft record + per-name sanctions screen with confidence + flagged. OSINT / asset-tracing / sanctions-evasion. Name-based screening is probabilistic.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | Tail / N-number. | |
| icao24 | No | 24-bit Mode-S hex. | |
| threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool returns aircraft record plus per-name sanctions screen with confidence and flagged, and notes that name-based screening is probabilistic. However, it does not mention rate limits, permissions, or edge cases.
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 two sentences plus a contextual line, all front-loaded with the main purpose. Every sentence adds value without redundancy.
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?
Given the parameter count and no output schema, the description explains what the tool returns (aircraft record + sanctions screen with confidence/flagged) and the probabilistic nature. It is fairly complete but could elaborate on response format or confidence interpretation.
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 67% with descriptions for 'tail' and 'icao24' but not 'threshold'. The description repeats scheme info (identify by tail or icao24) but adds no new meaning beyond what's in the schema. No additional explanation for threshold or any param.
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 clearly states the tool identifies a US-registered aircraft by tail or icao24 and screens owner/operator against OFAC sanctions. It distinguishes from sibling 'aircraft.lookup' by adding sanctions screening, and specifies use cases like OSINT and asset-tracing.
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 description implies when to use this tool (when both aircraft info and OFAC screening are needed) but does not explicitly state alternatives or when not to use. The mention of 'in one call' contrasts with separate calls, but no sibling names are given for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
airport.lookupA
Look up an airport by IATA (3-letter) or ICAO (4-letter) code. ~85k airports (CC0 — OurAirports).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | IATA (3 letters, e.g. SFO) or ICAO (4 letters, e.g. KSFO). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description adds useful context about data source (OurAirports, CC0 and scale (~85k airports) but does not mention error handling or behavior on invalid codes, which is acceptable for a simple lookup.
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 with no wasted words, front-loading the key action and resource. Every sentence adds value.
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?
The tool is simple with no output schema; the description covers purpose, input format, and data source. Minor omission of error handling or return format doesn't significantly hinder completeness.
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 the schema already documents the parameter well. The description adds minimal extra meaning beyond the schema, such as the data source and code length hints.
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 'look up' and resource 'airport by IATA or ICAO code', clearly distinguishing it from sibling tools like 'airport.near' that handle geographical queries.
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 description implies usage for code-based lookup but lacks explicit guidance on when not to use it or alternatives like 'airport.near' for location-based searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
airport.nearB
Find airports near a coordinate, ordered by distance.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| type | No | ||
| limit | No | ||
| country | No | ISO 3166-1 alpha-2 country code (e.g. US). | |
| radius_km | No | ||
| scheduled_service | No | When true, only commercial-service airports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions ordering by distance but does not disclose other behaviors such as response format, pagination, empty result handling, or authentication requirements. With no annotations, the description carries the full burden and falls short.
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 a single clear sentence with no fluff. It is appropriately front-loaded and efficient.
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?
Given the tool has 7 parameters, optional filters, and no output schema, the description is too sparse. It lacks information on response structure, default values, and effective use of optional filters like type and country.
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 only 29% (country and scheduled_service have descriptions). The description does not explain the purpose of lat, lon, radius_km, limit, or type, leaving the agent to rely solely on parameter names and types.
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 clearly states the tool finds airports near a coordinate, ordered by distance. This distinguishes it from the sibling tool 'airport.lookup' which likely retrieves a specific airport by identifier.
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?
No explicit when-to-use or when-not-to-use guidance. However, the name and description imply it is for proximity searches, contrasting with 'airport.lookup'. A note about preferring 'airport.lookup' for known codes would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai.screenshotC
Take a headless-browser screenshot of a URL. Returns base64 image + size metadata.