{
  "$schema": "https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/main/schema/server-card.json",
  "name": "synthforge",
  "displayName": "SynthForge IO",
  "serverInfo": {
    "name": "synthforge",
    "title": "SynthForge IO",
    "version": "0.1.0",
    "icons": [
      {
        "src": "https://synthforge.io/favicon-32.png",
        "mimeType": "image/png",
        "sizes": [
          "32x32"
        ],
        "theme": "light"
      },
      {
        "src": "https://synthforge.io/favicon-180.png",
        "mimeType": "image/png",
        "sizes": [
          "180x180"
        ],
        "theme": "light"
      },
      {
        "src": "https://synthforge.io/favicon-32-dark.png",
        "mimeType": "image/png",
        "sizes": [
          "32x32"
        ],
        "theme": "dark"
      },
      {
        "src": "https://synthforge.io/favicon-180-dark.png",
        "mimeType": "image/png",
        "sizes": [
          "180x180"
        ],
        "theme": "dark"
      }
    ]
  },
  "icons": [
    {
      "src": "https://synthforge.io/favicon-32.png",
      "mimeType": "image/png",
      "sizes": [
        "32x32"
      ],
      "theme": "light"
    },
    {
      "src": "https://synthforge.io/favicon-180.png",
      "mimeType": "image/png",
      "sizes": [
        "180x180"
      ],
      "theme": "light"
    },
    {
      "src": "https://synthforge.io/favicon-32-dark.png",
      "mimeType": "image/png",
      "sizes": [
        "32x32"
      ],
      "theme": "dark"
    },
    {
      "src": "https://synthforge.io/favicon-180-dark.png",
      "mimeType": "image/png",
      "sizes": [
        "180x180"
      ],
      "theme": "dark"
    }
  ],
  "description": "Describe a database in plain English and get realistic test data back, ready to load. Generates multi-table datasets with working foreign keys: parent rows first, then child rows that reference real parent IDs, so the data imports into Postgres, MySQL, SQLite, DuckDB and more without orphaned references. 152 field types covering names, addresses, medical codes, finance and more, with realistic correlations (cities match their states, ZIPs match their cities). Ask for \"customers, orders and line items with 500 rows\" and download a working dataset in about a minute. Nothing to install: this is a hosted server, so point your client at the URL. Free to start and no card required. The first API key includes 250 credits, enough for several datasets. Built for seeding dev and staging databases, demo environments, and integration tests. It generates new data only. It does not anonymize or de-identify data you already have. One modelling limit worth knowing: a table cannot carry a foreign key to itself (manager_id on employees), so model hierarchies as a separate edge table.",
  "status": "live",
  "homepage": "https://synthforge.io",
  "documentation": "https://synthforge.io/llms-full.txt",
  "contact": "support@synthforge.io",
  "publisher": {
    "name": "SynthForge IO",
    "url": "https://synthforge.io"
  },
  "license": {
    "name": "Proprietary",
    "url": "https://synthforge.io/terms"
  },
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://mcp.synthforge.io/mcp",
    "status": "live"
  },
  "authentication": {
    "type": "bearer",
    "description": "Browse the tools with no key. Running one needs an account, and there are two ways in. Hosted clients such as claude.ai can connect with OAuth: add this server and approve access in your browser, with nothing to paste. Local clients that take a bearer token use an API key (sfk_live_…), free to create at https://synthforge.io, with 250 credits on first issue. Backend: https://api.synthforge.io"
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {
      "listChanged": false
    },
    "prompts": {
      "listChanged": false
    },
    "logging": {},
    "roots": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "description_to_dataset",
      "description": "Start here. One call: describe the data you want in plain English, get back a downloadable dataset with every foreign key resolved. Handles the whole job, so you do not have to design a schema first."
    },
    {
      "name": "forge_schema",
      "description": "Turn a plain-English description into a table design you can review and reuse, without generating data yet. Use when you want to check or edit the structure before committing to rows."
    },
    {
      "name": "generate_dataset",
      "description": "Generate fresh rows from a schema you already have. Use this to re-run with different row counts or a different random seed rather than redesigning."
    },
    {
      "name": "get_download_url",
      "description": "Get a download link for a finished dataset. Returns CSV, JSON, SQL inserts and Parquet in one package."
    },
    {
      "name": "wait_dataset",
      "description": "Wait for a dataset to finish. Simpler than polling get_dataset_status yourself."
    },
    {
      "name": "wait_schema_job",
      "description": "Wait for a schema design to finish."
    },
    {
      "name": "get_credits",
      "description": "Check how many credits are left and what each job costs. Worth calling before a long run."
    },
    {
      "name": "list_schemas",
      "description": "List the schemas on this account, to reuse one instead of designing again."
    },
    {
      "name": "get_schema",
      "description": "Inspect one schema: its tables, columns and relationships."
    },
    {
      "name": "duplicate_schema",
      "description": "Copy a schema so you can vary it without touching the original."
    },
    {
      "name": "list_datasets",
      "description": "List datasets on this account."
    },
    {
      "name": "get_dataset",
      "description": "Details and status for one dataset."
    },
    {
      "name": "get_dataset_status",
      "description": "Current status of a dataset job."
    },
    {
      "name": "get_schema_job_status",
      "description": "Current status of a schema design job."
    },
    {
      "name": "cancel_dataset",
      "description": "Stop a dataset that is still running."
    },
    {
      "name": "cancel_schema_job",
      "description": "Stop a schema design that is still running."
    },
    {
      "name": "get_quota",
      "description": "Account limits, useful when diagnosing a rate-limit error."
    },
    {
      "name": "whoami",
      "description": "Which account this key belongs to."
    }
  ]
}
