Zum Inhalt springen

MCP-Server ​

Mindwtr bietet einen optionalen MCP-Server (Model Context Protocol). Damit können Sie KI-Agenten wie Claude Desktop, Claude Code, OpenAI Codex oder Gemini CLI mit Ihrer lokalen Mindwtr-Datenbank, der lokalen API der Desktop-App oder einem selbst gehosteten Mindwtr-Cloud-Endpunkt verbinden.

Das eigenständige Hilfsprogramm verwendet standardmäßig stdio.

Implementierungsreferenz: apps/mcp-server/README.md. Falls diese README vom aktuellen Servercode oder den erzeugten MCP-Werkzeugschemas abweicht, sind Code und Schemas maßgeblich.


App-Binärdateien und MCP-Hilfsprogramm ​

Das eigenständige MCP-Hilfsprogramm wird weiterhin als mindwtr-mcp veröffentlicht und ist im öffentlichen MCP Registry aufgeführt.

npm

Sie müssen nicht die gesamte App aus dem Quellcode ausführen, um MCP zu verwenden. Verwenden Sie die normale Desktop-App für Ihre Aufgaben und lassen Sie dann Ihren MCP-Client mindwtr-mcp über npx starten, oder installieren Sie es global mit npm. Verweisen Sie das Hilfsprogramm auf die lokale Datei mindwtr.db der Desktop-App oder verwenden Sie das unten beschriebene Local-API-Backend.

Die Standardpfade der Desktop-Datenbank stehen unten unter Standardspeicherorte der Datenbank. Binärdateien für Mobilgeräte stellen keinen lokalen MCP-Server bereit.

Integriertes Desktop-MCP ​

Die Desktop-App enthält einen MCP-Server unter Einstellungen → Integrationen → Lokaler MCP-Server (erweitert). Er läuft innerhalb der App und nutzt dieselben internen Operationen wie die Local API. Node, npm, Bun oder ein separates Hilfsprogramm sind nicht erforderlich, und die Local API kann ausgeschaltet bleiben. MCP ist standardmäßig deaktiviert und schreibgeschützt.

Aktivieren Sie den Server und lassen Sie Mindwtr laufen. Beim Schließen in den Infobereich bleibt er verfügbar; das Deaktivieren von MCP oder Beenden der App stoppt ihn. Clients müssen authentifiziertes Streamable HTTP unterstützen. Der Standardendpunkt lautet:

text
http://127.0.0.1:8722/mcp

Verfügbar ab v1.3.7: Die folgenden Steuerelemente ergänzen das Kopieren der Codex-Konfiguration, einen einstellbaren Port und separate Schreibberechtigungen. Frühere Versionen verwenden einen festen Port und einen einzelnen Schalter Änderungen erlauben.

Codex verbinden ​

Wählen Sie Für Codex kopieren und fügen Sie das kopierte TOML in ~/.codex/config.toml ein. Wenn diese Datei bereits mcp_servers.mindwtr enthält, ersetzen Sie diesen Eintrag, statt einen zweiten hinzuzufügen. Behalten Sie Ihre übrige Konfiguration bei. Mindwtr kopiert den Text; es bearbeitet keine Codex-Dateien.

Die kopierte Konfiguration hat die folgende Form mit Ihrem aktuellen Endpunkt und Token:

toml
[mcp_servers.mindwtr]
url = "http://127.0.0.1:8722/mcp"

[mcp_servers.mindwtr.http_headers]
Authorization = "Bearer <token from Mindwtr>"

Starten Sie Ihren Codex-Client nach einer Konfigurationsänderung neu oder verbinden Sie ihn erneut. Verbindungsdaten kopieren liefert JSON für Clients, die mcpServers verwenden; reine stdio-Clients benötigen weiterhin das eigenständige Hilfsprogramm.

Berechtigungen und Port ​

Bearbeiten von Aufgaben und Projekten erlauben ermöglicht das Erstellen, Bearbeiten, Abschließen und Wiederherstellen von Aufgaben sowie das Erstellen oder Bearbeiten von Projekten. Aktivieren Sie unter Erweitert bei Bedarf Archivieren erlauben und Löschen erlauben separat. Jede Berechtigung ist unabhängig, und bei einer neuen Installation sind alle ausgeschaltet. Bestehende Installationen, in denen Änderungen erlauben aktiviert war, behalten ihre bisherige Löschberechtigung; Sie können diese ausschalten, ohne Bearbeitungen zu deaktivieren. Das Archivieren erfordert eine ausdrückliche neue Freigabe.

Das integrierte Werkzeug mindwtr_archive_task archiviert über die bestehende Operation der App. Es schließt eine Aufgabe nicht ab und erzeugt nicht deren nächste Wiederholung. Eine Aktualisierung, die gewöhnliche Bearbeitungen mit Änderungen an Archivierung oder Abbruch kombiniert, erfordert beide Berechtigungen. Beim Löschen handelt es sich um eine weiche Löschung. Diese Einstellungen gelten für den integrierten Server, nicht für das eigenständige Hilfsprogramm oder die separate Local API.

Unter Erweitert können Sie außerdem einen Port von 1024 bis 65535 wählen. Speichern Sie ihn und kopieren Sie die aktualisierten Verbindungsdaten für Ihren Client. Wenn ein anderer Prozess den Port belegt, wählen Sie einen freien Port oder beheben Sie den Konflikt und wählen Sie Erneut versuchen. Der Server bindet immer an 127.0.0.1.

Verbundene KI-Clients können die über diese Werkzeuge bereitgestellten Daten lesen und an ihren Anbieter senden. Halten Sie das kopierte Token geheim. Beim Erneuern werden bestehende Clients getrennt und benötigen das neue Token.

Dieser Endpunkt dient Clients auf demselben Computer. Er bietet keinen entfernten ChatGPT-Zugriff, Tunnel oder gehosteten Dienst. Mobile Apps stellen ihn nicht bereit.


Voraussetzungen ​

