TableForge
REST API · MCP Server · Webhooks · OpenAPI

PDF Table Extraction
for Developers & AI Agents

Register programmatically, submit PDFs via REST or MCP, receive structured JSON or Markdown. No human steps. Fully automatable.

🔑Bearer API key auth
Async jobs + polling
🔄4 extraction modes
📡Webhook events
🤖MCP server (Claude / Cursor)
📄OpenAPI 3.0 spec

Three ways to integrate

Choose the approach that fits your stack.

🤖

MCP Server

Zero-code integration for Claude Desktop, Cursor, Zed, and any MCP-compatible host. Add one config block — tools appear automatically in your AI assistant.

Recommended for AI agents
🔌

REST API

Async job model — submit, poll, retrieve. Works from any language or automation platform. OpenAPI spec available for SDK generation.

Any language / platform
📐

OpenAPI Spec

Machine-readable API definition at /openapi.json. Import into Postman, generate a typed SDK, or feed directly to your AI agent.

View spec →

REST API — 4-step quickstart

Register → submit → poll → retrieve. All from code, no browser required.

extract.ts
// 1. Register (fully automated — no human step)
const reg = await fetch('https://tableforge.ai/api/v1/auth/register', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ email: 'bot@example.com', password: 'securepass' }),
}).then(r => r.json())
const apiKey = reg.apiKey.key  // store this — shown once

// 2. Submit extraction job (multipart)
const form = new FormData()
form.append('file', fs.createReadStream('report.pdf'), 'report.pdf')
form.append('mode', 'data_clean')  // 2× credits — normalized output

const { jobId } = await fetch('https://tableforge.ai/api/v1/jobs', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${apiKey}` },
  body: form,
}).then(r => r.json())

// 3. Poll until complete
let job
do {
  await new Promise(r => setTimeout(r, 3000))
  job = await fetch(`https://tableforge.ai/api/v1/jobs/${jobId}`, {
    headers: { 'Authorization': `Bearer ${apiKey}` },
  }).then(r => r.json())
} while (job.status === 'queued' || job.status === 'processing')

// 4. Retrieve structured result
const result = await fetch(`https://tableforge.ai/api/v1/jobs/${jobId}/result`, {
  headers: { 'Authorization': `Bearer ${apiKey}` },
}).then(r => r.json())

console.log(`Extracted ${result.tables.length} tables from ${result.pageCount} pages`)
// result.tables[0].cells → [{ content, rowIndex, columnIndex, rowSpan, columnSpan }, ...]

MCP server for Claude Desktop

Add one block to your Claude Desktop config. TableForge tools (extract_tables, check_job_status, get_job_result) appear in the tool picker automatically.

Works with Claude Desktop, Cursor, Zed, Continue, and any other host that supports the Streamable HTTP MCP transport.

Config file location: ~/.config/claude/claude_desktop_config.json (macOS/Linux) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

claude_desktop_config.json
// ~/.config/claude/claude_desktop_config.json
{
  "mcpServers": {
    "tableforge": {
      "type": "streamable-http",
      "url": "https://tableforge.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer tf_live_YOUR_KEY"
      }
    }
  }
}

Extraction modes

ModeCreditsOutputBest for
table1× per pageJSON + ExcelQuick extraction, simple tables
data_clean2× per pageJSON + ExcelDatabase import, analytics pipelines
markdown2× per pageMarkdown textLLM context windows, RAG pipelines
layout_match4× per pageJSON + ExcelLegal docs, compliance, pixel-perfect fidelity

Monthly credits reset on your billing cycle. Overage billing available on all paid plans.

API access by plan

Entry
$9.99/mo
100 credits/month
Web app only
Pro
$49.99/mo
500 credits/month
✓ API + MCP access
Elite
$149.99/mo
2,000 credits/month
✓ API + MCP access
Enterprise
$299.99/mo
6,000 credits/month
✓ API + MCP access

Get your API key in 30 seconds

One POST to register. No human verification step. Pro plan and above.

Start for free →