Data Converter

Created By
2 months ago
Convert data between 200+ format pairs across 16 formats: JSON, CSV, XML, YAML, TOML, HTML table, Markdown table, Properties, TSV, PDF, Excel, DOCX, Base64, URL-encoded, Hex, Plain Text. Includes JSON reshaping, format auto-detection, and batch conversion. Free tier: 100 requests per API key.
Overview

/* ── Hero ───────────────────────────────────── */ .hero { padding: 140px 32px 80px; text-align: center; position: relative; overflow: hidden; } .hero::before { content: ''; position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 800px; height: 400px; background: radial-gradient(ellipse at center, rgba(31,111,235,0.18) 0%, transparent 70%); pointer-events: none; } .hero-badge { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: 20px; background: rgba(56,139,253,0.12); border: 1px solid rgba(56,139,253,0.35); color: var(--blue); font-size: 13px; font-weight: 500; margin-bottom: 24px; } .hero-badge .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--green); box-shadow: 0 0 6px var(--green); } .hero h1 { font-size: clamp(2.4rem, 5vw, 4rem); font-weight: 800; line-height: 1.15; letter-spacing: -1.5px; color: #f0f6fc; max-width: 820px; margin: 0 auto 20px; } .hero h1 span { color: var(--blue); } .hero p { font-size: clamp(1rem, 1.5vw, 1.2rem); color: var(--muted); max-width: 600px; margin: 0 auto 36px; line-height: 1.7; } .hero-ctas { display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; margin-bottom: 60px; } .hero-stats { display: flex; justify-content: center; gap: 48px; flex-wrap: wrap; } .stat { text-align: center; } .stat-value { font-size: 2.2rem; font-weight: 800; color: #f0f6fc; letter-spacing: -1px; line-height: 1; } .stat-label { font-size: 12px; color: var(--muted); margin-top: 4px; text-transform: uppercase; letter-spacing: 0.5px; }

/* ── Section Commons ───────────────────────────────────── */ section { padding: 80px 32px; } .container { max-width: 1100px; margin: 0 auto; } .section-label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 1px; color: var(--blue); margin-bottom: 10px; } .section-title { font-size: clamp(1.6rem, 3vw, 2.4rem); font-weight: 800; color: #f0f6fc; letter-spacing: -0.8px; margin-bottom: 14px; } .section-sub { font-size: 1.05rem; color: var(--muted); max-width: 560px; line-height: 1.7; } .section-header { margin-bottom: 48px; }

/* ── Format Grid ───────────────────────────────────── */ .formats-section { background: var(--panel2); } .formats-intro { margin-bottom: 48px; } .format-categories { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; } .format-category { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 24px; transition: border-color 0.2s, transform 0.2s; } .format-category:hover { border-color: var(--blue-dim); transform: translateY(-2px); } .category-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 14px; display: flex; align-items: center; gap: 7px; } .category-label .dot { width: 7px; height: 7px; border-radius: 50%; } .format-tags { display: flex; flex-wrap: wrap; gap: 7px; } .format-tag { padding: 4px 10px; border-radius: 5px; font-size: 12px; font-weight: 600; font-family: "SF Mono", "Fira Code", Consolas, monospace; background: rgba(255,255,255,0.05); border: 1px solid var(--border); color: var(--text); }

/* ── How It Works ───────────────────────────────────── */ .steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 24px; } .step { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 28px; position: relative; } .step-num { width: 36px; height: 36px; border-radius: 8px; background: var(--blue-dim); color: #fff; font-size: 15px; font-weight: 700; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; } .step h3 { font-size: 1.05rem; font-weight: 700; color: #f0f6fc; margin-bottom: 8px; } .step p { font-size: 14px; color: var(--muted); line-height: 1.65; }

/* ── Code Example ───────────────────────────────────── */ .code-section { background: var(--panel2); } .code-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } @media (max-width: 800px) { .code-grid { grid-template-columns: 1fr; } } .code-block { background: var(--bg); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; } .code-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; background: var(--panel); border-bottom: 1px solid var(--border); font-size: 12px; color: var(--muted); } .code-lang { padding: 2px 8px; border-radius: 4px; background: rgba(88,166,255,0.12); color: var(--blue); font-size: 11px; font-weight: 600; } pre { padding: 20px; overflow-x: auto; font-size: 13px; font-family: "SF Mono", "Fira Code", Consolas, monospace; line-height: 1.65; color: var(--text); } .kw { color: var(--blue); } .str { color: var(--green); } .key { color: var(--cyan); } .num { color: var(--orange); } .cmt { color: var(--muted); } .hl { color: var(--yellow); }

