{
  "spec_version": "1.1",
  "updated": "2026-09-19",
  "publisher": {
    "name": "NoCodeCSV",
    "url": "https://nocodecsv.com",
    "description": "Free browser-based AI tool for analysing CSV and Excel files with plain-English questions.",
    "contact": "info@nocodecsv.com"
  },
  "notes_for_agents": [
    "All tools run in the user's browser. Files are parsed client-side; nothing is uploaded to a server for parsing.",
    "Tool pages are public. The /dashboard workspace requires a signed-in user.",
    "The /tools/* pages listed as 'landing' have no interactive tool — they explain the use case and link to /dashboard.",
    "Prefer the declared tools below over scraping page text.",
    "Human-readable overview: https://nocodecsv.com/llms.txt"
  ],
  "webmcp": {
    "status": "declarative_and_imperative_implemented",
    "spec": "https://developer.chrome.com/docs/ai/webmcp/declarative-api",
    "spec_imperative": "https://developer.chrome.com/docs/ai/webmcp/imperative-api",
    "note": "Two APIs are live. (1) Declarative: HTML forms are annotated with toolname / tooldescription and individual fields with toolparamdescription. (2) Imperative: two tools are registered with navigator.modelContext.registerTool and carry a typed inputSchema, so an assistant can pass content as text instead of attaching a file. Browsers that do not implement WebMCP ignore both, so this is a progressive enhancement. Activation in Chrome requires the WebMCP origin trial (or the local flag chrome://flags/#enable-webmcp-testing).",
    "origins_pending_trial_registration": [
      "https://buildex-1dm.pages.dev",
      "https://carecosttool.pages.dev"
    ],
    "declared_tools": [
      { "toolname": "uploadCsvFile", "page": "/dashboard", "state": "no file loaded yet" },
      { "toolname": "askQuestionAboutData", "page": "/dashboard", "state": "after a file is loaded" },
      { "toolname": "fixCsvDelimiter", "page": "/tools/csv-delimiter-converter" },
      { "toolname": "splitLargeCsv", "page": "/tools/csv-splitter" },
      { "toolname": "convertJsonCsv", "page": "/tools/json-csv-converter" }
    ],
    "imperative_tools": [
      {
        "name": "splitCsvText",
        "page": "/tools/csv-splitter",
        "inputs": {
          "csvText": "string, required - the full CSV content, header row included",
          "rowsPerFile": "number, optional - data rows per output file (default 50000)"
        },
        "returns": "JSON string: ok, delimiter, headerRow, totalDataRows, rowsPerFile, fileCount, files[] (filename, rows, bytes, csv)",
        "annotations": { "readOnlyHint": true, "untrustedContentHint": true, "consequentialHint": false },
        "why": "The declarative API cannot expose a file input as a parameter. Passing the CSV as text lets an assistant split it without a file."
      },
      {
        "name": "convertJsonCsvText",
        "page": "/tools/json-csv-converter",
        "inputs": {
          "text": "string, required - JSON (array of objects, array of arrays, single object or NDJSON) or CSV text",
          "direction": "string, required - json2csv | csv2json"
        },
        "returns": "JSON string: ok, direction, rows, columns, columnNames or detectedDelimiter, warnings, truncated, output",
        "annotations": { "readOnlyHint": true, "untrustedContentHint": true, "consequentialHint": false },
        "why": "Same reason: conversion takes text, so no file upload is needed."
      }
    ]
  },
  "tools": [
    {
      "name": "analyze_csv_with_ai",
      "webmcp_toolname": "uploadCsvFile → askQuestionAboutData",
      "intent": "Answer a natural-language question about the contents of a CSV or Excel file and return a short analysis plus chart data.",
      "page": "https://nocodecsv.com/dashboard",
      "requires_auth": true,
      "steps": [
        {
          "action": "upload_file",
          "selector": "#csvFileInput",
          "also_selector": "input[type=file][name=file]",
          "accepts": [".csv", ".tsv", ".xlsx", ".xls"],
          "description": "Select the user's spreadsheet file. This input exists in the DOM (not created on click), so it can be targeted directly.",
          "returns": "the parsed column list and row count"
        },
        {
          "action": "type_question",
          "selector": "#question",
          "label": "Ask a question about your uploaded spreadsheet",
          "example": "Which region had the highest growth last quarter?"
        },
        {
          "action": "submit",
          "selector": "#askSubmit",
          "description": "Runs the analysis and renders results in place."
        }
      ],
      "output": {
        "type": "text+chart",
        "description": "Plain-English answer, a data table and an auto-generated chart."
      },
      "result_max_wait_seconds": 60
    },
    {
      "name": "fix_csv_delimiter",
      "webmcp_toolname": "fixCsvDelimiter",
      "intent": "Convert a CSV whose delimiter is wrong (semicolon, tab, pipe) so the columns line up in Excel or Google Sheets.",
      "page": "https://nocodecsv.com/tools/csv-delimiter-converter",
      "requires_auth": false,
      "steps": [
        { "action": "upload_file", "selector": "#toolFileInput", "accepts": [".csv", ".tsv", ".txt"] },
        { "action": "submit", "selector": "button[type=submit]" }
      ],
      "output": { "type": "file", "description": "Converted CSV, downloadable in place." }
    },
    {
      "name": "split_large_csv",
      "webmcp_toolname": "splitLargeCsv (declarative) | splitCsvText (imperative, callable with CSV text)",
      "intent": "Split a CSV that is too large for Excel into smaller files.",
      "page": "https://nocodecsv.com/tools/csv-splitter",
      "requires_auth": false,
      "steps": [
        { "action": "upload_file", "selector": "#toolFileInput", "accepts": [".csv", ".tsv", ".txt"] },
        { "action": "set_value", "selector": "input[type=number]", "description": "Rows per output file." },
        { "action": "submit", "selector": "button[type=submit]" }
      ],
      "output": { "type": "files", "description": "Multiple CSV parts, downloadable in place." }
    },
    {
      "name": "convert_json_csv",
      "webmcp_toolname": "convertJsonCsv (declarative) | convertJsonCsvText (imperative, callable with JSON/CSV text)",
      "intent": "Convert between JSON and CSV formats in either direction.",
      "page": "https://nocodecsv.com/tools/json-csv-converter",
      "requires_auth": false,
      "steps": [
        { "action": "upload_file", "selector": "#toolFileInput", "accepts": [".json", ".txt", ".ndjson", ".jsonl", ".csv", ".tsv"] }
      ],
      "output": { "type": "file", "description": "Converted file in the other format." }
    },
    {
      "name": "spreadsheet_charts",
      "webmcp_toolname": null,
      "intent": "Turn a spreadsheet into a chart.",
      "page": "https://nocodecsv.com/tools/spreadsheet-charts",
      "requires_auth": false,
      "note": "Landing page only — it explains the use case and links to /dashboard, where the chart is generated. Use the dashboard tools instead."
    }
  ]
}
