MCPHub LabRegistryuwaserver/uwas
uwaserver

uwaserver/uwas

Built by uwaserver โ€ข 115 stars

What is uwaserver/uwas?

A high-performance MCP server implementation for uwaserver/uwas that bridges the gap between the Model Context Protocol and external services. It allows Large Language Models to interact with your data and tools with low latency and native support.

How to use uwaserver/uwas?

1. Ensure you have an MCP-compatible client (like Claude Desktop) installed. 2. Configure your server with: npx @modelcontextprotocol/uwaserver/uwas 3. Restart your client and verify the new tools are available in the system catalog.
๐Ÿ›ก๏ธ Scoped (Restricted)
npx @modelcontextprotocol/uwaserver-uwas --scope restricted
๐Ÿ”“ Unrestricted Access
npx @modelcontextprotocol/uwaserver-uwas

Key Features

Native MCP Protocol Support
High-performance Data Streaming
Type-safe Tool Definitions
Seamless Environment Integration

Optimized Use Cases

Connecting external databases to AI workflows
Automating workflow tasks via natural language
Augmenting developer productivity with specialized tools

uwaserver/uwas FAQ

Q

What is an MCP server?

MCP is an open standard that enables developers to build secure, two-way integrations between AI models and local or remote data sources.

Q

Is this server ready for production?

Yes, this server follows standard MCP security patterns and tool-restricted access.

Official Documentation

View on GitHub

UWAS

Unified Web Application Server

One binary to serve them all.

Apache + Nginx + Varnish + Caddy + cPanel โ†’ UWAS


<p align="center"> <img src="assets/banner.jpeg" alt="UWAS Logo" width="100%"> </p>

Note: UWAS is intended for production use; verify it against your own deployment, traffic, and security requirements.

Go License

What is UWAS?

UWAS replaces your entire web server stack and hosting control panel with a single Go binary. Auto HTTPS, built-in caching, PHP support, .htaccess compatibility, reverse proxy, WebSocket forwarding, WAF, multi-user access control, and a 42-page React dashboard backed by 254 explicit admin API route registrations.

One binary. Zero hassle.

Current Snapshot (v0.11.28)

  • Dashboard pages: 42 (web/dashboard/src/pages; settingsSections.tsx lives there too but is section definitions, not a page)
  • Admin API routes: 254+ explicit route registrations in internal/admin/routes.go under /api/v1 plus dashboard/static handlers
  • Go packages: 71 (go list ./...) โ€” 63 under internal/, 2 under pkg/; 57 carry tests
  • CLI commands: 19
  • Test status: all gates pass โ€” go build, go vet, staticcheck, go test, go test -race, dashboard npm build; CI runs additional govulncheck, shellcheck, installer tests, Docker Compose validation, and docs/site builds
  • Security/stability fixes: v0.11.28 publishes v0.11.27 WAF/file_probe + alert copy, atomic image conversions, lint fix for release
  • Security posture: risk score 2.1/10 (Low) per July 2026 reassessment

v0.11.28 highlights:

  • Published binaries for the v0.11.27 product changes (that tag failed lint)
  • Image conversions publish atomically under concurrency
  • Domain backup fails closed if the database dump fails
  • Dashboard tests drop any so release npm run lint stays green

v0.11.27 highlights:

  • WAF blocks scanner probes (phpinfo.php, secrets.json, .bak) when WAF is on
  • Alert titles spell out 5xx spikes instead of error_spike
  • (tag only โ€” binaries in v0.11.28)

v0.11.26 highlights:

  • Round-robin uses configured backend weights; circuit probes recover
  • SQL explorer refuses EXPLAIN ANALYZE; Docker short flags stay off the allowlist
  • DNS record ids are escaped; nested zones match the longest name

v0.11.25 highlights:

  • Published binaries for the v0.11.24 changes; dashboard lockfile clears high brace-expansion and undici advisories

