Shop Analytics MCP Server
Shop Analytics MCP Server
MCP-сервер только для чтения, работающий через stdio. Он позволяет ИИ-агенту отвечать на аналитические вопросы об SQLite-базе данных интернет-магазина (customers, products, orders, order_items) — без какой-либо возможности изменить её.
Полное обоснование устройства (журнал решений, схема, модель безопасности, стратегия тестирования) — в SPEC.md.
Требования
Node.js >= 24.10.0 (нужен для
setAuthorizerизnode:sqlite, на котором основана описанная ниже гарантия режима только для чтения). Проверить версию можно с помощьюnode --version.Других рантайм-зависимостей, кроме тех, что устанавливает
npm ci, нет.
Related MCP server: db-mcp
Установка → настройка → запуск → подключение
npm ci
npm run build
SHOP_DB_PATH=./shop.db npm startshop.dbуже лежит в репозитории и готов к использованию. Если потребуется пересоздать его детерминированно из схемы, выполнитеnpm run seed(см. База данных ниже).Переменная
SHOP_DB_PATHнеобязательна; по умолчанию используетсяshop.dbв текущей рабочей директории. В исходном коде нигде не зашит абсолютный путь.Сервер работает по MCP только через stdio — никакого HTTP-сервера нет, и запускать больше ничего не нужно.
Подключение ИИ-агента
Примеры конфигурации для двух клиентов находятся в config/:
config/claude-code.mcp.json— скопируйте его в.mcp.jsonпроекта или выполнитеclaude mcp add-jsonс его записьюshop-analytics. Предварительно укажите абсолютные пути в поляхargs/env.config/codex.mcp.toml— скопируйте секцию[mcp_servers.shop-analytics]в~/.codex/config.toml(или в проектный.codex/config.toml) либо используйте командуcodex mcp add, описанную в комментарии в начале файла.
Если нужно вручную проверить сервер без привязки к конкретному агенту, используйте универсальный MCP Inspector:
SHOP_DB_PATH=$(pwd)/shop.db npx @modelcontextprotocol/inspector node dist/src/index.jsИнструменты
Сервер предоставляет ровно 8 специализированных инструментов только для чтения — ни один из них не принимает и не выполняет произвольный SQL. Каждый успешный ответ имеет вид { "data": [...], "meta": {...} }; каждая ошибка — простое, безопасное и понятное человеку сообщение (без SQL, путей к файлам и стек-трейсов), помеченное флагом isError: true.
Инструмент | Что отвечает | Ключевые параметры |
| "Покажи все таблицы и их содержимое." | (нет) |
| "Сколько покупателей из Германии?" |
|
| "В какой стране больше всего покупателей?" |
|
| "Кто потратил больше всех денег?" |
|
| "Какие 5 товаров продаются лучше всего?" |
|
| "Какие 3 категории самые прибыльные?" |
|
| "Какую выручку мы получили в 2025 году?" |
|
| "Какой покупатель оформил больше всего заказов?" |
|
Параметры from/to задаются в формате YYYY-MM-DD и описывают полуоткрытый интервал UTC [from, to); from должен быть строго раньше to. Все финансовые и счётные метрики исключают заказы со статусом cancelled. Полные контракты инструментов (точные формы ответов и правила разрешения равенств) — в SPEC.md §4.
Безопасность
Три независимых уровня защиты (defense-in-depth) гарантируют, что база данных никогда не будет изменена, даже злонамеренным запросом вида «Удалить все отменённые заказы»:
Подключение к SQLite открывается с параметром
readOnly: true.Сразу после открытия устанавливается
PRAGMA query_only = ON.Авторизатор SQLite (
authorizer) явно запрещает любые операции записи и DDL (INSERT,UPDATE,DELETE,DROP,ALTER,CREATE,ATTACH,DETACH, транзакции и т.д.).
Кроме того, ни один инструмент не принимает ни сырой SQL, ни имена таблиц, ни имена столбцов — каждый запрос является фиксированным подготовленным оператором, а каждое входное значение проверяется через zod и передаётся как связанный параметр, но никогда не подставляется в строку.
База данных
shop.db создаётся из database/schema.sql с помощью детерминированного seed-скрипта — повторный запуск каждый раз даёт байт-в-байт идентичные данные (фиксированный seed генератора случайных чисел, отсутствие зависимости от времени стенных часов):
npm run seed # builds, then (re)writes ./shop.db from schema.sql + the seed scriptНа этапе генерации seed-скрипт также проверяет, что в данных нет неоднозначных лидербордов (например, уникальная страна-лидер или уникальный лидер по тратам) и что выручка за 2025 год не равна нулю — см. SPEC.md §3.
Разработка
npm run build # tsc + copy database/schema.sql into dist/
npm run test:unit # business logic, in isolation, against fixture databases
npm run test:integration # spawns the built server over stdio via the MCP SDK client
npm test # bothЭтот проект создавался по методологии TDD: для каждого модуля сначала писался падающий тест, затем — реализация, инструмент за инструментом. Интеграционный набор покрывает все 8 приёмочных сценариев насквозь (end-to-end), тестовые входные данные, имитирующие SQL-инъекции, некорректные комбинации параметров, а также проверяет, что SHA-256-хэш файла базы данных не изменяется после каждого прогона.
Структура проекта
database/ schema.sql + the deterministic seed generator
src/
db.ts read-only SQLite connection (see Safety above)
errors.ts error taxonomy, safe error formatting
validation.ts zod schemas shared across tools (dates, limits, periods)
period.ts half-open period SQL clause builder
tools/ one module per tool: pure query function + types
server.ts registers all 8 tools on the MCP server
index.ts stdio entrypoint
test/
unit/ one file per module/tool, fixture-based
integration/ spawns dist/src/index.js over stdio via the MCP SDK client
config/ example client configuration (Claude Code, Codex CLI)Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables secure analytics on an SQLite database of an online store via six specialized tools covering schema, customer metrics, product sales, category revenue, period revenue, and order leaders.6
- AlicenseAqualityBmaintenanceEnables AI agents to safely interact with a SQLite shop database through schema discovery, read-only SQL queries, and pre-built analytics reports like top customers, top products, and revenue summaries.692MIT
- AlicenseAqualityBmaintenanceA read-only MCP server that lets AI agents run safe, specialized analytics over an internet shop's SQLite database, covering customers, products, orders, and revenue. It exposes no generic SQL or write tools, so agents can answer questions without modifying data.8MIT
Related MCP Connectors
Explore, query, and inspect SQLite databases with ease. List tables, preview results, and view det…
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bogdaamn/database-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server