Tools That Don't Upload
Server Details
Search and run data, text, code, PDF and web APIs. Requests not stored. Network tools need a key.
- Status
- Healthy
- Uptime
- 98.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- etacbae6768-a11y/tools-that-dont-upload
- GitHub Stars
- 0
TDQS
Scored across 3 tools
The three tools have mostly distinct roles: list_categories enumerates the catalog structure, search_tools does keyword lookup, and run_tool executes. list_categories and search_tools both serve catalog browsing and could marginally overlap when an agent just wants to see what exists, but the descriptions make the boundary clear.
All three names follow a clean snake_case verb_noun pattern (list_categories, run_tool, search_tools). Consistent and immediately readable, with no mixed conventions.
Three tools is on the thin side but defensible for a thin gateway whose real surface is the external catalog it proxies. Each tool earns its place with no redundancy, though there is little room for anything beyond browse/search/execute.
The core meta-server lifecycle is covered: discover categories, search the catalog, and execute a tool with arguments, plus documented error statuses. A minor gap is the absence of a direct 'get tool details by exact name' or introspection/health tool, but search_tools largely compensates.
Available Tools
3 toolslist_categoriesList categoriesARead-onlyIdempotentInspect
List tool categories with counts and example tool names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, not open-world). The description goes beyond them by disclosing what the operation actually returns — category names with counts and example tool names — which is meaningful given there is no output 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?
A single front-loaded sentence with the resource and the return shape packed in, and not a word of padding. Nothing could be removed without losing 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 zero-parameter, read-only listing tool with full annotation coverage, the definition covers purpose and output content adequately. Minor gaps remain around ordering or pagination of categories, but these are unlikely to matter for a small static list.
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 tool takes zero parameters, so there is nothing for the description to disambiguate. This is the baseline case where no parameter guidance is required.
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 (List) and resource (tool categories) and even previews the return content (counts and example tool names). It is clearly distinguishable from run_tool and search_tools by its resource, though it never names those siblings explicitly.
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?
Usage is only implied: an agent can infer this is the discovery/browsing entry point before calling search_tools or run_tool, but the description states no when-to-use condition, no ordering relative to siblings, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_toolRun a toolAInspect
Run a catalog tool by name with an arguments object. Returns the tool result and the external hosts contacted (usually none). Errors keep the HTTP status: 400 invalid input, 405 wrong method, 413 input over the size limit (files over 10 MB through MCP, JSON over 2 MiB), 422 a file that cannot be processed (for example an encrypted PDF), 429 quota used up.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | Catalog tool name (e.g. "hash_text", "pdf_merge", "web_fetch") | |
| arguments | Yes | Tool arguments as key-value pairs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the return payload (tool result plus external hosts contacted), and maps failure modes to HTTP semantics (400, 405, 413, 422, 429) with concrete size ceilings of 10 MB per file and 2 MiB of JSON. This is unusually rich behavioral context for a mutating, open-world 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?
Purpose is front-loaded in the first clause, and the error enumeration is dense but each code carries distinct actionable meaning. Slightly list-heavy, 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?
With no output schema, the description correctly explains the return value and error behavior, making it callable without further inference. It stops short of describing the nested arguments object's shape or how tool names are discovered.
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 already 100%, so the baseline is 3, but the description adds real constraint meaning to 'arguments' by specifying the 2 MiB JSON cap and the 10 MB per-file limit that shape what can legally be passed.
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 and resource: 'Run a catalog tool by name with an arguments object.' This is clearly the execution counterpart to the discovery siblings list_categories and search_tools, though the description never explicitly names them to draw the contrast.
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 prerequisite guidance; it never says the tool name must first come from search_tools/list_categories, nor when this is preferable to those siblings. Usage is only faintly implied by 'by name.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_toolsSearch toolsARead-onlyIdempotentInspect
Search the tool catalog by keyword. Returns matching tool names, descriptions, parameters and a tested example argument object for each.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-50, default 10) | |
| query | Yes | Search keywords (e.g. "pdf merge", "sha256", "translate", "dns") | |
| category | No | Optional filter: compute, network, file, ai, or a category id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is the return shape: names, descriptions, parameters, and a tested example argument object. That is genuine disclosure beyond the structured fields, though pagination/ordering behavior goes unmentioned.
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 filler, with the core action front-loaded and the return content following immediately. Nothing can be cut without losing 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?
No output schema exists, so the description correctly takes on the job of describing return values, which it does well for a simple three-parameter search tool. Minor gaps remain around result ordering and empty-result behavior, but nothing essential to invoking it correctly is missing.
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 with examples and defaults. The description only restates the keyword concept and adds no format or filtering nuance beyond the schema, which is the baseline-3 case.
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 states a specific verb and resource ('Search the tool catalog by keyword') and clearly separates itself in function from list_categories (browse) and run_tool (execute). It stops short of explicitly naming or contrasting those siblings, so the differentiation is only implicit.
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?
Usage is implied by 'by keyword' and the keyword examples in the schema, but there is no explicit statement of when to reach for this tool versus list_categories or run_tool, and no exclusions or prerequisites are given.
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.
2 tool updates
- Changed
run_tool1 field changed- changed
Input schema / properties / tool / descriptionPrevious value: -"Tool name from search_tools (e.g. \"hash_text\", \"pdf_merge\", \"web_fetch\")"New value: +"Catalog tool name (e.g. \"hash_text\", \"pdf_merge\", \"web_fetch\")"
- Changed
search_tools1 field changed- changed
Input schema / properties / category / descriptionPrevious value: -"Optional filter: compute, network, file, ai, or a category id from list_categories"New value: +"Optional filter: compute, network, file, ai, or a category id"
1 tool update
- Changed
search_tools3 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Optional category filter: compute, network, file, ai"New value: +"Optional filter: compute, network, file, ai, or a category id from list_categories" - added
Input schema / properties / limitAdded value: +{ + "description": "Max results (1-50, default 10)", + "type": "integer" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Search keyword (e.g. \"pdf merge\", \"hash\", \"translate\", \"dns\")"New value: +"Search keywords (e.g. \"pdf merge\", \"sha256\", \"translate\", \"dns\")"
104 tool updates
- Removed
aes_decrypt - Removed
aes_encrypt - Removed
age_calc - Removed
avatar_generate - Removed
barcode_generate - Removed
base64_decode - Removed
base64_encode - Removed
business_days - Removed
cidr_calc - Removed
color_blend - Removed
color_contrast - Removed
color_convert - Removed
color_palette - Removed
credit_card_validate - Removed
cron_parse - Removed
csv_to_json - Removed
date_calculate - Removed
date_format - Removed
detect_format - Removed
dns_lookup - Removed
email_validate - Removed
fake_data - Removed
generate_qr - Removed
generate_uuid - Removed
hash_text - Removed
hashtag_generate - Removed
hmac_sign - Removed
html_entities_encode - Removed
html_minify - Removed
html_to_markdown - Removed
http_status_info - Removed
iban_validate - Removed
ip_info - Removed
ip_validate - Removed
json_diff - Removed
json_diff_detailed - Removed
json_flatten - Removed
json_format - Removed
json_sort_keys - Removed
json_to_csharp - Removed
json_to_csv - Removed
json_to_go - Removed
json_to_java - Removed
json_to_kotlin - Removed
json_to_php - Removed
json_to_python - Removed
json_to_ruby - Removed
json_to_rust - Removed
json_to_sql_create - Removed
json_to_swift - Removed
json_to_typescript - Removed
json_to_yaml - Removed
json_validate - Removed
keyword_extract - Removed
language_detect - Removed
link_check - Added
list_categories - Removed
lorem_ipsum - Removed
markdown_to_html - Removed
markdown_to_text - Removed
math_factorial - Removed
math_fibonacci - Removed
math_gcd - Removed
math_is_prime - Removed
math_percentage - Removed
meta_extract - Removed
meta_generate - Removed
morse_encode - Removed
number_to_words - Removed
otp_generate - Removed
password_generate - Removed
password_strength - Removed
phone_validate - Removed
reading_time - Removed
regex_test - Removed
relative_time - Removed
robots_check - Removed
robots_generate - Removed
rot13 - Added
run_tool - Added
search_tools - Removed
sitemap_generate - Removed
sql_format - Removed
ssl_check - Removed
text_case - Removed
text_dedupe - Removed
text_diff - Removed
text_reverse - Removed
text_sentiment - Removed
text_slug - Removed
text_to_markdown - Removed
text_truncate - Removed
timezone_convert - Removed
unit_convert - Removed
url_decode - Removed
url_encode - Removed
url_info - Removed
url_validate - Removed
uuid_batch - Removed
web_fetch - Removed
whois_lookup - Removed
word_count - Removed
xml_to_json - Removed
yaml_to_json
101 tool updates
- First observed
aes_decrypt - First observed
aes_encrypt - First observed
age_calc - First observed
avatar_generate - First observed
barcode_generate - First observed
base64_decode - First observed
base64_encode - First observed
business_days - First observed
cidr_calc - First observed
color_blend - First observed
color_contrast - First observed
color_convert - First observed
color_palette - First observed
credit_card_validate - First observed
cron_parse - First observed
csv_to_json - First observed
date_calculate - First observed
date_format - First observed
detect_format - First observed
dns_lookup - First observed
email_validate - First observed
fake_data - First observed
generate_qr - First observed
generate_uuid - First observed
hash_text - First observed
hashtag_generate - First observed
hmac_sign - First observed
html_entities_encode - First observed
html_minify - First observed
html_to_markdown - First observed
http_status_info - First observed
iban_validate - First observed
ip_info - First observed
ip_validate - First observed
json_diff - First observed
json_diff_detailed - First observed
json_flatten - First observed
json_format - First observed
json_sort_keys - First observed
json_to_csharp - First observed
json_to_csv - First observed
json_to_go - First observed
json_to_java - First observed
json_to_kotlin - First observed
json_to_php - First observed
json_to_python - First observed
json_to_ruby - First observed
json_to_rust - First observed
json_to_sql_create - First observed
json_to_swift - First observed
json_to_typescript - First observed
json_to_yaml - First observed
json_validate - First observed
keyword_extract - First observed
language_detect - First observed
link_check - First observed
lorem_ipsum - First observed
markdown_to_html - First observed
markdown_to_text - First observed
math_factorial - First observed
math_fibonacci - First observed
math_gcd - First observed
math_is_prime - First observed
math_percentage - First observed
meta_extract - First observed
meta_generate - First observed
morse_encode - First observed
number_to_words - First observed
otp_generate - First observed
password_generate - First observed
password_strength - First observed
phone_validate - First observed
reading_time - First observed
regex_test - First observed
relative_time - First observed
robots_check - First observed
robots_generate - First observed
rot13 - First observed
sitemap_generate - First observed
sql_format - First observed
ssl_check - First observed
text_case - First observed
text_dedupe - First observed
text_diff - First observed
text_reverse - First observed
text_sentiment - First observed
text_slug - First observed
text_to_markdown - First observed
text_truncate - First observed
timezone_convert - First observed
unit_convert - First observed
url_decode - First observed
url_encode - First observed
url_info - First observed
url_validate - First observed
uuid_batch - First observed
web_fetch - First observed
whois_lookup - First observed
word_count - First observed
xml_to_json - First observed
yaml_to_json
Publisher details
- Operator
- Park Jihoon (박지훈), individual business operator, Republic of Korea (business reg. 280-30-01413) · Publisher source
- Operator website
- https://toolsthatdontupload.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://toolsthatdontupload.com/docs/mcp/ · Publisher source
- Trust center
- Not available
- Restrictions
- No sign-in for compute tools. Network tools (fetch URL, DNS, WHOIS, SSL) need a free API key in the X-API-Key header. Anonymous limits: file 20 and AI 10 calls/day per IP. Paid plans not yet on sale. · Publisher source
Related MCP Connectors
30+ web-access and AI APIs behind one key: search, scraping, browsers, voice, OCR and LLMs.
PDF, image, video, OCR, screenshot, SQL, QR and text tools for agents. No API key, no signup.
Web search, scraping, Google Trends and data lookups. Paid per call in USDC on Base via x402.
Discover, inspect and run 63,000+ agent tools from one balance. Pay per call, no subscriptions.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search and retrieve government contracts, job postings, LinkedIn profiles, YC startups, contact details, tech stacks, PDF text, and Google Trends through 13 integrated tools. It returns compact JSON, handles long-running queries with progress and run results paging, and runs the underlying scrapers on the user's Apify account.MIT
- FlicenseNot gradedqualityDmaintenanceProvides free web search, content fetching, image search, and deep research via SearXNG, no API keys required.-
- FlicenseNot gradedqualityAmaintenanceEnables clients to run searches across Google, Bing, Yahoo, DuckDuckGo, YouTube, eBay, and other engines, retrieve real-time weather and stock data, and receive results as JSON or Markdown through a single search tool.-
- AlicenseNot gradedqualityAmaintenanceRead any web page and search the web for free. Routes each page across 28 web tools cheapest first (plain HTTP, Jina Reader, Chromium, stealth browsers) and checks it's the page you asked for before returning it. Paid tools stay off unless you add keys.1,742 PyPI105Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.