Production-ready · MCP Native · x402 Payments

Convert Any Data Format
With a Single API Call

16 formats. 240 conversion pairs. JSON, CSV, XML, YAML, TOML, Markdown, HTML, PDF, Excel, DOCX, Base64 and more — exposed as an MCP tool your AI agents can call directly.

Try Live Demo View API Docs
16
Data Formats
240
Conversion Pairs
297
Tests
$0.001
Per Conversion

Every Format You Work With
From structured data to tabular spreadsheets to binary documents — all converted through a single unified API.
Structured Data
JSON XML YAML TOML
Tabular Data
CSV TSV HTML Markdown Properties
Binary Documents
PDF Excel DOCX
Encoding / Text
Base64 URL-Encoded Hex Plain Text
All formats can convert to all other formats
16 × 15 = 240 conversion pairs
See All Conversions →

Simple by Design
Send your data in any format, specify the target format, get back the result. No schemas. No configuration. No SDKs required.
1

Send Your Data

POST your raw data to /api/convert with source and target format specified. Supports up to 10 MB per request.

2

Instant Conversion

The engine detects the format, parses the structure, normalizes records, and serializes to your target. Binary documents are extracted automatically.

3

Get the Result

Receive clean, properly encoded output. Errors return structured messages — never raw stack traces. All responses include format metadata.

Or Use It as an MCP Tool

Connect Claude, Cursor, or any MCP-compatible AI agent directly. The service exposes 5 tools via the Model Context Protocol — no API calls needed from the agent side.


See It in Action
23 real-world scenarios covering every format and endpoint. Run them interactively and inspect every request and response.
MCP Data Converter — Interactive Demo
Open Full Screen ↗

Try a conversion right here — no sign-up needed.

Playground — calls your local service at localhost:8080
Input
Output
Click Convert → to see result

One Endpoint, Any Language
A simple REST API — POST /api/convert with JSON body. No SDK needed.
Request JSON
{
  "sourceFormat": "json",
  "targetFormat": "csv",
  "data": "[{\"name\":\"Alice\",\"age\":30}]"
}
Response JSON
{
  "success": true,
  "sourceFormat": "json",
  "targetFormat": "csv",
  "result": "name,age\nAlice,30"
}
# Convert JSON → CSV
curl -X POST https://mcp-converter.tnkng.com/api/convert \
  -H "Content-Type: application/json" \
  -d '{
    "sourceFormat": "json",
    "targetFormat": "csv",
    "data": "[{\"name\":\"Alice\",\"age\":30}]"
  }'

# Auto-detect format
curl -X POST https://mcp-converter.tnkng.com/api/detect \
  -H "Content-Type: application/json" \
  -d '{"data": "name,age\nAlice,30"}'

# Batch convert (up to 50 items)
curl -X POST https://mcp-converter.tnkng.com/api/batch \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"sourceFormat":"json","targetFormat":"yaml","data":"..."},
    {"sourceFormat":"csv","targetFormat":"xml","data":"..."}
  ]}'
import requests

# Convert JSON array to CSV
response = requests.post(
    "https://mcp-converter.tnkng.com/api/convert",
    json={
        "sourceFormat": "json",
        "targetFormat": "csv",
        "data": '[{"name":"Alice","age":30}]'
    }
)
result = response.json()
if result["success"]:
    print(result["result"])

# Reshape nested JSON with dot-notation paths
reshape = requests.post(
    "https://mcp-converter.tnkng.com/api/reshape",
    json={
        "data": '{"user":{"name":"Alice","address":{"city":"NYC"}}}',
        "mappings": {"name": "user.name", "city": "user.address.city"}
    }
)
// Convert any format to any other
const convert = async (
  data: string,
  from: string,
  to: string
) => {
  const res = await fetch("https://mcp-converter.tnkng.com/api/convert", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ sourceFormat: from, targetFormat: to, data })
  });
  const result = await res.json();
  if (!result.success) throw new Error(result.error);
  return result.result;
};

// Usage
const csv = await convert(
  '[{"name":"Alice","age":30}]',
  "json", "csv"
);
// Using the MCP Kotlin SDK
val client = HttpClient()
val response = client.post("https://mcp-converter.tnkng.com/api/convert") {
    contentType(ContentType.Application.Json)
    setBody(ConversionRequest(
        sourceFormat = "json",
        targetFormat = "yaml",
        data = """[{"name":"Alice","age":30}]"""
    ))
}
val result = response.body<ConversionResponse>()
if (result.success) println(result.result)

// Or add as MCP server in application.yml
// spring.ai.mcp.server.enabled: true
// All @Tool methods auto-registered
# Add to Claude Desktop config (~/.claude/claude_desktop_config.json)
{
  "mcpServers": {
    "data-converter": {
      "url": "https://mcp-converter.tnkng.com/mcp",
      "type": "streamableHttp"
    }
  }
}

# Claude can then call tools directly:
# - convertData(sourceFormat, targetFormat, data)
# - batchConvert(items)
# - reshapeJson(data, mappings)
# - detectFormat(data)
# - listSupportedFormats()

# A2A discovery also available:
# GET /.well-known/agent-card.json
POST /api/convert

Convert a single document between any two formats.

POST /api/batch

Convert up to 50 items in one request with mixed formats.

POST /api/reshape

Remap nested JSON fields using dot-notation path mappings.

POST /api/detect

Auto-detect the format of any input data.

GET /api/formats

List all 16 supported formats and their conversion capabilities.

MCP /mcp

MCP Streamable HTTP endpoint for AI agent discovery.


Pay Only for What You Use
Micropayments via x402 (USDC on Base). Fractions of a cent per conversion. First 100 requests are always free.
New API keys get 100 free requests — no credit card required. Run POST /auth/provision to get your key.
📄
Text Formats
$0.001 / req
For everyday data conversions between text-based formats.
CSV TSV HTML Table Markdown Properties Plain Text
📊
Document Extraction
$0.005 / req
Binary document parsing with full text and table extraction.
PDF Excel DOCX
🔐
Encoding
$0.0005 / req
Lightweight encoding and decoding operations.
Base64 URL-Encoded Hex

Built for Real Workloads
🤖

AI Agent Pipelines

Connect Claude, GPT-4, or any MCP-compatible agent. They can call convertData directly as a tool — no extra API calls, no prompt engineering needed to parse formats.

🔌

API Integrations

Bridge incompatible APIs without writing parsers. Receive XML from a legacy system, convert to JSON for your frontend, reshape fields with dot-notation — in one request.

📄

Document Processing

Extract structured data from PDF reports, Excel spreadsheets, and DOCX files. Convert to any text format for downstream analysis or storage.

🔄

ETL Pipelines

Use the batch endpoint to process up to 50 files in a single request. Mix formats freely — CSV inputs alongside YAML configs, all converted in one shot.

🛠️

Developer Tooling

Embed in CLI tools, VS Code extensions, or CI pipelines. Convert configs between YAML and TOML, generate Markdown tables from JSON, serialize test fixtures.

🔐

Security-Sensitive Workloads

XXE protection, formula injection prevention, input size limits, and 30+ security tests. Safe to use with untrusted user data in production.


Up in Minutes

Provision API Key

First request cURL
# Get your free API key (100 free requests)
curl -X POST https://mcp-converter.tnkng.com/auth/provision

# Response:
{
  "apiKey": "mcp_xxxxxxxxxxxx",
  "freeRequestsRemaining": 100
}

# Use in requests:
curl -H "X-API-Key: mcp_xxxx" ...

MCP Config Claude / Cursor

claude_desktop_config.json JSON
{
  "mcpServers": {
    "data-converter": {
      "url": "https://mcp-converter.tnkng.com/mcp",
      "type": "streamableHttp"
    }
  }
}

# Restart Claude Desktop
# Tools appear automatically in Claude

Hardened for Production

Every security rule exists because a real vulnerability was identified and fixed. 168+ tests cover injection, bombs, malformed input, and boundary conditions.

XXE Prevention
CSV Formula Injection
10 MB Input Limits
100K Record Cap
Recursion Depth Limit
ReDoS-Safe Regex
HTML/XML Output Escaping
No Raw Stack Traces