Diese Voraussetzungen gelten für das eigenständige Hilfsprogramm.

  • Node.js 22+ für Installationen ohne Compiler: Die SQLite-Abhängigkeit liefert vorkompilierte Binärdateien für Node 22 und neuer. Node 20 kann den Server weiterhin ausführen, benötigt für die Installation aber C++-Buildwerkzeuge.
  • Bei reinen API-Installationen können Sie das optionale SQLite-Addon mit --omit=optional weglassen.
  • npm oder einen anderen Node-Package-Runner für das veröffentlichte Paket mindwtr-mcp
  • eine lokale Mindwtr-Datenbank (mindwtr.db) für den SQLite-Modus, eine laufende Local API der Desktop-App und ihr Bearer-Token für den API-Modus oder eine selbst gehostete Mindwtr-Cloud-URL und ein Bearer-Token für den Cloud-Modus
  • Bun nur, wenn Sie das Hilfsprogramm aus dem Quellbaum ausführen

Im SQLite-Modus mit npm 12 müssen Sie das Installationsskript der SQLite-Abhängigkeit freigeben. Sonst kann die Installation erfolgreich sein, der Start aber wegen fehlender nativer Bindings scheitern. Erlauben Sie bei npx oder globalen Installationen nur better-sqlite3:

bash
npx --allow-scripts=better-sqlite3 -y mindwtr-mcp --db "/path/to/mindwtr.db"
npm install -g --allow-scripts=better-sqlite3 mindwtr-mcp

Fügen Sie in MCP-Konfigurationen mit npx den Eintrag "--allow-scripts=better-sqlite3" vor "mindwtr-mcp" in args ein. Bei einer vorhandenen projektlokalen Installation führen Sie im Projekt zuerst npm install-scripts approve better-sqlite3, dann npm rebuild better-sqlite3 aus. Prüfen Sie die Abhängigkeit vor der Freigabe; erlauben Sie nicht pauschal alle Skripte.

Standardspeicherorte der Datenbank ​

  • Linux: ~/.local/share/mindwtr/mindwtr.db
  • Linux (Snap): ~/snap/mindwtr/current/.local/share/mindwtr/mindwtr.db
  • macOS: ~/Library/Application Support/mindwtr/data/mindwtr.db
  • Windows: %APPDATA%\mindwtr\data\mindwtr.db

Zusätzlicher macOS-Pfad für sandboxed Builds:

  • ~/Library/Containers/tech.dongdongbh.mindwtr/Data/Library/Application Support/mindwtr/data/mindwtr.db

Die macOS- und Windows-Pfade oben gelten für v1.3.2 und neuer. Vor v1.3.2 lag die Datenbank direkt im Ordner mindwtr, zum Beispiel %APPDATA%\mindwtr\mindwtr.db. Unter Linux hat sich nichts geändert.

Sie können den lokalen Datenbankspeicherort überschreiben mit:

  • --db /path/to/mindwtr.db
  • Umgebungsvariable: MINDWTR_DB_PATH oder MINDWTR_DB

Verwenden Sie für den selbst gehosteten Cloud-Modus:

  • --cloud-url https://mindwtr.example.com oder MINDWTR_MCP_CLOUD_URL
  • --cloud-token <token> oder MINDWTR_MCP_CLOUD_TOKEN
  • optional --cloud-allow-insecure-http=true für vertrauenswürdige private HTTP-Bereitstellungen

Einrichtung und Konfiguration ​

Beim eigenständigen Hilfsprogramm führen MCP-Clients den Server als Unterprozess aus. Sie geben ihnen den Befehl und übergeben Argumente.

Empfohlener installationsfreier Befehl für MCP-Clients:

json
{
  "command": "npx",
  "args": [
    "-y",
    "mindwtr-mcp",
    "--db",
    "/path/to/mindwtr.db"
  ]
}

Das Paket ist standardmäßig schreibgeschützt. Fügen Sie --write nur hinzu, wenn ein KI-Client ausdrücklich Mindwtr-Daten hinzufügen, aktualisieren, erledigen oder löschen können soll.

Local-API-Modus der Desktop-App ​

Erfordert mindwtr-mcp 1.1.11 oder neuer.

Aktivieren Sie die Local API der Desktop-App in den Einstellungen und kopieren Sie ihr Bearer-Token. Lassen Sie die App und die API laufen. Dieses Backend verwendet die REST-Endpunkte der App und öffnet niemals eine Datenbank oder greift auf SQLite zurück.

Lassen Sie bei einer reinen API-Installation das optionale native SQLite-Addon weg:

bash
npm install -g --omit=optional mindwtr-mcp

Konfigurieren Sie Ihren MCP-Client so, dass er das Token über seine Umgebung übergibt, statt es in Befehlszeilenargumenten anzugeben:

json
{
  "command": "mindwtr-mcp",
  "args": ["--api-url", "http://127.0.0.1:3456"],
  "env": {
    "MINDWTR_MCP_API_TOKEN": "<token from desktop settings>"
  }
}

Verwenden Sie den in den Einstellungen angezeigten Port. MINDWTR_MCP_API_URL kann --api-url ersetzen. URLs müssen die wörtliche Adresse 127.0.0.1 oder [::1] verwenden und dürfen keine Zugangsdaten, Pfade, Abfragen oder Fragmente enthalten; Weiterleitungen werden abgelehnt. Kombinieren Sie API-Optionen nicht mit Cloud-/--db-Optionen. Vorhandene Umgebungsvariablen für Datenbankpfade werden im API-Modus ignoriert.

Schreibzugriffe bleiben deaktiviert, solange sie nicht ausdrücklich mit --write aktiviert werden. Wenn die App geschlossen oder das Token ungültig ist, gibt das Hilfsprogramm einen Fehler zurück. Ein Schreibzugriff mit Zeitüberschreitung kann die App bereits erreicht haben: Prüfen Sie die Aufgabe vor einem erneuten Versuch, da das Hilfsprogramm Schreibzugriffe nicht automatisch wiederholt.