/* ── Lang Tabs ───────────────────────────────────── */ .lang-tabs { display: flex; gap: 0; margin-bottom: 0; border-bottom: 1px solid var(--border); } .lang-tab { padding: 10px 18px; font-size: 13px; font-weight: 500; cursor: pointer; border: none; background: transparent; color: var(--muted); transition: color 0.2s; border-bottom: 2px solid transparent; margin-bottom: -1px; } .lang-tab.active { color: var(--blue); border-bottom-color: var(--blue); } .lang-pane { display: none; } .lang-pane.active { display: block; }

/* ── Demo Section ───────────────────────────────────── */ .demo-section { padding: 80px 32px; } .demo-container { max-width: 1100px; margin: 0 auto; background: var(--panel); border: 1px solid var(--border); border-radius: 16px; overflow: hidden; } .demo-header { display: flex; align-items: center; justify-content: space-between; padding: 18px 24px; background: var(--panel2); border-bottom: 1px solid var(--border); } .demo-header-left { display: flex; align-items: center; gap: 12px; } .demo-dots { display: flex; gap: 6px; } .demo-dot { width: 12px; height: 12px; border-radius: 50%; } .demo-dot.red { background: #ff5f57; } .demo-dot.yellow { background: #febc2e; } .demo-dot.green { background: #28c840; } .demo-title { font-size: 13px; color: var(--muted); } .demo-iframe-wrapper { height: 700px; position: relative; } .demo-iframe-wrapper iframe { width: 100%; height: 100%; border: none; display: block; } .demo-overlay-cta { position: absolute; bottom: 0; left: 0; right: 0; padding: 20px; text-align: center; background: linear-gradient(transparent, rgba(13,17,23,0.95)); pointer-events: none; }

/* ── Mini Demo Playground ───────────────────────────────────── */ .playground { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; margin-top: 32px; } .playground-header { display: flex; align-items: center; gap: 12px; padding: 14px 20px; background: var(--panel2); border-bottom: 1px solid var(--border); font-size: 13px; color: var(--muted); } .playground-body { display: grid; grid-template-columns: 1fr auto 1fr; gap: 0; } .pg-panel { padding: 20px; } .pg-divider { display: flex; align-items: center; justify-content: center; padding: 0 16px; background: var(--panel2); border-left: 1px solid var(--border); border-right: 1px solid var(--border); } .pg-label { font-size: 11px; color: var(--muted); margin-bottom: 10px; text-transform: uppercase; letter-spacing: 0.5px; } .pg-select-row { display: flex; gap: 8px; margin-bottom: 10px; } select { background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 6px; padding: 6px 10px; font-size: 13px; flex: 1; } select:focus { outline: none; border-color: var(--blue); } textarea { width: 100%; background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 6px; padding: 10px; font-size: 12px; font-family: "SF Mono", "Fira Code", Consolas, monospace; resize: vertical; min-height: 180px; line-height: 1.6; } textarea:focus { outline: none; border-color: var(--blue); } .pg-convert-btn { padding: 10px 20px; border-radius: 8px; background: var(--blue); color: #0d1117; border: none; cursor: pointer; font-size: 14px; font-weight: 700; transition: all 0.2s; writing-mode: vertical-rl; text-orientation: mixed; } .pg-convert-btn:hover { background: #79b8ff; } .pg-output { font-family: "SF Mono", "Fira Code", Consolas, monospace; font-size: 12px; line-height: 1.65; white-space: pre-wrap; color: var(--green); background: var(--bg); border: 1px solid var(--border); border-radius: 6px; padding: 10px; min-height: 180px; overflow: auto; } .pg-error { color: var(--red); }

/* ── Pricing ───────────────────────────────────── */ .pricing-section { background: var(--panel2); } .pricing-note { background: rgba(63,185,80,0.08); border: 1px solid rgba(63,185,80,0.25); border-radius: 8px; padding: 14px 20px; display: flex; align-items: center; gap: 10px; font-size: 14px; margin-bottom: 36px; color: var(--green); } .pricing-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; } .pricing-card { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 24px; transition: border-color 0.2s, transform 0.2s; } .pricing-card:hover { border-color: var(--border); transform: translateY(-2px); } .pricing-card.featured { border-color: var(--blue); } .pricing-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 18px; margin-bottom: 14px; } .pricing-tier { font-size: 13px; font-weight: 600; color: var(--muted); margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.5px; } .pricing-price { font-size: 2rem; font-weight: 800; color: #f0f6fc; letter-spacing: -1px; line-height: 1; } .pricing-price span { font-size: 13px; font-weight: 500; color: var(--muted); } .pricing-desc { font-size: 13px; color: var(--muted); margin: 10px 0 16px; line-height: 1.55; } .pricing-formats { display: flex; flex-wrap: wrap; gap: 5px; } .pricing-format { padding: 2px 8px; border-radius: 4px; font-size: 11px; font-family: "SF Mono", "Fira Code", Consolas, monospace; font-weight: 600; background: rgba(255,255,255,0.05); border: 1px solid var(--border2); color: var(--muted); }

/* ── MCP / Use Cases ───────────────────────────────────── */ .usecases-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; } .usecase { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 28px; transition: border-color 0.2s; } .usecase:hover { border-color: var(--blue-dim); } .usecase-icon { font-size: 28px; margin-bottom: 14px; display: block; } .usecase h3 { font-size: 1rem; font-weight: 700; color: #f0f6fc; margin-bottom: 8px; } .usecase p { font-size: 14px; color: var(--muted); line-height: 1.65; }

/* ── Quick Start ───────────────────────────────────── */ .quickstart-section { background: var(--panel2); } .quickstart-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; } @media (max-width: 800px) { .quickstart-grid { grid-template-columns: 1fr; } } .quickstart-block h3 { font-size: 1rem; font-weight: 700; color: #f0f6fc; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; } .tag { padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 600; background: rgba(88,166,255,0.12); color: var(--blue); border: 1px solid rgba(88,166,255,0.25); }

/* ── Security Badge ───────────────────────────────────── */ .security-section { text-align: center; } .security-badges { display: flex; justify-content: center; flex-wrap: wrap; gap: 16px; margin-top: 36px; } .security-badge { display: flex; align-items: center; gap: 8px; padding: 10px 18px; border-radius: 8px; background: var(--panel); border: 1px solid var(--border); font-size: 13px; color: var(--text); } .security-badge .check { color: var(--green); font-size: 15px; }

/* ── Footer ───────────────────────────────────── */ footer { background: var(--panel); border-top: 1px solid var(--border); padding: 40px 32px 28px; } .footer-grid { max-width: 1100px; margin: 0 auto; display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 40px; margin-bottom: 36px; } @media (max-width: 800px) { .footer-grid { grid-template-columns: 1fr 1fr; } .footer-brand { grid-column: 1 / -1; } } .footer-brand p { font-size: 13px; color: var(--muted); margin-top: 10px; max-width: 240px; line-height: 1.65; } .footer-col h4 { font-size: 13px; font-weight: 700; color: #f0f6fc; margin-bottom: 12px; } .footer-col ul { list-style: none; } .footer-col li { margin-bottom: 8px; } .footer-col a { font-size: 13px; color: var(--muted); text-decoration: none; transition: color 0.2s; } .footer-col a:hover { color: var(--blue); } .footer-bottom { max-width: 1100px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; border-top: 1px solid var(--border2); padding-top: 20px; font-size: 12px; color: var(--muted); flex-wrap: wrap; gap: 10px; }

/* ── Animations ───────────────────────────────────── */ @keyframes fade-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .fade-up { animation: fade-up 0.6s ease forwards; } .fade-up-1 { animation-delay: 0.1s; opacity: 0; } .fade-up-2 { animation-delay: 0.2s; opacity: 0; } .fade-up-3 { animation-delay: 0.3s; opacity: 0; } .fade-up-4 { animation-delay: 0.4s; opacity: 0; }

@keyframes pulse-dot { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } .pulse { animation: pulse-dot 2s infinite; }

/* ── Divider ───────────────────────────────────── */ hr { border: none; border-top: 1px solid var(--border); margin: 0; }

/* ── Responsive ───────────────────────────────────── */ @media (max-width: 700px) { nav { padding: 0 16px; } .nav-links { display: none; } .hero { padding: 110px 16px 60px; } section { padding: 60px 16px; } .hero-stats { gap: 28px; } .demo-iframe-wrapper { height: 500px; } .playground-body { grid-template-columns: 1fr; } .pg-divider { padding: 14px 20px; border-left: none; border-right: none; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } .pg-convert-btn { writing-mode: horizontal-tb; width: 100%; } footer { padding: 32px 16px 20px; } }

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.

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
<div style="margin-top:32px;padding:20px 24px;background:var(--panel);border:1px solid var(--border);border-radius:10px;display:flex;align-items:center;gap:16px;flex-wrap:wrap">
  <div style="flex:1;min-width:200px">
    <div style="font-size:13px;color:var(--muted);margin-bottom:4px">All formats can convert to all other formats</div>
    <div style="font-size:22px;font-weight:800;color:#f0f6fc;letter-spacing:-0.5px">16 × 15 = <span style="color:var(--blue)">240 conversion pairs</span></div>
  </div>
  <a href="/demo.html" class="btn btn-outline" style="flex-shrink:0">See All Conversions →</a>
</div>

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.
<div class="demo-container">
  <div class="demo-header">
    <div class="demo-header-left">
      <div class="demo-dots">
        <div class="demo-dot red"></div>
        <div class="demo-dot yellow"></div>
        <div class="demo-dot green"></div>
      </div>
      <span class="demo-title">MCP Data Converter — Interactive Demo</span>
    </div>
    <a href="/demo.html" class="btn btn-outline btn-sm" target="_blank">Open Full Screen ↗</a>
  </div>
  <div class="demo-iframe-wrapper">
    <iframe src="/demo.html" title="MCP Data Converter Live Demo" loading="lazy"></iframe>
  </div>
</div>

<!-- Mini Playground -->
<div style="margin-top:40px">
  <div class="section-label" style="margin-bottom:8px">Quick Playground</div>
  <p style="font-size:14px;color:var(--muted);margin-bottom:20px">Try a conversion right here — no sign-up needed.</p>
  <div class="playground">
    <div class="playground-header">
      <svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="6" stroke="#3fb950" stroke-width="1.4"/><path d="M5 7l1.5 1.5L9.5 5" stroke="#3fb950" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>
      <span>Playground — calls your local service at <code style="color:var(--cyan)">localhost:8080</code></span>
    </div>
    <div class="playground-body">
      <div class="pg-panel">
        <div class="pg-label">Input</div>
        <div class="pg-select-row">
          <select id="pg-source">
            <option value="json" selected>JSON</option>
            <option value="csv">CSV</option>
            <option value="yaml">YAML</option>
            <option value="xml">XML</option>
            <option value="toml">TOML</option>
            <option value="markdown">Markdown</option>
            <option value="properties">Properties</option>
            <option value="tsv">TSV</option>
            <option value="html">HTML</option>
            <option value="plain_text">Plain Text</option>
            <option value="base64">Base64</option>
          </select>
        </div>
        <textarea id="pg-input" spellcheck="false">[

{"name": "Alice", "age": 30, "city": "NYC"}, {"name": "Bob", "age": 25, "city": "SF"}, {"name": "Carol", "age": 35, "city": "Austin"} ]

Output
Click Convert → to see result


One Endpoint, Any Language
A simple REST API — POST /api/convert with JSON body. No SDK needed.
<div class="code-grid" style="margin-bottom:32px">
  <div class="code-block">
    <div class="code-header">
      <span>Request</span>
      <span class="code-lang">JSON</span>
    </div>
    <pre>{

"sourceFormat": "json", "targetFormat": "csv", "data": "[{"name":"Alice","age":30}]" }

Response JSON
{
"success": true,
"sourceFormat": "json",
"targetFormat": "csv",
"result": "name,age\nAlice,30"
}

<!-- Language tabs -->
<div class="code-block">
  <div class="code-header" style="padding:0">
    <div class="lang-tabs">
      <button class="lang-tab active" onclick="switchLang(this,'curl')">cURL</button>
      <button class="lang-tab" onclick="switchLang(this,'python')">Python</button>
      <button class="lang-tab" onclick="switchLang(this,'typescript')">TypeScript</button>
      <button class="lang-tab" onclick="switchLang(this,'kotlin')">Kotlin</button>
      <button class="lang-tab" onclick="switchLang(this,'mcp')">MCP (Claude)</button>
    </div>
  </div>
  <div id="lang-curl" class="lang-pane active">
# 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":"..."}
  ]}'
  </div>
  <div id="lang-python" class="lang-pane">
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"}
    }
)
  </div>
  <div id="lang-typescript" class="lang-pane">
