@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.
- package/README.md +88 -7
- 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
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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