v0.11.24 highlights:

  • File Manager: page through every file (50 per page); new uploads/saves are mode 0600
  • Cache keys are length-prefixed (one miss cycle); FastCGI responses cap at 64 MiB

v0.11.23 highlights:

  • Deploy: listen probe 45s (was 3s) โ€” stops false rollbacks on slow Node boots; Telegram notifications append hostname ยท IP

v0.11.22 highlights:

  • Apps: Environment vars keep operator save order; full-width env editor; deploy modal auto-closes on success

v0.11.21 highlights:

  • Deploy: clear stale .git/*.lock, live SSE deploy logs, 5m UI timeout; auto-build runs install/build as separate steps (no &&)

v0.11.20 highlights:

  • Firewall: hide # uwas-autoblock rows from the rules table; enable opens 443/udp for HTTP/3 (QUIC)

v0.11.19 highlights:

  • Firewall: heal missing IPv4 default DENY (v6-only orphan no longer blocks restore)

v0.11.18 highlights:

  • Firewall: โ†‘โ†“ move no longer drops the bottom DENY; empty protocol shows as any; panel/API reject blank port+source allow/deny

v0.11.17 highlights:

  • Firewall: visible rule count matches the table (IPv6 hidden noted); empty port = any; enable places a numbered default DENY at the bottom; re-enable no longer duplicates rules

v0.11.16 highlights:

  • WAF body scanning covers application/json and multipart/form-data
  • Firewall source IP/CIDR, allow-above-deny insert, arrow reorder
  • Database user Drop; remote MySQL firewall prompt for 3306
  • Deploy-key Generate on app Edit

v0.5.0 highlights (refactor + perf + observability sweep, 43 commits):

  • TLS handshake allowlist is now lock-free (atomic pointer instead of mutex + linear scan)
  • IPACL / GeoIP / CORS / WAF middleware run as predicates on the hot path (no per-request wrapper allocation)
  • API-key authentication is O(1) (secondary hash index alongside the username map)
  • Cache LRU promotion debounced; per-host mutex on access-log writes; ACME renewal split from cert-map iteration
  • New internal/respond package centralizes JSON responses with operator-visible 5xx logging
  • Per-handler latency histogram (uwas_handler_duration_seconds{handler,quantile})
  • Behavioural change: plaintext api_key fallback is now opt-in (global.users.allow_legacy_plaintext_api_key, default false). Operators upgrading from v0.4.x with a plaintext key must set the flag or migrate to hashed credentials.

Features

Web Server

  • Auto HTTPS โ€” Let's Encrypt certificates with zero configuration
  • HTTP/3 (QUIC) โ€” Via quic-go with Alt-Svc header advertisement
  • Built-in Cache โ€” Varnish-level caching with grace mode, tag-based purge, ESI (Edge Side Includes)
  • PHP Ready โ€” FastCGI with connection pooling and .htaccess support
  • Per-domain PHP โ€” Multiple PHP versions per domain with auto-port assignment, crash auto-restart
  • Load Balancer โ€” 6 algorithms (round-robin, least-conn, ip-hash, uri-hash, random, sticky), health checks, circuit breaker, canary routing
  • WebSocket Proxy โ€” Transparent TCP tunnel with hijack + bidirectional pipe
  • URL Rewrite โ€” Apache mod_rewrite compatible engine
  • Brotli + Gzip โ€” Dual compression with Accept-Encoding negotiation
  • Image Optimization โ€” On-the-fly WebP/AVIF conversion

Hosting Control Panel

  • 42-page Dashboard โ€” React 19 admin panel with dark/light theme
  • Applications โ€” Deploy and supervise Node.js, Python, Ruby, Go, custom, and Docker apps
  • Web Terminal โ€” Browser-based shell via WebSocket-to-PTY bridge
  • Multi-user Auth โ€” Admin, reseller, user roles with TOTP 2FA
  • WordPress Management โ€” One-click install, plugin updates, debug mode, error log viewer
  • DNS Zone Editor โ€” Full CRUD for Cloudflare, Hetzner, DigitalOcean, Route53
  • File Manager โ€” Browse, edit, upload, delete files via dashboard
  • SFTP Server โ€” Built-in pure Go SFTP with chroot per domain + SSH key management
  • Database Management โ€” MySQL/MariaDB + Docker containers (MariaDB/MySQL/PostgreSQL)
  • Site Migration โ€” SSH wizard: rsync files + dump/import database
  • Clone/Staging โ€” One-click domain clone with DB duplication
  • Backup/Restore โ€” Local, S3, SFTP providers with scheduling + webhook notifications
  • Cron Jobs โ€” Per-domain cron management with execution monitoring and failure alerts

Security & Monitoring

  • WAF โ€” SQL injection, XSS, shell, RCE detection
  • Per-domain Rate Limiting โ€” Sharded token bucket per domain
  • Bandwidth Limits โ€” Monthly/daily caps with throttle or block action
  • Webhook Events โ€” 12 event types plus a test event, HMAC-SHA256 signed, with retry
  • Uptime Monitoring โ€” Per-domain health checks with alerting
  • Analytics โ€” Per-domain traffic, referrer tracking, user agent breakdown
  • Prometheus Metrics โ€” p50/p95/p99 latency percentiles
  • Audit Logging โ€” Track all admin actions with timestamps and IPs
  • IP Access Control โ€” Per-domain whitelist/blacklist
  • Resource Limits โ€” Per-domain CPU/memory/PID limits via Linux cgroups v2

DevOps

  • Git Deploy โ€” Git clone/pull + build + health check + restart with concurrent protection, env persistence, and cancellation support
  • AI-Native โ€” MCP server for LLM-driven management
  • Nginx/Apache Migration โ€” CLI config converter
  • Hot-Reload โ€” All per-domain chains rebuild on SIGHUP (zero downtime)
  • Self-Update โ€” Binary auto-update from GitHub releases
  • CI/CD โ€” GitHub Actions for build, test, release automation (manual or on v* release tags, not on every push โ€” see CONTRIBUTING.md)
  • Single Binary โ€” ~16MB, no runtime dependencies, just download and run

Install

# One-line install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/uwaserver/uwas/main/install.sh | sh

Update

# One-line update (detects current version, downloads latest, restarts service)
curl -fsSL https://raw.githubusercontent.com/uwaserver/uwas/main/update.sh | sh

Or download from GitHub Releases.

Upgrading? Releases that change runtime behavior are documented in UPGRADING.md. v0.8.7 (security release) tightens several defaults โ€” review it before upgrading multi-user or docker-compose deployments.

Build from Source

git clone https://github.com/uwaserver/uwas.git && cd uwas
make build        # Production binary โ†’ bin/uwas
make linux        # Cross-compile for Linux amd64

Quick Start

# Start server (auto-creates config on first run)
uwas

# Or with a specific config
uwas serve -c uwas.yaml

# Install as systemd service (auto-start on boot)
sudo uwas install
sudo systemctl start uwas

# Dashboard
# http://127.0.0.1:9443/_uwas/dashboard/

# CLI commands (API key auto-loaded from ~/.uwas/.env)
uwas status
uwas php list
uwas domain list
uwas doctor

Configuration

UWAS uses a single YAML file. See uwas.example.yaml for a full reference.

Static Site

global:
  http_listen: ":80"
  https_listen: ":443"
  acme:
    email: you@example.com

domains:
  - host: example.com
    root: /var/www/html
    type: static
    ssl:
      mode: auto

WordPress / PHP

domains:
  - host: blog.example.com
    root: /var/www/wordpress
    type: php
    ssl:
      mode: auto
    php:
      fpm_address: "unix:/var/run/php/php8.3-fpm.sock"
    htaccess:
      mode: import
    cache:
      enabled: true
      ttl: 1800

Standalone App + Domain Route

Apps live outside the main domain YAML. Create them from the dashboard Applications page or as files under /etc/uwas/apps.d/; then route a domain to the app by using apps://<name> as a proxy upstream.

# /etc/uwas/apps.d/my-api.yaml
name: my-api
runtime: node
work_dir: /var/lib/uwas/apps/my-api
port: 0
env:
  NODE_ENV: production

# uwas.yaml or domains.d/api.example.com.yaml
domains:
  - host: api.example.com
    type: proxy
    ssl:
      mode: auto
    proxy:
      upstreams:
        - address: "apps://my-api"

Native runtimes with an empty workdir get a small demo file on create (index.js, app.py, app.rb, or main.go) so the app has something runnable immediately. Existing files are never overwritten.

Git Deploy + Private Repos + Webhooks

Applications can be deployed from a Git repo from the dashboard or by persisting deploy settings in the app YAML. Private repositories can use either a HTTPS token or an SSH deploy key. If build_cmd is empty, UWAS auto-detects the build step from package.json, requirements.txt, Gemfile, or go.mod; set build_cmd: none to skip builds. Set health_path when deploys should require a 2xx/3xx HTTP response after the process starts.

# /etc/uwas/apps.d/my-api.yaml
name: my-api
runtime: node
work_dir: /var/lib/uwas/apps/my-api
port: 0
env:
  NODE_ENV: production
deploy:
  git_url: https://github.com/acme/private-api.git
  git_branch: main
  health_path: /health
  git_token: ghp_xxx
  webhook_secret: a-long-random-secret
  branch_filter: main

For SSH repositories:

deploy:
  git_url: git@github.com:acme/private-api.git
  git_branch: main
  ssh_key_path: /home/uwas/.ssh/private-api-deploy-key
  webhook_secret: a-long-random-secret

Add a GitHub webhook pointing at:

https://your-admin-host/api/v1/apps/my-api/webhook

Use application/json and the same webhook secret. GitLab can use the same URL with X-Gitlab-Token. Accepted webhook pushes run clone/fetch, auto build if needed, restart the app, verify that it is listening, and check health_path when configured. If build, restart, or health verification fails after an existing repo moved to a new commit, UWAS resets the workdir to the previous commit and restarts the previous version.

Reverse Proxy with WebSocket

domains:
  - host: api.example.com
    type: proxy
    ssl:
      mode: auto
    proxy:
      upstreams:
        - address: "http://127.0.0.1:3000"
          weight: 3
        - address: "http://127.0.0.1:3001"
          weight: 1
      algorithm: least_conn
      websocket: true
      health_check:
        path: /health
        interval: 10s

Bandwidth Limits + Rate Limiting

domains:
  - host: example.com
    root: /var/www/html
    type: static
    bandwidth:
      enabled: true
      monthly_limit: 100GB
      daily_limit: 5GB
      action: throttle  # or "block"
    security:
      rate_limit:
        requests: 100
        window: 1m

Requirements

ComponentMinimumRecommendedNotes
Go1.26.5+1.26.5+For building from source (1.26.5 carries the crypto/tls GO-2026-5856 fix)
PHP7.4+8.3+ / 8.4+Only needed for PHP sites
Docker20.10+24+Only for Docker apps and database containers

No PHP needed for static sites, reverse proxy, or redirect domains.

CLI

uwas                         Start server (auto-setup if no config)
uwas serve    -c uwas.yaml   Start with specific config
uwas serve    -d             Start as background daemon
uwas version                 Print version info
uwas config   validate       Validate config file
uwas domain   list           List domains
uwas cache    stats          Cache statistics
uwas cache    purge          Purge cache
uwas status                  Server status via admin API
uwas reload                  Hot-reload configuration
uwas stop                    Stop running server
uwas restart                 Restart running server
uwas migrate  nginx <file>   Convert Nginx config to UWAS
uwas migrate  apache <file>  Convert Apache config to UWAS
uwas backup                  Create config backup
uwas restore                 Restore from backup
uwas php      list           List detected PHP versions
uwas php      start <ver>    Start PHP-FPM for version
uwas install                 Install as systemd service
uwas uninstall               Remove systemd service
uwas user     list           List admin users
uwas cert     list           List certificates + expiry
uwas doctor                  System diagnostics + auto-fix
uwas help                    Show help

Architecture

Request Flow:

  TCP โ†’ TLS (SNI routing)
    โ†’ HTTP Parse
      โ†’ Global Middleware Chain:
          Recovery โ†’ Request ID โ†’ Real IP โ†’ Security Headers โ†’ Compress
            โ†’ Rate Limit โ†’ Security Guard (blocked paths) โ†’ Bot Guard
            โ†’ Access Log
        โ†’ Virtual Host Lookup
          โ†’ Per-domain (inline in handleRequest, not middleware):
            IP ACL โ†’ GeoIP โ†’ BasicAuth โ†’ CORS โ†’ Header Transform โ†’ WAF
              โ†’ Bandwidth Check (throttle/block)
              โ†’ Rewrite Engine (mod_rewrite compatible)
              โ†’ Cache Lookup (L1 memory + L2 disk)
                โ†’ Handler:
                    โ”œโ”€โ”€ Static File    (ETag, Range, pre-compressed, SPA)
                    โ”œโ”€โ”€ FastCGI/PHP    (connection pool, CGI env)
                    โ”œโ”€โ”€ Reverse Proxy  (6 LB algorithms, sticky, circuit breaker, gRPC)
                    โ”œโ”€โ”€ WebSocket      (TCP tunnel, bidirectional pipe)
                    โ””โ”€โ”€ Redirect       (301/302/307/308)
              โ†’ Cache Store
              โ†’ Bandwidth Record
    โ†’ Response

Project Layout

cmd/uwas/                โ†’ CLI entry point (19 commands)
internal/
  admin/                 โ†’ REST API (253 route registrations) + dashboard embed + TOTP auth
    apps/ authmw/ backup/ cloudflare/ database/ deploy/ domain/ files/
    php/ settings/ wordpress/   โ†’ handler sub-packages (see docs/admin-subpackaging.md)
  alerting/              โ†’ Alert thresholds + webhook/Slack/Telegram/email notifications
  analytics/             โ†’ Per-domain traffic analytics
  apps/                  โ†’ Standalone Node/Python/Ruby/Go/custom/Docker app supervision
  auth/                  โ†’ Multi-user RBAC (admin/reseller/user) + session + TOTP 2FA
  backup/                โ†’ Local/S3/SFTP backup + restore + scheduling
  bandwidth/             โ†’ Per-domain bandwidth limits (throttle/block)
  build/                 โ†’ Build metadata (version, commit, date) via ldflags
  cache/                 โ†’ L1 memory (256-shard LRU) + L2 disk cache + ESI
  cli/                   โ†’ CLI framework and commands
  cloudflare/            โ†’ Cloudflare Tunnel API + local cloudflared process
  config/                โ†’ YAML parser, validation, defaults, ByteSize/Duration types
  cronjob/               โ†’ Cron job management + execution monitoring
  database/              โ†’ MySQL/MariaDB management + Docker container support
  deploy/                โ†’ Git clone/pull + Docker-based application deployment
  dnsmanager/            โ†’ Cloudflare, Route53, Hetzner, DigitalOcean DNS CRUD
  dnschecker/            โ†’ DNS record verification (A/MX/NS/TXT)
  doctor/                โ†’ System diagnostics + auto-fix
  domainroot/            โ†’ Filesystem root resolution for a domain (apps:// aware)
  domainutil/            โ†’ Pure hostname helpers shared by admin and admin/domain
  filemanager/           โ†’ Web file manager (browse/edit/upload/delete)
  firewall/              โ†’ UFW management via API
  handler/
    fastcgi/             โ†’ PHP handler, CGI environment builder
    proxy/               โ†’ Reverse proxy, load balancing, WebSocket, circuit breaker
    static/              โ†’ Static files, MIME, ETag, pre-compressed, SPA
  install/               โ†’ System package installer task queue
  logger/                โ†’ Structured logger (slog wrapper)
  mcp/                   โ†’ MCP server for AI management
  metrics/               โ†’ Prometheus-compatible metrics
  middleware/            โ†’ Chain, recovery, rate limit, gzip, CORS, WAF, bot guard
  migrate/               โ†’ Nginx/Apache converter + SSH site migration + clone
  monitor/               โ†’ Uptime monitoring per domain
  notify/                โ†’ Webhook, Slack, Telegram, Email (SMTP) channels
  pathsafe/              โ†’ Path traversal guard (symlink-resolving containment check)
  phpmanager/            โ†’ PHP detect, install, start/stop, per-domain assign
  respond/               โ†’ Centralized JSON response helpers (status + hardening headers + 5xx logging)
  rewrite/               โ†’ URL rewrite engine (Apache mod_rewrite compatible)
  rlimit/                โ†’ Per-domain resource limits via Linux cgroups v2
  router/                โ†’ Virtual host routing, request context
  selfupdate/            โ†’ Binary self-update from GitHub releases
  server/                โ†’ HTTP/HTTPS/HTTP3 server + request dispatch + log rotation
  serverip/              โ†’ Server IP detection (interfaces + public IP)
  services/              โ†’ systemd service management (start/stop/restart)
  sftpserver/            โ†’ Built-in SFTP server (pure Go, chroot per domain)
  siteuser/              โ†’ SFTP user management (chroot jail + SSH keys)
  terminal/              โ†’ WebSocket-to-PTY bridge for browser-based shell
  tls/                   โ†’ TLS manager, ACME client, auto-renewal, cert expiry alerts
    acme/                โ†’ RFC 8555 ACME protocol, JWS signing
  webhook/               โ†’ Event-driven webhook delivery (12 events + test, HMAC, retry)
  wordpress/             โ†’ WordPress install, manage, debug, permissions
pkg/
  fastcgi/               โ†’ FastCGI binary protocol, connection pool
  htaccess/              โ†’ .htaccess parser and converter
web/dashboard/           โ†’ React 19 SPA (42 pages, Vite + TypeScript + Tailwind)

Dashboard

UWAS includes a 42-page React 19 dashboard at /_uwas/dashboard/ with dark/light theme:

Sites: Dashboard, Domains, Domain Detail, Topology, Certificates, DNS Zone Editor, Cloudflare, WordPress, Clone/Staging, Migration, File Manager

Server: PHP, PHP Config, Applications, Software Library, Database, DB Explorer, SFTP Users, Cron Jobs, Services, Packages, IP Management, Email Guide

Performance: Cache, Metrics, Analytics, Logs

Security: Security, Firewall, Unknown Domains, Audit Log, Admin Users

System: Setup Wizard, Config Editor, Webhooks, Backups, Terminal, Updates, Doctor, Settings, About

Not in the sidebar: Domain Detail, Login

Auth: Login (with 2FA/TOTP support)

Comparison

FeatureUWASNginxCaddyApachecPanel
Single binaryYesNoYesNoNo
Auto HTTPSYesNoYesNoYes
Built-in cacheYesNoNoNoNo
PHP FastCGIYesYesYesYesYes
.htaccess supportYesNoNoYesYes
Load balancerYesYesNoNoNo
WebSocket proxyYesYesNoNoNo
WAFYesNoNoModYes
Control panelYes (built-in)NoNoNoYes
Multi-user authYesNoNoNoYes
Webhook eventsYesNoNoNoNo
DNS management4 providersNoNoNoYes
MCP / AI-nativeYesNoNoNoNo
Open sourceAGPL-3.0BSDApache 2.0Apache 2.0Proprietary

Performance

Tested with hey on AMD Ryzen 9 9950X3D:

ScenarioRequests/secAvg Latency
Small static file (14B)7,0007.1ms
4KB static file7,1007.0ms
100K requests @ 200 concurrent7,25427ms
404 error page22,0002.2ms
Cache L1 lookup (bench)75,000,00031ns
VHost routing (bench)70,000,00035ns

Deployment

Systemd

sudo cp init/uwas.service /etc/systemd/system/
sudo systemctl enable uwas
sudo systemctl start uwas

# Live config reload (zero downtime)
sudo systemctl reload uwas

Docker

The image runs as a non-root uwas user (with CAP_NET_BIND_SERVICE for ports 80/443), includes a healthcheck, and ships a baked default config that the entrypoint seeds into a writable volume on first boot โ€” so domain additions and config edits made from the dashboard persist across restarts.

docker compose (recommended): includes MariaDB + PHP-FPM sidecars.

cp .env.example .env       # set UWAS_ADMIN_KEY (required for the dashboard)
docker compose up -d

The admin API binds :9443 inside the container but Compose publishes it only on host loopback (127.0.0.1:9443) because the default admin listener is HTTP. For remote access, use ssh -L 9443:127.0.0.1:9443 user@server and open http://127.0.0.1:9443/_uwas/dashboard/. Set UWAS_ADMIN_KEY in .env (generate one with openssl rand -hex 24). The config lives in a named volume (uwas_config); edit it from the dashboard or drop a custom docker/uwas.yaml before the first boot.

docker run (standalone):

docker build -t uwas .
docker run -d -p 80:80 -p 443:443 -p 127.0.0.1:9443:9443 \
  -e UWAS_ADMIN_KEY=your-admin-key \
  -v uwas_config:/etc/uwas \
  uwas

See docker-compose.yml and docker/uwas.yaml for the full reference.

Migration from Nginx/Apache

# Convert existing Nginx config
uwas migrate nginx /etc/nginx/sites-enabled/example.conf > uwas.yaml

# Convert Apache config
uwas migrate apache /etc/apache2/sites-enabled/example.conf > uwas.yaml

# Or use the dashboard Migration wizard for full site transfer (files + database)

Development

make dev        # Build development binary
make dashboard  # Build the React dashboard (required before go:embed)
make build      # Production binary (includes dashboard build)
make test       # Run all Go tests
make lint       # Run go vet + staticcheck
make check      # Pre-push gate: lint + tsc + tests
make clean      # Clean build artifacts

Dashboard changes require npm install in web/dashboard/, then make dashboard to rebuild before the Go binary picks them up.

Monitoring (Prometheus + Grafana)

UWAS exposes a Prometheus-compatible metrics endpoint at /api/v1/metrics. Scrape it with Prometheus:

scrape_configs:
  - job_name: uwas
    static_configs:
      - targets: ["localhost:9443"]
    bearer_token: "your-admin-key"

A ready-made Grafana dashboard is included at docs/grafana/uwas-overview.json โ€” import it via Dashboards โ†’ Import โ†’ Upload JSON. It covers request rate, cache hit ratio, latency (p50/p95/p99), handler distribution, bandwidth, and more.

License

UWAS is dual-licensed:

Contributing

  1. Open an issue first to discuss
  2. One feature/fix per PR
  3. Tests required
  4. go vet must pass

Global Ranking

6.5
Trust ScoreMCPHub Index

Based on codebase health & activity.

Manual Config

{ "mcpServers": { "uwaserver-uwas": { "command": "npx", "args": ["uwaserver-uwas"] } } }