Skip to main content
Glama
MountainLabsDE

glasspulse

README.md
<div align="center">

# ◈ GlassPulse

**The glassmorphic service dashboard — monitoring so pretty, your status page goes viral.**

[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-8b5cf6.svg)](LICENSE)
[![TypeScript](https://img.shields.io/badge/TypeScript-strict-22d3ee.svg)](https://www.typescriptlang.org/)
[![MCP](https://img.shields.io/badge/MCP-native-d946ef.svg)](https://modelcontextprotocol.io)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-34d399.svg)](CONTRIBUTING.md)

*Checks · Uptime · Latency · Performance — rendered in vivid aurora glass.*

</div>

---

## ✨ Why GlassPulse?

Status pages look like 1999. GlassPulse is what happens when a design system
and a monitoring engine fall in love: **frosted-glass cards on an animated
aurora gradient**, neon status signals, live latency sparklines — and a
native **MCP server** so your AI agent can watch your infrastructure with you.

- 🪟 **True glassmorphism** — backdrop blur, specular highlights, aurora blobs
- 🎨 **Vivid & vibrant** — violet → fuchsia → cyan palette, dark-first, light theme included
- 📊 **Real monitoring** — HTTP, TCP port, keyword, JSON-path and SSL-expiry checks
- ⚡ **Performance budgets** — services degrade (yellow) when latency exceeds your SLO
- 🧩 **Config-driven** — one `services.json`, JSON-Schema validated, zero backend required
- 🤖 **MCP-first** — ship your dashboard *and* an agent-ready MCP server from one repo
- 🌗 **Theme toggle** — dark aurora or light glass, persisted per browser

## 🚀 Quickstart

```bash
git clone https://github.com/MountainLabsDE/GlassPulse-Dashboard.git
cd GlassPulse
npm install
npm run dev          # → http://localhost:5173
```

That's it. The bundled demo config probes real public endpoints (GitHub API,
Cloudflare, jsDelivr) so you can see live data immediately.

### Configure your services

Edit `app/src/config/services.json`:

```json
{
  "title": "My Infrastructure",
  "services": [
    {
      "id": "api",
      "name": "REST API",
      "group": "Core",
      "icon": "🛰️",
      "accent": "#8b5cf6",
      "checks": [
        { "type": "http", "url": "https://api.example.com/health", "degradeAboveMs": 800 },
        { "type": "ssl", "host": "api.example.com", "warnDays": 14 }
      ]
    }
  ]
}
```

Five check types: `http` · `tcp` · `keyword` · `jsonpath` · `ssl`
Full reference: [`app/schema/glasspulse.schema.json`](app/schema/glasspulse.schema.json)

> **Browser note:** the dashboard runs checks client-side, so CORS-enabled
> endpoints light up instantly. TCP/SSL checks (and any endpoint behind CORS)
> are marked *agent-only* — the MCP server probes them natively via Node.

## 🤖 MCP Server

GlassPulse ships a first-class MCP server (stdio + streamable HTTP):

```bash
npm run mcp:build
node mcp-server/dist/index.js                 # stdio
GLASSPULSE_MCP_TRANSPORT=http npm run mcp     # HTTP :3100/mcp
GLASSPULSE_CONFIG=/path/to/your.json npm run mcp
```

**Tools:** `list_services` · `get_status` · `get_metrics` · `run_check`
**Resources:** `glasspulse://services` · `glasspulse://status`

### Claude Desktop / Cursor

```json
{
  "mcpServers": {
    "glasspulse": {
      "command": "node",
      "args": ["/absolute/path/to/GlassPulse/mcp-server/dist/index.js"]
    }
  }
}
```

Then just ask your agent: *"Is the API up? What's the p95 latency?"*

## 📦 Deploy

```bash
npm run build        # static bundle in app/dist
```

Drop `app/dist` on GitHub Pages, Vercel, Netlify or any static host.
For TCP/SSL checks from the dashboard, run the MCP server (or any static
file server) inside your network and point `GLASSPULSE_CONFIG` at the
same config.

## 🗺 Roadmap

- [ ] Incident timeline & maintenance windows
- [ ] WebSocket live push (optional tiny agent)
- [ ] Webhook/alert integrations (Slack, Discord, Telegram)
- [ ] Multi-dashboards from one config
- [ ] Plugin checks (custom JS probes)

## 🤝 Contributing

PRs welcome! Keep the glass aesthetic, add tests for engine logic.

## 📄 License

**Apache-2.0** — © MountainLabs UG (haftungsbeschränkt).

We chose Apache-2.0 over MIT deliberately: it grants contributors and users
an explicit patent license while requiring attribution via `NOTICE`. The
"GlassPulse" name and logo remain trademarks of MountainLabs UG.

---

<div align="center">
Made with 💜 by <a href="https://github.com/MountainLabsDE">MountainLabs</a>
</div>