MCP-FunktionUnterstützung durch die Local API der Desktop-App
Aufgaben auflisten/abrufenUnterstützt, einschließlich erweiterter Suchoperatoren, Datumsfilter, Sortierung und Paginierung
Aufgaben erstellenExpliziter Titel und Felder; quickAdd ist nicht verfügbar
Aufgaben aktualisieren/erledigen/löschen/wiederherstellenÜber die entsprechenden API-Endpunkte unterstützt; Änderungen zu einem endgültigen Status können nicht als gewöhnliche Bearbeitungen übermittelt werden
Projekte auflisten/abrufen/erstellen/aktualisieren/löschenFür die grundlegenden Projektfelder der API unterstützt: Titel, Farbe, Status, Bereich und sequenzielles Verhalten
Bereiche auflistenUnterstützt
Abschnitte, verwaltete Personen, Schreibzugriffe auf BereicheNicht verfügbar; diese Werkzeuge werden im API-Modus ausgeblendet
GTD-Verfügbarkeit viewNicht verfügbar, da die API den erforderlichen Abschnitts-Snapshot nicht bereitstellt
Anhangslinks ersetzenNicht verfügbar, da die API keine bedingten Anhangsaktualisierungen bereitstellt

Andere nicht unterstützte Felder werden vor einem Schreibzugriff abgelehnt. Auch die Einschränkungen der Desktop-API bei Wiederholungen gelten; einige wiederkehrende Aufgaben müssen in der App erledigt werden. Dieses Backend verspricht keine vollständige Gleichwertigkeit mit den SQLite-/Cloud-Werkzeugen.

--api-url wählt die Datenquelle des Hilfsprogramms aus. --http legt dagegen fest, wie sich ein MCP-Client mit dem Hilfsprogramm verbindet; es kann mit jedem Backend verwendet werden und hat ein separates Authentifizierungstoken.

Self-Hosted-Cloud-Modus ​

Verwenden Sie den Cloud-Modus, wenn Sie Ihren eigenen Mindwtr-Cloud-Server betreiben und MCP-Werkzeuge nutzen möchten, ohne eine lokale SQLite-Datei bereitzustellen:

bash
npx -y mindwtr-mcp \
  --cloud-url "https://mindwtr.example.com" \
  --cloud-token "$MINDWTR_TOKEN"

Alternativ verwenden Sie Umgebungsvariablen in der Konfiguration eines MCP-Clients:

json
{
  "command": "npx",
  "args": ["-y", "mindwtr-mcp"],
  "env": {
    "MINDWTR_MCP_CLOUD_URL": "https://mindwtr.example.com",
    "MINDWTR_MCP_CLOUD_TOKEN": "your-token"
  }
}

Der Cloud-Modus liest den aktuellen Schnappschuss von /v1/data aus Ihrem selbst gehosteten Cloud-Server und stellt Lesewerkzeuge für Aufgaben, Projekte, Abschnitte, Bereiche und Personen bereit. Mit --write laufen Schreibvorgänge für Aufgaben, Projekte, Abschnitte und Bereiche über die ressourcenspezifischen REST-Endpunkte des Cloud-Servers (POST /v1/tasks, PATCH /v1/tasks/:id usw.). Dadurch erhält jede Änderung dieselbe Validierung und Revisionsverfolgung wie Änderungen aus Ihren Apps. Ohne --write geben Schreibwerkzeuge read_only zurück. Personenänderungen und die Wiederherstellung gelöschter Aufgaben sind im Cloud-Modus noch nicht verfügbar. Verwenden Sie dafür das lokale Datenbankbackend.

Das Aktualisieren von Link-Anhängen über MCP im Cloud-Modus erfordert Mindwtr Cloud 1.2.8 oder neuer. Der Helfer verwendet bedingte Schreibzugriffe, um Datei-Anhänge zu erhalten, die ein anderer Client geändert hat, und versucht die Aktualisierung bei gleichzeitigen Änderungen bis zu dreimal. Liefert dein Server keinen ETag für den Datensatz, aktualisiere ihn zuerst; der Helfer lehnt die Änderung ab, ohne zu schreiben. Änderungen einzelner anderer Felder und das Erstellen von Aufgaben oder Projekten funktionieren wie bisher.

Dies ist nicht der blockierte gehostete Mehrmandanten-Connector. Sie betreiben den Cloud-Server und das MCP-Hilfsprogramm weiterhin selbst; Mindwtr betreibt keinen Dienst, der die Aufgabendaten aller Benutzer speichert.

Für eine globale Installation verwenden Sie stattdessen:

bash
npm install -g mindwtr-mcp
mindwtr-mcp --db "/path/to/mindwtr.db"

Wichtige Argumente ​

  • --db "/path/to/mindwtr.db": Pfad zu Ihrer SQLite-Datenbank für den lokalen Modus.
  • --write: Aktiviert Schreibvorgänge (hinzufügen, aktualisieren, erledigen, löschen) im lokalen oder Cloud-Modus. Ohne dieses Flag ist der Server schreibgeschützt.
  • --cloud-url "https://mindwtr.example.com": Verwendet statt einer lokalen Datenbank einen selbst gehosteten Mindwtr-Cloud-Endpunkt.
  • --cloud-token "<token>": Bearer-Token für den selbst gehosteten Cloud-Endpunkt.
  • --cloud-allow-insecure-http=true: Erlaubt vertrauenswürdige private HTTP-Cloud-URLs, wenn Sie bewusst ohne HTTPS arbeiten.

1. Claude Desktop ​

Fügen Sie der Konfigurationsdatei von Claude Desktop einen Servereintrag hinzu.

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{
  "mcpServers": {
    "mindwtr": {
      "command": "npx",
      "args": [
        "-y",
        "mindwtr-mcp",
        "--db",
        "~/.local/share/mindwtr/mindwtr.db",
        "--write"
      ]
    }
  }
}

Hinweis: Ersetzen Sie den DB-Pfad durch den tatsächlichen Pfad Ihrer lokalen Mindwtr-Datenbank.

2. Claude Code (CLI) ​

Sie können den Server über die CLI hinzufügen:

bash
claude mcp add mindwtr -- \
  npx -y mindwtr-mcp --db "/path/to/mindwtr.db" --write

3. OpenAI Codex (CLI/IDE-Erweiterung) ​