// 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"
);
  </div>
  <div id="lang-kotlin" class="lang-pane">
// 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
  </div>
  <div id="lang-mcp" class="lang-pane">
# Add to Claude Desktop config (~/.claude/claude_desktop_config.json)
{
  "mcpServers": {
    "data-converter": {
      "url": "https://mcp-converter.tnkng.com/sse",
      "type": "sse"
    }
  }
}

# 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
  </div>
</div>

<!-- Endpoints summary -->
<div style="margin-top:24px;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px">
  <div style="background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px">
    <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
      <span style="background:rgba(63,185,80,0.15);color:var(--green);font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px">POST</span>
      <code style="color:var(--cyan);font-size:13px">/api/convert</code>
    </div>
    <p style="font-size:13px;color:var(--muted)">Convert a single document between any two formats.</p>
  </div>
  <div style="background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px">
    <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
      <span style="background:rgba(63,185,80,0.15);color:var(--green);font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px">POST</span>
      <code style="color:var(--cyan);font-size:13px">/api/batch</code>
    </div>
    <p style="font-size:13px;color:var(--muted)">Convert up to 50 items in one request with mixed formats.</p>
  </div>
  <div style="background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px">
    <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
      <span style="background:rgba(63,185,80,0.15);color:var(--green);font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px">POST</span>
      <code style="color:var(--cyan);font-size:13px">/api/reshape</code>
    </div>
    <p style="font-size:13px;color:var(--muted)">Remap nested JSON fields using dot-notation path mappings.</p>
  </div>
  <div style="background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px">
    <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
      <span style="background:rgba(63,185,80,0.15);color:var(--green);font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px">POST</span>
      <code style="color:var(--cyan);font-size:13px">/api/detect</code>
    </div>
    <p style="font-size:13px;color:var(--muted)">Auto-detect the format of any input data.</p>
  </div>
  <div style="background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px">
    <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
      <span style="background:rgba(88,166,255,0.15);color:var(--blue);font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px">GET</span>
      <code style="color:var(--cyan);font-size:13px">/api/formats</code>
    </div>
    <p style="font-size:13px;color:var(--muted)">List all 16 supported formats and their conversion capabilities.</p>
  </div>
  <div style="background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px">
    <div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
      <span style="background:rgba(88,166,255,0.15);color:var(--blue);font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px">SSE</span>
      <code style="color:var(--cyan);font-size:13px">/sse</code>
    </div>
    <p style="font-size:13px;color:var(--muted)">MCP Server-Sent Events endpoint for AI agent discovery.</p>
  </div>
