@selfhost.dev/mcp-server 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +88 -7
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -6,8 +6,8 @@ The power of your own server. The simplicity of a PaaS. Driven by AI.
6
6
 
7
7
  **One platform, two capabilities:**
8
8
 
9
- - **Projects** - your apps, shipped. Connect a GitHub repo, click deploy, and it's live: auto-detected builds (Nixpacks, Dockerfile, Docker Compose, or static), auto-deploy on every push, live streaming build logs, environment variables, custom domains, pause and resume to scale to zero, and databases right inside the project. The ease of Railway, Render, and Vercel, with a server you actually control.
10
- - **Managed Databases** - production-grade database hosting, your way. Managed PostgreSQL, MySQL, Redis, and ClickHouse on AWS, in our cloud or your own AWS account (BYOC), with TimescaleDB and pgvector a flag away on PostgreSQL. Automated backups, snapshots, replicas, and metrics across engines; PITR and parameter tuning on PostgreSQL and MySQL; connection pooling on PostgreSQL, MySQL, and ClickHouse.
9
+ - **Projects** - your apps, shipped. Connect a GitHub repo, click deploy, and it's live: auto-detected builds (Nixpacks, Dockerfile, Docker Compose, or static), auto-deploy on every push, live streaming build logs, environment variables, custom domains, pause and resume to scale to zero, and databases right inside the project. Pick which of six locations across three continents the server runs in, add one-click apps (Supabase, n8n, n8n with Postgres, Twenty CRM) next to your own code, and turn on free daily server backups. The ease of Railway, Render, and Vercel, with a server you actually control.
10
+ - **Managed Databases** - production-grade database hosting, your way. Managed PostgreSQL, MySQL, Redis, and ClickHouse on AWS, in our cloud or your own AWS account (BYOC), with TimescaleDB and pgvector a flag away on PostgreSQL. Automated backups, snapshots, replicas, and metrics across engines; PITR, client TLS and parameter tuning on PostgreSQL; parameter tuning on MySQL; connection pooling on PostgreSQL, MySQL, and ClickHouse; offsite data backups and zero-downtime cluster tier scaling on ClickHouse. Read engine logs and sample the live query workload without SSH.
11
11
 
12
12
  One account, one bill, one AI control plane. Pay only for what you run: prepaid credits from $5, no plans or tiers.
13
13
 
@@ -90,8 +90,14 @@ Connect a repo, deploy, and it's live - SelfHost takes your code from GitHub to
90
90
  | *"Create a project and deploy my GitHub repo into it"* | Provisions the project, waits until it's ready, auto-detects the build, and deploys the repo |
91
91
  | *"Deploy the main branch of my-org/api"* | Creates the deployment, triggers the build, and streams live logs until it's running |
92
92
  | *"Turn on auto-deploy so every push ships"* | Enables auto-deploy; future pushes to the branch redeploy automatically |
93
+ | *"Put my project's server in Singapore"* | Shows what each family costs there, with live stock, and provisions it where you picked. A server cannot be moved later, so this is asked up front |
93
94
  | *"Add a private Postgres database to my project"* | Provisions a Postgres database inside the project, with the credentials and visibility you choose |
94
- | *"Spin up Supabase in this project"* | Deploys the Supabase template alongside your app |
95
+ | *"Spin up Supabase in this project"* | Deploys the Supabase template alongside your app and hands you the Studio credentials once it is up |
96
+ | *"I want n8n for my automations"* | Deploys n8n (or n8n backed by Postgres, if it is more than light use) and warns you the first person to open the URL claims the owner account |
97
+ | *"Give me a CRM"* | Deploys Twenty, and tells you it takes up to 15 minutes rather than leaving you wondering if it hung |
98
+ | *"Turn on backups for this project"* | Enables daily server backups, seven kept. Free - there is no backup charge for projects |
99
+ | *"Why did my project go down last night?"* | Reads the merged feed of Hetzner server actions and platform events, so "we stopped it for billing" is distinguishable from "the machine was rebuilt" |
100
+ | *"Roll this project's server back to yesterday's backup"* | Lists the backups, tells you exactly what you lose, and rebuilds the disk once you confirm |
95
101
  | *"Set DATABASE_URL on my app and redeploy"* | Updates the env var (without wiping the others) and rolls out the change |
96
102
  | *"Point app.example.com at my deployment"* | Attaches the custom domain and returns the exact DNS records to add, then verifies them |
97
103
  | *"Show me the build logs for the last deploy"* | Streams the build and container logs for that run |
