Skip to content
mcpai-agentshow-tocookbook

The MCP tool cookbook: 12 recipes for AI agents in Hypertab

Copy-paste patterns that turn natural-language requests into real Hypertab tables, rows, and pipelines. Every recipe is a single MCP tool call or a short chain.

Suleman Ahmed ·

TL;DR. Hypertab exposes 47 MCP tools. Most tasks only touch three or four of them. This cookbook is the short list: 12 recipes that cover what real users ask their agent to do, in the exact order the tools should be called. Each one is a pattern you can paste into a Claude Code, Cursor, or Windsurf prompt.

How the tools are organized

Every tool name starts with hypertab_. They break into six groups.

  • Table management (12 tools): create, describe, rename, delete, restore tables and columns.
  • Smart columns (9 tools): add AI, HTTP, formula, extract, integration, waterfall, lookup columns, configure them, and trigger runs.
  • Sources (4 tools): webhook, CSV, API pull, and connected table sources.
  • Row operations (7 tools): insert, query, update, delete, upsert, count.
  • Webhooks (4 tools): inbound and outbound.
  • Integrations (2 tools for AI providers, 4 for API accounts, 5 utility): save credentials, import CSV, export CSV, HTTP proxy.

You do not need to memorize any of this. Your agent calls list_tools once and keeps the schemas in context. The recipes below show the high frequency chains, with the exact tool name for each step.

Setup: connect the MCP server

{
  "mcpServers": {
    "hypertab": {
      "url": "https://api.hypertab.ai/mcp",
      "headers": { "Authorization": "Bearer ht_sk_YOUR_KEY" }
    }
  }
}

Paste that into your agent’s config, restart, and hypertab_* tools appear in the tool list. Every recipe below assumes the agent has this config loaded.

Recipe 1: create a table from a natural language spec

Prompt to agent. “Make a leads table with name, company, domain, email, status, and created_at.”

Tool chain.

  1. hypertab_create_table with name: "leads" and a columns array.
{
  "name": "leads",
  "description": "Inbound leads from website form",
  "columns": [
    { "name": "name", "type": "text" },
    { "name": "company", "type": "text" },
    { "name": "domain", "type": "url" },
    { "name": "email", "type": "email" },
    { "name": "status", "type": "select", "config": { "options": ["new", "qualified", "contacted", "won", "lost"] } }
  ]
}

_ht_id, _ht_created_at, _ht_updated_at, and _ht_status are added automatically. You never create system columns yourself.

Recipe 2: add an AI column that summarizes a website

Prompt to agent. “For each lead add an AI column that fetches the domain and writes a one line summary of what the company does.”

Tool chain.

  1. hypertab_add_smart_column with kind: "http" to fetch the homepage.
  2. hypertab_add_smart_column with kind: "ai" to summarize.
{
  "table": "leads",
  "name": "homepage_html",
  "kind": "http",
  "config": {
    "method": "GET",
    "url": "https://{{domain}}",
    "rate_limit": "conservative"
  }
}
{
  "table": "leads",
  "name": "company_summary",
  "kind": "ai",
  "config": {
    "model": "anthropic/claude-sonnet-4",
    "prompt": "Summarize what this company does in one sentence, from their homepage HTML: {{homepage_html}}",
    "max_tokens": 150,
    "rate_limit": "moderate"
  }
}

When you insert rows, both columns run. homepage_html first, then company_summary because it references {{homepage_html}}. The engine figures out the order from the template refs.

Recipe 3: insert rows and watch them process

Prompt to agent. “Insert these three leads and show me when they’re done.”

Tool chain.

  1. hypertab_insert_rows with the row data.
  2. hypertab_get_column_run_status to poll progress.
{
  "table": "leads",
  "rows": [
    { "name": "Ada Lovelace", "company": "Analytical Engines", "domain": "analyticalengines.com", "email": "[email protected]", "status": "new" },
    { "name": "Grace Hopper", "company": "Compiler Co", "domain": "compilerco.com", "email": "[email protected]", "status": "new" },
    { "name": "Alan Turing", "company": "Cryptanalytics", "domain": "cryptanalytics.com", "email": "[email protected]", "status": "qualified" }
  ]
}

The response has inserted_count: 3 and run_id if smart columns fired. Pass run_id to hypertab_get_column_run_status to poll.

Recipe 4: pull structured fields out of an HTTP result for free

Prompt to agent. “Add a column that pulls the company name out of the Clearbit response without calling the API again.”

Tool chain.

  1. hypertab_add_extract_column against the existing HTTP column.
{
  "table": "leads",
  "name": "clearbit_name",
  "source_column": "clearbit_enrich",
  "field_path": "data.company.name"
}

Extract columns cost zero API calls. They read the stored JSON blob from the source column and pull one field. You can have twenty extracts on one HTTP column and still only pay for the one HTTP request per row.

Recipe 5: a waterfall that tries three enrichment sources in order

Prompt to agent. “Enrich each company. Try Clearbit first, then Apollo, then a Google search as fallback.”

Tool chain.

  1. hypertab_add_smart_column with kind: "waterfall".
{
  "table": "leads",
  "name": "company_data",
  "kind": "waterfall",
  "config": {
    "steps": [
      { "type": "http", "url": "https://api.clearbit.com/v2/companies/find?domain={{domain}}", "account": "clearbit" },
      { "type": "http", "url": "https://api.apollo.io/v1/organizations/enrich?domain={{domain}}", "account": "apollo" },
      { "type": "ai", "model": "openai/gpt-4o-mini", "prompt": "Given domain {{domain}}, return a JSON with name, industry, size, founded. Use web knowledge." }
    ],
    "success_condition": "non_null",
    "rate_limit": "moderate"
  }
}

