{"name":"Shard Tools","description":"Privacy-first browser workflows for files","endpoint":"https://shard.tools/mcp","tools":[{"name":"json_to_csv","description":"Convert a JSON object or array of objects to CSV. Union columns; nested values become JSON text. Formula-like string cells are protected with an apostrophe. Duplicate keys retain their last value and JavaScript number precision applies. Limits: 10,000 rows, 100 columns, nesting depth 64. Input text is sent to Cloudflare for this request. This is not browser-local processing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"string","maxLength":200000}},"required":["input"]}},{"name":"csv_to_json","description":"Convert CSV to JSON records. Values remain strings unless inferTypes is enabled. Duplicate or empty headings are renamed and short rows padded. Limits: 10,000 data rows and 100 columns. Input text is sent to Cloudflare for this request. This is not browser-local processing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"string","maxLength":200000},"delimiter":{"type":"string","enum":["auto",",",";","\t","|"],"default":"auto"},"inferTypes":{"type":"boolean","default":false}},"required":["input"]}},{"name":"convert_csv_batch","description":"Convert up to 20 CSV files to Markdown tables or labeled TXT records, or those structured formats back to CSV. Merge by heading, preserving input order and filling missing fields with empty values. Duplicate headings are rejected. Input text is sent to Cloudflare for this request. This is not browser-local processing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"files":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":200},"content":{"type":"string","maxLength":200000}},"required":["name","content"]}},"format":{"type":"string","enum":["markdown","text"]},"direction":{"type":"string","enum":["fromCsv","toCsv"],"default":"fromCsv"},"merge":{"type":"boolean","default":false}},"required":["files","format"]}},{"name":"format_json","description":"Format or minify JSON using the existing JSON engine. JavaScript number precision applies; duplicate keys follow JSON.parse behavior. Input text is sent to Cloudflare for this request. This is not browser-local processing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"string","maxLength":200000},"mode":{"type":"string","enum":["format","minify"],"default":"format"},"spaces":{"type":"integer","enum":[2,4],"default":2}},"required":["input"]}},{"name":"validate_json","description":"Validate JSON syntax and summarize structure. This is not JSON Schema validation. Input text is sent to Cloudflare for this request. This is not browser-local processing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"input":{"type":"string","maxLength":200000}},"required":["input"]}},{"name":"compare_json","description":"Compare JSON structures and report added, removed, changed and type-changed paths. Array order matters; JavaScript number precision applies. Input text is sent to Cloudflare for this request. This is not browser-local processing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"left":{"type":"string","maxLength":200000},"right":{"type":"string","maxLength":200000}},"required":["left","right"]}},{"name":"find_shard_tool","description":"Find the best Shard Tools browser workflow for a file task. Files are processed in the user's browser, not uploaded to this MCP endpoint.","inputSchema":{"type":"object","properties":{"task":{"type":"string","description":"What the user wants to do"}},"required":["task"]}},{"name":"open_shard_tool","description":"Return a Shard Tools browser workflow URL for a known tool slug. The browser performs the file operation locally.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"Shard Tools tool slug"}},"required":["slug"]}},{"name":"shard_tools_privacy","description":"Explain how Shard Tools handles files and what the remote MCP endpoint does not receive.","inputSchema":{"type":"object","properties":{}}},{"name":"convert_unit","description":"Run a deterministic no-file unit conversion on Shard Tools edge compute. No files are sent; only the numeric value and unit names are processed.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"Numeric value to convert"},"from":{"type":"string","description":"Source unit, such as psi, bar, kph, mph, ml, cups, liters, gallons, kj, calories, tbsp"},"to":{"type":"string","description":"Target unit, such as psi, bar, kph, mph, ml, cups, liters, gallons, kj, calories, tbsp"}},"required":["value","from","to"]}},{"name":"psi_to_bar","description":"Convert PSI to bar directly. Returns the answer, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"Pressure in PSI"}},"required":["value"]}},{"name":"kph_to_mph","description":"Convert km/h, kph, or kmh to mph directly. Returns the answer, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"Speed in km/h"}},"required":["value"]}},{"name":"liters_to_gallons","description":"Convert liters or litres to US gallons directly. Returns the answer, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"Volume in litres/liters"}},"required":["value"]}},{"name":"gallons_to_liters","description":"Convert US gallons to litres directly. Returns the answer, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"Volume in US gallons"}},"required":["value"]}},{"name":"kilojoules_to_calories","description":"Convert kilojoules to dietary calories/kcal directly. Returns the answer, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"Energy in kilojoules"}},"required":["value"]}},{"name":"tablespoons_to_ml","description":"Convert US tablespoons to millilitres directly. Returns the answer, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"Volume in US tablespoons"}},"required":["value"]}},{"name":"calculate_business","description":"Run a deterministic no-file business or construction calculation on Shard Tools edge compute. Supports commission and brick calculations.","inputSchema":{"type":"object","properties":{"kind":{"type":"string","description":"Calculation kind: commission or bricks"},"sale":{"type":"number","description":"Commission sale amount"},"rate":{"type":"number","description":"Commission rate percent"},"wallArea":{"type":"number","description":"Brick wall area in square feet"},"brickLength":{"type":"number","description":"Brick length in inches"},"brickHeight":{"type":"number","description":"Brick height in inches"},"waste":{"type":"number","description":"Waste allowance percent"}},"required":["kind"]}},{"name":"commission_calculator","description":"Calculate a flat sales commission from sale amount and rate. Returns payout, net amount, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"sale":{"type":"number","description":"Eligible sale amount"},"rate":{"type":"number","description":"Commission rate percent"}},"required":["sale","rate"]}},{"name":"break_even_calculator","description":"Calculate whole units needed to cover fixed costs from price and variable cost. Returns contribution margin, break-even units, formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"fixedCosts":{"type":"number","description":"Fixed costs to cover"},"pricePerUnit":{"type":"number","description":"Selling price per unit"},"variableCostPerUnit":{"type":"number","description":"Variable cost per unit"}},"required":["fixedCosts","pricePerUnit","variableCostPerUnit"]}},{"name":"markup_calculator","description":"Calculate selling price, profit, and margin from cost and markup percent. Returns formula, Shard Tools URL, and privacy mode.","inputSchema":{"type":"object","properties":{"cost":{"type":"number","description":"Cost amount"},"markup":{"type":"number","description":"Markup percent on cost"}},"required":["cost","markup"]}},{"name":"compress_pdf_edge","description":"Lossless Edge Assisted PDF rewrite. The assistant sends a base64 PDF to Shard Tools edge compute; the file is processed transiently and returned without account storage. This tool does not rasterize or downsample pages, so it may not reach small upload targets. If reachedTarget is false, use localPrivateUrl or a future target-aware raster tool.","inputSchema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Base64-encoded PDF bytes"},"targetKb":{"type":"number","description":"Target size in KB, such as 300, 500, 1024, or 2048"},"fileName":{"type":"string","description":"Optional output filename"}},"required":["pdfBase64","targetKb"]}},{"name":"compress_pdf_for_upload","description":"User-facing PDF upload preparation. Send a base64 PDF and targetKb. Shard Tools tries safe lossless rewrite first, then target-aware raster/downsample compression when the Worker runtime supports PDF rendering. Raster compression may make text non-selectable or softer.","inputSchema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Base64-encoded PDF bytes"},"targetKb":{"type":"number","description":"Upload limit in KB, such as 300, 500, 1024, or 2048"},"fileName":{"type":"string","description":"Optional output filename"}},"required":["pdfBase64","targetKb"]}},{"name":"compress_pdf_raster_edge","description":"Target-aware Edge Assisted raster PDF compression. Sends a base64 PDF to Shard Tools edge compute, renders pages to JPEG at lower scale/quality, rebuilds a PDF, and returns fileBase64 when possible. Text may become non-selectable.","inputSchema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Base64-encoded PDF bytes"},"targetKb":{"type":"number","description":"Upload limit in KB, such as 300, 500, 1024, or 2048"},"fileName":{"type":"string","description":"Optional output filename"}},"required":["pdfBase64","targetKb"]}},{"name":"prepare_document_for_ai","description":"Prepare an attached PDF or JPG/PNG collection for Claude, ChatGPT, Gemini, or Codex. PDFs are split into labelled page batches; images are combined into a paginated or contact-sheet PDF. Returns real files plus a processing manifest.","inputSchema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Optional base64 PDF. Use either pdfBase64 or images."},"images":{"type":"array","description":"Optional JPG/PNG inputs. Use either images or pdfBase64.","items":{"type":"object","properties":{"base64":{"type":"string","description":"Base64 image bytes"},"mimeType":{"type":"string","description":"image/jpeg or image/png"},"fileName":{"type":"string","description":"Original filename used in the manifest"}},"required":["base64","mimeType"]}},"fileName":{"type":"string","description":"Source name used for output filenames"},"platform":{"type":"string","description":"Target assistant: claude, chatgpt, gemini, codex, or generic"},"pagesPerBatch":{"type":"number","description":"PDF pages per output batch; defaults to 20"},"overlapPages":{"type":"number","description":"Repeat 0-3 pages between adjacent PDF batches"},"imagesPerPage":{"type":"number","description":"Images per PDF page: 1, 2, 4, or 6"},"includeFileNames":{"type":"boolean","description":"Print source filenames under images"}}}},{"name":"pdf_to_markdown_for_ai","description":"Prepare an attached PDF as page-cited Markdown or as a hybrid Markdown-plus-page-images package. Markdown is returned directly; hybrid mode also returns a structured on-device JPG render plan for desktop agents. Detects pages that need OCR instead of silently omitting them.","inputSchema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Base64-encoded PDF bytes"},"fileName":{"type":"string","description":"Original PDF filename"},"platform":{"type":"string","enum":["claude","chatgpt","gemini","codex","generic"]},"outputMode":{"type":"string","enum":["markdown-only","hybrid"],"description":"markdown-only returns the smallest text package. hybrid also requests local page JPGs."},"visualPages":{"type":"string","enum":["auto","all"],"description":"For hybrid mode, render likely visual pages or every page. Defaults to auto."},"imageDpi":{"type":"number","description":"Local JPG render resolution from 72 to 200 DPI. Defaults to 120."},"imageQuality":{"type":"number","description":"Local JPG quality from 30 to 95. Defaults to 78."},"targetCharacters":{"type":"number","description":"Approximate maximum characters per Markdown chunk, from 2000 to 100000"}},"required":["pdfBase64"]}},{"name":"split_pdf_for_ai","description":"Split an attached PDF into ordered, clearly named AI-friendly page batches and return every batch with a Markdown manifest.","inputSchema":{"type":"object","properties":{"pdfBase64":{"type":"string","description":"Base64 PDF bytes"},"fileName":{"type":"string","description":"Source PDF filename"},"platform":{"type":"string","description":"Target assistant"},"pagesPerBatch":{"type":"number","description":"Pages per batch; defaults to 20"},"overlapPages":{"type":"number","description":"Repeat 0-3 pages between batches"}},"required":["pdfBase64"]}},{"name":"prepare_images_for_ai","description":"Automatically normalize large JPG/PNG inputs, then package them into one AI-friendly PDF so assistants can work around image-count limits. Returns the PDF, source map, and a per-image normalization report.","inputSchema":{"type":"object","properties":{"images":{"type":"array","items":{"type":"object","properties":{"base64":{"type":"string","description":"Base64 image bytes"},"mimeType":{"type":"string","description":"image/jpeg or image/png"},"fileName":{"type":"string","description":"Original filename preserved in the manifest"}},"required":["base64","mimeType"]}},"fileName":{"type":"string","description":"Base name for the returned PDF"},"platform":{"type":"string","enum":["claude","chatgpt","gemini","codex","generic"]},"imagesPerPage":{"type":"number","description":"1 for maximum detail, or 2, 4, or 6 to reduce page and attachment count"},"includeFileNames":{"type":"boolean","description":"Print original filenames below images; defaults to true"},"maxDimension":{"type":"number","description":"Maximum image width or height after automatic normalization, 1200-3200. Defaults to 2200."},"jpegQuality":{"type":"number","description":"Starting JPEG quality for normalized images, 55-90. Defaults to 80."},"targetTotalMb":{"type":"number","description":"Target total normalized image payload, 2-16 MB. Defaults to 12 MB."}},"required":["images"]}},{"name":"images_to_ai_pdf","description":"Compatibility alias for prepare_images_for_ai. Combine attached JPG/PNG images into one AI-friendly PDF with 1, 2, 4, or 6 images per page.","inputSchema":{"type":"object","properties":{"images":{"type":"array","items":{"type":"object","properties":{"base64":{"type":"string","description":"Base64 image bytes"},"mimeType":{"type":"string","description":"image/jpeg or image/png"},"fileName":{"type":"string","description":"Original filename"}},"required":["base64","mimeType"]}},"fileName":{"type":"string","description":"Output PDF filename"},"platform":{"type":"string","description":"Target assistant"},"imagesPerPage":{"type":"number","description":"1, 2, 4, or 6"},"includeFileNames":{"type":"boolean","description":"Print source filenames under images"}},"required":["images"]}}]}