@@ -125,6 +131,16 @@ Production-grade, standalone database hosting.
125
131
  | *"Add a read-only database user for the reporting app"* | Creates a DBMS-level credential with the right grants |
126
132
  | *"Restore my prod database to 14:30 yesterday into a new instance"* | Sets up a point-in-time recovery from WAL + base backups |
127
133
  | *"How has my prod database been doing this week?"* | Summarizes CPU / memory / disk / engine metrics from the agent heartbeats |
134
+ | *"Why is my database slow right now?"* | Samples the live query workload and reads the engine log, no SSH involved |
135
+ | *"Show me the Postgres error log"* | Fetches the tail of whichever log you name, from a list of what that engine actually has |
136
+ | *"Encrypt connections to my Postgres"* | Turns on client TLS across the primary and every replica, and reminds you to move clients to sslmode=require |
137
+ | *"Back up my ClickHouse data offsite every night"* | Creates a BACKUP ALL schedule streaming to its own S3 bucket, with the retention you pick |
138
+ | *"Restore that ClickHouse backup"* | Restores it, after telling you plainly that it MERGES rather than rolling back |
139
+ | *"Let my ClickHouse cluster grow and shrink with load"* | Sets the tier floor and ceiling, quotes what the ceiling costs, and adds the up and down triggers |
140
+ | *"My cluster stopped autoscaling"* | Finds the failed scale plan blocking it - which nothing else surfaces - and retries or discards it |
141
+ | *"Make Priya an admin"* | Changes the member's role, and explains it if the hierarchy refuses |
142
+ | *"POST to my service whenever a deploy fails"* | Registers a webhook endpoint and hands you the signing secret |
143
+ | *"How long will my credit last?"* | Reports the balance, the burn rate, the runway, and any credit about to expire |
128
144
  | *"Scale my instance to r6i.2xlarge and 1TB"* | Issues a manual scale, polls the resize event, and warns if the storage cascades to cluster peers |
129
145
  | *"Grow storage automatically before the disk fills up"* | Creates a doubling storage rule up to a ceiling you approve, priced per node |
130
146
  | *"Auto-stop my staging DB at 7pm weekdays"* | Creates a scheduled scaling policy with start/stop times |
@@ -167,13 +183,18 @@ Multi-tenant - everything is scoped to your org.
167
183
  | `update_organization` | Change name, description, or IAM role |
168
184
  | `delete_organization` | Soft-delete org and all related resources |
169
185
  | `list_members` | See team members and their roles |