Codex liest die MCP-Serverkonfiguration aus ~/.codex/config.toml. In einem vertrauenswürdigen Projekt können Sie auch eine projektbezogene .codex/config.toml verwenden. Codex CLI und IDE-Erweiterung verwenden dieselbe Konfiguration.

Befehlszeile:

bash
codex mcp add mindwtr -- \
  npx -y mindwtr-mcp \
  --db "/path/to/mindwtr.db"

Fügen Sie --write nur hinzu, wenn Codex lokale Mindwtr-Daten verändern können soll:

bash
codex mcp add mindwtr -- \
  npx -y mindwtr-mcp \
  --db "/path/to/mindwtr.db" --write

Führen Sie in der Codex-TUI /mcp aus, um zu prüfen, ob der Server aktiv ist.

Manuelle Konfiguration:

toml
[mcp_servers.mindwtr]
command = "npx"
args = [
  "-y",
  "mindwtr-mcp",
  "--db",
  "/path/to/mindwtr.db"
]

Mit Schreibzugriff:

toml
[mcp_servers.mindwtr]
command = "npx"
args = [
  "-y",
  "mindwtr-mcp",
  "--db",
  "/path/to/mindwtr.db",
  "--write"
]

4. Gemini CLI ​

Gemini CLI verwendet settings.json (Benutzer: ~/.gemini/settings.json oder Projekt: .gemini/settings.json).

Befehlszeile:

bash
gemini mcp add mindwtr \
  npx -y mindwtr-mcp \
  --db "/path/to/mindwtr.db" --write

Manuelle Konfiguration:

json
{
  "mcpServers": {
    "mindwtr": {
      "command": "npx",
      "args": [
        "-y",
        "mindwtr-mcp",
        "--db",
        "/path/to/mindwtr.db",
        "--write"
      ]
    }
  }
}

5. Gemini-App (benutzerdefinierte Apps) ​

