Tonic AI Fabricate MCP Server

Widget generated by MCP Showcase

Introduction

This MCP server connects to Tonic Fabricate, Tonic.ai's synthetic data platform for generating safe, realistic data on demand. Fabricate lets engineering and AI teams create fully relational synthetic databases—either from scratch or modeled on existing production patterns—to unblock app development, testing/QA, AI model training, and reinforcement learning workflows without exposing sensitive data.

The core of the server is an AI data-generation agent that runs asynchronously. You start a conversation with a natural-language instruction, the agent works in the background (minutes to hours) building databases, and you poll for status and fetch results. Tools support the full conversation lifecycle: starting, sending follow-ups, checking status, retrieving results, stopping, listing, and reverting to earlier states.

Beyond conversations, the server provides workspace and project management (create, list, and delete workspaces and projects), file handling (direct uploads to seed SQLite databases or attach files, plus downloading generated artifacts), and reusable workflows (project-scoped scripts you can run with parameters). It also includes robust account governance and observability for owners—AI usage costs, seat/member usage, API key activity, audit trails, and per-surface API/MCP call counts.

Use Cases

1. Generate a synthetic database from scratch

Spin up a fully relational, realistic dataset for a new product or demo without any production data.

  • Sample prompt: Create a synthetic Postgres-style database for an urgent care clinic with tables for patients, visits, treatments, and clinician visit notes—about 500 patients and realistic referential integrity.

2. Seed and model from an existing database

Upload an existing SQLite database and have the agent model its structure and distributions.

  • Sample prompt: I've uploaded my seed.db file—model its schema and data distributions, then generate 10,000 new synthetic customer and order records that match those patterns.

3. Track a long-running generation job

Start a job and monitor it asynchronously to completion.

  • Sample prompt: Start generating a large e-commerce dataset with products, inventory, orders, and reviews, then keep checking the status and let me know when it's done and give me the download links.

4. Build evaluation / fine-tuning datasets for AI

Generate labeled data with ground truth for model training or agent testing.

  • Sample prompt: Generate a labeled dataset of 2,000 customer support tickets with categories, sentiment scores, and resolution notes that I can use to fine-tune a classification model.

5. Iteratively refine generated data

Continue a conversation to adjust or expand what the agent produced.

  • Sample prompt: In conversation abc123, add a fraud_flags table and make about 3% of the transactions look anomalous with unusual amounts and timing.

6. Revert a conversation to an earlier state

Undo changes by rolling databases back to before a specific message.

  • Sample prompt: Revert the loan-portfolio conversation back to before the message where I asked you to add the derivatives tables—that direction didn't work out.

7. Organize work across workspaces and projects

Manage where generated data lives.

  • Sample prompt: Create a workspace called "QA Sandbox", then list all projects in it sorted by most recently created.

8. Download generated artifacts and exports

Retrieve the produced databases or exported files.

  • Sample prompt: List all the files my "healthcare demo" conversation produced and give me a direct download link for the exported CSV.

9. Create and run reusable workflows

Execute parameterized, project-scoped scripts for repeatable data tasks.

  • Sample prompt: List the workflows in my analytics project, then run the "monthly_refresh" workflow with region set to EMEA and record_count set to 5000.

10. Configure generation models and validation

Inspect available models and reasoning tiers before launching a run.

  • Sample prompt: Show me the available models and reasoning-effort tiers, then start a high-effort generation with both code review and data review validation enabled.

11. Monitor AI usage costs

Track token spend and usage across scopes.

  • Sample prompt: Show me the total AI usage cost and token breakdown for my "fintech-sim" project since January 1st, 2026.

12. Account governance and seat management (owners)

Review how account seats are being used and by whom.

  • Sample prompt: As the account owner, summarize our seat usage—how many seats are used versus available, and show each member's last active date and AI spend this month.

13. Audit trail and compliance review (owners)

Trace exactly what users and API keys did.

  • Sample prompt: Show me all database_export and database_download audit events from the last 30 days, and tell me which user or API key performed each one.

14. Measure programmatic API/MCP usage (owners)

Break down call volume by caller and surface.

  • Sample prompt: How many API and MCP calls did each user and API key make last quarter? Break it down by surface and show the heaviest callers first.

