@mob999/cube_mcp
# 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
Scored across 2 tools
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.
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.
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.
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.