</div>

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/sse",
"type": "sse"
}
}
}

# 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

Server Config

{
  "mcpServers": {
    "mcp-data-converter": {
      "url": "https://mcp-converter.tnkng.com/mcp"
    }
  }
}
Project Info
Created At
2 months ago
Updated At
2 months ago
Author Name
-
Star
-
Language
-
License
-
Category

Recommend Servers

View All
Tavily Mcp
@tavily-ai

JavaScript
a year ago
Bring your real authenticated browser session to AI coding agents. Local-first MCP server + Chrome MV3 extension. No cloud. No telemetry.
@Cubenest

peek records the user's actual logged-in browser (DOM via rrweb, console events, network metadata, optional response bodies via opt-in Deep capture) through a Chrome MV3 extension. The extension ships events through a native-messaging stdio bridge to a local MCP server (peek-mcp), which persists them to a SQLite database at ~/.peek/sessions.db. AI coding agents (Claude Code, Cursor, Cline, Windsurf) read sessions from the database via 10 MCP tools: Tool What it does list_recent_sessions List recently recorded sessions (id, origin, ts, event count). get_session_summary LLM-readable narrative summary of a session. get_session_console_errors Console errors recorded in a session. get_session_network_errors Failed/notable network requests in a session. get_user_action_before_error Last N user actions before a console error. generate_playwright_repro Generate a runnable Playwright test from a session. get_dom_snapshot Reconstruct the DOM at a given timestamp. query_dom_history Timeline of attribute/text changes for a selector. request_authorization Side-panel consent for write actions (Level 3). execute_action Dispatch a UI action (gated by permission level + destructive blocklist). Why local-first matters Every other "browser session for AI" tool ships to a vendor cloud. peek's SQLite + extension live on the user's machine — no remote endpoints, no telemetry. The privacy policy (docs/peek/PRIVACY_POLICY.md) is the source of truth. Install # 1. Add the MCP server to Claude Code claude mcp add peek -- npx -y @peekdev/mcp # 2. Install the Chrome extension from the Chrome Web Store # (link added once the CWS listing is approved)

a day ago