- Data Converter
Data Converter
/* ── 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; } }
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.
<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>
Send Your Data
POST your raw data to /api/convert with source and target format specified. Supports up to 10 MB per request.
Instant Conversion
The engine detects the format, parses the structure, normalizes records, and serializes to your target. Binary documents are extracted automatically.
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.
<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"} ]
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}]" }
{
"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>
POST /auth/provision to get your key.
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.
Provision API Key
# 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
{
"mcpServers": {
"data-converter": {
"url": "https://mcp-converter.tnkng.com/sse",
"type": "sse"
}
}
}
# Restart Claude Desktop
# Tools appear automatically in Claude
Every security rule exists because a real vulnerability was identified and fixed. 168+ tests cover injection, bombs, malformed input, and boundary conditions.
Server Config
{
"mcpServers": {
"mcp-data-converter": {
"url": "https://mcp-converter.tnkng.com/mcp"
}
}
}