The engine tries step 1. If it returns non null, it stops. If null, step 2. Then step 3. Each row records which step won in a metadata field so you can audit coverage.

Recipe 6: cursor paginate 100,000 rows without loading them all

Prompt to agent. “Page through the full leads table and count how many are from .edu domains.”

Tool chain.

  1. hypertab_query_rows with a cursor, in a loop.
{
  "table": "leads",
  "filter": { "domain": { "ends_with": ".edu" } },
  "limit": 100,
  "cursor": null
}

Response includes next_cursor. Pass it back in on the next call. Your agent loops until next_cursor is null. Max page size is 100, which is a hard limit. If you do not need the rows, use hypertab_count_rows with the same filter, which returns a count in one call.

Recipe 7: dedupe by email on every insert

Prompt to agent. “Make sure we never have two leads with the same email.”

Tool chain.

  1. hypertab_dedupe_column with auto_on_insert: true.
{
  "table": "leads",
  "column": "email",
  "auto_on_insert": true
}

This runs a one time dedupe pass to clean existing dupes (keeps the oldest row per unique email), and flips the auto dedupe flag. Every future insert that collides is rejected with a clear error and a pointer to the existing row id.

Recipe 8: cascade a retry on only the failed cells

Prompt to agent. “Retry the rows where company_summary failed. Don’t rerun the rest.”

Tool chain.

  1. hypertab_get_cell_states with status: "error" to list failures.
  2. hypertab_retry_failed_cells to re enqueue.
{ "table": "leads", "column": "company_summary", "status": "error" }
{ "table": "leads", "column": "company_summary" }

The retry only touches error cells. Completed cells are left alone. The retry also logs a new run_id so you can compare before and after.

Recipe 9: push qualified leads to Slack

Prompt to agent. “Whenever a lead moves to qualified, post it in the #sales channel.”

Tool chain.

  1. hypertab_create_webhook as an outgoing webhook with a filter.
{
  "table": "leads",
  "direction": "outgoing",
  "url": "https://hooks.slack.com/services/T00/B00/XXX",
  "events": ["row.updated"],
  "filter": { "status": "qualified" },
  "template": {
    "text": "New qualified lead: {{name}} ({{company}}) - {{email}}"
  }
}

The webhook fires only on rows where status changes to qualified. Other updates do not trigger. Retries are automatic. Delivery log is visible via hypertab_get_webhook_logs.

Recipe 10: import a CSV and run the whole pipeline

Prompt to agent. “Import this CSV of 5,000 companies and enrich them all.”

Tool chain.

  1. hypertab_import_csv with a URL or base64 blob.
  2. That is it.
{
  "table": "leads",
  "source": "https://storage.example.com/companies.csv",
  "column_map": {
    "Company Name": "company",
    "Website": "domain",
    "Email": "email"
  }
}

If smart columns on the table have auto_run: true, every imported row fires the DAG. You get 5,000 enriched rows with one tool call. The response returns the run id and the count of inserted rows.

Recipe 11: run a single column across all rows without touching others

Prompt to agent. “I updated the prompt. Rerun just company_summary on everything.”

Tool chain.

  1. hypertab_update_column_config to change the prompt.
  2. hypertab_run_column to fire it for all rows.
{
  "table": "leads",
  "column": "company_summary",
  "config": { "prompt": "In one sentence, describe the company's target market based on their homepage: {{homepage_html}}" }
}
{ "table": "leads", "column": "company_summary" }

Omitting row_ids means all rows. The upstream homepage_html is not rerun because its config did not change. You pay for the AI calls, not the HTTP fetches.

Recipe 12: connect a filtered subset to a pipeline tab

Prompt to agent. “Create a pipeline tab called ‘enterprise deals’ that only shows leads from companies over 1,000 headcount.”

Tool chain.

  1. hypertab_create_tab with a filter, source: the parent table.
{
  "name": "enterprise_deals",
  "source_table": "leads",
  "filter": { "company_size": { "gt": 1000 } },
  "auto_sync": true
}

Rows that match the filter flow into the tab in real time. You can add smart columns to the tab that are different from the parent table. The parent stays clean, the tab is specialized for the enterprise motion.

How to prompt your agent

A few patterns that work well in our own testing.

  • Be specific about column names. “Add a column called company_summary that…” beats “add a summary column”. The agent will invent a name otherwise, and you may end up with summary, company, or desc depending on the phase of the moon.
  • Say “smart column” when you want a smart column. Otherwise the agent may add a static text column and then try to populate it manually.
  • Let the agent pick the rate limit preset. aggressive, moderate, conservative, gentle. The agent reads the API docs or guesses based on the domain. You can override with hypertab_update_column_config if you need to.

When things go wrong

Every Hypertab error is structured. The agent does not have to parse human text to recover. A typical error looks like

{
  "success": false,
  "error": {
    "code": "COLUMN_NOT_FOUND",
    "message": "Column 'emial' not found on table 'leads'. Did you mean 'email'? (distance 1)",
    "suggestion": "Call hypertab_get_table_schema to see all columns.",
    "details": { "available_columns": ["name", "company", "domain", "email", "status"] }
  }
}

The agent sees code, maps it to a fix, and usually retries the same tool with the corrected name. No human in the loop for the common mistakes.

What to build next

These 12 recipes cover roughly 80% of what agents actually do inside Hypertab. The remaining 20% is the long tail: formulas with complex expressions, lookup columns that join across tables, integration columns that write to Salesforce, webhook signatures for inbound payloads. Full API reference is at hypertab.ai/docs.

If you have a recipe you wish existed, email it to [email protected] and we will add it. The active table is as useful as the patterns we share, and the agent ecosystem grows fastest when the recipes are public.

Ready to try it? Sign up free, paste the MCP config into Claude Code, and run Recipe 1. Thirty seconds to your first pipeline.