186
+ | `update_member_role` | Promote or demote an existing member (the only way to change a role after they've joined) |
170
187
  | `remove_member` | Remove a member (owner/admin only) |
171
- | `invite_to_org` | Send org invitation with role assignment |
188
+ | `invite_to_org` | Send org invitation at a role you pick, by name |
172
189
  | `list_org_invitations` | Pending invitations |
173
190
  | `cancel_invitation` | Revoke a pending invitation |
174
191
  | `get_my_invitations` | Invitations sent to you |
175
192
  | `list_activity_logs` | Audit trail of all actions in the org |
176
193
 
194
+ Five roles, highest first: **Owner** (100), **Admin** (80), **Billing** (60), **Manager** (40), **Member** (20). Both invite and role-change take the role by name, so you never have to hunt for an id.
195
+
196
+ The hierarchy is enforced and the refusals are worth knowing in advance: an owner manages everyone, but an **admin can only manage strictly below their own level** - never a peer admin, and never granting a role at or above their own. Nobody can change **their own** role (self-demotion locks you out, self-promotion is an escalation), so an owner stepping down has to be demoted by another owner, and the last owner cannot be demoted or removed at all.
197
+
177
198
  #### Cloud Credentials
178
199
  Bring your own AWS account (BYOC) or use SelfHost's managed infrastructure.
179
200
 
@@ -264,6 +285,15 @@ Neither is a separate engine - both are PostgreSQL plus a flag. Pass `timescaled
264
285
 
265
286
  Once TimescaleDB is installed, five extra metrics join the instance's `postgresql.database` alert set: `timescaledb_hypertable_count`, `timescaledb_chunk_count`, `timescaledb_compressed_chunk_count`, `timescaledb_compression_ratio`, and `timescaledb_total_size_bytes`. They're absent from heartbeats until then, so don't write rules against them on a plain Postgres instance - they'd never fire.
266
287
 
288
+ #### PostgreSQL Client TLS
289
+ Encryption in transit for client connections. **Group-wide**: one call covers the primary and every replica, and certificates are issued per group.
290
+
291
+ | Tool | Description |
292
+ |------|-------------|
293
+ | `set_postgres_tls` | Turn client TLS on or off across a Postgres instance group (turning it off asks for confirmation - it downgrades every client connection) |
294
+
295
+ Once it's on, move clients to `sslmode=require` or stricter; a client left on the default may keep connecting in the clear. And note that **a restore or a fork starts with TLS off** even when the source had it on, because the new group has no certificate yet - re-enable it explicitly rather than assuming it carried over.
296
+
267
297
  #### MySQL Configuration
268
298
  Tune MySQL server parameters on a managed instance. No preview step - read the current config, then apply overrides.
269
299
 
@@ -561,14 +591,51 @@ Events: `instance.scaling_failed`, `deploy_run.succeeded` / `.failed` / `.aborte
561
591
  ```
562
592
  You: "Deploy my-org/web to a new project"
563
593
 
564
- Claude: Creates a project → polls until it's provisioned and active
594
+ Claude: Shows sizes and locations with live prices → you pick
595
+ → creates the project → polls until provisioned and active
565
596
  → detects the build config from the repo (build pack, port)
566
- → creates the deployment and triggers the first build
597
+ → creates the deployment; it comes back `provisioning` with no
598
+ URL yet, which is normal, so it keeps polling
567
599
  → streams the build logs until the app is live
568
600
  → hands you the deploy URL
569
601
  ```
570
602
 
571
- Then: *"add a private Postgres to it"*, *"set my env vars"*, *"point app.example.com at it"*, or *"turn on auto-deploy"* to round out the app.
603
+ The deployment's URL is null on creation. Registration happens in the background
604
+ (it used to run inline and time out on private repos), so the deploy URL appears
605
+ when the status reaches `active`, not in the create response.
606
+
607
+ Then: *"add a private Postgres to it"*, *"drop n8n next to it"*, *"set my env vars"*, *"point app.example.com at it"*, *"turn on backups"*, or *"turn on auto-deploy"* to round out the app.
608
+
609
+ ### Add a one-click app to a project
610
+
611
+ ```
612
+ You: "I want n8n in my project"
613
+
614
+ Claude: Asks whether you want it public, and whether the Postgres-backed
615
+ variant (durability and concurrency; it cannot be switched later)
616
+ → deploys it → polls until active (up to ~10 min)
617
+ → fetches the URL, and tells you the FIRST person to open it
618
+ becomes the owner, so finish setup before sharing it
619
+ ```
620
+
621
+ Supabase is the exception: it takes a dashboard username and password up front
622
+ and those become the Studio login. n8n and Twenty have no admin credentials at
623
+ all - the first visitor claims the account.
624
+
625
+ ### Diagnose a slow database
626
+
627
+ ```
628
+ You: "My prod Postgres feels slow"
629
+
630
+ Claude: Samples the live query workload (5-60s window)
631
+ → reads the engine log tail
632
+ → checks CPU / memory / disk and the replica count
633
+ → tells you what the numbers actually say
634
+ ```
635
+
636
+ Both the log fetch and the workload sample are request-then-read: the platform
637
+ agent collects them and the result is read back a moment later. Sample while the
638
+ problem is happening - a quiet window will make a struggling database look fine.
572
639
 
573
640
  ### Switch AWS Account (BYOC vs Platform-Managed)
574
641
 
@@ -606,6 +673,12 @@ Claude: Calls reauthenticate → clears stored credentials
606
673
 
607
674
  ### Restore from Backup
608
675
 
676
+ Three different things get called "restore" here and they do not do the same
677
+ thing. Whichever one you ask for, the tools state which you are getting before
678
+ touching anything.
679
+
680
+ **A disk snapshot** becomes a NEW instance - the original is untouched:
681
+
609
682
  ```
610
683
  You: "Restore my prod database from yesterday's snapshot"
611
684
 
@@ -614,6 +687,14 @@ Claude: Lists snapshots → you pick one
614
687
  → shows you the new password (save it!)
615
688
  ```
616
689
 
690
+ **A ClickHouse data backup MERGES into a running instance.** It is not a
691
+ rollback: rows written after the backup was taken survive it. You can also
692
+ restore into a different instance, which is how you clone a dataset.
693
+
694
+ **A project backup IS a rollback.** It overwrites the server's whole disk, so
695
+ Coolify, every service and every project database revert, and anything written
696
+ since is gone. It asks for the project's exact name before doing it.
697
+
617
698
  ---
618
699
 
619
700
  ## Rate Limiting
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@selfhost.dev/mcp-server",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "MCP server for SelfHost.dev - provision managed databases and deploy apps (PaaS) via natural language",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",