AgentTools
AgentTools is an MCP server for document intelligence, token-efficient web access, utilities, and financial extraction.
Extract invoice/receipt data from URLs, raw text, or Base64 files, including vendor, dates, line items, totals, tax, and currency hints.
Parse PDFs page-by-page via URL or Base64, returning text, metadata, and estimated token counts with page controls.
Fetch public webpages as clean, LLM-friendly Markdown with optional link catalogs and length limits.
Search the web via DuckDuckGo and return structured results.
Get current weather and multi-day forecasts worldwide.
Safely evaluate math expressions, including arithmetic, trig, logs, sqrt, and factorial.
Fetch latest news headlines and summaries by topic.
Summarize long text into key sentences.
Look up IP geolocation, ISP, and network metadata.
Provides live web search via DuckDuckGo with structured snippets, enabling agents to perform real-time fact-checking and web research.
Provides topic-based news headlines and summaries via Google News RSS for market intelligence and news monitoring.
π€ AgentTools API
Production-Grade Tool APIs for Agentic AI Systems & Enterprise Automation
High-Value Financial Document Intelligence β’ Token-Optimized Web Scraping β’ MCP Server for Claude & Cursor β’ Zero Third-Party API Costs
π οΈ Flagship Agentic Tools
Tool | Endpoint | Description | Typical Use Case |
π§Ύ Invoice & Receipt Intelligence |
| Extracts structured JSON (vendor, invoice #, dates, line items, totals, math verify) | Bookkeeping bots, ERP pipelines, CFO agents |
π PDF Document Intelligence |
| Page-by-page mapping, metadata, outlines, and exact LLM token budget estimation | RAG ingestion, legal & contract analysis |
π Markdown Web Scraper |
| Strips ads, navbars, and cookie banners; returns clean, token-efficient Markdown | Web research agents, documentation readers |
π Web Search |
| Live web search via DuckDuckGo with structured snippets | Real-time agent fact-checking |
π° News Intelligence |
| Topic-based news headlines and summaries via Google News RSS | Market intelligence & news monitoring |
π Text Summarizer |
| Zero-cost extractive text summarization | Context compression |
βοΈ Global Weather |
| Real-time global weather and multi-day forecasts | Travel & logistics agents |
π IP Geolocation |
| Geolocation, ISP, and network metadata lookup | Security & localization |
Related MCP server: ntriq-agentshop
β‘ Feature Highlights
Zero External API Costs: Core tools run on-server with deterministic layout parsing and open data feeds.
Math-Verified Invoices: Automatic check ensures
Subtotal + Tax == Total Amount Dueto prevent accounting hallucination.LLM Token-Budget Aware: Every document and web extraction returns word counts and estimated token usage.
Dual Protocol: Standard REST API with OpenAPI specification PLUS native Model Context Protocol (MCP) for Claude Desktop and Cursor.
Enterprise Auth & Metering: Built-in SQLite usage tracking, tier quotas (Free/Pro/Enterprise), and support for both
X-API-KeyandX-RapidAPI-Key.
π Quick Start
1. Clone & Set Up Virtual Environment
git clone https://github.com/kulas-100/agent-tools.git
cd agent-tools
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt2. Environment Configuration
cp .env.example .env
# Edit .env if you wish to change your master or default API keys3. Run the Server
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000Open http://localhost:8000/docs in your browser to test endpoints via the interactive Swagger UI.
π API Usage & cURL Examples
All authenticated requests require the X-API-Key header (default key: test-api-key-12345).
1. Extract Invoice / Receipt Data
curl -X POST http://localhost:8000/tools/invoice-extract \
-H "X-API-Key: test-api-key-12345" \
-H "Content-Type: application/json" \
-d '{
"raw_text": "Acme Cloud Inc.\nTax ID: US-94829104\nINVOICE #INV-2026-8891\nDate: 2026-10-15\nDue: 2026-11-15\nBill To: Wayne Corp\nGPU Compute 2 $ 450.00 $ 900.00\nSubtotal: $ 900.00\nTax: $ 90.00\nTotal: $ 990.00"
}'Response:
{
"success": true,
"invoice": {
"document_type": "invoice",
"invoice_number": "INV-2026-8891",
"vendor_name": "Acme Cloud Inc.",
"vendor_tax_id": "US-94829104",
"customer_name": "Wayne Corp",
"invoice_date": "2026-10-15",
"due_date": "2026-11-15",
"currency": "USD",
"subtotal": 900.0,
"tax_amount": 90.0,
"total_amount": 990.0,
"line_items": [
{
"description": "GPU Compute",
"quantity": 2.0,
"unit_price": 450.0,
"total_price": 900.0
}
]
},
"confidence_score": 1.0,
"math_verified": true,
"processing_time_ms": 19.4
}2. Scrape Webpage to Clean Markdown
curl -X POST http://localhost:8000/tools/web-reader \
-H "X-API-Key: test-api-key-12345" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "include_links": true}'3. Parse PDF Document with Token Budgets
curl -X POST http://localhost:8000/tools/pdf-extract \
-H "X-API-Key: test-api-key-12345" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf", "max_pages": 5}'π€ Model Context Protocol (MCP) Integration
Connect AgentTools directly to Claude Desktop or Cursor:
Claude Desktop Configuration (claude_desktop_config.json)
{
"mcpServers": {
"agenttools": {
"command": "/absolute/path/to/agent-tools/.venv/bin/python",
"args": ["/absolute/path/to/agent-tools/mcp_server.py"]
}
}
}π Public Marketplace Listing
RapidAPI Hub: rapidapi.com/kulas100/api/agenttools
Smithery.ai MCP: Import repository via
smithery.yaml
π License
MIT License. Free for commercial and personal development.
Available Tools
9 toolscalculatorA
Safely evaluate mathematical and scientific expressions using an isolated AST evaluator without unsafe execution. Supports arithmetic (+, -, *, /, **), trigonometry (sin, cos, tan), logarithms, square roots, and factorials. Use whenever exact numeric precision is required to avoid arithmetic hallucinations. Pure, deterministic, and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | The mathematical expression string to evaluate (e.g. 'sqrt(144) + 15 * log(100)'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does well: it discloses the isolated AST evaluator, the no-unsafe-execution model, and that the tool is pure, deterministic, and idempotent. It stops short of describing error behavior for malformed expressions, which keeps it below 5.
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 compact sentences, front-loaded with purpose and the safety claim, then capabilities, then the usage trigger. There is slight redundancy between 'Safely...without unsafe execution' and 'Pure, deterministic, and idempotent', but nothing meaningfully wasteful.
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 single-parameter pure tool with no annotations and no output schema, the description covers purpose, supported operations, safety model, and when to call it. A brief note on the return value or error handling would round it out.
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 100% and the single expression parameter is documented with an example, so the schema does most of the work. The description adds value by listing supported functions (sin, cos, tan, log, sqrt, factorial) that indicate valid expression syntax, but no format or quoting rules.
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?
States a specific verb (evaluate) and resource (mathematical and scientific expressions), and enumerates supported operations. It is clearly distinguishable from siblings like web_search or summarize, which cannot perform exact arithmetic.
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?
Gives explicit when-to-use guidance: 'Use whenever exact numeric precision is required to avoid arithmetic hallucinations.' No exclusions or named alternatives, but no sibling is a plausible substitute for arithmetic evaluation, so the routing guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ip_infoA
Retrieve geolocation, country, city, geographic coordinates, ISP, and timezone metadata for an IP address. Use to inspect IP locations, detect regional origins, or resolve server IP information. Read-only and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | IPv4 or IPv6 address to look up (e.g. '8.8.8.8'). Leave empty or blank to look up the caller's public IP address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description takes on the safety burden itself and does so by declaring the operation 'Read-only and idempotent', which is the key fact an agent needs before calling. It also enumerates the returned data fields, though it omits rate limits and invalid-IP error 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?
Two sentences, zero redundancy: the first defines the returned data, the second defines usage and safety. Returned fields are front-loaded ahead of the softer usage guidance.
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 one-parameter tool with no output schema, listing the returned fields fills the gap that the missing output schema would otherwise leave. Coverage is nearly complete; only the shape of the response (e.g. field formats, failure modes) is left unstated.
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 100% and the single 'ip' parameter is fully documented in the schema, including the empty-value behavior for caller IP lookup. The description adds nothing about parameter meaning beyond what the schema already states, so the baseline 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?
Opens with a specific verb ('Retrieve') and resource ('geolocation, country, city, geographic coordinates, ISP, and timezone metadata for an IP address'), so the agent knows exactly what the tool returns. No sibling in the list overlaps, so differentiation is unnecessary.
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?
Explicitly names three use casesβinspecting IP locations, detecting regional origins, and resolving server IP informationβwhich gives clear selection context. It stops short of stating when NOT to use it or naming an alternative, but no plausible alternative exists among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsA
Fetch current news headlines, summaries, sources, and publication timestamps for any topic or keyword via Google News RSS. Use when monitoring breaking news, market updates, or industry trends. Read-only and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | The topic, industry, person, or search keyword to retrieve news stories for (e.g. 'artificial intelligence'). | |
| max_articles | No | Maximum number of news articles to retrieve (integer between 1 and 20, default 5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden, and it does deliver the safety profile directly: 'Read-only and idempotent,' which tells the agent it can retry freely without side effects. It also implies no auth is needed by citing the public Google News RSS feed. It omits other relevant traits such as rate limiting, result freshness/ordering, or behavior when the feed returns nothing, which is why it lands at adequate rather than strong.
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 short sentences in a sensible order: capability first, then triggering context, then the safety properties. Nothing is padded or repeated. Slightly shy of 5 only because the RSS-source clause and the read-only note could be folded more tightly, but no sentence is wasted.
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 two-parameter read tool with no output schema, the description covers what is returned (headlines, summaries, sources, timestamps) and the safety posture, which is the essential information. Minor gaps remain around empty-result and volume behavior, but an agent could invoke this correctly from what is stated.
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 both `topic` and `max_articles` are already documented with examples and bounds. The description adds only marginally by broadening the notion of a topic to 'any topic or keyword,' and it never mentions `max_articles` in prose. Baseline 3 applies when the schema does the explanatory work.
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 names a specific verb ('Fetch') plus the exact resource and payload: 'current news headlines, summaries, sources, and publication timestamps for any topic or keyword via Google News RSS.' It also identifies the underlying source, so an agent knows precisely what it gets back. No sibling tool covers news, so no differentiation is required.
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?
It gives concrete triggering contexts: 'monitoring breaking news, market updates, or industry trends.' That is clear when-to-use guidance with no misleading exclusions. It stops short of naming when-not-to-use or pointing to a nearby alternative (e.g. web_search for non-news queries), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weatherA
Get current weather conditions (temperature, humidity, wind speed, weather code) and multi-day daily forecasts for any city or geographic location worldwide via Open-Meteo. Use when answering weather queries or trip planning. Read-only and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | City name (e.g. 'Tokyo', 'London', 'San Francisco') or comma-separated latitude,longitude. | |
| forecast_days | No | Number of forecast days to return (integer between 1 and 7, default 3). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden; it does state 'Read-only and idempotent,' which covers the safety profile and is the most important disclosure. It omits unit conventions (Celsius vs Fahrenheit, km/h vs mph), behavior for an unresolvable location string, and whether the Open-Meteo call needs a key or has rate limits β meaningful gaps for a data-fetch 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, front-loaded with the capability and returned fields, followed by the usage trigger and the read-only guarantee. No filler or redundant restatement of the tool name.
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 two-parameter read tool with a fully documented schema and no output schema, the description covers purpose, source, returned fields, and usage context adequately. The main omission is the unit system of the returned values, which matters for interpreting the response.
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 both parameters (location formats, forecast_days range 1-7 with default 3) are already fully documented in the schema. The description only restates 'any city or geographic location worldwide' without adding format nuance, so baseline 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?
States a specific verb ('Get') plus the exact resource ('current weather conditions ... and multi-day daily forecasts'), enumerates the returned fields, and names the upstream provider (Open-Meteo). An agent knows precisely what comes back without opening a schema, and the tool is clearly distinct from unrelated siblings like get_news or web_search.
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?
Gives explicit when-to-use guidance: 'Use when answering weather queries or trip planning.' That is a clear context trigger with no ambiguity about the tool's domain. It does not name exclusions or alternatives, but the sibling set contains no competing weather tool, so there is little to route against.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoice_extractA
Extract structured financial data (vendor, invoice #, PO #, dates, line items, subtotal, tax, total, currency) from invoices, receipts, and bills, verifying mathematical consistency (subtotal + tax == total). Use when processing accounting documents or receipts. Do not use for generic documents. Read-only and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public HTTPS URL pointing directly to an invoice image or PDF file (e.g. 'https://example.com/invoice.pdf'). | |
| raw_text | No | Pre-extracted or OCR text content of the invoice to parse directly. | |
| file_base64 | No | Base64-encoded file content of the invoice or receipt document. | |
| currency_hint | No | 3-letter ISO 4217 currency code hint (e.g. 'USD', 'EUR', 'GBP') if no symbol is found. | USD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden; it does disclose the self-declared read-only/idempotent profile and the added cross-field validation (subtotal + tax == total), which is real behavioral value. It omits what happens when the math fails to reconcile, which of the three input modes takes precedence, and any failure/auth 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?
Front-loaded with the verb and the extracted field set, then usage guidance, then the safety profile β a sensible order with no filler sentences. The parenthetical field list is dense but justified given there is no output schema.
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?
Because there is no output schema, listing the returned fields is necessary and the description does it. Remaining gaps β precedence between url/raw_text/file_base64 and behavior on failed math verification β are modest but real for a 4-param extraction 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?
Schema coverage is 100%, so all four parameters (url, raw_text, file_base64, currency_hint) are already documented in the schema, which sets the baseline at 3. The description adds nothing about mutual exclusivity or precedence among the three optional input sources, which is the main semantic risk for this tool.
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?
States a specific verb (extract) plus the exact resource and output fields (vendor, invoice #, PO #, line items, subtotal, tax, total, currency), and scopes it to invoices/receipts/bills. The 'do not use for generic documents' line separates it from the pdf_extract sibling.
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?
Gives both a positive trigger ('processing accounting documents or receipts') and an exclusion ('do not use for generic documents'). It stops short of naming the sibling an agent should fall back to for generic PDFs, so the routing is clear but not fully resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_extractA
Extract text per page, outlines, document metadata, and accurate token count estimates from PDF documents. Use when ingesting multi-page reports, whitepapers, contracts, or legal documents into context. Read-only and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Direct HTTPS URL to download the target PDF file. | |
| max_pages | No | Maximum number of consecutive pages to extract (1 to 50, default 15). | |
| start_page | No | 1-based index of the first page to extract (default 1). | |
| file_base64 | No | Base64-encoded binary content of the PDF file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well by declaring the operation read-only and idempotent. It also lists what is returned (per-page text, outlines, metadata, token estimates), though it omits details like file-size limits, rate limits, or pagination behavior beyond the 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?
Two tightly written sentences, front-loaded with the action and outputs, followed by usage context and safety traits. No filler or redundant restatement of the name or schema.
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 tool with no output schema, the description usefully enumerates the returned artifacts (text, outlines, metadata, token counts). It leaves out input-mode selection guidance and size or rate constraints, but the core extraction contract is clear enough to invoke correctly.
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 100%, so URL, base64, max_pages, and start_page are already fully documented in the schema. The description adds no parameter-level guidance such as when to prefer URL versus file_base64, so the 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?
States a specific verb (extract) and concrete resources (text per page, outlines, metadata, token counts) from PDFs. This clearly distinguishes it from sibling tools like web_reader or summarize, which are not PDF-specific extraction tools.
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?
Provides clear usage context: ingesting multi-page reports, whitepapers, contracts, or legal documents. It does not explicitly name alternatives or exclusions, but the document-type guidance is sufficiently specific to route most calls correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarizeA
Perform extractive text summarization to identify and return the most informative, central sentences from long articles or documents based on term-frequency scoring. Use to compress long context into key points. Pure, deterministic, and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Raw text content to summarize (maximum 50,000 characters). | |
| num_sentences | No | Number of key summary sentences to extract (integer between 1 and 10, default 3). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does meaningful work: "Pure, deterministic, and idempotent" effectively declares a no-side-effect, repeatable read operation, which is exactly the property an agent would otherwise want from annotations. The method (term-frequency scoring, extractive rather than abstractive) further sets expectations about output fidelity, though error behavior on oversized input is left to the 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?
Three sentences, each load-bearing: the first defines method and output, the second gives the use case, the third states behavioral guarantees. The purpose is front-loaded and there is no filler or repetition of schema content.
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 low-complexity, two-parameter tool with no annotations and no output schema, the definition covers method, use case, and side-effect profile. The only modest gap is that it does not describe the shape of the returned result (e.g., ordered list of sentences), which matters slightly since no output schema exists.
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%, with both 'text' (50,000-char cap) and 'num_sentences' (1-10, default 3) fully documented in the schema, so the baseline is 3. The description adds only the notion of "most informative, central sentences" as the selection criterion, without extra detail on the optional parameter beyond what the schema states.
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 names a specific verb and resource: extractive summarization of long articles/documents based on term-frequency scoring, and clarifies it returns central sentences rather than abstractive rewrites. That is far more precise than a restatement of the name. It does not, however, reference any sibling tool (e.g., web_reader or pdf_extract as upstream sources), so it stops short of full differentiation.
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?
It offers one explicit usage cue: "Use to compress long context into key points." That tells the agent a triggering condition but gives no when-not guidance, no input-size prerequisite beyond the schema's 50,000-character cap, and no mention of how it relates to siblings that fetch or extract long text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_readerA
Fetch a public webpage URL and extract clean, structured Markdown optimized for LLM token efficiency, stripping headers, footers, ads, and navigation menus. Use when reading articles, blog posts, documentation, or public web pages. Read-only and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The absolute HTTP or HTTPS URL of the webpage to fetch and convert to Markdown. | |
| max_length | No | Maximum character limit for the returned Markdown content (1,000 to 50,000, default 15000). | |
| include_links | No | Whether to extract and append a catalog of all hyperlinks found in the document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description does the heavy lifting: it discloses the read-only, idempotent safety profile and explains what the tool strips (headers, footers, ads, navigation menus) and what it returns (Markdown for token efficiency). It omits failure behavior β blocked, paywalled, or JavaScript-rendered pages β which an agent calling a scraper would benefit from knowing.
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 zero padding; the core action and transformation lead, and the usage guidance plus safety profile follow compactly.
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 three-parameter fetch tool with no output schema and no annotations, the description covers action, scope, output shape, and safety. The remaining gap is error/edge-case behavior, which is not covered anywhere else in the structured data.
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 all three parameters are already documented in the schema with defaults and ranges. The description adds only indirect context ('LLM token efficiency') that motivates the length limit, without further clarifying parameter behavior, so the baseline 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?
States a specific verb ('fetch') and resource (a public webpage URL) plus the transformation performed ('extract clean, structured Markdown'), which cleanly separates it from the sibling web_search tool that locates pages rather than reading them.
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?
Gives a clear usage context ('reading articles, blog posts, documentation, or public web pages') and implicitly scopes out non-public/authenticated pages via 'public webpage URL'. It does not name an explicit alternative or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchA
Search the live web using DuckDuckGo to retrieve real-time search results, titles, URLs, and text snippets. Use when you need current facts, external references, or breaking information not in your training data. Read-only and idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string, keywords, or question (e.g. 'latest Python PEP releases'). | |
| max_results | No | Number of search results to return (integer between 1 and 20, default 5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the burden and does disclose key traits: read-only, idempotent, and that results are snippets rather than full page content (which matters for choosing web_reader). It omits rate limits, empty-result behavior, and whether snippets are truncated.
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 short sentences, front-loaded with the action and engine, then the use case, then the safety profile. No filler or repetition; 'read-only and idempotent' earns its place precisely because no annotations exist.
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 two-parameter search tool with no output schema, the description covers purpose, trigger conditions, and the shape of returned results. The remaining gap is minor: it does not say what to do when results are insufficient (e.g., escalate to web_reader, which the sibling list suggests exists).
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 both 'query' and 'max_results' (with its 1-20 bound and default 5) are already fully documented structurally. The description adds no syntax, format, or query-construction guidance beyond what the schema provides, so baseline 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?
Specific verb+resource+engine: 'Search the live web using DuckDuckGo' and it enumerates what comes back (titles, URLs, text snippets). It does not name a sibling (e.g., web_reader for full-page content, get_news for curated feeds), so the boundary with the closest alternative is left to inference.
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?
'Use when you need current facts, external references, or breaking information not in your training data' gives a clear positive trigger tied to data staleness. No when-not guidance or pointer to web_reader/get_news for full content or curated headlines, so the exclusion side is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.3- Changed
calculator1 field changed- changed
Input schema / properties / expression / descriptionPrevious value: -"Math expression (e.g. 'sqrt(144)', 'sin(pi/2)')"New value: +"The mathematical expression string to evaluate (e.g. 'sqrt(144) + 15 * log(100)')."
- Changed
get_ip_info1 field changed- changed
Input schema / properties / ip / descriptionPrevious value: -"IP address (leave blank for your own IP)"New value: +"IPv4 or IPv6 address to look up (e.g. '8.8.8.8'). Leave empty or blank to look up the caller's public IP address."
- Changed
get_news2 fields changed- changed
Input schema / properties / max_articles / descriptionPrevious value: -"Number of articles (1-20)"New value: +"Maximum number of news articles to retrieve (integer between 1 and 20, default 5)." - changed
Input schema / properties / topic / descriptionPrevious value: -"News topic or keyword"New value: +"The topic, industry, person, or search keyword to retrieve news stories for (e.g. 'artificial intelligence')."
- Changed
get_weather2 fields changed- changed
Input schema / properties / forecast_days / descriptionPrevious value: -"Forecast days (1-7)"New value: +"Number of forecast days to return (integer between 1 and 7, default 3)." - changed
Input schema / properties / location / descriptionPrevious value: -"City name (e.g. 'London', 'New York')"New value: +"City name (e.g. 'Tokyo', 'London', 'San Francisco') or comma-separated latitude,longitude."
- Changed
invoice_extract4 fields changed- changed
Input schema / properties / currency_hint / descriptionPrevious value: -"Default currency code (default USD)"New value: +"3-letter ISO 4217 currency code hint (e.g. 'USD', 'EUR', 'GBP') if no symbol is found." - changed
Input schema / properties / file_base64 / descriptionPrevious value: -"Base64-encoded invoice file"New value: +"Base64-encoded file content of the invoice or receipt document." - changed
Input schema / properties / raw_text / descriptionPrevious value: -"Raw invoice text if already extracted"New value: +"Pre-extracted or OCR text content of the invoice to parse directly." - changed
Input schema / properties / url / descriptionPrevious value: -"URL to invoice PDF or image"New value: +"Public HTTPS URL pointing directly to an invoice image or PDF file (e.g. 'https://example.com/invoice.pdf')."
- Changed
pdf_extract4 fields changed- changed
Input schema / properties / file_base64 / descriptionPrevious value: -"Base64-encoded PDF binary"New value: +"Base64-encoded binary content of the PDF file." - changed
Input schema / properties / max_pages / descriptionPrevious value: -"Maximum pages to extract (default 15)"New value: +"Maximum number of consecutive pages to extract (1 to 50, default 15)." - changed
Input schema / properties / start_page / descriptionPrevious value: -"Starting page number (default 1)"New value: +"1-based index of the first page to extract (default 1)." - changed
Input schema / properties / url / descriptionPrevious value: -"Direct URL of the PDF"New value: +"Direct HTTPS URL to download the target PDF file."
- Changed
summarize2 fields changed- changed
Input schema / properties / num_sentences / descriptionPrevious value: -"Number of output sentences (1-10)"New value: +"Number of key summary sentences to extract (integer between 1 and 10, default 3)." - changed
Input schema / properties / text / descriptionPrevious value: -"Text to summarize (max 50,000 chars)"New value: +"Raw text content to summarize (maximum 50,000 characters)."
- Changed
web_reader3 fields changed- changed
Input schema / properties / include_links / descriptionPrevious value: -"Whether to return page links catalog"New value: +"Whether to extract and append a catalog of all hyperlinks found in the document." - changed
Input schema / properties / max_length / descriptionPrevious value: -"Max markdown length (default 15000)"New value: +"Maximum character limit for the returned Markdown content (1,000 to 50,000, default 15000)." - changed
Input schema / properties / url / descriptionPrevious value: -"The full URL to fetch"New value: +"The absolute HTTP or HTTPS URL of the webpage to fetch and convert to Markdown."
- Changed
web_search2 fields changed- changed
Input schema / properties / max_results / descriptionPrevious value: -"Number of results (1-20)"New value: +"Number of search results to return (integer between 1 and 20, default 5)." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query"New value: +"The search query string, keywords, or question (e.g. 'latest Python PEP releases')."
9 tool updates
v0.1.0- First observed
calculator - First observed
get_ip_info - First observed
get_news - First observed
get_weather - First observed
invoice_extract - First observed
pdf_extract - First observed
summarize - First observed
web_reader - First observed
web_search
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes, but web_search and get_news overlap for current information, and invoice_extract can be confused with pdf_extract when invoices are PDFs. Descriptions largely help route correctly.
All names use snake_case, but the conventions are mixed: verb_noun (get_weather), noun_verb (invoice_extract), noun (calculator), and bare verb (summarize). The names remain readable, but there is no single predictable pattern.
Nine tools is well within the typical 3-15 range for a general agent toolkit, and each tool appears to earn its place as a distinct utility. There are no redundant variants or obvious filler tools.
The set covers a reasonable agent utility surface: document extraction, web reading/search, weather, math, news, summarization, and IP metadata. Some common gaps remain, such as generic file-format handling, OCR, or date/time utilities, but these are minor enough to work around.
Maintenance
Related MCP Connectors
Pay-per-use agent tools: screenshots, web to Markdown, PDF tables, OCR, UK company checks
Web pages and PDFs to clean, LLM-ready Markdown with token counts, small crawls and RAG chunks.
Stateless agentic tools over MCP: concept extraction, long-context, knowledge graph, planning.
Web tools for AI agents: URL to clean Markdown, site crawl, screenshots, PDF/Office to text, OCR.
Related MCP Servers
- AlicenseBqualityAmaintenanceAI-native business management β invoices, expenses, clients, products, quotes, and webhooks. 31 tools for Claude, Cursor, Windsurf, and Cline.100552 npm13MIT
- AlicenseAqualityCmaintenanceMCP server for document intelligence via x402 micropayments. 6 tools: document analysis, invoice extraction, screenshot data, alt text, PII detection, sentiment analysis. Pay-per-use with USDC on Base β no API keys needed.61 npmMIT
- AlicenseCqualityBmaintenanceFile-based multi-agent coordination with persistent tasks, reports, issues and reviews. FCoP 4.0.5 provides 25 canonical MCP tools and 6 read-only resources over local stdio. Work stays in your project as Markdown records, with task lifecycle validation and branch workflows. Includes a Python API and a CLI for setup, inspection and diagnostics.2564 PyPI3MIT
- AlicenseBqualityCmaintenanceMCP bridge for PDF Content Search β full-text PDF search with Apple Vision OCR across thousands of documents in under a second from Claude, Cursor, or any MCP client. Advanced filters (date, category, sender, amount), wildcards, boolean operators. Bridge open-source (MIT), PDF Content Search app is commercial with free iOS+Android companion scanner apps.841MIT