Skip to main content
Glama
DUROV-OS

Dashboard MCP

by DUROV-OS

Dashboard MCP

MCP connector + read-only web viewer for dashboards fully controlled by an AI agent. Supports any number of independent dashboards — each with its own slug, file, and URL /d/<slug>.

Live service: https://dashboard.89-207-254-32.nip.io

  • Dashboard list: /

  • Specific dashboard (read-only, auto-refresh every 5s): /d/<slug>

  • JSON API (also read-only): /api/dashboards, /api/dashboards/<slug>

  • MCP endpoint (OAuth required): /mcp

How it works

  • mcp_app.py — creates a single MCPServer, with OAuth (if OAUTH_* variables are set) or without (for local development).

  • tools.py — MCP tools (@mcp.tool()): list_dashboards, create_dashboard, get_dashboard, update_dashboard_meta, delete_dashboard, add_widget, update_widget, remove_widget, reorder_widgets, replace_widgets. This is how the agent manages dashboards. They are protected by OAuth at /mcp.

  • web.py — public HTML pages and JSON API (@mcp.custom_route, per the SDK documentation do not require authorization) — this is what people look at in the browser.

  • models.py — pydantic widget schemas: text, list, stats, progress, chart.

  • store.py — file storage, one JSON per dashboard in data/dashboards/.

Related MCP server: Agent Team MCP Server

Widget types

{"type": "text", "title": "Заметка", "body": "..."}
{"type": "list", "title": "Задачи", "ordered": false, "items": [{"label": "...", "value": "...", "note": "..."}]}
{"type": "stats", "title": "Метрики", "items": [{"label": "MRR", "value": "128k", "unit": "₽", "delta": "+12%", "trend": "up"}]}
{"type": "progress", "title": "Прогресс", "items": [{"label": "Q3", "value": 62, "max": 100, "color": "#395b4b"}]}
{"type": "chart", "title": "Динамика", "chartType": "line", "labels": ["Пн","Вт"], "series": [{"name": "Заказы", "data": [3, 7]}]}

Common fields: title (optional), size: sm|md|lg|full (width in the grid).

Local run

pip install -r requirements.txt
cp .env.example .env   # можно оставить OAUTH_* пустыми — сервер поднимется без auth
MCP_TRANSPORT=streamable-http python server.py
# либо просто `python server.py` для stdio (claude mcp add / MCP Inspector)

How to connect the connector in Claude

  1. A static OAuth client has been created on the server (Client ID/Secret are issued separately).

  2. In Claude: Settings → Connectors → Add custom connector.

    • URL: https://dashboard.89-207-254-32.nip.io/mcp

    • Client ID / Client Secret — as issued during deployment.

  3. After authorization, the tools from tools.py become available to the agent.

Deployment

The production server pulls this repository itself: deploy/deploy.sh runs via cron every 2 minutes, compares the local HEAD with origin/main, and if there are new commits — git reset --hard + docker compose up -d --build + a /healthz check. Just git push to main — changes will be picked up on production automatically within ~2 minutes.

Last verified deploy: 2026-08-19T15:29:01Z

Related MCP Connectors

Related MCP Servers