Die Gemini-Web- und Mobil-Apps können sich per URL mit einem entfernten MCP-Server verbinden („benutzerdefinierte Apps" auf gemini.google.com). Das funktioniert mit mindwtr-mcp im HTTP-Modus: Hosten Sie den Server unter einer Adresse, die Googles Server erreichen können (eine öffentliche HTTPS-URL hinter einem Reverse-Proxy; Gemini verbindet sich von Googles Seite aus, localhost funktioniert daher nicht), und fügen Sie diese URL zusammen mit Ihrem Bearer-Token als benutzerdefinierte App hinzu.

6. Google Antigravity ​

Antigravity (Googles agentische IDE) liest lokale MCP-Server aus einer JSON-Konfigurationsdatei; einen CLI-Befehl zum Hinzufügen gibt es nicht. Öffnen Sie die Datei im Agent-Seitenpanel über MCP Servers -> Manage MCP Servers -> View raw config, oder bearbeiten Sie sie direkt:

  • Aktuelle Versionen: ~/.gemini/config/mcp_config.json (pro Workspace: .agents/mcp_config.json)
  • Ältere Versionen: ~/.gemini/antigravity/mcp_config.json (Windows: %USERPROFILE%\.gemini\antigravity\mcp_config.json)
json
{
  "mcpServers": {
    "mindwtr": {
      "command": "npx",
      "args": [
        "-y",
        "mindwtr-mcp",
        "--db",
        "C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\mindwtr\\data\\mindwtr.db",
        "--write"
      ]
    }
  }
}

Ersetzen Sie den Pfad durch den lokalen Datenbankpfad Ihrer Plattform (Windows-Pfade brauchen in JSON doppelte Backslashes). Lassen Sie --write für reinen Lesezugriff weg. Starten Sie Antigravity neu und prüfen Sie, ob mindwtr in den MCP-Server-Einstellungen erscheint. Antigravitys lokale MCP-Konfiguration ist unabhängig von der settings.json der Gemini CLI und von den benutzerdefinierten Apps der Gemini-App.


Fernzugriff (HTTP) ​

Erfordert eine mindwtr-mcp-Version neuer als 1.1.1 (oder die Ausführung aus dem Quellcode).

Standardmäßig spricht der Server stdio. Mit --http stellt er stattdessen einen Streamable-HTTP-MCP-Endpunkt bereit, sodass sich entfernte MCP-Clients per URL verbinden können. Der HTTP-Modus funktioniert mit allen drei Backends (lokale SQLite-Datenbank, Local API der Desktop-App oder selbst gehostete Cloud).

bash
mindwtr-mcp --http --http-token "$(openssl rand -hex 32)" --db "/path/to/mindwtr.db"

Flags (alle haben MINDWTR_MCP_HTTP*-Umgebungsvariablen als Äquivalent):

FlagUmgebungsvariableBedeutung
--httpMINDWTR_MCP_HTTPAktiviert den HTTP-Modus. Wird auch durch jedes der folgenden Flags impliziert.
--http-token <token>MINDWTR_MCP_HTTP_TOKENErforderlich, sobald der HTTP-Modus aktiv ist; mindestens 16 Zeichen. Erzeugen Sie eines mit openssl rand -hex 32. Ohne Token startet der Server nicht.
--http-host <host>MINDWTR_MCP_HTTP_HOSTBind-Adresse, Standard 127.0.0.1.
--http-port <port>MINDWTR_MCP_HTTP_PORTBind-Port, Standard 8722.

Der integrierte MCP-Server der Desktop-App nutzt ebenfalls Port 8722. Wenn er aktiv ist, geben Sie mit --http-port einen anderen Port an, zum Beispiel --http-port 8723.

Der MCP-Endpunkt ist POST /mcp und verlangt bei jeder Anfrage Authorization: Bearer <token>. GET /healthz liefert ohne Authentifizierung 200 ok für Reverse-Proxy-Healthchecks. Anfragen ohne gültiges Token erhalten 401; wiederholte Authentifizierungsfehler führen zu 429 mit einem Retry-After-Header. Anfragekörper über 1 MiB erhalten 413. Im HTTP-Modus läuft der Server, solange er lauscht (stdio wird nicht verbunden), und das --write-/Nur-Lese-Verhalten bleibt unverändert.

Eingebautes TLS oder Rate-Limiting für authentifizierte Anfragen gibt es nicht. Um den Server über localhost hinaus zugänglich zu machen, stellen Sie einen Reverse-Proxy (Caddy, nginx) für HTTPS davor und geben Sie die resultierende https://-URL samt Token an den entfernten MCP-Client.


Manuell ausführen ​

Normalerweise müssen Sie dies nicht manuell ausführen (das übernimmt der MCP-Client), für Tests kann es jedoch nützlich sein.

Aus npm ​

bash
# Read-only
npx -y mindwtr-mcp --db "/path/to/mindwtr.db"

# With write access
npx -y mindwtr-mcp --db "/path/to/mindwtr.db" --write

Aus dem Quellcode (Bun) ​

bash
# Read-only
bun run mindwtr:mcp -- --db "/path/to/mindwtr.db"

# With write access
bun run mindwtr:mcp -- --db "/path/to/mindwtr.db" --write

Bauen und ausführen (Node) ​

bash
# Build
bun run --filter mindwtr-mcp build

# Run
node apps/mcp-server/dist/cli.js --db "/path/to/mindwtr.db"

Migration: Werkzeugumbenennung (mindwtr.* → mindwtr_*) ​

Werkzeugnamen verwenden jetzt Unterstriche, etwa mindwtr_list_tasks. Ältere Namen mit Punkten werden nicht mehr dokumentiert.


Verfügbare Werkzeuge ​

Nach dem Verbinden kann der KI-Agent auf diese Werkzeuge zugreifen. Standardmäßig ist der Server schreibgeschützt; übergeben Sie --write, um Schreibwerkzeuge zu aktivieren. Für den Schreibzugriff wird ausschließlich --write unterstützt (keine alternativen Aliase).

WerkzeugVorgangErfordert --write
mindwtr_list_tasksAufgaben auflistenNein
mindwtr_list_projectsProjekte auflistenNein
mindwtr_get_projectEin Projekt abrufenNein
mindwtr_list_sectionsAbschnitte auflistenNein
mindwtr_get_sectionEinen Abschnitt abrufenNein
mindwtr_list_areasBereiche auflistenNein
mindwtr_list_peoplePersonen auflistenNein
mindwtr_get_personEine Person abrufenNein
mindwtr_get_taskEine Aufgabe nach ID abrufenNein
mindwtr_add_taskAufgabe erstellenJa
mindwtr_update_taskAufgabe aktualisierenJa
mindwtr_complete_taskAls erledigt markierenJa
mindwtr_delete_taskAufgabe vorläufig löschenJa
mindwtr_restore_taskAufgabe wiederherstellenJa
mindwtr_add_projectProjekt erstellenJa
mindwtr_update_projectProjekt aktualisierenJa
mindwtr_delete_projectProjekt vorläufig löschenJa
mindwtr_add_sectionAbschnitt erstellenJa
mindwtr_update_sectionAbschnitt aktualisierenJa
mindwtr_delete_sectionAbschnitt vorläufig löschenJa
mindwtr_add_areaBereich erstellenJa
mindwtr_update_areaBereich aktualisierenJa
mindwtr_delete_areaBereich vorläufig löschenJa
mindwtr_add_personPerson erstellenJa
mindwtr_update_personPerson aktualisierenJa
mindwtr_rename_personPerson umbenennenJa
mindwtr_delete_personPerson vorläufig löschenJa

Lesewerkzeuge ​

  • mindwtr_list_tasks: Aufgaben mit Filtern auflisten (Status, Projekt, Datumsbereich, Suche, isFocusedToday für den heutigen Fokus, view für die GTD-Verfügbarkeit).
  • mindwtr_list_projects: Alle Projekte auflisten.
  • mindwtr_get_project: Details eines bestimmten Projekts anhand der ID abrufen.
  • mindwtr_list_sections: Projektabschnitte auflisten, optional nach Projekt gefiltert.
  • mindwtr_get_section: Details eines bestimmten Abschnitts anhand der ID abrufen.
  • mindwtr_list_areas: Alle Bereiche auflisten.
  • mindwtr_list_people: Verwaltete Personendatensätze auflisten.
  • mindwtr_get_person: Details einer bestimmten Person anhand der ID abrufen.
  • mindwtr_get_task: Details einer bestimmten Aufgabe anhand der ID abrufen.

Schreibwerkzeuge (erfordern --write) ​

Schreibwerkzeuge funktionieren sowohl mit der lokalen Datenbank als auch einem selbst gehosteten Cloud-Backend, mit zwei Ausnahmen im Cloud-Modus: Werkzeuge zum Schreiben von Personen und mindwtr_restore_task geben dort einen eindeutigen Fehler zurück, weil die Cloud-API noch keine Endpunkte dafür besitzt.

mindwtr-mcp erlaubt es, einen vorhandenen Link zu einer Netzwerkfreigabe beim Aktualisieren einer Aufgabe oder eines Projekts beizubehalten oder umzubenennen. Lassen Sie die URI exakt unverändert und verwenden Sie dieselbe Anhang-ID, oder lassen Sie die ID weg, um den Link anhand der URI zuzuordnen. Der Link muss auf demselben Element noch aktiv sein. MCP lehnt neue Links zu Netzwerkfreigaben, geänderte Netzwerkfreigabe-URIs und das Wiederherstellen gelöschter Links zu Netzwerkfreigaben weiterhin ab.

  • mindwtr_add_task: Erstellt eine neue Aufgabe. Unterstützt natürlichsprachliches quickAdd (z. B. „Buy milk @errands /due:tomorrow“). Unterstützt außerdem Link-Anhänge über attachments.
  • mindwtr_update_task: Aktualisiert eine vorhandene Aufgabe einschließlich Planungsfeldern wie dueDate, startTime, reviewAt und isFocusedToday (Felder können mit null geleert werden). attachments setzt die Link-Anhänge: Die übergebene Liste ist die vollständige Liste der Links, nicht aufgeführte Links werden entfernt, Dateianhänge bleiben unberührt, und null entfernt alle Links.
  • mindwtr_complete_task: Markiert eine Aufgabe als erledigt.
  • mindwtr_delete_task: Löscht eine Aufgabe vorläufig.
  • mindwtr_restore_task: Stellt eine vorläufig gelöschte Aufgabe wieder her.
  • mindwtr_add_project: Erstellt ein neues Projekt, einschließlich optionalem startDate, dueDate und reviewAt. Nimmt außerdem Link-Anhänge über attachments entgegen.
  • mindwtr_update_project: Aktualisiert ein Projekt, einschließlich optionalem startDate, dueDate und reviewAt. Link-Anhänge in attachments folgen derselben Regel der vollständigen Liste wie beim Aktualisieren einer Aufgabe.
  • mindwtr_delete_project: Löscht ein Projekt vorläufig.
  • mindwtr_add_section: Erstellt einen Abschnitt innerhalb eines Projekts.
  • mindwtr_update_section: Aktualisiert einen Projektabschnitt.
  • mindwtr_delete_section: Löscht einen Projektabschnitt vorläufig. Aufgaben in diesem Abschnitt bleiben erhalten und werden von Core in „kein Abschnitt“ verschoben.
  • mindwtr_add_area: Erstellt einen neuen Bereich.
  • mindwtr_update_area: Aktualisiert einen Bereich.
  • mindwtr_delete_area: Löscht einen Bereich vorläufig.
  • mindwtr_add_person: Erstellt eine verwaltete Person für Zuständigkeiten und Aufgaben im Status Warten.
  • mindwtr_update_person: Aktualisiert die Metadaten einer verwalteten Person.
  • mindwtr_rename_person: Benennt eine verwaltete Person um und aktualisiert optional exakt übereinstimmende Aufgabenzuweisungen.
  • mindwtr_delete_person: Löscht eine verwaltete Person vorläufig, ohne Aufgabenzuweisungen zu entfernen.

Schemahinweis:

  • Schreibwerkzeuge für Aufgaben umfassen dueDate, startTime und reviewAt (bei Aktualisierung).
  • Schreibwerkzeuge für Projekte umfassen sowohl dueDate als auch reviewAt.
  • Schreibwerkzeuge für Personen umfassen name, note, referenceLink und optionale Aktualisierungen von Zuweisungen beim Umbenennen.
  • Die genauen maßgeblichen Eingaben finden Sie in apps/mcp-server/README.md.

Berechtigungsmatrix ​

Verwenden Sie diese Matrix, um zu entscheiden, ob der Server schreibgeschützt oder mit --write ausgeführt werden soll.

WerkzeugDatenzugriffÄnderungsartSchreibgeschützter ModusModus --write
mindwtr_list_tasksAufgabenzeilen (gefiltert)KeineErlaubtErlaubt
mindwtr_list_projectsProjektzeilenKeineErlaubtErlaubt
mindwtr_get_projectEinzelnes Projekt nach IDKeineErlaubtErlaubt
mindwtr_list_sectionsAbschnittszeilenKeineErlaubtErlaubt
mindwtr_get_sectionEinzelner Abschnitt nach IDKeineErlaubtErlaubt
mindwtr_list_areasBereichszeilenKeineErlaubtErlaubt
mindwtr_list_peoplePersonenzeilenKeineErlaubtErlaubt
mindwtr_get_personEinzelne Person nach IDKeineErlaubtErlaubt
mindwtr_get_taskEinzelne Aufgabe nach IDKeineErlaubtErlaubt
mindwtr_add_taskAufgabentabelleEinfügenVerweigertErlaubt
mindwtr_update_taskAufgabentabelleAktualisierenVerweigertErlaubt
mindwtr_complete_taskAufgabentabelleStatus aktualisierenVerweigertErlaubt
mindwtr_delete_taskAufgabentabelleVorläufig löschenVerweigertErlaubt
mindwtr_restore_taskAufgabentabelleVorläufige Löschung aufhebenVerweigertErlaubt
mindwtr_add_projectProjekttabelleEinfügenVerweigertErlaubt
mindwtr_update_projectProjekttabelleAktualisierenVerweigertErlaubt
mindwtr_delete_projectProjekttabelleVorläufig löschenVerweigertErlaubt
mindwtr_add_sectionAbschnittstabelleEinfügenVerweigertErlaubt
mindwtr_update_sectionAbschnittstabelleAktualisierenVerweigertErlaubt
mindwtr_delete_sectionAbschnittstabelleVorläufig löschenVerweigertErlaubt
mindwtr_add_areaBereichstabelleEinfügenVerweigertErlaubt
mindwtr_update_areaBereichstabelleAktualisierenVerweigertErlaubt
mindwtr_delete_areaBereichstabelleVorläufig löschenVerweigertErlaubt
mindwtr_add_personPersonentabelleEinfügenVerweigertErlaubt
mindwtr_update_personPersonentabelleAktualisierenVerweigertErlaubt
mindwtr_rename_personPersonentabelle/AufgabenUmbenennen/Verweise aktualisierenVerweigertErlaubt
mindwtr_delete_personPersonentabelleVorläufig löschenVerweigertErlaubt

Praktische Hinweise:

  • Verwenden Sie für Erkundung und Berichte standardmäßig den schreibgeschützten Modus.
  • Aktivieren Sie --write nur für Backends, bei denen Sie dem KI-Client Bearbeitungen anvertrauen: eine lokale Datenbank oder Ihren eigenen Cloud-Server.
  • Bevorzugen Sie bei Agentenabläufen eine ausdrückliche Bestätigung vor Lösch-/Erledigungsvorgängen.

Beispiele für fortgeschrittene Nutzung ​

1) Geführte wöchentliche Durchsicht ​

  1. mindwtr_list_tasks mit status: "waiting" und status: "someday".
  2. Festgefahrene Einträge nach Projekt zusammenfassen.
  3. Für ausgewählte Einträge mindwtr_update_task aufrufen, um reviewAt zu setzen.

