{
  "id": "data.convert",
  "object": "tool",
  "name": "Convert data",
  "summary": "CSV, JSON, YAML, XML, TOML, XLSX.",
  "description": "Converts structured data between CSV, TSV, JSON, NDJSON, YAML, XML, TOML and Excel (.xlsx). The input format is detected from the file name, type or content if you don't set it. Nested values written to CSV, TSV or XLSX become JSON text in the cell; TOML can't hold nulls, so they're dropped with a warning. Returns the converted file and a preview.",
  "category": "data",
  "hosted_by": "Opentools",
  "runtime": "worker",
  "side_effects": false,
  "status": "live",
  "credits": 1,
  "price": "$0.0010",
  "providers": [
    {
      "id": "opentools",
      "name": "Opentools",
      "price": "$0.0010"
    }
  ],
  "mcp_name": "data_convert",
  "input_schema": {
    "type": "object",
    "properties": {
      "file": {
        "description": "The file to convert",
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Public http(s) URL of the file"
              }
            },
            "required": [
              "url"
            ]
          },
          {
            "type": "object",
            "properties": {
              "file_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "An id returned by POST /v1/files"
              }
            },
            "required": [
              "file_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "base64": {
                "type": "string",
                "description": "Base64-encoded file bytes (up to 10 MB)"
              },
              "name": {
                "type": "string",
                "description": "File name, e.g. invoice.pdf"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "base64",
              "name"
            ]
          },
          {
            "type": "object",
            "properties": {
              "connection": {
                "type": "string",
                "minLength": 1,
                "maxLength": 64,
                "description": "A storage connection id or name (see storage.connections)"
              },
              "path": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1024,
                "description": "Path of the file in that connection, e.g. reports/q3.pdf"
              }
            },
            "required": [
              "connection",
              "path"
            ]
          }
        ],
        "x-file": true
      },
      "text": {
        "description": "Data as text, instead of a file (not for xlsx)",
        "type": "string",
        "maxLength": 10000000
      },
      "from": {
        "description": "Input format. Detected if omitted.",
        "type": "string",
        "enum": [
          "csv",
          "tsv",
          "json",
          "ndjson",
          "yaml",
          "xml",
          "toml",
          "xlsx"
        ]
      },
      "to": {
        "type": "string",
        "enum": [
          "csv",
          "tsv",
          "json",
          "ndjson",
          "yaml",
          "xml",
          "toml",
          "xlsx"
        ],
        "description": "Output format"
      },
      "sheet": {
        "description": "Spreadsheet input: sheet to read. The first sheet if omitted.",
        "type": "string",
        "maxLength": 100
      },
      "header": {
        "default": true,
        "description": "Tables (CSV, TSV, XLSX): the first row holds column names",
        "type": "boolean"
      },
      "pretty": {
        "default": true,
        "description": "Indent JSON and XML output",
        "type": "boolean"
      },
      "root": {
        "description": "XML/TOML output: name of the wrapping element or key (\"root\"/\"rows\")",
        "type": "string",
        "maxLength": 64
      },
      "name": {
        "description": "Output file name, without extension. Same as the input if omitted.",
        "type": "string",
        "maxLength": 120
      }
    },
    "required": [
      "to"
    ]
  },
  "kind": "tool"
}