# com.kenxcomp/kenotex-mcp (npm · kenotex-mcp)

Let your coding agent manage real todos, events, and check-in habits in Kenotex on your Mac.

- Trust score: 70/100 (medium)
- Change this week: +6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-17

## Components

- npm · `kenotex-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/com-kenxcomp-kenotex-mcp/kenotex-mcp.md), [page](https://verifymcp.io/servers/com-kenxcomp-kenotex-mcp/kenotex-mcp)

## Channel facts

- Registry: `npm`
- Package: `kenotex-mcp`
- Version: `1.2.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-17.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 95 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 7 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 74/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1804 tokens (~82/item across 22 items; 22 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 79/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 36% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add com-kenxcomp-kenotex-mcp -- npx -y kenotex-mcp
```

### Codex

```bash
codex mcp add com-kenxcomp-kenotex-mcp -- npx -y kenotex-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-kenxcomp-kenotex-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "kenotex-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-kenxcomp-kenotex-mcp --command npx --arg -y --arg kenotex-mcp
```

### Hermes

```yaml
mcp_servers:
  com-kenxcomp-kenotex-mcp:
    command: "npx"
    args: ["-y", "kenotex-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "com-kenxcomp-kenotex-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "kenotex-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-17 (score 70, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-11 (score 66, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-09 (score 64)

First indexed and scored.

## MCP tools (22)

### `create_todo` (~212 tokens)

Create a todo in Kenotex. Use when the user wants to add, remember, or track a task. A categoryId is REQUIRED — fetch one via list_categories (or create_category) first.

Input parameters:

- `categoryId` (string, required): Required. Call list_categories first and reuse a matching category's id; if none fits, call create_category then use the returned id. Todos cannot be created without a category.
- `deadline` (string): yyyy-MM-dd or yyyy-MM-dd HH:mm (24-hour)
- `description` (string): Details / markdown
- `priority`
- `recurrence` (string): Recurrence DSL: 'daily' | 'weekly:mon,wed' | 'monthly:15' | 'yearly' | 'after:daily' | 'none'
- `reminderMinutes` (array): Minutes before deadline to fire OS notifications
- `startDate` (string): Earliest date the task can start, yyyy-MM-dd
- `title` (string, required): Short task name

### `list_todos` (~34 tokens)

List todos with optional filter and limit.

Input parameters:

- `filter`
- `limit` (integer)
- `sort`

### `get_todo` (~23 tokens)

Fetch a specific todo by id.

Input parameters:

- `id` (string, required)

### `update_todo` (~96 tokens)

Partially update a todo. Null values explicitly clear fields; omit fields to keep existing values.

Input parameters:

- `categoryId` (string|null)
- `completed` (boolean)
- `deadline` (string|null)
- `description` (string|null)
- `id` (string, required)
- `priority`
- `recurrence` (string|null)
- `startDate` (string|null)
- `title` (string)

### `complete_todo` (~32 tokens)

Mark a todo complete. For recurring parents, completes the next uncompleted instance.

Input parameters:

- `id` (string, required)

### `delete_todo` (~29 tokens)

Delete a todo. Recurring parents also remove all child instances.

Input parameters:

- `id` (string, required)

### `create_event` (~125 tokens)

Create a calendar event in Kenotex. `recurrence` supports 'daily' | 'weekly:mon,wed' | 'monthly:15' | 'yearly' | 'none'. 'after:*' is NOT supported for events.

Input parameters:

- `allDay` (boolean)
- `description` (string)
- `endDate` (string, required): Must be >= startDate
- `recurrence` (string)
- `reminderMinutes` (array)
- `startDate` (string, required): yyyy-MM-dd or yyyy-MM-dd HH:mm
- `title` (string, required)

### `list_events` (~65 tokens)

List calendar events in a date range. Virtual recurring occurrences are expanded.

Input parameters:

- `from` (string, required): yyyy-MM-dd (inclusive)
- `preview` (boolean): If true, expand all future occurrences within 6-month window
- `to` (string, required): yyyy-MM-dd (inclusive)

### `get_event` (~44 tokens)

Fetch a specific event by id. Accepts real event ids or virtual occurrence ids (`{parent}__occ__{yyyy-MM-dd}`).

Input parameters:

- `id` (string, required)

### `update_event` (~79 tokens)

Partially update an event. Cannot update virtual occurrences — modify parent or create exception.

Input parameters:

- `allDay` (boolean)
- `description` (string|null)
- `endDate` (string)
- `id` (string, required)
- `recurrence` (string|null)
- `startDate` (string)
- `title` (string)

### `delete_event` (~29 tokens)

Delete an event. Recurring parents materialize past occurrences then delete.

Input parameters:

- `id` (string, required)

### `create_habit` (~228 tokens)

Create a DAILY check-in habit in Kenotex. Use for routines the user ticks off, possibly several times a day (medication doses, drinking water, stretching). For one-off tasks or NON-daily schedules (weekly/monthly/after-completion) use create_todo with a recurrence instead — habits are daily-only and take no category.

Input parameters:

- `endDate` (string): Optional last day, "yyyy-MM-dd" (inclusive) — e.g. a one-month course. Omit for open-ended.
- `remindersEnabled` (boolean): Schedule OS notifications at each dose time. Pass true when the user asks to be reminded.
- `times` (array): Dose times as 24-hour "HH:mm" strings, up to 6 (e.g. ["09:00","21:00"] = twice a day). Omit or one entry = once a day; two or more = multi-dose. The server assigns each time a stable slot id — read t…
- `title` (string, required): Short habit name

### `list_habits` (~89 tokens)

List all check-in habits with computed fields (doseCount, isMultiDose, times incl. stable slot ids, endDate, remindersEnabled, currentStreak, checkedToday, todayDoneCount). Answers 'did I check in today?' / 'what's my streak?'. Call this (or get_habit) to discover slot ids before set_habit_check on a multi-dose habit.

### `get_habit` (~57 tokens)

Fetch a specific habit by id. `times` returns as [{id, time}] objects — pass a slot's `id` as `slotId` when checking a dose of a multi-dose habit.

Input parameters:

- `id` (string, required)

### `update_habit` (~132 tokens)

Partially update a habit. `times` FULLY REPLACES the dose schedule (array of "HH:mm", up to 6; existing slots keep their ids by position). `times: null` or `[]` resets to a single daily dose. `endDate: null` explicitly clears the end date. Omitted fields keep existing values.

Input parameters:

- `endDate` (string|null): "yyyy-MM-dd" (inclusive), or null to clear
- `id` (string, required)
- `remindersEnabled` (boolean)
- `times` (array|null)
- `title` (string)

### `set_habit_check` (~186 tokens)

Set a habit's check state for a date: checked=true marks it done, checked=false removes the check. Idempotent — safe to repeat. `date` defaults to today when omitted (only pass a date to back-fill a past day). Single-dose habits take NO slotId. Multi-dose habits: pass a `slotId` (a times[].id from get_habit / list_habits) to check one dose, or omit it to check ALL of today's doses at once.

Input parameters:

- `checked` (boolean, required): true = mark checked, false = un-check
- `date` (string): "yyyy-MM-dd"; omit for today
- `id` (string, required)
- `slotId` (string): Dose slot id for a multi-dose habit (from the habit's times[].id). Omit for single-dose habits or to check all of today's doses.

### `list_habit_checks` (~98 tokens)

List a habit's raw check records, optionally within an inclusive date range. Each record carries checkDate 'yyyy-MM-dd' and slotId (null for single-dose). Use to answer history questions or compute streaks — a day counts toward a streak only when EVERY dose is checked.

Input parameters:

- `from` (string): yyyy-MM-dd (inclusive)
- `id` (string, required)
- `to` (string): yyyy-MM-dd (inclusive)

### `delete_habit` (~67 tokens)

PERMANENTLY delete a habit AND its ENTIRE check-in history — every past check is destroyed and cannot be recovered. Confirm with the user before calling. To stop a habit while keeping its records, set an endDate via update_habit instead.

Input parameters:

- `id` (string, required)

### `list_categories` (~35 tokens)

List all todo categories in Kenotex. Useful before `create_todo` so the LLM can pick a valid categoryId.

### `create_category` (~46 tokens)

Create a new todo category.

Input parameters:

- `color` (string): Hex color, e.g. '#FF0000'. Defaults to #6B7280.
- `name` (string, required)

### `add_reminder` (~71 tokens)

Attach a reminder N minutes before a todo's deadline or an event's start. Creates the DB row and schedules an OS notification.

Input parameters:

- `entityId` (string, required)
- `entityType` (required)
- `minutesBefore` (integer, required): 0 = fire at deadline, 1440 = one day before

### `remove_reminder` (~27 tokens)

Remove a reminder by id and cancel its OS notification.

Input parameters:

- `id` (string, required)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-kenxcomp-kenotex-mcp/kenotex-mcp#diagnostics

## Score history

- 2026-08-17: 70
- 2026-08-16: 66
- 2026-08-15: 66
- 2026-08-14: 66
- 2026-08-13: 66
- 2026-08-12: 66
- 2026-08-11: 66
- 2026-08-10: 64
- 2026-08-09: 64

## Links

- npm package: https://www.npmjs.com/package/kenotex-mcp
- Socket report: https://socket.dev/npm/package/kenotex-mcp
- Repository: https://github.com/kenxcomp/kenotex-mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-kenxcomp-kenotex-mcp/kenotex-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-kenxcomp-kenotex-mcp/kenotex-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-kenxcomp-kenotex-mcp/kenotex-mcp
