Skip to main content
Glama
mob999

@mob999/cube_mcp

by mob999
README.md
# Cube.js TypeScript MCP Server

This is a standalone Model Context Protocol (MCP) server for [Cube.js](https://cube.dev/), written in TypeScript using the official `@cubejs-client/core` SDK. 

It provides advanced AI assistants (like Claude, Cursor, etc.) with semantic layer visibility and multi-dimensional querying capabilities over your data.

## Features
- **`discover_entities`**: Introspects the Cube.js metadata (`/meta`) and explains the available Cubes, Dimensions, and Measures to the LLM.
- **`execute_query`**: Executes semantic queries (`/load`) with support for Cube query fields like filters, sorting, time dimensions, pagination, timezone, and result truncation.

## Prerequisites
- Node.js (v18 or higher recommended)
- A running instance of Cube.js

## Quick Start

You can run the published MCP server directly without installing it manually:
```bash
npx -y @mob999/cube_mcp
```

## Local Development & Build

1. **Install dependencies:**
   ```bash
   npm install
   ```

2. **Build the TypeScript source:**
   ```bash
   npm run build
   ```
   *This compiles the TypeScript code into the `dist/` directory.*

## Development & Testing
- **Run Tests:** `npm test`
- **Lint Code:** `npm run lint`

## Query Features

`execute_query` supports:

- `measures`
- `dimensions`
- `filters`
- `timeDimensions`
- `segments`
- `limit`
- `rowLimit`
- `offset`
- `order`
- `timezone`
- `renewQuery`
- `ungrouped`
- `responseFormat`
- `total`

Example:

```json
{
  "entity_name": "Components",
  "measures": ["Components.count"],
  "dimensions": ["Components.id"],
  "timeDimensions": [
    {
      "dimension": "Components.createdAt",
      "granularity": "day",
      "dateRange": ["2026-01-01", "2026-01-31"]
    }
  ],
  "order": [
    { "member": "Components.count", "direction": "desc" },
    { "member": "Components.id", "direction": "asc" }
  ],
  "limit": 100,
  "rowLimit": 500,
  "offset": 0,
  "timezone": "UTC",
  "responseFormat": "compact",
  "total": true
}
```

## Configuration

By default, the server expects your Cube.js API to be available at `http://localhost:4000/cubejs-api/v1`. 

You can override this by setting the `CUBEJS_API_URL` environment variable.

To integrate this semantic layer into Cursor or any other MCP-compatible IDE/Agent, configure it as a **stdio** tool.

**Example `mcp.json` / Client Configuration:**

```json
{
  "mcpServers": {
    "CubeSemanticLayer": {
      "command": "npx",
      "args": ["-y", "@mob999/cube_mcp"],
      "env": {
        "CUBEJS_API_URL": "http://localhost:4000/cubejs-api/v1"
      }
    }
  }
}
```

*Note: The `-y` flag allows `npx` to automatically download and run the package without prompting for confirmation.*

TDQS

A3.9/5.0

Scored across 2 tools

Disambiguation5/5

The two tools serve clearly different stages of the workflow: one discovers available entities/schema and the other executes queries against them. There is no overlap or ambiguity between them.

Naming Consistency5/5

Both tool names follow the same verb_noun snake_case pattern: discover_entities and execute_query. The naming is consistent and conveys the action clearly.

Tool Count3/5

Two tools is at the thin end of the range, but the pair forms a minimal coherent workflow for semantic analytics. The count feels slightly under-provisioned rather than excessive.

Completeness4/5

The core lifecycle of discovery-then-query is covered, allowing an agent to find entities and run analytical queries. Minor gaps exist, such as no dedicated metadata or validation tools, but they are not essential to the primary purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues