Skip to main content
Glama
analytics-mcp

analytics-mcp

by bhavya998

analytics-mcp

Production-grade MCP server for enterprise sales analytics. 6 tools, 3 resources, 2 prompts — all with structured outputs — over a SQLite database. Connects to Claude, OpenCode, Cursor, and any MCP client.

Python FastMCP Tests License


What This Is

A Model Context Protocol (MCP) server that exposes an enterprise sales database to LLM clients. Instead of copy-pasting data into ChatGPT, connect this server and let the AI query, analyze, and visualize your data through structured tools.

Built with the latest MCP patterns (July 2026):

  • FastMCP 3.4 — high-level server framework

  • Structured outputs — Pydantic models define outputSchema for every tool

  • Tool annotations — readOnlyHint lets clients skip confirmations

  • In-memory client testing — no port flakiness, era-neutral

  • Resources — schema introspection, table details, report templates

  • Prompts — reusable analysis templates (sales analysis, customer segmentation)

  • Both transports — stdio (local) + HTTP (remote)


Related MCP server: agente-ecommerce-mcp-memoria

Quick Start

git clone https://github.com/bhavya998/analytics-mcp.git
cd analytics-mcp
uv sync

# Initialize database (200 customers, 25 products, 2000 orders)
uv run analytics-mcp init

# Start server (stdio for local MCP clients)
uv run analytics-mcp serve

# Or HTTP transport for remote access
uv run analytics-mcp serve --transport http --port 8000

Connect to Claude Desktop / OpenCode

Add to your MCP client config:

{
  "mcpServers": {
    "analytics": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/analytics-mcp", "analytics-mcp", "serve"]
    }
  }
}

Then ask: "Show me the top 5 products by revenue and analyze the monthly sales trend"


Tools

Tool

Description

Annotations

query_database

Run parameterized SELECT queries against the database

readOnlyHint

get_revenue_report

Revenue by category/region/tier/status/month with profit analysis

readOnlyHint

get_customer_profile

360-degree customer view: orders, LTV, favorite category, recent activity

readOnlyHint

get_top_products

Leaderboard by revenue or quantity, optional category filter

readOnlyHint

analyze_sales_trend

Time-series with period-over-period growth rates

readOnlyHint

get_regional_performance

Ranked regional performance with revenue, orders, customers, AOV

readOnlyHint

Resources

URI

Description

schema://database

Full database schema (all tables, columns, types, row counts)

schema://tables/{table_name}

Detailed table schema with sample rows

report://templates

Available report templates and usage examples

Prompts

Prompt

Description

sales_analysis

Comprehensive sales analysis with focus area (overall/category/region/customer)

customer_segmentation

Segment customers into Champions/At Risk/New/Dormant with retention strategies


Database Schema

customers (200 rows)
  id, name, email, company, region, tier, signup_date, lifetime_value

products (25 rows)
  id, name, category, price, cost, stock

orders (2000 rows)
  id, customer_id, employee_id, order_date, status, total

order_items (5000+ rows)
  id, order_id, product_id, quantity, unit_price

employees (15 rows)
  id, name, role, region, hire_date

Testing

make test         # 43 tests: database, tools, full MCP client integration
make lint         # ruff

Suite

Tests

Pattern

test_database.py

8

DB init, query validation, schema introspection

test_tools.py

17

Direct tool function calls (all 6 tools)

test_server_client.py

12

Full MCP protocol via in-memory Client

Tests use the modern in-memory Client(mcp) pattern — no ports, no subprocesses, era-neutral.


Tech Stack

Layer

Technology

MCP Framework

FastMCP 3.4 (Prefect)

Protocol

MCP 1.28 (Streamable HTTP + stdio)

Database

SQLite with seeded enterprise data

Validation

Pydantic v2 (structured tool outputs)

CLI

Typer + Rich

Testing

pytest + pytest-asyncio + FastMCP Client

Project Structure

analytics-mcp/
├── src/analytics_mcp/
│   ├── server.py         MCP server: 6 tools, 3 resources, 2 prompts
│   ├── database.py       SQLite setup + schema + seed data (2000+ orders)
│   ├── schemas.py        Pydantic models for structured outputs
│   └── cli.py            CLI (serve, init, inspect)
├── tests/                43 tests (database, tools, client integration)
├── data/                 SQLite database (auto-generated, gitignored)
├── Makefile
└── pyproject.toml

License

MIT

Available Tools

6 tools
analyze_sales_trendA
Read-only

Analyze sales trends over time with period-over-period growth rates.

Returns revenue, order count, and growth percentage for each period.

Inputs: period_end, granularity, period_start. Returns: Sales trend over time.

get_customer_profileA
Read-only

Get a 360-degree customer view: profile, order history, spending stats, favorite category.

Useful for account reviews, churn analysis, and upsell identification.

Inputs: customer_id (required). Returns: 360-degree customer view.

get_regional_performanceA
Read-only

Get ranked sales performance by region: revenue, orders, customers, AOV.

Returns all 5 regions ranked by total revenue.

Inputs: no named parameters. Returns: Ranked regional performance report.

get_revenue_reportA
Read-only

Generate a revenue report grouped by a dimension within a date range.

Returns total revenue, order count, average order value, and estimated profit per segment.

Inputs: group_by, period_end, period_start. Returns: Full revenue report across a dimension.

get_top_productsA
Read-only

Get a leaderboard of top-performing products by revenue or quantity sold.

Optionally filter by category.

Inputs: limit, metric, category. Returns: Top products leaderboard.

query_databaseA
Read-only

Run a read-only SQL query against the enterprise database.

Tables: customers, products, orders, order_items, employees.

Examples: SELECT * FROM customers WHERE tier = 'enterprise' LIMIT 10 SELECT region, COUNT(*) as customers FROM customers GROUP BY region SELECT p.name, SUM(oi.quantity) as sold FROM order_items oi JOIN products p ON oi.product_id = p.id GROUP BY p.name ORDER BY sold DESC LIMIT 5

Inputs: sql (required). Returns: Result of a SQL query.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 6 tools

    Disambiguation4/5

    Tools are mostly distinct: each targets a specific analytics aspect (trends, customer profile, regional, revenue report, top products, raw SQL). Some overlap in subject matter but purposes and outputs are clearly differentiated.

    Naming Consistency3/5

    Most tools use 'get_' prefix, but 'analyze_sales_trend' and 'query_database' break the pattern. The naming is readable but inconsistent across verbs.

    Tool Count5/5

    6 tools is well-scoped for an analytics server, covering common analytical functions without being excessive. Each tool earns its place.

    Completeness4/5

    Covers key analytics areas: trends, customers, regions, revenue, products. The query_database tool compensates for most gaps. Minor omission like employee analytics is noted but not critical.

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that exposes a LangChain agent with short-term memory to analyze real e-commerce data through predefined SQL tools, enabling natural language queries on sales, customers, and logistics.
      -