On this page

Data tables

list-tables

List the Data Tables in this project. Each table_id is accepted unchanged by get-table, query-table-rows and the row and column tools. Needs the fabric:table.read grant.

curl -sS -X POST https://fabric.wexa.ai/mcp/$FABRIC_PROJECT_ID \
  -H "authorization: Bearer $FABRIC_API_KEY" \
  -H "Mcp-Session-Id: $MCP_SESSION_ID" \
  -H "content-type: application/json" -H "accept: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list-tables","arguments":{"limit":5}}}'
{
  "content": [
    {
      "type": "text",
      "text": "{\"lifecycle_id\":\"qlc_000194\",\"result\":{\"limit\":5,\"tables\":[{\"table_id\":\"6ab1944e7566f41b5c28e2eb\",\"table_name\":\"docs_fixture_orders\"}]}}"
    }
  ],
  "isError": false
}

Parameters

ParameterTypeRequiredNotes
limitintegerOptionalTables per page. Default 50. A full page returns next_after_id.
after_idstringOptionalThe next_after_id of the previous page. It must be a table_id from a previous page; any other string is refused (a literal placeholder never gets through).
Show full response

A real response, captured from a live call to list-tables:

{
  "lifecycle_id": "qlc_000194",
  "result": {
    "limit": 5,
    "tables": [
      {
        "table_id": "6ab1944e7566f41b5c28e2eb",
        "table_name": "docs_fixture_orders"
      }
    ]
  }
}
More details

Every argument is optional: list-tables answers a bare call. It is cursor-paged. A page shorter than limit is the last, and carries no next_after_id.

from wexa import Fabric

fabric = Fabric()
page = fabric.list_tables(limit=50)
while page.get("next_after_id"):
    page = fabric.list_tables(after_id=page["next_after_id"], limit=50)

Not marked consequential: it is audited lightly and the project's write gate never holds it.

Every tool call works the same way: How every tool call works.