Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Read the inbox, mark items read, manage delivery preferences, and register Web Push devices.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
THREE_WS_API_KEY, THREE_WS_BASE, THREE_WS_TIMEOUT_MSAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"notifications": {
"command": "npx",
"args": [
"-y",
"@three-ws/notifications-mcp"
],
"env": {
"THREE_WS_API_KEY": "your-value",
"THREE_WS_BASE": "your-value",
"THREE_WS_TIMEOUT_MS": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add notifications --env THREE_WS_API_KEY=your-value --env THREE_WS_BASE=your-value --env THREE_WS_TIMEOUT_MS=your-value -- npx -y @three-ws/notifications-mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"notifications": {
"command": "npx",
"args": [
"-y",
"@three-ws/notifications-mcp"
],
"env": {
"THREE_WS_API_KEY": "your-value",
"THREE_WS_BASE": "your-value",
"THREE_WS_TIMEOUT_MS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"notifications": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@three-ws/notifications-mcp"
],
"env": {
"THREE_WS_API_KEY": "your-value",
"THREE_WS_BASE": "your-value",
"THREE_WS_TIMEOUT_MS": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
THREE_WS_BASE envTHREE_WS_TIMEOUT_MS envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto nirholas bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: THREE_WS_API_KEY
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.4) kam vor 27 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Node.js auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, yontu
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Türkçe yazı denetimi: TDK kuralları, yapay zekâ izleri, metin türüne göre üslup.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
@three-ws/notifications-mcp
Your three.ws notification inbox, delivery preferences, and Web Push devices — from any AI agent.
Install · Quick start · Tools · Authentication · Errors · three.ws
A Model Context Protocol server that gives an AI assistant its own three.ws notification inbox + delivery control over stdio. Read inbound events (pump/market alerts, sales & earnings, purchase receipts, social mentions, IRL interactions, account/security notices), mark them read, tune the per-category → per-channel delivery matrix, and register Web Push devices — all live, all account-scoped.
An agent that trades, sells skills, or stands in the real world generates inbound events around the clock — a coin it launched pumps, a skill it published sells, someone taps its IRL pin. Without an inbox surface, the agent polls a dozen endpoints or misses everything. This server turns the platform's own notification feed into seven MCP tools: the agent reads what happened since it last looked, triages it, and controls exactly which channels (in_app, push, email, telegram) each category of event uses to reach its owner.
Every read and write hits the real three.ws API. The server is authenticated: it carries a three.ws API key (or OAuth access token) as a Bearer credential and resolves the owning account on every call. It signs nothing locally and holds no other secret.
npm install @three-ws/notifications-mcp
Or run with npx (no install):
THREE_WS_API_KEY=sk_live_… npx @three-ws/notifications-mcp
Node 20+. Two runtime dependencies (@modelcontextprotocol/sdk, zod).
Claude Code, one line:
claude mcp add notifications -e THREE_WS_API_KEY=sk_live_… -- npx -y @three-ws/notifications-mcp
Claude Desktop / Cursor / any MCP client — add to your MCP config (claude_desktop_config.json, .cursor/mcp.json, .mcp.json):
{
"mcpServers": { "notifications": { "command": "npx", "args": ["-y", "@three-ws/notifications-mcp"], "env": { "THREE_WS_API_KEY": "sk_live_…" } } } }
Restart the client and the seven tools appear. Inspect the surface in a GUI:
npx -y @modelcontextprotocol/inspector npx -y @three-ws/notifications-mcp
Then ask in plain language:
Anything new in my inbox? Mark the pump alerts read, and turn off email for social mentions.
Runs list_notifications → mark_read → set_preferences.
| Tool | Kind | What it does |
|---|---|---|
list_notifications | read | The inbox, newest first, filterable by type, with an unread_count. |
mark_read | write | Mark one notification — or every unread one — read. Idempotent. |
delete_notification | write ⚠️ | Permanently remove one notification (irreversible). |
get_preferences | read | The per-category → per-channel delivery matrix. |
set_preferences | write | Patch which channels deliver each category. Idempotent. |
register_push_device | write | Register a Web Push device from a browser PushSubscription. Idempotent. |
unregister_push_device | write ⚠️ | Remove a Web Push device (tears down delivery to it). Idempotent. |
Every tool ships MCP tool annotations: the two reads advertise readOnlyHint: true, and the two ⚠️ tools are flagged destructiveHint: true, so annotation-aware clients prompt before running them.
list_notificationsRead the account's inbox — the inbound-event feed the platform delivers: market/pump alerts, sales & earnings, purchase receipts, social mentions, IRL interactions, and account/security notices. Wraps GET /api/notifications.
| Arg | Type | Required | Notes |
|---|---|---|---|
type | string | no | Return only one notification type (e.g. "pump_alert", "skill_purchased", "referral_earned", "security_alert"). Lower_snake_case, ≤ 40 chars. Omit for all types. |
limit | number | no | How many to return, newest first. 1–50, default 20. |
Example call and response (shape illustration — your inbox contents will differ):
// call
{ "type": "pump_alert", "limit": 2 }
// response (example) { "ok": true, "type": "pump_alert", "unread_count": 5, "count": 2, "notifications": [ { "id": "5d1c2f0a-9b1e-4c3d-8e7f-000000000001", "type": "pump_alert", "payload": { "mint": "FeMbDoX7R1Psc4GEcvJdsbNbZA3bfztcyDCatJVJpump", "symbol": "THREE" }, "read": false, "read_at": null, "created_at": "2026-07-11T18:04:12.000Z" } ] }
read is derived from read_at (null ⇒ unread). unread_count is the total unread across the whole inbox, not just this page.
mark_readMark notifications read. Wraps POST /api/notifications/:id/read (one) and POST /api/notifications/read-all (all). Pass exactly one of the two arguments. Marking read only sets read_at — nothing is deleted, and re-running is a no-op.
| Arg | Type | Required | Notes |
|---|---|---|---|
id | string (UUID) | one of | A single notification to mark read (from list_notifications). |
all | boolean | one of | true ⇒ mark every unread notification read. |
// call
{ "all": true }
// response (example) { "ok": true, "scope": "all", "marked_read": 5 }
With id, the response is { "ok": true, "scope": "one", "id": "…", "read_at": "…" }.
delete_notificationPermanently remove one notification. Wraps DELETE /api/notifications/:id. Irreversible — prefer mark_read for normal triage. Only a notification the caller owns can be deleted; a missing or already-deleted id returns a not-found error.
| Arg | Type | Required | Notes |
|---|---|---|---|
id | string (UUID) | yes | The notification to delete (from list_notifications). |
// call
{ "id": "5d1c2f0a-9b1e-4c3d-8e7f-000000000001" }
// response (example) { "ok": true, "id": "5d1c2f0a-9b1e-4c3d-8e7f-000000000001", "deleted": true }
get_preferencesRead the resolved delivery matrix — for each category, which channels deliver it. No arguments. Wraps GET /api/notifications/preferences. Read this before set_preferences so you patch from real current state.
// response (example)
{ "ok": true, "categories": [ { "key": "sales", "label": "Sales & earnings", "description": "…" }, { "key": "alerts", "label": "Market & pump alerts", "description": "…" } /* purchases, social, irl, account … */ ], "channels": ["in_app", "push", "email", "telegram"], "prefs": { "categories": { "alerts": { "in_app": true, "push": true, "email": false, "telegram": false } }, "telegram_chat_id": null }, "push": { "subscribed_devices": 1 } }
The seven categories are sales, purchases, social, irl, alerts, creations, account; the four channels are in_app, push, email, telegram. prefs.categories is the effective matrix with the user's sparse overrides already merged onto platform defaults. A category may also carry lockedChannels: account locks in_app on, so security and withdrawal notices always reach the bell inbox.
set_preferencesPatch the delivery matrix. Wraps PUT /api/notifications/preferences. Provide at least one of the two arguments. Only the category/channel pairs you pass change; unknown keys are dropped server-side; untouched pairs keep their current value. Re-applying the same values is a no-op.
| Arg | Type | Required | Notes |
|---|---|---|---|
categories | object | at least one | Outer keys: sales, purchases, social, irl, alerts, creations, account. Inner keys: in_app, push, email, telegram → boolean. account's in_app is locked on and a false for it is ignored. |
telegram_chat_id | string | at least one | Numeric Telegram chat id to deliver the telegram channel to, or "" to unlink. ≤ 24 chars. |
// call — stop emailing social mentions, push pump alerts
{ "categories": { "social": { "email": false }, "alerts": { "push": true } } }
// response (example) — the full resolved matrix after the update { "ok": true, "prefs": { "categories": { "social": { "email": false /* … */ } }, "telegram_chat_id": null } }
register_push_deviceRegister a Web Push device so the account receives push notifications on it. Wraps POST /api/push/subscribe. The subscription argument is exactly what the browser's pushManager.subscribe().toJSON() returns. Push endpoints are globally unique — re-registering the same device upserts (latest owner wins), so this is idempotent. Whether a category actually delivers over push is still governed by set_preferences.
| Arg | Type | Required | Notes |
|---|---|---|---|
subscription | object | yes | { endpoint, keys: { p256dh, auth } } — endpoint is the push-service URL (≤ 2048 chars); p256dh/auth are the base64url-encoded keys from the browser. |
// call
{ "subscription": { "endpoint": "https://fcm.googleapis.com/fcm/send/exampleSubscriptionId", "keys": { "p256dh": "BNcRd…", "auth": "tBHI…" } } }
// response (example) { "ok": true, "registered": true, "endpoint": "https://fcm.googleapis.com/fcm/send/exampleSubscriptionId" }
unregister_push_deviceRemove a Web Push device so it stops receiving pushes. Wraps DELETE /api/push/subscribe. Provide at least one of the two arguments — the endpoint is what locates the device. Idempotent: removing an endpoint that isn't registered still returns ok. Only push delivery to that device changes; in_app, email, and telegram preferences are untouched.
| Arg | Type | Required | Notes |
|---|---|---|---|
endpoint | string (URL) | one of | The push endpoint URL of the device to remove (preferred). |
subscription | object | one of | Alternatively the full subscription object; its endpoint is used. |
// call
{ "endpoint": "https://fcm.googleapis.com/fcm/send/exampleSubscriptionId" }
// response (example) { "ok": true, "unregistered": true, "endpoint": "https://fcm.googleapis.com/fcm/send/exampleSubscriptionId" }
Every endpoint is account-scoped and returns 401 without a valid credential — this server can never read or change another account.
Set THREE_WS_API_KEY to either:
sk_live_… / sk_test_…) — create one in your three.ws dashboard, orNur der Anfang wird gezeigt; den Rest findest du im Repo