{
  "markdown": "# kenotex-mcp\n\n**Let your coding agent manage your real todos, calendar, and habits.**\n\n[Kenotex](https://kenxcomp.com/kenotex/?ct=npm-mcp) is a native planner for Mac and iPhone.\nThis package is its MCP server: point Claude Code, Claude Desktop, Cursor, Zed, or any MCP\nclient at it, and the agent works on the actual items in the app — creating todos with\ncategories and recurrence, scheduling calendar events, ticking off daily check-in habits.\nNot a scratchpad, not a markdown file. Everything lives in a local SQLite database on your\nown machine.\n\n> **Your agent writes on your Mac. It's on your iPhone via iCloud.**\n\nWorks with **Claude Code**, **Claude Desktop**, **Cursor**, **Zed**, **OpenClaw**, and\nanything else that speaks MCP over stdio.\n\n## Get the app\n\nThese tools drive the Kenotex **macOS** app — it hosts the local server this package talks\nto, so you need it installed and running. Free to download, with in-app purchases.\n\n**The MCP integration is not one of those purchases.** Every tool in this package talks to\nthe app's local HTTP server, which has no subscription gate — the whole integration works\non the free tier.\n\n**→ [kenxcomp.com/kenotex](https://kenxcomp.com/kenotex/?ct=npm-mcp)**\n\n## Prerequisites\n\n- **macOS 26 or later** — the app's minimum. The iPhone app syncs over iCloud, but the MCP\n  server talks to the Mac.\n- The Kenotex macOS app must be **running** (it hosts the local HTTP server on port 21519).\n- Node.js 20+ or Bun.\n\n## Install\n\nGlobally:\n\n```bash\nnpm install -g kenotex-mcp\n# or\nbun add -g kenotex-mcp\n```\n\nOr use it directly via npx / bunx (no install):\n\n```bash\nnpx kenotex-mcp\n```\n\n## Configure in an MCP client\n\n### Claude Desktop\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"kenotex\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"kenotex-mcp\"]\n    }\n  }\n}\n```\n\nRestart Claude Desktop. You'll see the Kenotex tools appear in the 🛠️ menu.\n\n### Cursor / Zed / OpenClaw\n\nSame pattern: point the MCP config at `kenotex-mcp` as the `command`.\n\n### Environment overrides\n\n- `KENOTEX_HOST` — override base URL (default `http://127.0.0.1:21519`).\n- `KENOTEX_TOKEN` — skip filesystem token discovery and use this token.\n\n## Tools exposed\n\n| Category   | Tool                                                |\n| ---------- | --------------------------------------------------- |\n| Todo       | `create_todo` `list_todos` `get_todo` `update_todo` `complete_todo` `delete_todo` |\n| Event      | `create_event` `list_events` `get_event` `update_event` `delete_event` |\n| Habit      | `create_habit` `list_habits` `get_habit` `update_habit` `set_habit_check` `list_habit_checks` `delete_habit` |\n| Category   | `list_categories` `create_category`                 |\n| Reminder   | `add_reminder` `remove_reminder`                    |\n\n**`create_todo` requires a `categoryId`** — todos can no longer be created uncategorized. The flow is: call `list_categories` and reuse a matching category's id; if none fits, call `create_category` and use the returned id, then `create_todo`.\n\n**Habits are daily check-in trackers** (medication, water, stretching), up to 6 dose times/day. Use `create_habit` for daily routines the user ticks off; use `create_todo` + recurrence for one-off or non-daily schedules. Writes take `times: [\"HH:mm\", …]`; reads return `times: [{id, time}]` — pass a slot's `id` as `slotId` to `set_habit_check` for a multi-dose habit (omit it to check all of today's doses). Checking is explicit **set-state** (`checked: true|false`, `date` defaults to today, idempotent, `false` un-checks). **`delete_habit` permanently deletes the habit and its entire check-in history** — set an `endDate` via `update_habit` to stop-but-keep-records instead. Habit tools require the Kenotex app release that ships `/v1/habits` (1.2.9+); against an older app they return an \"update the Kenotex app\" hint.\n\n**Recurrence DSL**: `'daily'` / `'weekly:mon,wed,fri'` / `'monthly:15'` / `'yearly'` / `'after:daily'` (todos only) / `'none'`.\n\n**Virtual event occurrences**: `get_event` accepts ids like `{parentId}__occ__{yyyy-MM-dd}`. Recurring parents materialize past occurrences on delete.\n\n## How auth works\n\nOn each HTTP request the server reads the Kenotex bearer token from (in order):\n\n1. `~/Library/Containers/com.kenxcomp.kenotex/Data/Library/Application Support/Kenotex/local-http-token`\n2. `~/Library/Application Support/Kenotex/local-http-token`\n3. `~/.kenotex-local-token`\n\nThe token is rotated each time the Kenotex app starts, so a stale MCP session just re-reads the file on its next tool call.\n\n## Troubleshooting\n\n**\"Kenotex app not running or token not accessible\"** — launch Kenotex.app. If running, the token file should exist at one of the three paths above.\n\n**Requests time out** — check that no firewall is blocking localhost:21519; tools are hardcoded to 10-second timeout.\n\n## License\n\nMIT © kenxcomp\n",
  "bytes": 4928,
  "sha": "7adb870a0911f52f5156c4def2373da7bb2d12f40b1f63fdfd588be714530349",
  "repo_slug": "kenxcomp/kenotex-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_kenxcomp_kenotex_mcp_ceec3069/readme"
}