{"name":"org.toolapi/hub","slug":"toolapi-hub","title":"ToolAPI","description":"Free public MCP for AI agents — 193 tools, 44 workflows. No API key.","url":"https://mcp.market/server/toolapi-hub","rating":null,"grade":"B","score":76,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":2,"forks":0,"downloads_week":null,"last_push_at":"2026-06-30T17:43:19.000Z","license":null},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T11:00:38.328Z","last_ok_at":"2026-11-04T11:00:38.328Z","latency_ms":665},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/baohuiwb/toolapi","website":"https://toolapi.org","version":"2.8.2","remotes":[{"type":"sse","url":"https://toolapi.org/sse"},{"type":"streamable-http","url":"https://toolapi.org/mcp"}],"packages":[],"tools":[{"name":"base64_decode","description":"Base64-decode to UTF-8.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"base64_encode","description":"Base64-encode UTF-8.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"base64url_decode","description":"Base64url-decode to UTF-8.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"base64url_encode","description":"Base64url-encode UTF-8 (no padding, URL-safe).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"bcrypt_hash","description":"Bcrypt-hash a password for storage.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"password":{"type":"string"},"rounds":{"type":"integer","default":12,"minimum":4,"maximum":15}},"required":["password"]}},{"name":"bcrypt_verify","description":"Verify password against bcrypt hash.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"password":{"type":"string"},"hash":{"type":"string"}},"required":["password","hash"]}},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"cidr_calc","description":"Calculate IPv4/IPv6 network info from CIDR (hosts, broadcast, private).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cidr":{"type":"string","description":"e.g. 192.168.1.0/24"}},"required":["cidr"]}},{"name":"cidr_contains","description":"Check if IP address falls within a CIDR range.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cidr":{"type":"string"},"ip":{"type":"string"}},"required":["cidr","ip"]}},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"color_contrast","description":"WCAG contrast ratio between two hex colors (AA/AAA). When: WCAG contrast ratio for UI color pairs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"fg":{"type":"string"},"bg":{"type":"string"}},"required":["fg","bg"]}},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl().","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"color":{"type":"string","description":"hex, rgb(), or hsl()"},"to_format":{"type":"string","enum":["all","hex","rgb","hsl"],"default":"all"}},"required":["color"]}},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"content_type_parse","description":"Parse Content-Type header into mime/charset/params.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"header":{"type":"string"}},"required":["header"]}},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},{"name":"cookie_header_parse","description":"Parse Cookie request header into name/value map. When: Parse Cookie request headers.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"header":{"type":"string"}},"required":["header"]}},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"origin":{"type":"string"},"allow_origin":{"type":"string"},"allow_credentials":{"type":"boolean","default":false}},"required":["allow_origin"]}},{"name":"cron_describe","description":"Human-readable natural language description of cron expression (EN + ZH).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expr":{"type":"string"}},"required":["expr"]}},{"name":"cron_matches","description":"Check if a cron expression matches a specific datetime (ISO-8601).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expr":{"type":"string"},"at_time":{"type":"string","description":"ISO-8601 datetime"},"timezone":{"type":"string","default":"UTC"}},"required":["expr","at_time"]}},{"name":"cron_next_runs","description":"Preview next N execution times for a 5-field cron expression.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expr":{"type":"string"},"count":{"type":"integer","default":5,"minimum":1,"maximum":20},"from_time":{"type":"string","description":"Optional unix or ISO start time"},"timezone":{"type":"string","default":"UTC"}},"required":["expr"]}},{"name":"cron_parse","description":"Parse 5-field cron into named fields (minute hour dom month dow).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expr":{"type":"string"}},"required":["expr"]}},{"name":"cron_semantic_validate","description":"Validate cron field syntax and value ranges (minute 0-59, hour 0-23, etc.).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expr":{"type":"string"}},"required":["expr"]}},{"name":"cron_validate","description":"Check cron string has exactly five fields.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expr":{"type":"string"}},"required":["expr"]}},{"name":"cron_validate_batch","description":"Batch semantic validate of 5-field cron expressions.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expressions":{"type":"array","items":{"type":"string"},"maxItems":30}},"required":["expressions"]}},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"header":{"type":"string"}},"required":["header"]}},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"delimiter":{"type":"string","default":","},"has_header":{"type":"boolean","default":true}},"required":["text"]}},{"name":"currency_convert","description":"Convert amount between currencies using latest ECB rates.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number"},"from_currency":{"type":"string"},"to_currency":{"type":"string"}},"required":["amount","from_currency","to_currency"]}},{"name":"currency_list","description":"List supported fiat currencies (Frankfurter/ECB, no API key).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"currency_rates","description":"Latest exchange rates (Frankfurter ECB data, no API key).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"base":{"type":"string","default":"USD"},"symbols":{"type":"array","items":{"type":"string"},"description":"Optional target currencies e.g. CNY, EUR"}}}},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"string"}},"required":["value"]}},{"name":"dependency_versions_extract","description":"Extract name@version from requirements/lockfile/go.mod/Cargo snippets. When: Extract name@version from lock/requirements snippets (best-effort).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"ecosystem":{"type":"string","enum":["auto","pip","npm","go","cargo"],"default":"auto"}},"required":["text"]}},{"name":"dns_lookup","description":"DNS lookup for domain (A, AAAA, MX, TXT, NS, CNAME, SOA).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string"},"record_type":{"type":"string","enum":["A","AAAA","MX","TXT","NS","CNAME","SOA","ANY"],"default":"A"}},"required":["domain"]}},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"domain_parse","description":"Parse domain into labels, TLD, registrable domain, subdomain. When: Split domain into subdomain/registrable/TLD (best-effort eTLD).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"string"}},"required":["value"]}},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]}},{"name":"env_diff","description":"Diff two .env files — only_in_a / only_in_b / changed values. When: Diff two .env files for missing/changed keys.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},{"name":"env_parse","description":"Parse .env / dotenv text into key-value variables.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"required":{"type":"array","items":{"type":"string"}}},"required":["text","required"]}},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"git_url_parse","description":"Parse git remote URL (ssh/https) into host/owner/repo. When: Parse git@ / https remotes into owner/repo.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"paths":{"type":"array","items":{"type":"string"}},"gitignore":{"type":"string"}},"required":["paths","gitignore"]}},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"paths":{"type":"array","items":{"type":"string"}},"patterns":{"type":"array","items":{"type":"string"}}},"required":["paths","patterns"]}},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"old":{"type":"string"},"new":{"type":"string"}},"required":["old","new"]}},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"hash_compare","description":"Compare two hash digests (case-insensitive).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},{"name":"hash_md5","description":"MD5 hex digest of UTF-8 text. When: MD5 digest (non-crypto integrity / legacy checksums).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"hash_sha256","description":"SHA256 hex digest.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"hash_sha512","description":"SHA512 hex digest.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"hex_decode","description":"Hex string to UTF-8 text.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"hex_encode","description":"UTF-8 text to hex string.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"hmac_sign","description":"HMAC sign message (sha1/sha256/sha512); hex or base64 output.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"message":{"type":"string"},"secret":{"type":"string"},"algorithm":{"type":"string","default":"sha256"},"encoding":{"type":"string","enum":["hex","base64"],"default":"hex"}},"required":["message","secret"]}},{"name":"hmac_verify","description":"Verify HMAC signature (hex or base64).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"message":{"type":"string"},"secret":{"type":"string"},"signature":{"type":"string"},"algorithm":{"type":"string","default":"sha256"}},"required":["message","secret","signature"]}},{"name":"hosts_file_parse","description":"Parse /etc/hosts style file into IP → hostnames entries. When: Parse /etc/hosts style IP→hostname maps.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"html_decode","description":"Unescape HTML entities.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"html_encode","description":"Escape HTML entities.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"html_security_scan","description":"Scan HTML for XSS-prone patterns (javascript: URLs, inline handlers, eval). Note: best-effort / heuristic — not a full language parser.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string"}},"required":["html"]}},{"name":"http_headers_fetch","description":"Fetch HTTP response headers (HEAD/GET) for URL.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string"},"method":{"type":"string","enum":["HEAD","GET"],"default":"HEAD"},"follow_redirects":{"type":"boolean","default":true}},"required":["url"]}},{"name":"http_headers_parse","description":"Parse raw HTTP request/response header block into map. When: Parse raw HTTP header blocks.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"http_status_classify","description":"Classify HTTP status codes into 2xx/3xx/4xx/5xx buckets.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"codes":{"type":"array","items":{"type":["integer","string"]}}},"required":["codes"]}},{"name":"http_status_lookup","description":"Explain HTTP status code (e.g. 404, 429, 503).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"code":{"type":"integer"}},"required":["code"]}},{"name":"human_bytes","description":"Format bytes to human size, or parse '1.5 GB' to bytes. When: Format or parse human byte sizes (1.5 GB).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"number"},"text":{"type":"string"},"precision":{"type":"integer","default":2}}}},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"},"language":{"type":"string","enum":["python","javascript","typescript"],"default":"python"}},"required":["name"]}},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"language":{"type":"string","enum":["python","javascript"],"default":"python"}},"required":["text"]}},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"ip_geolocation","description":"Geolocate public IP: country, city, lat/lon, timezone, ISP.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ip":{"type":"string"}},"required":["ip"]}},{"name":"ip_version_detect","description":"Detect IPv4/IPv6 and classify private/loopback/global. When: Classify IPv4/IPv6 and private/global.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ip":{"type":"string"}},"required":["ip"]}},{"name":"ipv4_private_check","description":"Classify IP as private/loopback/link-local/global (SSRF helper).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ip":{"type":"string"}},"required":["ip"]}},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"data":{"type":"string"},"assertions":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"exists":{"type":"boolean"},"equals":{},"type":{"type":"string"}},"required":["path"]}}},"required":["data","assertions"]}},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"separator":{"type":"string","default":"."}},"required":["text"]}},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"indent":{"type":"integer","default":2}},"required":["text"]}},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"target":{"type":"string"},"patch":{"type":"string"}},"required":["target","patch"]}},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"json_patch_apply","description":"Apply RFC 6902 JSON Patch ops (add/remove/replace/test/move/copy). When: Apply RFC 6902 ops (add/remove/replace/test/move/copy).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"data":{"type":"string"},"patch":{"type":"string"}},"required":["data","patch"]}},{"name":"json_pointer_get","description":"Get value by RFC 6901 JSON Pointer (e.g. /user/id). When: Read one field by RFC 6901 pointer without full walk in the agent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"data":{"type":"string"},"pointer":{"type":"string","default":""}},"required":["data"]}},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"data":{"type":"string"},"title":{"type":"string","default":"Inferred"}},"required":["data"]}},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"data":{"type":"string","description":"JSON document text"},"schema":{"type":"string","description":"JSON Schema (Draft 7)"},"max_errors":{"type":"integer","default":20,"minimum":1,"maximum":50}},"required":["data","schema"]}},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"items":{"type":"array","maxItems":25,"items":{"type":"object","properties":{"id":{"type":"string"},"data":{"type":"string"},"schema":{"type":"string"}},"required":["data","schema"]}},"max_errors":{"type":"integer","default":10}},"required":["items"]}},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"json_to_toml","description":"Convert JSON object text to TOML string.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"json_validate","description":"Validate JSON text; return parsed object or error.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"schema":{"type":"string"},"max_lines":{"type":"integer","default":200}},"required":["text"]}},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"JSON text"},"path":{"type":"string","description":"e.g. $.store.book[*].author"}},"required":["text","path"]}},{"name":"jwt_claims_audit","description":"Decode JWT header/claims (no verify) and flag alg=none, missing exp, privileged roles.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}},{"name":"jwt_decode","description":"Decode JWT payload and header (no signature verification).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}},{"name":"jwt_sign","description":"Sign JWT payload (HS* with secret, RS* with private_key PEM).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"payload":{"type":"object","description":"Claims object or JSON string"},"secret":{"type":"string"},"private_key":{"type":"string","description":"PEM private key for RS algorithms"},"algorithm":{"type":"string","default":"HS256"},"header":{"type":"object","description":"Optional extra JWT header fields"}},"required":["payload"]}},{"name":"jwt_verify","description":"Verify JWT signature (HS* with secret, RS* with public_key PEM).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string"},"secret":{"type":"string","description":"For HS256/384/512"},"public_key":{"type":"string","description":"PEM public key for RS algorithms"},"algorithms":{"type":"array","items":{"type":"string"},"description":"e.g. [\"HS256\"]"}},"required":["token"]}},{"name":"line_ending_normalize","description":"Detect and normalize line endings to lf/crlf/cr. When: Detect/normalize CRLF vs LF.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"style":{"type":"string","enum":["lf","crlf","cr"],"default":"lf"}},"required":["text"]}},{"name":"list_unique","description":"Deduplicate list items preserving order.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"items":{"type":"array"}},"required":["items"]}},{"name":"mail_inbox_create","description":"Create disposable receive-only inbox @mail.toolapi.org (24h TTL). Returns address + secret token.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"prefix":{"type":"string","description":"Optional local-part prefix (alphanumeric)"}}}},{"name":"mail_inbox_list","description":"List messages in a temp inbox (requires token from mail_inbox_create).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"inbox_id":{"type":"string"},"address":{"type":"string"},"token":{"type":"string"}},"required":["token"]}},{"name":"mail_inbox_read","description":"Read full message body from temp inbox.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"message_id":{"type":"string"},"inbox_id":{"type":"string"},"address":{"type":"string"},"token":{"type":"string"}},"required":["message_id","token"]}},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"max_level":{"type":"integer","default":3,"minimum":1,"maximum":6}},"required":["text"]}},{"name":"mime_lookup","description":"Lookup MIME type by file extension/path, or extensions by MIME. When: Map file extension ↔ MIME type.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path_or_ext":{"type":"string"},"mime":{"type":"string"}}}},{"name":"nanoid_generate","description":"Generate URL-friendly nanoid (like npm nanoid).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"size":{"type":"integer","default":21,"minimum":1,"maximum":64}}}},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"old":{"type":"string","description":"Previous OpenAPI JSON/YAML"},"new":{"type":"string","description":"New OpenAPI JSON/YAML"}},"required":["old","new"]}},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"package_manifest_audit","description":"Audit package.json or pyproject.toml — license, risky scripts, loose ranges; emit semver_checks for batch. Note: best-effort / heuristic — not a full language parser.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"Manifest file contents"},"kind":{"type":"string","enum":["auto","npm","pyproject"],"default":"auto"}},"required":["text"]}},{"name":"package_scripts_list","description":"List scripts from package.json or pyproject.toml (poetry/PEP 621). When: List npm/poetry/PEP 621 scripts from manifests.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"kind":{"type":"string","enum":["auto","npm","pyproject"],"default":"auto"}},"required":["text"]}},{"name":"password_generate","description":"Cryptographically secure random password.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"length":{"type":"integer","default":16,"minimum":8,"maximum":64},"symbols":{"type":"boolean","default":true}}}},{"name":"password_strength","description":"Offline password strength heuristic (length/classes/common). When: Offline password strength heuristic (not a cracker).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"password":{"type":"string"}},"required":["password"]}},{"name":"path_normalize","description":"Normalize filesystem path (resolve . and ..) for posix or windows. When: Resolve . and .. in filesystem paths.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string"},"style":{"type":"string","enum":["posix","windows"],"default":"posix"}},"required":["path"]}},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"path":{"type":"string"},"allow_absolute":{"type":"boolean","default":false}},"required":["path"]}},{"name":"pem_decode","description":"List PEM blocks in text (label, DER size, SHA256 fingerprint).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"items":{"type":"array"},"seed":{"type":"integer","description":"Optional RNG seed"}},"required":["items"]}},{"name":"port_check","description":"TCP port open/closed check with latency ms.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","port"]}},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"qr_generate","description":"Generate QR code as SVG (base64 data URI included).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"border":{"type":"integer","default":4,"minimum":1,"maximum":10}},"required":["text"]}},{"name":"query_string_build","description":"Build URL query string from params object. When: Build query strings from param objects.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"params":{"type":"object"},"doseq":{"type":"boolean","default":true}},"required":["params"]}},{"name":"query_string_parse","description":"Parse URL query string into key/value map (supports multi-values). When: Parse URL query strings into maps.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]}},{"name":"radix_convert","description":"Convert number between bases 2-36 (binary, octal, decimal, hex).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"string"},"from_base":{"type":"string","description":"2-36 or binary/octal/decimal/hex"},"to_base":{"type":"string"}},"required":["value","from_base","to_base"]}},{"name":"random_int","description":"Random integer in inclusive range (optional seed).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"min_val":{"type":"integer"},"max_val":{"type":"integer"},"seed":{"type":"integer"}},"required":["min_val","max_val"]}},{"name":"random_string","description":"Random string (alphanumeric, hex, base64 charset or custom).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"length":{"type":"integer","default":16},"charset":{"type":"string","default":"alphanumeric"},"seed":{"type":"integer"}}}},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pattern":{"type":"string"},"replacement":{"type":"string"},"text":{"type":"string"},"flags":{"type":"string","description":"i, m, s"},"global_replace":{"type":"boolean","default":true},"count":{"type":"integer","description":"Max replacements when global","default":0}},"required":["pattern","replacement","text"]}},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pattern":{"type":"string"},"text":{"type":"string"},"flags":{"type":"string","description":"i, m, s"}},"required":["pattern","text"]}},{"name":"remote_matrix","description":"Remote desktop tools comparison JSON for AI citation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"reverse_dns","description":"Reverse DNS (PTR) lookup for IP address.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ip":{"type":"string"}},"required":["ip"]}},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"min_entropy":{"type":"number","default":3.5,"description":"Entropy threshold for heuristic strings"}},"required":["text"]}},{"name":"semver_compare","description":"Compare two semver strings (less / equal / greater).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},{"name":"semver_inc","description":"Bump a semver version by major/minor/patch. When: Bump major/minor/patch when cutting a release.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"version":{"type":"string"},"release":{"type":"string","enum":["major","minor","patch"],"default":"patch"}},"required":["version"]}},{"name":"semver_max_satisfying","description":"Pick the highest version that satisfies a semver range (npm-style).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"versions":{"type":"array","items":{"type":"string"}},"range":{"type":"string"}},"required":["versions","range"]}},{"name":"semver_parse","description":"Parse semver string into major, minor, patch, prerelease.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"]}},{"name":"semver_range_intersects","description":"Heuristic check whether two semver ranges share any sample versions (conflict hint).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"range_a":{"type":"string"},"range_b":{"type":"string"},"samples":{"type":"array","items":{"type":"string"}}},"required":["range_a","range_b"]}},{"name":"semver_satisfies","description":"Check if version satisfies npm-style range (^ ~ >= <= > <).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"version":{"type":"string"},"range":{"type":"string"}},"required":["version","range"]}},{"name":"semver_satisfies_batch","description":"Batch semver range checks for dependency audits (max 50).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"checks":{"type":"array","maxItems":50,"items":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"string"},"range":{"type":"string"}},"required":["version","range"]}}},"required":["checks"]}},{"name":"semver_sort","description":"Sort a list of semver versions ascending or descending. When: Sort semver lists before picking latest/oldest.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"versions":{"type":"array","items":{"type":"string"}},"reverse":{"type":"boolean","default":false}},"required":["versions"]}},{"name":"shebang_parse","description":"Parse #! shebang line — interpreter and args. When: Parse #! interpreter lines in scripts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"shell_escape","description":"Shell-escape a string for posix/powershell/cmd (safe quoting). When: Safely quote strings for posix/powershell/cmd.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"shell":{"type":"string","enum":["posix","powershell","cmd"],"default":"posix"}},"required":["text"]}},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expression":{"type":"string"}},"required":["expression"]}},{"name":"sql_danger_scan","description":"Scan SQL text for dangerous patterns (DROP/TRUNCATE/DELETE without WHERE). Note: best-effort / heuristic — not a full language parser.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"keyword_case":{"type":"string","enum":["upper","lower","capitalize"],"default":"upper"},"reindent":{"type":"boolean","default":true}},"required":["text"]}},{"name":"sql_tables_extract","description":"Extract table names from SQL (FROM/JOIN/INTO/UPDATE/TABLE). When: Heuristic extract of SQL table names (best-effort).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"ssl_cert_fetch","description":"Fetch live TLS certificate from host:port (expiry, issuer, SAN).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","default":443,"minimum":1,"maximum":65535}},"required":["host"]}},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"max_length":{"type":"integer","default":80},"ellipsis":{"type":"string","default":"..."}},"required":["text"]}},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"template":{"type":"string"},"variables":{"type":"object"}},"required":["template","variables"]}},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"mode":{"type":"string","enum":["lower","upper","title","snake","kebab","camel","pascal"]}},"required":["text","mode"]}},{"name":"text_diff","description":"Unified line diff between two texts (like git diff).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"}},"required":["left","right"]}},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"paragraphs":{"type":"integer","default":1,"minimum":1,"maximum":10}}}},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"width":{"type":"integer","default":80}},"required":["text"]}},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"string"}},"required":["value"]}},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"string","description":"Unix seconds or ISO datetime"},"from_timezone":{"type":"string","default":"UTC"},"to_timezone":{"type":"string","description":"e.g. Asia/Shanghai"}},"required":["value","to_timezone"]}},{"name":"timezone_list","description":"List common IANA timezone names for conversion.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"toml":{"type":"string","description":"TOML document text"},"schema":{"type":"string","description":"JSON Schema (Draft 7)"},"max_errors":{"type":"integer","default":20,"minimum":1,"maximum":50}},"required":["toml","schema"]}},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"trailing_whitespace_scan","description":"Scan text for trailing whitespace and tab characters. Note: best-effort / heuristic — not a full language parser.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"},"form":{"type":"string","enum":["NFC","NFD","NFKC","NFKD"],"default":"NFC"}},"required":["text"]}},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"number"},"from_unit":{"type":"string"},"to_unit":{"type":"string"},"category":{"type":"string","description":"optional: length, weight, temperature, data, speed, time"}},"required":["value","from_unit","to_unit"]}},{"name":"unit_list","description":"List supported units per category for unit_convert.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"url_decode","description":"Decode percent-encoded string.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"url_encode","description":"Percent-encode URL component.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"url_join","description":"Join base URL with relative path (urllib urljoin). When: Join base URL + relative path correctly.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"base":{"type":"string"},"path":{"type":"string"}},"required":["base","path"]}},{"name":"url_normalize","description":"Normalize URL (lowercase host, sort query, drop fragment).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string"},"sort_query":{"type":"boolean","default":true},"drop_fragment":{"type":"boolean","default":true}},"required":["url"]}},{"name":"url_parse","description":"Parse URL into scheme, host, path, query components.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}},{"name":"url_ssrf_check","description":"Check URL for SSRF risk (localhost, private IP, metadata hosts).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"user_agent":{"type":"string"}},"required":["user_agent"]}},{"name":"uuid_generate","description":"Generate UUID v1/v3/v4/v5 (batch supported). v3/v5 need name + namespace.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"version":{"type":"integer","enum":[1,3,4,5],"default":4},"count":{"type":"integer","default":1,"minimum":1,"maximum":20},"name":{"type":"string","description":"Required for v3/v5"},"namespace":{"type":"string","description":"UUID string for v3/v5 namespace"},"namespace_type":{"type":"string","enum":["dns","url","oid","x500"]}}}},{"name":"uuid_parse","description":"Parse UUID string: version, variant, hex bytes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"uuid":{"type":"string"}},"required":["uuid"]}},{"name":"whois_lookup","description":"Domain registration lookup via RDAP (registrar, dates, nameservers).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}},{"name":"x509_parse","description":"Parse X.509 certificate PEM: subject, issuer, validity, SAN, fingerprint.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pem":{"type":"string"}},"required":["pem"]}},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"xml_validate","description":"Validate XML markup (well-formed check).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"yaml":{"type":"string"},"schema":{"type":"string"},"max_errors":{"type":"integer","default":20}},"required":["yaml","schema"]}},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}}],"scan":{"score":76,"grade":"B","scanned_at":"2026-09-26T05:14:32.068Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T05:14:32.089Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1253ms"]},"poisoning":{"score":15,"max":15,"notes":["193 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 5 write-action tools with no auth"]},"maintenance":{"score":12,"max":15,"notes":["last push 87 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://toolapi.org/sse","reachable":false,"authRequired":false,"latencyMs":10415,"error":"MCP handshake timed out after 10000ms"},{"url":"https://toolapi.org/mcp","reachable":true,"authRequired":false,"latencyMs":1253,"serverInfo":{"name":"toolapi-hub","version":"2.8.2"}}],"packages":[],"repo":{"found":true,"owner":"baohuiwb","repo":"toolapi","archived":false,"pushedAt":"2026-06-30T17:43:19Z","stars":2,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/129367012?v=4","ownerCreatedAt":"2023-03-30T06:55:33Z"},"icon":{"url":"https://toolapi.org/static/logo-icon.svg","source":"site"},"presence":{"stars":2,"forks":0,"downloadsWeek":null,"license":null,"lastPushAt":"2026-06-30T17:43:19.000Z","score":23}}}},"grade_history":[],"reviews":[]}