2) Eingangssichtung ​

  1. mindwtr_list_tasks mit status: "inbox" und sortBy: "createdAt".
  2. Jede Aufgabe mit mindwtr_update_task klassifizieren (next, waiting, reference usw.).
  3. Fehlende Metadaten (Projekt, Kontexte, Tags) in einem zweiten Durchlauf hinzufügen.

3) Sicheres Muster für massenhaftes Abschließen ​

Für potenziell destruktive Automatisierungen:

  1. Lesephase ausführen: nur IDs der Kandidaten auflisten.
  2. Bestätigungszusammenfassung anzeigen (Anzahl und Titel).
  3. Schreibvorgänge (complete_task/delete_task) erst nach ausdrücklicher Zustimmung des Benutzers ausführen.
  4. IDs für ein Zurücksetzen über restore_task aufbewahren.

4) Schnellerfassung mit natürlicher Sprache ​

Verwenden Sie mindwtr_add_task und quickAdd:

json
{
  "quickAdd": "Follow up with Alex +Hiring @work #ops /due:tomorrow 10am"
}

Verwenden Sie dies für schnelle Erfassungsabläufe, bei denen Parserbefehle effizienter sind, als jedes Feld einzeln zu setzen.


Werkzeugreferenz ​

Alle Werkzeuge geben JSON im Feld content.text zurück. Parsen Sie das JSON, um die eigentlichen Nutzdaten abzurufen.

