QMSCloud Reporting MCP Server
Queries pre-built Metabase cards for QMSCloud, retrieving report data such as ticket summaries with optional date filtering, and exposing them to an AI agent.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@QMSCloud Reporting MCP Server Show me the ticket summary for last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
QMSCloud Reporting MCP Server — Node.js (Metabase)
Queries pre-built Metabase cards for QMSCloud and exposes them to AnythingLLM:
AnythingLLM (host) -> Ollama / Qwen -> this MCP server -> Metabase card JSONSibling 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_slugis 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.
Related MCP server: Metabase MCP Server
How it works
AnythingLLM injects
workspace_slugon 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).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 andCompanyId(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.
The model supplies
start_date/end_datefrom the user's intent.The server POSTs the Metabase
parametersarray (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 install2. 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-303. 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 withnode test-lookup-cards.js.CARDS(metabase-core.js) — report key → Metabase card id + params.
Notes
Tools fire only in AnythingLLM
@agentmode.Treat the Metabase API key as a secret; keep this config out of git.
Available Tools
2 toolsget_reportA
Fetch a QMSCloud report from Metabase and analyze it to answer the user's question. Returns a compact summary (distinct tickets; breakdowns by status, service, branch, counter, business date; a ticket_numbers list; and waiting/serving-time stats) plus a few sampleRows. For questions that require listing individual tickets WITH their times, pass detail=true to also get a per-ticket table. Pass the exact report key (call list_reports if unsure). Supply start_date/end_date as YYYY-MM-DD from the user's intent (defaults to current month-to-date). The tenant (company/branch) is resolved automatically from the workspace — do not ask the user for it. Currently available: 'ticket_summary'.
Inputs: report (required), workspace_slug (required), detail, end_date, +2 more.
list_reportsA
List the QMSCloud report keys this server can fetch from Metabase.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
The two tools are clearly distinct: one lists available reports, the other fetches a specific report. No ambiguity.
Both tools follow a consistent verb_noun pattern with snake_case: list_reports and get_report.
For a focused reporting server with only one report type currently available, two tools (list and get) are appropriate and efficient.
Covers the essential operations for its narrow domain (listing and retrieving a report). However, it lacks support for other expected reports or more advanced filtering, limiting completeness.
Related MCP Connectors
Read-only AI access to Osboon business card analytics, viewers, links, connections and contacts.
Ask your Quickbase apps in plain language. Read-only by default; writes need human approval.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Ask questions in plain language, get answers from your business database. No SQL required.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Metabase analytics platform, allowing them to query databases, manage dashboards and cards, execute SQL queries, and access analytics data through natural language.119 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Metabase analytics platform, allowing users to query databases, manage dashboards and cards, execute SQL queries, and access analytics data through natural language.119 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Metabase through its API, allowing them to list, read, execute, and manage databases, tables, dashboards, cards, collections, and queries with support for multiple export formats.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Metabase analytics platform, allowing them to query databases, execute SQL, manage dashboards and cards, and access analytics data through natural language.119 npmMIT