Command Palette

Search for a command to run...

UnylyUnyly
Browse all

QMSCloud Reporting Server

FreeNot checked

Enables querying pre-built Metabase cards for QMSCloud reporting, allowing retrieval of ticket summaries and other reports via natural language through Anything

GitHubEmbed

About

Enables querying pre-built Metabase cards for QMSCloud reporting, allowing retrieval of ticket summaries and other reports via natural language through AnythingLLM.

README

Queries pre-built Metabase cards for QMSCloud and exposes them to AnythingLLM:

AnythingLLM (host)  ->  Ollama / Qwen  ->  this MCP server  ->  Metabase card JSON

Sibling of ../mcpreport (which talks to the QMS700i servlet). The difference: this server has no login flow — Metabase authenticates with a static x-api-key header, and each report is a saved Metabase card queried via POST /api/card/<id>/query/json.

Tools

  • get_report(report, start_date?, end_date?) — fetch and return card rows. workspace_slug is injected by AnythingLLM (do not pass it manually).
  • list_reports() — list available report keys.

Currently available reports: ticket_summary (card 40). Appointment, rating, etc. will be added to the CARDS catalog in metabase-core.js.

How it works

  1. AnythingLLM injects workspace_slug on every call. The slug encodes the tenant as <companyCode> or <companyCode>___<branchCode> — split on the first triple underscore ___ (codes themselves are hyphen-slugs, e.g. branch-001).
  2. The server resolves the tenant dynamically from Metabase (no hardcoded map), caching the lookups for 5 minutes:
    • Company: POST card 41, slugify each CompanyCode, match the company part → CompanyId. No match → invalid company code.
    • Branch (only if present): POST card 42, slugify each BranchCode, match the branch part and CompanyId (branch codes repeat across companies) → BranchId. No match → invalid branch code.
    • So demo → DEMO company, whole-company view; demo___kl001 → DEMO + KL001 branch; qc___branch-001 → QC + Branch 1. New companies/branches work with no code change.
  3. The model supplies start_date / end_date from the user's intent.
  4. The server POSTs the Metabase parameters array (start_date, end_date, company_id, and branch_id when present) to the ticket card and returns rows.

1. Install

Requires Node.js 18+ (built-in fetch).

cd /Users/koo/Desktop/Claude/Projects/QMS/metabase-mcpreport
npm install

2. Quick local test (no AnythingLLM)

The API key is not hardcoded — export it first:

export METABASE_API_KEY='mb_...your key...'
node test-ticket-summary.js                       # demo, month-to-date
node test-ticket-summary.js demo 2026-06-11 2026-06-30

3. Register in AnythingLLM

Add to anythingllm_mcp_servers.json (absolute paths):

{
  "mcpServers": {
    "qmscloud-report": {
      "command": "node",
      "args": ["/Users/koo/Desktop/Claude/Projects/QMS/metabase-mcpreport/server.js"],
      "env": {
        "METABASE_BASE_URL": "http://54.251.164.99:7777",
        "METABASE_API_KEY": "mb_...PASTE_KEY..."
      }
    }
  }
}

Windows note (same gotcha as ../mcpreport): if C:\Program Files\nodejs\node.exe fails with ENOENT, use the 8.3 short path C:\\PROGRA~1\\nodejs\\node.exe.

4. Set the workspace system prompt

Paste the contents of system_prompt.txt into the AnythingLLM workspace system prompt. It tells the model when/how to call get_report. Tools only fire in @agent mode.

METABASE_API_KEY is required and is not hardcoded (kept out of source control). Set it in the env block above. METABASE_BASE_URL defaults to http://54.251.164.99:7777 if omitted.

Configuration reference

  • Tenant resolution is dynamic (cards 41/42) — no slug map to maintain. Env overrides: METABASE_COMPANY_CARD_ID (41), METABASE_BRANCH_CARD_ID (42), METABASE_LOOKUP_TTL_MS (300000). Test with node test-lookup-cards.js.
  • CARDS (metabase-core.js) — report key → Metabase card id + params.

Notes

  • Tools fire only in AnythingLLM @agent mode.
  • Treat the Metabase API key as a secret; keep this config out of git.

from github.com/koosoftware/metabase-mcpreport

Install QMSCloud Reporting Server in Claude Desktop, Claude Code & Cursor

Recommended · one command, every IDE
unyly install qmscloud-reporting-mcp-server

Installs into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.

First time? Get the CLI: curl -fsSL https://unyly.org/install | sh

Or configure manually

Run in your terminal:

claude mcp add qmscloud-reporting-mcp-server -- npx -y github:koosoftware/metabase-mcpreport

FAQ

Is QMSCloud Reporting Server MCP free?

Yes, QMSCloud Reporting Server MCP is free — one-click install via Unyly at no cost.

Does QMSCloud Reporting Server need an API key?

No, QMSCloud Reporting Server runs without API keys or environment variables.

Is QMSCloud Reporting Server hosted or self-hosted?

A hosted option is available: Unyly runs the server in the cloud, no local setup required.

How do I install QMSCloud Reporting Server in Claude Desktop, Claude Code or Cursor?

Open QMSCloud Reporting Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare QMSCloud Reporting Server with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All development MCPs