Betriebsgrenzen ​

Diese Grenzen sind hilfreich, wenn Sie Mindwtr in Agentenabläufe einbinden:

  • mindwtr_list_tasks verwendet standardmäßig limit: 200 und begrenzt limit auf 500.
  • Aufgabentitel sind bei der MCP-Validierung zum Erstellen/Aktualisieren von Aufgaben auf 500 Zeichen begrenzt.
  • Schnelleingaben sind beim Erstellen von MCP-Aufgaben auf 2000 Zeichen begrenzt, entsprechend der Schnelleingabegrenze der Cloud-Aufgaben-API.
  • Die SQLite-Schicht verwendet ein busy_timeout von 5 Sekunden, sodass eine gesperrte Datenbank fehlschlagen sollte, statt unbegrenzt zu warten.

Wenn Sie mehr als 500 Aufgaben benötigen, blättern Sie mit limit und offset, statt eine einzige unbegrenzte Antwort zu erwarten.

mindwtr_list_tasks ​

Eingabefelder

  • status: inbox | next | waiting | someday | reference | done | archived | all
  • projectId: string
  • includeDeleted: boolean
  • limit: number
  • offset: number
  • search: string
  • dueDateFrom: ISO date or datetime string (compared by calendar date)
  • dueDateTo: ISO date or datetime string (compared by calendar date)
  • isFocusedToday: boolean
  • view: available | deferred | blocked — GTD-Verfügbarkeit. available = jetzt machbar (eine nächste Aktion oder eine Aufgabe, deren Überprüfungsdatum fällig ist, in einem aktiven Projekt, nach einem etwaigen Startdatum und nicht hinter einem früheren Schritt eines sequenziellen Projekts wartend). deferred = das Startdatum liegt noch in der Zukunft. blocked = ein früherer Schritt eines sequenziellen Projekts belegt den Platz.
  • sortBy: updatedAt | createdAt | dueDate | title | priority
  • sortOrder: asc | desc

Beispiel

json
{
  "status": "next",
  "limit": 20,
  "offset": 0,
  "sortBy": "updatedAt",
  "sortOrder": "desc"
}

Antwort

json
{
  "tasks": [
    {
      "id": "task-uuid",
      "title": "Follow up with design",
      "status": "next",
      "updatedAt": "2026-01-25T03:45:57.246Z"
    }
  ]
}

mindwtr_list_projects ​

Eingabefelder

  • none

Antwort

json
{
  "projects": [
    {
      "id": "project-uuid",
      "title": "Mindwtr",
      "status": "active"
    }
  ]
}

mindwtr_get_project ​

Eingabefelder

  • id: string (project UUID)
  • includeDeleted: boolean (optional)

Beispiel

json
{ "id": "project-uuid" }

mindwtr_list_sections ​

Eingabefelder

  • projectId: string (optional)
  • includeDeleted: boolean (optional)

Antwort

json
{
  "sections": [
    {
      "id": "section-uuid",
      "projectId": "project-uuid",
      "title": "Planning"
    }
  ]
}

mindwtr_get_section ​

Eingabefelder

  • id: string (section UUID)
  • includeDeleted: boolean (optional)

Beispiel

json
{ "id": "section-uuid" }

mindwtr_list_areas ​

Eingabefelder

  • none

Antwort

json
{
  "areas": [
    {
      "id": "area-uuid",
      "name": "Work"
    }
  ]
}

mindwtr_list_people ​

Eingabefelder

  • includeDeleted: boolean (optional)

Antwort

json
{
  "people": [
    {
      "id": "person-uuid",
      "name": "Alex"
    }
  ]
}

mindwtr_get_person ​

Eingabefelder

  • id: string (person UUID)
  • includeDeleted: boolean (optional)

Beispiel

json
{ "id": "person-uuid" }

mindwtr_get_task ​

Eingabefelder

  • id: string (task UUID)
  • includeDeleted: boolean (optional)

Beispiel

json
{ "id": "task-uuid" }

mindwtr_add_task (write) ​

Eingabefelder

  • title: string (required if quickAdd omitted)
  • quickAdd: string (required if title omitted)
  • status: inbox | next | waiting | someday | reference | done | archived
  • projectId: string
  • sectionId: string
  • dueDate: ISO string
  • startTime: ISO string
  • recurrence: Wiederholungsobjekt oder RFC-5545-RRULE-Zeichenfolge
  • contexts: string[]
  • tags: string[]
  • description: string
  • priority: low | medium | high | urgent
  • energyLevel: low | medium | high
  • assignedTo: string
  • timeEstimate: 5min | 10min | 15min | 30min | 1hr | 2hr | 3hr | 4hr | 4hr+
  • Weitere beschreibbare Felder: areaId, reviewAt, taskMode, relativeStartOffset, showFutureRecurrence, pushCount, checklist, textDirection, location, isFocusedToday, timeSpentMinutes, suppressMindwtrReminders, repeatReminderMinutes, attachments

