Steelkeep
Provides backup and recovery integration for ClickHouse 25.8 Atomic/plain MergeTree tables using server-native backups, with idle-window and shared backup-disk requirements.
Provides backup and recovery integration for MariaDB 11 InnoDB databases, using separate MariaDB clients and a permitted read lock for consistent snapshots.
Provides backup and recovery integration for MongoDB 8.0 standalone, using Database Tools and a permitted journaled fsync lock.
Provides backup and recovery integration for MySQL 8.0 InnoDB databases, using MySQL clients and a permitted server-wide read lock for consistent snapshots.
Provides backup and recovery integration for PostgreSQL 17, using pg_dump/pg_restore snapshots with consistency checks and restore validation.
Provides backup and recovery integration for standalone Redis 7/8 logical databases using atomic DUMP/RESTORE with expiry preservation, within key and size limits.
Provides backup and recovery integration for worker-local SQLite files via native Online Backup, with allowlisted source and target mounts.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Database backups. A clear path to recovery.
Self-hosted backups for eight database engines, with a web dashboard and native MCP access for your AI agents.
Get started · Database profiles · AI agents · Documentation
PostgreSQL · MySQL · MariaDB · MongoDB SQLite · Redis · ClickHouse · SQL Server
Why Steelkeep
Keep database connections, backup schedules, snapshots and recovery in one place. See what the worker is doing, inspect the archive it created, and review the destination before a restore writes data. Use the dashboard or give a scoped AI agent access to the same operations.
Connect & inspect | Schedule & recover |
🗄️ Eight database enginesPostgreSQL, MySQL, MariaDB, MongoDB, SQLite, Redis, ClickHouse and SQL Server, each with an explicit recovery profile. | 🗓️ Backups on your scheduleRun manually or use timezone-aware schedules. Follow persistent jobs, worker phases and logs. |
🔎 Inspect every snapshotArchive size, SHA-256, availability checks, notes and scoped downloads. Keep all snapshots or choose retention tiers. | ↩️ Review before recoveryCheck a separate empty target, verify downloaded bytes and inspect schema/data validation after restore. |
🤖 Built for AI agentsNative MCP, REST and OpenAPI. Named agents get scoped credentials with expiry, delegation limits and revocation. | 🏠 Run it yourselfYour infrastructure and S3-compatible storage. Email/password sign-in, sealed connection credentials and light/dark themes. |
Related MCP server: spanning-mcp
Project status
Steelkeep is alpha software. All eight engine profiles have bounded synthetic native recovery evidence. Full feature parity, broader failure testing and a clean all-engine distribution image remain in progress. Check the runtime ledger and engine profiles before trusting a real database to a particular installation.
Database profiles
Engine | Current profile | Capture and prerequisites |
PostgreSQL | 17 | Exported snapshot; |
MySQL | 8.0, ordinary InnoDB tables | Real MySQL 8 clients and an explicitly permitted server-wide read lock. |
MariaDB | 11, ordinary InnoDB tables | Separate MariaDB 11 clients and an explicitly permitted server-wide read lock. |
MongoDB | 8.0 standalone | Database Tools 100.20; explicitly permitted, journaled server-wide fsync lock. |
SQLite | Worker-local initialized files | Native Online Backup; separate allowlisted source and target mounts. |
Redis | Standalone 7 / 8, one logical database | Atomic native DUMP/RESTORE with absolute expiry; up to 5,000 keys / 64 MiB. |
ClickHouse | 25.8, Atomic / plain MergeTree | Server-native backup, an owner-maintained idle window and a backup disk shared with the worker. |
SQL Server | 2019 / 2022 profile; 2022 tested | Read-only source, .NET 10 Linux x64 / DacFx 170.5.96; BACPAC logical portability. |
Archives currently have a 2 GiB limit. Each profile has version, schema and consistency requirements; eight adapters do not imply arbitrary-version or cluster support.
MySQL/MariaDB refuse stored programs, views, triggers/events and non-InnoDB tables.
MongoDB replica sets/shards and ClickHouse distributed/replicated tables need additional
profiles. SQL Server BACPAC is logical portability, not native .bak, log-chain recovery
or PITR. Source locking and maintenance requirements vary by engine.
Read the full profiles, native tooling and independent runtime evidence.
Self-host
You’ll need: Bun 1.4 for setup, Docker Compose, an S3-compatible bucket with credentials, and network access from the worker to the chosen database. Run setup as the intended non-root service owner. Native package pins are in Dockerfile.engines. SQL Server additionally needs the explicit x64 extension and applicable Microsoft terms; it is not silently downloaded by the default stack.
1. Prepare your installation
From a source checkout:
git clone https://github.com/grootbro/steelkeep.git
cd steelkeep
bun install --frozen-lockfile
bun scripts/setup-local.ts2. Configure access
Edit .env before starting. Set exact database and S3 hostnames in STEELKEEP_ALLOWED_HOSTS. For HTTPS also set:
STEELKEEP_PUBLIC_HOSTS=backup.example.com
STEELKEEP_ALLOWED_ORIGINS=https://backup.example.com
STEELKEEP_SECURE_COOKIE=true3. Build once and start
Keep the generated .steelkeep/key, .steelkeep/token and .steelkeep/metadata-password private. Setup preserves existing files. Build the web and multi-engine worker once, then start:
docker compose -f compose.selfhost.yaml pull database
docker compose -f compose.selfhost.yaml build migrate
docker compose -f compose.selfhost.yaml build worker
docker compose -f compose.selfhost.yaml up -d --no-build --pull neverThe web server binds 127.0.0.1:4310 on the host. Put your HTTPS reverse proxy in front of that port; preserve the Host header and streaming responses. Metadata and archive storage are separate: the Compose file provisions PostgreSQL metadata, while you supply the S3 bucket. Worker-local SQLite files and ClickHouse shared disks need explicit mounts and allowlists described in engine profiles.
4. Create your account
Create a private, single-use setup link immediately before opening it:
docker compose -f compose.selfhost.yaml exec \
-e STEELKEEP_SETUP_ORIGIN=https://backup.example.com \
web bun scripts/setup-owner.tsThe link expires in five minutes and contains no installation key. Choose your name, email and password; later visits use ordinary sign-in. For loopback-only HTTP testing, use http://127.0.0.1:4310 and STEELKEEP_SECURE_COOKIE=false. See authentication.
Your first backup
In Connections, add your database and S3 storage; test both connections. Use a dedicated database role with the documented permissions.
Create a plan with that source and destination. Start manually or configure a timezone schedule.
Follow the actual worker phases in Jobs. Open the resulting snapshot to inspect size, SHA-256, availability and logs.
Test recovery into a separate empty destination. A stored archive and a successful restore validation are distinct results.
Keep an independent protected copy of the metadata encryption key. Losing it makes stored connection credentials unrecoverable. Configure archive encryption and offsite retention in your storage; client-side archive encryption is not implemented.
API and AI agents
Connect your MCP client to your installation:
https://backup.example.com/mcpInterface | Endpoint | Use it for |
MCP |
| Native Streamable HTTP tools for AI agents |
REST |
| Scripts, integrations and application commands |
OpenAPI / Scalar |
| Browse the API and its schemas |
Agent guide |
| Installation-served operating instructions |
Create an agent in Configuration → AI agents, then give its token to your MCP client as a bearer credential. The default grant is read-only and expires in 24 hours. Tokens are shown once and stored hashed. Delegation cannot increase permissions or outlive its issuer; revocation includes descendants. No model-provider account is required.
read · configure · backup:run · restore:run · jobs:cancel ·
agents:manage · backup:delete · backup:download
See authentication and agent access.
How recovery stays deliberate
An empty-target review expires and is bound to the actor, source artifact, destination identity and permissions. SHA-256 is checked before restore writes. Unknown restore outcomes retain a destination reservation and are never automatically replayed; inspect partial data and prepare a fresh target.
Snapshot availability HEAD checks inspect object metadata, not downloaded bytes. Native downloads and restores verify complete bytes. Manual deletion requires a reviewed selection and explicit acknowledgement; ambiguous conditional deletes stay held without retry. See downloads, reviewed deletion and retention.
Documentation
Start here | Go deeper |
Built with
TypeScript · TanStack Start / Router / DB · React · Elysia · Bun PostgreSQL metadata · Kysely · pg-boss · S3-compatible archives
The web dashboard, REST API and MCP server call the same application services. Native tools run in the worker.
Development
The synthetic development fixtures contain deliberately public disposable credentials. Never reuse them for real services. Follow architecture and development evidence and the guarded acceptance scripts; heavy native fixtures are opt-in.
bun run typecheck
bun run typecheck:acceptance
bun run testDefault tests do not start database fixtures. The CI workflow installs locked dependencies, runs both TypeScript checks and default tests, and builds the web application. See the GitHub CI results; these checks do not qualify native recovery.
Some historical acceptance harnesses deliberately require their original absolute checkout and fixture identities. They are operator-specific tools, not a portable test suite; don't remove their guards just to run them elsewhere. Native acceptance requires independent archive-byte and restored-data checks. Historical proofs don't automatically qualify newer source, packages or images. See the acceptance ledger, native tooling and parity tracker.
Contributing and license
See CONTRIBUTING.md and SECURITY.md. Steelkeep source is MIT licensed. Adapted Databasement interface material, fonts and optional Microsoft tooling retain their respective notices and terms. Salt.md was an interaction reference; its AGPL source/assets were not copied.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to manage restic backups, including listing snapshots, browsing files, and creating new backups. It provides tools for repository maintenance, data restoration, and applying retention policies through the Model Context Protocol.2-
- AlicenseNot gradedqualityAmaintenanceMCP server for Spanning Cloud Backup — M365/GWS/Salesforce SaaS backup, restore, and audit. Enables AI assistants to manage and monitor cloud backup protection via the Spanning API.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA production-grade MCP server designed for multi-tenant, authenticated, and observable AI agent systems, enabling secure tool execution across heterogeneous data sources.67MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to discover and execute tools via a secure MCP server with JWT authentication, RBAC, rate limiting, and audit logging.1MIT