{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_vq64jpxbb6sq","handle":"toolapi","url":"https://wellknown.network/agents/toolapi","links":{"self":"https://wellknown.network/agents/toolapi/record.json","html":"https://wellknown.network/agents/toolapi","markdown":"https://wellknown.network/agents/toolapi/record.md","api":"https://wellknown.network/api/v1/agents/toolapi","status":"https://wellknown.network/api/v1/agents/toolapi/status","claim":"https://wellknown.network/agents/toolapi/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/toolapi/claim.json","badge":"https://wellknown.network/agents/toolapi/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/toolapi/history","tools":"https://wellknown.network/api/v1/agents/toolapi/tools"},"ard":{"identifier":"urn:air:toolapi.org:server:toolapi","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"ToolAPI","summary":"Free public MCP for AI agents — 193 tools, 44 workflows. No API key.","description":"Free public MCP for AI agents — 193 tools, 44 workflows. No API key.","publisher":{"name":"org.toolapi","url":null},"homepage":"https://toolapi.org","repository":"https://github.com/baohuiwb/toolapi","version":"2.8.2","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://toolapi.org/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"https://toolapi.org/sse","type":"mcp_sse","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-10T00:06:55.704774Z","publishedAt":"2026-07-10T00:06:55.704774Z","registryName":"org.toolapi/hub"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":1,"provenance":"derived"},{"slug":"documents.conversion","name":"Document Conversion","confidence":1,"provenance":"derived"},{"slug":"data.apis","name":"API Access","confidence":1,"provenance":"derived"},{"slug":"dev.version-control","name":"Version Control","confidence":1,"provenance":"derived"},{"slug":"dev.filesystem","name":"Filesystem","confidence":1,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":1,"provenance":"derived"},{"slug":"automation.workflows","name":"Workflow Automation","confidence":0.977,"provenance":"derived"},{"slug":"productivity.tasks","name":"Tasks & To-do","confidence":0.948,"provenance":"derived"}],"categories":["automation","content","data","dev","documents","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 1h ago.","lastOkAt":"2026-10-10T06:27:23.512Z","lastProbedAt":"2026-10-10T06:27:23.512Z","statusComputedAt":"2026-10-10T06:28:48.764Z","reliability30d":{"probes":113,"successRate":0.9469,"p50Ms":649,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":112,"ok":106,"authBoundaryOk":0,"serviceOk":106,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T06:27:23.512Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":615,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-10T00:28:29.325Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":686,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-09T18:24:59.926Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":751,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-09T11:28:06.434Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":616,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-09T05:26:18.752Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":617,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-08T22:23:19.675Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":605,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-08T15:23:33.898Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":670,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-08T08:30:01.473Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":711,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-08T02:22:31.075Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":826,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}},{"at":"2026-10-07T20:31:38.505Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":622,"error":null,"detail":{"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"toolCount":193,"toolsHash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","serverName":"toolapi-hub","capabilities":["tools","resources","prompts"],"serverVersion":"2.8.2","protocolVersion":"2024-11-05"}}],"tools":[{"name":"json_validate","description":"Validate JSON text; return parsed object or error."},{"name":"json_format","description":"Pretty-print JSON with indent. When: Pretty-print JSON when the agent needs readable output."},{"name":"json_minify","description":"Minify JSON (remove whitespace). When: Minify JSON for compact payloads or size checks."},{"name":"csv_to_json","description":"Convert CSV text to JSON array of row objects. When: Convert CSV rows → JSON array of objects."},{"name":"json_to_csv","description":"Convert JSON array of objects to CSV text."},{"name":"yaml_validate","description":"Validate YAML text; return parsed object or error."},{"name":"yaml_to_json","description":"Parse YAML and return JSON-compatible object."},{"name":"json_to_yaml","description":"Convert JSON text to YAML string. When: Convert JSON → YAML for config files agents write."},{"name":"xml_validate","description":"Validate XML markup (well-formed check)."},{"name":"xml_format","description":"Pretty-print XML with indentation. When: Pretty-print XML after the agent edits markup."},{"name":"jsonpath_query","description":"Query JSON with JSONPath expression; returns matching values."},{"name":"json_merge","description":"Deep-merge two JSON objects (second overlays first)."},{"name":"json_flatten","description":"Flatten nested JSON to dot-key map. When: Flatten nested JSON keys before comparing or exporting."},{"name":"json_pretty_diff","description":"Unified diff of two JSON documents (pretty-printed)."},{"name":"json_sort_keys","description":"Recursively sort JSON object keys. When: Canonicalize JSON key order for stable diffs/hashes."},{"name":"json_type_summary","description":"Summarize JSON value types (counts per type in tree)."},{"name":"json_schema_validate","description":"Validate JSON data against JSON Schema (Draft 7)."},{"name":"toml_validate","description":"Validate TOML text; return parsed object or error."},{"name":"toml_to_json","description":"Parse TOML and return JSON-compatible object."},{"name":"json_to_toml","description":"Convert JSON object text to TOML string."},{"name":"toml_schema_validate","description":"Validate TOML config against JSON Schema (Draft 7) in one step."},{"name":"sql_format","description":"Format SQL text (never executed; reindent + keyword case)."},{"name":"graphql_validate","description":"Validate GraphQL query or schema SDL syntax (parse only)."},{"name":"openapi_validate","description":"Validate OpenAPI 3.x document (JSON or YAML snippet)."},{"name":"openapi_diff","description":"Compare two OpenAPI specs and flag breaking vs non-breaking API changes."},{"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 p"},{"name":"graphql_schema_diff","description":"Diff two GraphQL schemas for removed types/fields (breaking changes)."},{"name":"compose_validate","description":"Validate docker-compose YAML and flag privileged/host-network/secret env issues."},{"name":"github_actions_lint","description":"Lint GitHub Actions workflow YAML (triggers, unpinned actions, curl|bash)."},{"name":"requirements_audit","description":"Audit Python requirements.txt for unpinned/VCS/deprecated packages."},{"name":"json_schema_validate_batch","description":"Batch JSON Schema (Draft 7) validation — up to 25 documents (agent favorite)."},{"name":"json_assert_paths","description":"Assert JSONPath expressions against JSON (exists/equals/type) — agent self-check."},{"name":"json_equal","description":"Deep-compare two JSON documents and list differing paths."},{"name":"yaml_schema_validate","description":"Parse YAML then validate against JSON Schema (Draft 7)."},{"name":"tsconfig_lint","description":"Lint tsconfig.json structure (compilerOptions, strict hints)."},{"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."},{"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)."},{"name":"json_schema_infer","description":"Infer a Draft-7 JSON Schema from a sample JSON document (agent favorite)."},{"name":"jsonl_validate","description":"Validate JSON Lines (NDJSON); optional per-line JSON Schema. When: Validate NDJSON / JSON Lines logs or datasets."},{"name":"xml_to_json","description":"Convert XML document to JSON (attributes as @attr). When: Convert XML → JSON for agents that prefer JSON tools."},{"name":"json_merge_patch","description":"Apply RFC 7396 JSON Merge Patch (null deletes keys). When: RFC 7396 merge patch — use when patching JSON configs."},{"name":"csv_validate","description":"Validate CSV structure — consistent column counts / header. When: Check CSV column consistency before import."},{"name":"ini_parse","description":"Parse INI / simple key=value config into sections. When: Parse INI/section configs into structured maps."},{"name":"openapi_operations_list","description":"List OpenAPI path operations (method, path, operationId, tags). When: List OpenAPI operations before validate/diff."},{"name":"graphql_operations_list","description":"List GraphQL query/mutation/subscription names and type defs. When: List GraphQL ops/types from a document (best-effort)."},{"name":"properties_parse","description":"Parse Java .properties key=value file. When: Parse Java .properties key=value configs (best-effort)."},{"name":"time_now","description":"Current UTC unix timestamp and ISO-8601."},{"name":"time_convert","description":"Convert unix seconds or ISO-8601 to both formats."},{"name":"timezone_convert","description":"Convert datetime between IANA timezones (e.g. UTC to Asia/Shanghai)."},{"name":"timezone_list","description":"List common IANA timezone names for conversion."},{"name":"datetime_parse","description":"Parse unix timestamp or ISO-8601 into UTC ISO + unix."},{"name":"duration_parse","description":"Parse duration (ISO-8601 PnDTnHnMnS or human 1h30m / 90s) to seconds. When: Parse ISO-8601 / human durations to seconds."},{"name":"regex_test","description":"Test regex pattern; returns match, groups, span."},{"name":"regex_replace","description":"Replace regex matches in text (supports backreferences in replacement)."},{"name":"text_diff","description":"Unified line diff between two texts (like git diff)."},{"name":"text_slugify","description":"URL-safe slug from title or heading. When: Make URL-safe slugs from titles/filenames."},{"name":"text_stats","description":"Count chars, words, lines, sentences; estimate reading time."},{"name":"text_case_convert","description":"Convert case: lower, upper, title, snake, kebab, camel, pascal."},{"name":"text_lorem","description":"Generate lorem ipsum placeholder paragraphs."},{"name":"color_convert","description":"Convert color between hex, rgb(), and hsl()."},{"name":"unit_convert","description":"Convert units: length, weight, temperature, data, speed, time."},{"name":"unit_list","description":"List supported units per category for unit_convert."},{"name":"markdown_to_html","description":"Convert Markdown text to HTML. When: Render markdown → HTML for previews or emails."},{"name":"html_to_markdown","description":"Convert HTML to Markdown text. When: Convert HTML → markdown for docs the agent edits."},{"name":"pick_choice","description":"Pick one item from a list (optional seed for reproducibility)."},{"name":"string_truncate","description":"Truncate text with ellipsis. When: Truncate long strings with ellipsis for UI/logs."},{"name":"extract_urls","description":"Extract HTTP/HTTPS URLs from arbitrary text."},{"name":"extract_emails","description":"Extract email addresses from text. When: Pull email addresses from free text / logs."},{"name":"email_validate","description":"Validate email address format. When: Syntax-check a single email address."},{"name":"text_wrap","description":"Wrap text to a maximum line width. When: Hard-wrap text to a column width."},{"name":"list_unique","description":"Deduplicate list items preserving order."},{"name":"template_fill","description":"Fill {{variable}} placeholders in a template string."},{"name":"unicode_normalize","description":"Unicode normalization (NFC/NFD/NFKC/NFKD)."},{"name":"user_agent_parse","description":"Parse User-Agent string into browser, OS, and device hints."},{"name":"secrets_scan","description":"Scan text for hardcoded secrets (API keys, tokens, private keys). Returns redacted findings."},{"name":"dockerfile_lint","description":"Lint Dockerfile for common security/style issues (root user, curl|sh, secrets)."},{"name":"env_required_check","description":"Check .env text contains required keys (and non-empty values)."},{"name":"path_safety_check","description":"Check filesystem path for traversal / absolute / sensitive system paths."},{"name":"spdx_license_check","description":"Validate SPDX license expression against common license IDs."},{"name":"robots_txt_validate","description":"Validate robots.txt syntax and User-agent rules."},{"name":"csp_parse","description":"Parse Content-Security-Policy header and flag unsafe directives."},{"name":"cors_check","description":"Check CORS Allow-Origin vs credentials for unsafe combinations."},{"name":"markdown_link_extract","description":"Extract markdown/bare links and flag javascript: URLs."},{"name":"gitignore_check","description":"Review .gitignore for common missing ignores (.env, node_modules, keys)."},{"name":"editorconfig_validate","description":"Validate .editorconfig syntax and common keys."},{"name":"nginx_config_lint","description":"Lint nginx config snippets (braces, SSLv3, server_tokens, HSTS hints)."},{"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."},{"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."},{"name":"conventional_commit_lint","description":"Lint Conventional Commits message (feat/fix/chore…)."},{"name":"changelog_parse","description":"Parse Keep-a-Changelog style markdown into version sections."},{"name":"todo_comment_extract","description":"Extract TODO/FIXME/HACK/XXX comments with line numbers."},{"name":"code_fence_extract","description":"Extract fenced code blocks from markdown (language + code)."},{"name":"unified_diff_parse","description":"Parse unified diff — files changed, lines added/removed."},{"name":"glob_match_batch","description":"Match paths against glob patterns (gitignore-style fnmatch)."},{"name":"identifier_validate","description":"Validate identifier for python/javascript/typescript (keywords + syntax)."},{"name":"text_similarity","description":"SequenceMatcher similarity ratio between two texts."},{"name":"import_list_analyze","description":"List imports from python/js source and flag duplicates. Note: best-effort / heuristic — not a full language parser."},{"name":"frontmatter_parse","description":"Parse YAML frontmatter from markdown (--- ... ---). When: Split YAML frontmatter from markdown body."},{"name":"markdown_toc","description":"Build a table of contents from markdown headings. When: Build heading TOC from markdown docs."},{"name":"gitignore_match","description":"Match paths against .gitignore rules (ignore / negate). When: Test paths against .gitignore rules (best-effort)."}],"package":null,"toolSurface":{"id":"ts_utgajvq763bh","endpointId":"ep_rucxcb4kmrdh","hash":"3eea3792d80eac1814e9ac69dcf10c953e09bde4da09490dc873652683f85cbc","toolCount":193,"serverName":"toolapi-hub","serverVersion":"2.8.2","protocolVersion":"2024-11-05","firstSeenAt":"2026-09-12T15:25:23.428Z","lastSeenAt":"2026-10-10T06:27:23.506Z","observations":99,"toolNames":["json_validate","json_format","json_minify","csv_to_json","json_to_csv","yaml_validate","yaml_to_json","json_to_yaml","xml_validate","xml_format","jsonpath_query","json_merge","json_flatten","json_pretty_diff","json_sort_keys","json_type_summary","json_schema_validate","toml_validate","toml_to_json","json_to_toml","toml_schema_validate","sql_format","graphql_validate","openapi_validate","openapi_diff","package_manifest_audit","graphql_schema_diff","compose_validate","github_actions_lint","requirements_audit","json_schema_validate_batch","json_assert_paths","json_equal","yaml_schema_validate","tsconfig_lint","json_pointer_get","json_patch_apply","json_schema_infer","jsonl_validate","xml_to_json","json_merge_patch","csv_validate","ini_parse","openapi_operations_list","graphql_operations_list","properties_parse","time_now","time_convert","timezone_convert","timezone_list","datetime_parse","duration_parse","regex_test","regex_replace","text_diff","text_slugify","text_stats","text_case_convert","text_lorem","color_convert","unit_convert","unit_list","markdown_to_html","html_to_markdown","pick_choice","string_truncate","extract_urls","extract_emails","email_validate","text_wrap","list_unique","template_fill","unicode_normalize","user_agent_parse","secrets_scan","dockerfile_lint","env_required_check","path_safety_check","spdx_license_check","robots_txt_validate","csp_parse","cors_check","markdown_link_extract","gitignore_check","editorconfig_validate","nginx_config_lint","sql_danger_scan","html_security_scan","conventional_commit_lint","changelog_parse","todo_comment_extract","code_fence_extract","unified_diff_parse","glob_match_batch","identifier_validate","text_similarity","import_list_analyze","frontmatter_parse","markdown_toc","gitignore_match","shell_escape","path_normalize","env_diff","package_scripts_list","line_ending_normalize","shebang_parse","trailing_whitespace_scan","sql_tables_extract","dependency_versions_extract","color_contrast","human_bytes","password_strength","hosts_file_parse","hash_md5","hash_sha256","hash_sha512","base64_encode","base64_decode","base64url_encode","base64url_decode","url_encode","url_decode","html_encode","html_decode","hex_encode","hex_decode","uuid_generate","uuid_parse","nanoid_generate","password_generate","jwt_decode","jwt_verify","jwt_sign","hmac_sign","hmac_verify","bcrypt_hash","bcrypt_verify","radix_convert","qr_generate","random_int","random_string","hash_compare","jwt_claims_audit","remote_matrix","url_parse","http_status_lookup","semver_parse","semver_compare","semver_satisfies","semver_satisfies_batch","semver_range_intersects","semver_sort","semver_max_satisfying","semver_inc","cidr_calc","cidr_contains","ip_geolocation","env_parse","pem_decode","x509_parse","dns_lookup","whois_lookup","ssl_cert_fetch","reverse_dns","port_check","http_headers_fetch","currency_list","currency_rates","currency_convert","url_ssrf_check","ipv4_private_check","url_normalize","content_type_parse","http_status_classify","query_string_parse","query_string_build","cookie_header_parse","mime_lookup","url_join","domain_parse","git_url_parse","http_headers_parse","ip_version_detect","cron_parse","cron_validate","cron_semantic_validate","cron_next_runs","cron_describe","cron_matches","cron_validate_batch","mail_inbox_create","mail_inbox_list","mail_inbox_read"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_rucxcb4kmrdh","url":"https://toolapi.org/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-08T22:23:19.673Z","auth":{"observedAt":"2026-10-08T22:23:19.998Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-08T22:23:20.020Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"toolapi.org","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-08-22T10:30:59.000Z","validTo":"2026-11-20T11:29:32.000Z","daysToExpiry":41,"sanCount":2,"fingerprint256":"86:1C:A4:59:7A:48:35:14:DE:83:B7:C8:17:A1:E7:9E:74:14:B2:3B:C5:49:4F:EC:14:E2:C9:9A:DA:24:EB:B5"}},{"id":"ep_szyu9ghdvk24","url":"https://toolapi.org/sse","type":"mcp_sse","factsCheckedAt":"2026-09-22T11:26:11.224Z","auth":null,"tls":{"observedAt":"2026-09-22T11:26:11.241Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"toolapi.org","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-08-22T10:30:59.000Z","validTo":"2026-11-20T11:29:32.000Z","daysToExpiry":41,"sanCount":2,"fingerprint256":"86:1C:A4:59:7A:48:35:14:DE:83:B7:C8:17:A1:E7:9E:74:14:B2:3B:C5:49:4F:EC:14:E2:C9:9A:DA:24:EB:B5"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"org.toolapi/hub","url":"https://registry.modelcontextprotocol.io/v0/servers/org.toolapi%2Fhub","firstSeenAt":"2026-09-07T08:20:39.459Z","fetchedAt":"2026-10-08T19:19:58.656Z","normalizedAt":"2026-10-08T19:19:58.656Z"}]},"firstSeenAt":"2026-09-07T08:20:39.459Z","updatedAt":"2026-10-10T06:29:36.545Z"}