Beispiel

json
{
  "quickAdd": "Send invoice +Acme /due:tomorrow 9am #finance"
}

mindwtr_update_task (write) ​

Eingabefelder

  • id: string (task UUID)
  • title, status, projectId, sectionId, areaId, dueDate, startTime, contexts, tags, description, priority, energyLevel, assignedTo, timeEstimate, reviewAt, taskMode, relativeStartOffset, showFutureRecurrence, pushCount, checklist, textDirection, location, isFocusedToday, timeSpentMinutes, suppressMindwtrReminders, repeatReminderMinutes, order, boardOrder, focusOrder, attachments
  • recurrence: Wiederholungsobjekt, RFC-5545-RRULE-Zeichenfolge oder null zum Leeren

Hinweise

  • Verwenden Sie null, um nullable Felder zu leeren. Dies gilt für Aufgabenfelder wie projectId, dueDate, startTime, contexts und tags; Projektfelder wie areaId, startDate, dueDate, reviewAt und supportNotes; description von Abschnitten; color und icon von Bereichen sowie note und referenceLink von Personen.

Beispiel

json
{
  "id": "task-uuid",
  "status": "waiting",
  "reviewAt": "2026-01-27T09:00:00.000Z"
}

mindwtr_complete_task (write) ​

Eingabefelder

  • id: string (task UUID)

mindwtr_delete_task (write) ​

Eingabefelder

  • id: string (task UUID)

mindwtr_restore_task (write) ​

Eingabefelder

  • id: string (task UUID)

mindwtr_add_project (write) ​

Eingabefelder

  • title: string
  • color: string (optional)
  • status: active | someday | waiting | archived (optional)
  • areaId: string or null
  • isSequential: boolean (optional)
  • isFocused: boolean (optional)
  • startDate: ISO string or null
  • dueDate: ISO string or null
  • reviewAt: ISO string or null
  • supportNotes: string or null

mindwtr_update_project (write) ​

Eingabefelder

  • id: string (project UUID)
  • title, color, status, areaId, isSequential, isFocused, startDate, dueDate, reviewAt, supportNotes, attachments

mindwtr_delete_project (write) ​

Eingabefelder

  • id: string (project UUID)

mindwtr_add_section (write) ​

Eingabefelder

  • projectId: string
  • title: string
  • description: string or null (optional)
  • order: number (optional)
  • isCollapsed: boolean (optional)

mindwtr_update_section (write) ​

Eingabefelder

  • id: string (section UUID)
  • title, description, order, isCollapsed

mindwtr_delete_section (write) ​

Eingabefelder

  • id: string (section UUID)

mindwtr_add_area (write) ​

Eingabefelder

  • name: string
  • color: string (optional)
  • icon: string (optional)

mindwtr_update_area (write) ​

Eingabefelder

  • id: string (area UUID)
  • name, color, icon

mindwtr_delete_area (write) ​

Eingabefelder

  • id: string (area UUID)

mindwtr_add_person (write) ​

Eingabefelder

  • name: string
  • note: string or null (optional)
  • referenceLink: string or null (optional)

mindwtr_update_person (write) ​

Eingabefelder

  • id: string (person UUID)
  • name, note, referenceLink

mindwtr_rename_person (write) ​

Eingabefelder

  • id: string (person UUID)
  • name: string
  • updateTasks: boolean (optional)

mindwtr_delete_person (write) ​

Eingabefelder

  • id: string (person UUID)

Hinweise zum Ausgabeformat ​

  • Werkzeugausgaben sind JSON-Strings und keine strukturierten MCP-Werte. Ihr Client sollte content[0].text parsen.
  • Aufgaben-/Projekt-IDs sind UUIDs aus der lokalen SQLite-Datenbank.
  • Daten sind ISO-8601-Strings (UTC).

Sicherheit und Hinweise ​

  • Parallelität (lokaler SQLite-Modus): Der Server verwendet den SQLite-WAL-Modus und wiederholt vorübergehende Sperrkonflikte, indem er den Schreibvorgang mit aktuellen Daten erneut ausführt. Der Client muss nur erneut versuchen, wenn diese Versuche ausgeschöpft sind.
  • Gemeinsame Logik: Schreibvorgänge verwenden die gemeinsame Bibliothek @mindwtr/core, damit Geschäftsregeln durchgesetzt werden.
  • Keep-Alive: Im stdio-Modus bleibt der Server aktiv, solange stdin geöffnet ist. Im HTTP-Modus bleibt er aktiv, solange der Listener läuft.

cancelledAt ​

Task und Project unterstützen cancelledAt, einen optionalen ISO-Zeitstempel mit Zeitzone. Er archiviert die Verpflichtung als abgebrochen. Die Aufgabe erhält kein completedAt und erzeugt keine weitere Wiederholung. Beim Projekt bleiben erledigte Schritte erhalten; die übrigen Aktionen werden abgebrochen. Aktualisieren Sie vor der Synchronisierung alle schreibenden Clients. Siehe GTD-Workflow.

cancelledAt: null allein entfernt nur die Abbruchkennzeichnung. Zum Reaktivieren setzen Sie ausdrücklich einen nicht archivierten status.

Fehlerbehebung ​

  • „Command not found“: Verwenden Sie npx -y mindwtr-mcp in MCP-Clientkonfigurationen oder installieren Sie das Paket global mit npm install -g mindwtr-mcp.
  • Client-Verbindungsprobleme: Stellen Sie sicher, dass Sie in Ihrer MCP-Clientkonfiguration NICHT bun run als Befehl verwenden, da dadurch zusätzlicher Text ausgegeben werden kann. Bevorzugen Sie npx -y mindwtr-mcp; führen Sie bei ausgechecktem Quellcode bun direkt mit der Quelldatei oder node mit der gebauten Datei aus.

Mindwtr ist kostenlos, quelloffen und lokal orientiert.
Getting Things Done und GTD sind eingetragene Marken der David Allen Company. Mindwtr ist weder mit der David Allen Company verbunden noch wird es von ihr unterstützt oder gesponsert.