← WebMCP Directory

Tool tree

enclave-bay.vercel.app

Productivity & BusinessTools verified
Website
A browser-only analysis workbench. Your CSV never leaves the tab; an AI agent drives the analysis through sixteen WebMCP tools without ever seeing a row.
Explore capabilities
    get_schemaAnswer

    Describe the loaded dataset: every column with its SQL type, and the total row count. Call this first. The queryable table is always named `data`.

    View tool JSON
    {
      "name": "get_schema",
      "kind": "answer",
      "impl": "imperative",
      "description": "Describe the loaded dataset: every column with its SQL type, and the total row count. Call this first. The queryable table is always named `data`.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/app"
    }
    profile_columnAction

    Profile one column: null count, distinct count, min, max, and the ten most frequent values. Use this to understand a column before charting it.

    View tool JSON
    {
      "name": "profile_column",
      "kind": "act",
      "impl": "imperative",
      "description": "Profile one column: null count, distinct count, min, max, and the ten most frequent values. Use this to understand a column before charting it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "column": {
            "type": "string",
            "description": "Column name, exactly as get_schema reports it"
          }
        },
        "required": [
          "column"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    sample_rowsAnswer

    Return a handful of raw rows so you can see the shape of the data. Capped at 20 rows. Prefer aggregate queries via run_sql — this tool exists only for orientation.

    View tool JSON
    {
      "name": "sample_rows",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return a handful of raw rows so you can see the shape of the data. Capped at 20 rows. Prefer aggregate queries via run_sql — this tool exists only for orientation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "number",
            "description": "How many rows, 1-20"
          }
        },
        "additionalProperties": false
      },
      "page": "/app"
    }
    run_sqlAnswer

    Run a read-only DuckDB SQL SELECT against the table `data` and return the result. This is your main instrument. DuckDB dialect: bucket months with strftime(order_date, '%Y-%m'), and compare dates as ISO strings. Group by several dimensions at once rather than issuing one query per dimension. Results are capped at 50 rows and 4 KB, so aggregate rather than selecting raw rows. `data` already reflects any global filter.

    View tool JSON
    {
      "name": "run_sql",
      "kind": "answer",
      "impl": "imperative",
      "description": "Run a read-only DuckDB SQL SELECT against the table `data` and return the result. This is your main instrument. DuckDB dialect: bucket months with strftime(order_date, '%Y-%m'), and compare dates as ISO strings. Group by several dimensions at once rather than issuing one query per dimension. Results are capped at 50 rows and 4 KB, so aggregate rather than selecting raw rows. `data` already reflects any global filter.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sql": {
            "type": "string",
            "description": "A SELECT statement referencing the table `data`"
          }
        },
        "required": [
          "sql"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    add_kpiAction

    Add a single-number card to the board. The SQL must return one row whose first column is the number to display.

    View tool JSON
    {
      "name": "add_kpi",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a single-number card to the board. The SQL must return one row whose first column is the number to display.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "sql": {
            "type": "string",
            "description": "SELECT returning one row, one numeric column"
          },
          "format": {
            "type": "string",
            "enum": [
              "number",
              "currency",
              "percent"
            ],
            "description": "Defaults to number"
          },
          "span": {
            "type": "number",
            "description": "Card width in grid columns, 1 (narrow), 2, or 3 (full width). Defaults to 1."
          }
        },
        "required": [
          "title",
          "sql"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    add_chartAction

    Add a chart to the board. The SQL result supplies the data; x and y name columns in that result. Use series to split into multiple lines or bars.

    View tool JSON
    {
      "name": "add_chart",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a chart to the board. The SQL result supplies the data; x and y name columns in that result. Use series to split into multiple lines or bars.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "chartType": {
            "type": "string",
            "enum": [
              "bar",
              "line",
              "area",
              "scatter",
              "pie"
            ]
          },
          "sql": {
            "type": "string"
          },
          "x": {
            "type": "string",
            "description": "Column in the result used for the category or x axis"
          },
          "y": {
            "type": "string",
            "description": "Column in the result used for the value or y axis"
          },
          "series": {
            "type": "string",
            "description": "Optional column to split the data by"
          },
          "span": {
            "type": "number",
            "description": "Card width in grid columns, 1 (narrow), 2, or 3 (full width). Defaults to 1."
          }
        },
        "required": [
          "title",
          "chartType",
          "sql",
          "x",
          "y"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    add_tableAction

    Add a table card showing the result of a query. Keep the row count small.

    View tool JSON
    {
      "name": "add_table",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a table card showing the result of a query. Keep the row count small.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "sql": {
            "type": "string"
          },
          "span": {
            "type": "number",
            "description": "Card width in grid columns, 1 (narrow), 2, or 3 (full width). Defaults to 1."
          }
        },
        "required": [
          "title",
          "sql"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    add_noteAction

    Add a Markdown note to the board. Use this to record what you found — the finding is the point of the analysis, not the chart.

    View tool JSON
    {
      "name": "add_note",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a Markdown note to the board. Use this to record what you found — the finding is the point of the analysis, not the chart.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "markdown": {
            "type": "string"
          },
          "span": {
            "type": "number",
            "description": "Card width in grid columns, 1 (narrow), 2, or 3 (full width). Defaults to 1."
          }
        },
        "required": [
          "markdown"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    update_cardAction

    Change the title, query, or chart configuration of a card already on the board.

    View tool JSON
    {
      "name": "update_card",
      "kind": "act",
      "impl": "imperative",
      "description": "Change the title, query, or chart configuration of a card already on the board.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "sql": {
            "type": "string"
          },
          "chartType": {
            "type": "string",
            "enum": [
              "bar",
              "line",
              "area",
              "scatter",
              "pie"
            ]
          },
          "x": {
            "type": "string"
          },
          "y": {
            "type": "string"
          },
          "markdown": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    remove_cardAction

    Delete a card from the board by its id. Use read_dashboard first if you do not know the id. The deletion can be reversed with the undo tool.

    View tool JSON
    {
      "name": "remove_card",
      "kind": "act",
      "impl": "imperative",
      "description": "Delete a card from the board by its id. Use read_dashboard first if you do not know the id. The deletion can be reversed with the undo tool.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    reorder_cardsAction

    Set the order of cards on the board. Pass every card id in the order you want. Ids you omit are appended at the end.

    View tool JSON
    {
      "name": "reorder_cards",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the order of cards on the board. Pass every card id in the order you want. Ids you omit are appended at the end.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "ids"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    resize_cardAction

    Set how many of the three grid columns a card spans.

    View tool JSON
    {
      "name": "resize_card",
      "kind": "act",
      "impl": "imperative",
      "description": "Set how many of the three grid columns a card spans.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "span": {
            "type": "number",
            "description": "Card width in grid columns, 1 (narrow), 2, or 3 (full width). Defaults to 1."
          }
        },
        "required": [
          "id",
          "span"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    highlight_pointsAction

    Emphasise specific x-axis values on a chart — the months that dipped, the outlying regions. Highlighted points render in the accent colour while the rest fade back.

    View tool JSON
    {
      "name": "highlight_points",
      "kind": "act",
      "impl": "imperative",
      "description": "Emphasise specific x-axis values on a chart — the months that dipped, the outlying regions. Highlighted points render in the accent colour while the rest fade back.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "x values to emphasise"
          }
        },
        "required": [
          "id",
          "values"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    read_dashboardAnswer

    Read what is currently on the board: every card with its id, kind, title and query, plus the active global filter. Call this before modifying cards you did not create.

    View tool JSON
    {
      "name": "read_dashboard",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read what is currently on the board: every card with its id, kind, title and query, plus the active global filter. Call this before modifying cards you did not create.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/app"
    }
    set_global_filterAction

    Apply one SQL WHERE clause across the entire board at once. Every card re-runs its query against the filtered data. Call with no arguments to clear the filter. Write the clause without the WHERE keyword, for example: region = 'EMEA' AND order_date >= '2025-01-01'.

    View tool JSON
    {
      "name": "set_global_filter",
      "kind": "act",
      "impl": "imperative",
      "description": "Apply one SQL WHERE clause across the entire board at once. Every card re-runs its query against the filtered data. Call with no arguments to clear the filter. Write the clause without the WHERE keyword, for example: region = 'EMEA' AND order_date >= '2025-01-01'.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "where": {
            "type": "string",
            "description": "A SQL boolean expression, without the WHERE keyword. Omit to clear."
          }
        },
        "additionalProperties": false
      },
      "page": "/app"
    }
    undoAction

    Revert the last change to the board — a card added, edited, removed, reordered, or a filter applied. Never touches the loaded dataset.

    View tool JSON
    {
      "name": "undo",
      "kind": "act",
      "impl": "imperative",
      "description": "Revert the last change to the board — a card added, edited, removed, reordered, or a filter applied. Never touches the loaded dataset.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/app"
    }
    search_ordersAnswer

    Search Northwind order lines by region, status, product or date range. Returns the matching orders, newest first. Use this to see the individual orders behind a trend you found in the analytics board.

    View tool JSON
    {
      "name": "search_orders",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search Northwind order lines by region, status, product or date range. Returns the matching orders, newest first. Use this to see the individual orders behind a trend you found in the analytics board.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "description": "EMEA, AMER, APAC or LATAM"
          },
          "status": {
            "type": "string",
            "enum": [
              "fulfilled",
              "refunded",
              "cancelled"
            ]
          },
          "product_id": {
            "type": "string"
          },
          "from": {
            "type": "string",
            "description": "Inclusive start date, YYYY-MM-DD"
          },
          "to": {
            "type": "string",
            "description": "Exclusive end date, YYYY-MM-DD"
          },
          "limit": {
            "type": "number",
            "description": "How many to return, up to 50"
          }
        },
        "additionalProperties": false
      },
      "page": "/app"
    }
    get_productAnswer

    Look one product up by its product_id or by part of its name, and return its category, supplier, price, current stock and reorder level.

    View tool JSON
    {
      "name": "get_product",
      "kind": "answer",
      "impl": "imperative",
      "description": "Look one product up by its product_id or by part of its name, and return its category, supplier, price, current stock and reorder level.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "A product_id, or part of the name"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    list_low_stockAnswer

    List every product at or below its reorder level, worst first. This is where a supply problem shows up as a fact rather than an inference.

    View tool JSON
    {
      "name": "list_low_stock",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every product at or below its reorder level, worst first. This is where a supply problem shows up as a fact rather than an inference.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/app"
    }
    list_restock_ordersAnswer

    List the restock orders raised in this session, newest first.

    View tool JSON
    {
      "name": "list_restock_orders",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the restock orders raised in this session, newest first.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/app"
    }
    create_restock_orderSensitive Action

    Raise a restock order for a product. This changes the business, so it is proposed to the operator and only goes through once they approve it on screen. Explain your reasoning in the reason field — they read it before deciding.

    View tool JSON
    {
      "name": "create_restock_order",
      "kind": "transact",
      "impl": "imperative",
      "description": "Raise a restock order for a product. This changes the business, so it is proposed to the operator and only goes through once they approve it on screen. Explain your reasoning in the reason field — they read it before deciding.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "quantity": {
            "type": "number",
            "description": "Units to order, 1-10000"
          },
          "reason": {
            "type": "string",
            "description": "Why this restock is needed"
          }
        },
        "required": [
          "product_id",
          "quantity",
          "reason"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }
    set_product_priceAnswer

    Change a product's price. Proposed to the operator and applied only once they approve. Say why in the reason field.

    View tool JSON
    {
      "name": "set_product_price",
      "kind": "answer",
      "impl": "imperative",
      "description": "Change a product's price. Proposed to the operator and applied only once they approve. Say why in the reason field.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "product_id",
          "price",
          "reason"
        ],
        "additionalProperties": false
      },
      "page": "/app"
    }