Guide

Add a backend to any Claude Code project with one prompt

You are building in Claude Code and the moment arrives where the app needs to store something: orders, leads, bookings. The usual answer is an afternoon of Postgres, migrations, auth and an admin nobody asked for. This guide takes the other path: a hosted backend that Claude Code creates and shapes through MCP, in the same conversation.

Published September 2, 20264 min read

What you get, and what you do not

TaskLite is a business operations platform with an MCP server. Connected to Claude Code, it gives the agent tools to create projects, boards (tables), typed columns and rows, and to expose boards as REST endpoints with API keys. Every board is also editable by humans in the TaskLite admin, so the client you build for can run the system without you.

You getYou do not get
Hosted database with typed fields (date, phone, currency, dropdown, relation, formula…)Raw SQL access
REST endpoints per board, with API keys and optional per-user row securityCustom server code running on their side
A ready admin UI: table, kanban, calendar, gantt, forms, portals, automationsA blank canvas you must design
OAuth for humans, short-lived tokens for ClaudeAdmin rights handed to the agent

Step 1: connect the MCP server

Two ways. In Claude Code, add the hosted server with a personal API key (Settings, Integrations, API keys in the TaskLite app):

claude mcp add --transport http tasklite https://mcp.tasklite.net/mcp \
  --header "Authorization: Bearer tl_your_key"

Or install the local package, which also works from Cursor, Codex and any MCP client:

npm install -g @tasklite/mcp
claude mcp add tasklite -- tasklite-mcp

Verify with /mcp inside Claude Code: you should see tasklite with 31 tools, starting with list_organizations.

Step 2: describe the data, not the schema

Do not dictate tables. Describe the business and let the agent infer a sound schema; the server rejects obvious type mismatches (a date stored as text, a phone stored as a number) and suggests the right type. A prompt that works:

Create a TaskLite project for a small bakery that takes custom cake orders. I need to track customers, orders with a due date and a status (new, confirmed, in the oven, ready, picked up), and the price. Use proper field types. Then expose orders and customers as REST endpoints for a Next.js frontend.

Claude Code will call create_project, create_board twice, create_column for each field, get_board_schema to read the real column ids, then create_app, create_app_endpoint for each board and create_app_api_key. The whole exchange is under a minute.

Step 3: wire the frontend

Ask for the spec: get_app_spec returns every endpoint with its methods and fields. From there the agent writes the fetch calls. The API key must stay server-side, so in Next.js the calls go through a route handler or a server action, never from the browser:

// app/api/orders/route.ts
export async function POST(req: Request) {
  const body = await req.json();
  const res = await fetch(`${process.env.TASKLITE_API}/apps/bakery/api/orders`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${process.env.TASKLITE_APP_KEY}`,
    },
    body: JSON.stringify(body),
  });
  return Response.json(await res.json(), { status: res.status });
}

If the app has its own users, enable row-level security on the endpoint and send X-App-User: <your user id> with each request. The endpoint then returns and updates only that user's rows.

Step 4: hand over the admin

This is the part other backends skip. The bakery owner logs in to app.tasklite.net and sees the orders board as a kanban by status, a calendar by due date, and a customers table with tap-to-call phones. They can add a "notes" column, an automation that sends a WhatsApp when an order is ready, or a public form for new orders, without touching your code. Your frontend keeps working because it reads the schema by column id.

Reading a failure

MCP tool errors arrive inside a successful HTTP response, which is why agents sometimes report success on a failed call. Two refusals are worth knowing: a column type mismatch (create_column answers with the suggested type; retry with it or pass force: true), and a request to the wrong host (the app API lives on api.tasklite.net, not the admin host; use the absolute baseUrl from get_app_spec). The full list is in the developer manual.

When to pick something else

If you need raw SQL, vector search or edge functions, Supabase or a Postgres MCP server is the better fit. If you need a backend that a non-developer will operate day to day, with forms, approvals and portals already built, TaskLite saves you the admin you would otherwise have to write.

Frequently asked questions

Does the client need a TaskLite account?
Yes, one account per person who operates the admin, at $3 per user per month. People who only fill public forms or view a portal are not counted.
Can I run this from Cursor or Codex instead of Claude Code?
Yes. The @tasklite/mcp package is a standard MCP server over stdio, and the hosted server speaks Streamable HTTP. Any client that supports either works.
Is the data mine?
Yes. Export everything at any time from the admin or through the API. Data is hosted in the EU.