Details

MCP Server URL:
https://fabricate.tonic.ai/api/v1/mcp
Type:
HTTP Stream
Authentication:
API Key (Bearer Token)

Tools

list_conversation_options
List the models, reasoning-effort tiers, validation availability, and defaults this Fabricate deployment accepts. Pass project_id to also list that workspace's custom skills. Call before start_conversation rather than guessing model IDs.
start_conversation
Start a Fabricate agent conversation from just a message and return immediately with a durable conversation_id. The agent runs in the background (minutes to hours) — do NOT wait. Poll get_conversation_status and fetch get_conversation_result when terminal; continue the conversation with send_message. Location is OPTIONAL: with no project_id/workspace_name, it runs in the first workspace you can edit and creates a project automatically — so the common case is just {message}. Only set project_id/workspace_name to target a specific location.
send_message
Send a follow-up message to an existing conversation, starting the next agent turn. Returns immediately; poll get_conversation_status. Fails if the conversation's previous turn is still running.
get_conversation_status
Poll a conversation's status by conversation_id. Returns a normalized status (running | completed | failed | cancelled), the raw status, a progress hint, and poll_after_ms (0 when terminal).
get_conversation_result
Fetch a conversation's latest result by conversation_id: the agent's final response, generated database artifacts (with download URLs), and a tool-call summary. Set include_transcript for the full message transcript. Best called once the current turn is terminal.
stop_conversation
Request cooperative cancellation of a conversation's in-flight turn by conversation_id. Idempotent.
list_conversations
List a project's conversations (newest first) so you can discover a conversation_id to act on. Returns id, name, mode, normalized status, message_count, and timestamps. Paginated: pass limit (default 50, max 200) and the returned next_cursor to fetch more (next_cursor is null on the last page).
revert_conversation
Revert a conversation's databases/files to the state before a given message, deleting that message and everything after it. Fails if the conversation is currently running. Databases without a recoverable snapshot are returned under `warnings` and left untouched.
create_workspace
Create (or find by name) a Fabricate workspace. Idempotent. Returns the workspace id.
list_workspaces
List the workspaces you can access (id, name, can_edit, created_at, updated_at). Use this to discover a target instead of guessing names, or to answer when a workspace was created. Usually unnecessary for running work — start_conversation defaults to your first editable workspace on its own.
list_projects
List the projects in a workspace: id, name, created_at, updated_at, and url. Use created_at to answer when a project was created or which one is newest — pages are returned newest-created first (then sorted by name within the page), so the first page holds the most recently created projects. Paginated: pass limit (default 50, max 200) and the returned next_cursor to fetch more.
create_upload
Begin a direct file upload (no base64). Returns an upload_id and an upload_url; PUT the raw file bytes to upload_url with your MCP bearer token, then reference the upload_id where a file is accepted — e.g. create_project (seed a SQLite database) or start_conversation/send_message (upload_ids to attach files to the message).
get_ai_usage_costs
Get aggregated AI token usage cost (USD) and token counts for exactly ONE scope: a project, conversation, workspace, or your own user. Pass exactly one of project_id, conversation_id, workspace_id, or user_id. Optional start_at/end_at (ISO 8601) bound the window; omit for all history. Returns total_cost_usd, total_tokens, and by_model / by_token_type breakdowns. Conversation totals include subagent conversations. user_id must be your own id (API-key callers cannot query user-wide totals).
get_account_members
ACCOUNT OWNERS ONLY. Summarize how your account's seats are being used: the plan's max allowed users (max_users; null = unlimited), the current number of users (current_users), remaining seats, and a per-member breakdown. Each member row includes their account role, when they joined, when they were last active (last_active_at = the most recent of web-app activity and AI/data-generation usage), and their AI spend (USD) over the usage window. Optional usage_start_at/usage_end_at (ISO 8601) bound the AI-spend window; omit to use the account's default reporting window. Read-only; only account owners may call it.
list_api_keys
ACCOUNT OWNERS ONLY. List the account's API keys with the last time each was used (last_used_at) and its AI spend (USD) over the usage window — the clearest signal for when and how much your account is being used programmatically through the REST API or via MCP with an API key. Optional usage_start_at/usage_end_at (ISO 8601) bound the AI-spend window; omit to use the account's default reporting window. Read-only; only account owners may call it.
list_audit_events
ACCOUNT OWNERS ONLY. Page through the account's audit trail (newest first) to see exactly what users did and when: data generation and edits (e.g. database_create, database_update, database_execute_query, database_execute_script), exports (database_export, database_export_document, database_download, conversation_export), workflow runs (workflow_execute), API-endpoint activity (api_endpoint_create/update/delete), and more. Each event carries its actor (actor_type: user | api_key | system, plus the user's identity or the api_key_id when applicable), the agent tool/mode when the action came from an AI agent (e.g. an MCP-driven run), the captured resource relationships, and the recorded details (new_values — includes amounts such as row counts/SQL where the action recorded them). Filter with event (name or array of names), user_id, actor_type, and start_at/end_at (ISO 8601). Paginated: pass limit (default 50, max 200) and the returned next_cursor. Requires that the account has audit logs enabled (an Enterprise-plan feature). Read-only; only account owners may call it.
get_api_usage
ACCOUNT OWNERS ONLY. Count how many API and MCP calls the account made over a window, broken down by who made them. Use this to answer "how many API calls did each user make?" — last_used timestamps and the audit trail can't, since the audit trail only records specific audited actions, not raw calls. Returns totals_by_surface plus one row per actor with calls_by_surface and total_calls, sorted by heaviest caller first. actor_type is user (an OAuth/MCP user, identified by name/email) or api_key (programmatic REST/MCP-with-key traffic, identified by key name) — note API keys are not owned by an individual user, so key traffic is attributed to the key. The three surfaces are: rest_api (the platform API under /api/v1), data_api (the generated per-database REST API), and mcp (individual MCP tool calls; only tools/call is counted, not protocol chatter like initialize/tools/list). Optional usage_start_at/usage_end_at (ISO 8601) bound the window; omit to use the account's default reporting window. Only calls made after usage logging was enabled are counted. Read-only; only account owners may call it.
create_project
Create a new project in a workspace. By default it's empty (for a prompt-only conversation where the agent builds the databases itself). To seed it with an existing SQLite database, first upload the file via create_upload and pass the returned upload_id.
delete_project
Delete a project and all of its conversations, messages, and generated SQLite databases. Destructive and irreversible.
delete_workspace
Delete a workspace and everything under it (all projects, conversations, messages, and generated databases). Destructive and irreversible.
list_databases
List a project's generated AI databases (artifact metadata, created_at/updated_at, and download URLs).
list_conversation_files
List the downloadable files a conversation produced (e.g. exported CSV/ZIP attached to the conversation). Returns attachment_id, filename, content_type, and byte_size for each.
download_conversation_file
Get a file produced by a conversation. Returns a signed, self-authenticating download_url — GET it directly (no MCP bearer token needed). Select by attachment_id or filename (or omit both if the conversation produced exactly one file).
list_workflows
List a project's workflows (reusable project-scoped scripts). Returns id, name, subtitle, parameter schema, and linked database_ids. Code is omitted; use get_workflow for the source.
get_workflow
Fetch a single workflow's full details, including its source code and parameter schema. Select by workflow_id or workflow_name.
run_workflow
Run a workflow and return a durable task_id immediately (it executes in the background). Poll get_workflow_task and fetch its result/files when terminal. Select the workflow by workflow_id or workflow_name; pass its parameters as a `params` object (required params come from the workflow's schema — see get_workflow).
get_workflow_task
Poll a workflow run by task_id: normalized status (running | completed | cancelled | failed — same vocabulary as the conversation tools; raw_status carries the underlying workflow-task value), the result data the workflow returned, produced files (with download URLs), and any error.
stop_workflow
Request cooperative cancellation of an in-flight workflow run by task_id. Idempotent (a no-op once the run is terminal).
download_workflow_file
Get a file produced by a workflow run. Returns a signed, self-authenticating download_url — GET it directly (no MCP bearer token needed). Select by attachment_id or filename (or omit both if the run produced exactly one file).

Want to create a similar playground for your MCP?