# Changelog

What changed on the Koma MCP server, newest first. A client that connected before a change keeps the tool list it fetched; refresh the connector and start a new conversation to see new tools.

## 2026-10-13

- **Lists and items** replace tasks, notes, projects and collections as separate shapes. A list is the one container: the Tasks list and the Notes list every account has, and any list the person keeps; a former project and a former collection are lists under their old ids. An item is the one thing on a list, a former task, note or row under its old id, with a title, a body as Markdown and a value per property of its list; a list made for tasks keeps a status and a due date on its items. [Concepts](/developers/concepts).
- One tool family replaces the four: `list_lists`, `create_list`, `update_list` and `delete_list` over lists; `list_items`, `get_item`, `query_items`, `create_items`, `update_items`, `move_items` and `delete_items` over items. Retired, with no alias: `list_tasks`, `get_task`, `get_task_context`, `create_task`, `create_tasks`, `update_task`, `delete_task`, `list_notes`, `get_note`, `create_note`, `update_note`, `delete_note`, `list_projects`, `create_project`, `update_project`, `list_collections`, `create_collection`, `update_collection`, `delete_collection`, `get_collection_items`, `get_collection_item`, `add_collection_items`, `update_collection_items` and `delete_collection_items`. `get_context`, `search`, `create_image_upload`, the chat tools, the trash tools and the automation tools keep their names; `get_context` names lists and takes `focusListId`, `search` answers items and lists, and `list_deleted` and `restore_deleted` take the types `item` and `list`. [Tools](/developers/tools).
- A `listId` is a list's id, or the word `tasks` for the Tasks list and `notes` for the Notes list. `projectId` is gone: an item's list is its `listId`, and moving one is `move_items`, which answers a preview of what a lossy move would drop before it moves anything. `priority` is gone from every shape.
- Bodies are edited by block handle on every item, whatever its list: `get_item` returns the body with a handle in front of every block and `update_items` takes `edits` per item. The older `body` plus `mode` still works.
- On the REST API the routes follow: `/lists`, `/items`, `POST /items/query`, `POST /items/move`, `/items/{id}` and `/items/{id}/messages` replace `/tasks`, `/tasks/batch`, `/notes`, `/projects`, `/collections` and their rows, with no redirects. `POST /quick-add` is gone: `POST /items` with `listId: "tasks"` and `enrich: true` does what it did. [REST API](/developers/api).
- A standing order or paste-in prompt that names a retired tool needs the new name; a client that connected before this change keeps the tool list it fetched until the connector is refreshed.
- **A changes feed for workers.** `list_items` takes `changedSince`: every item of a list, or of the Tasks set, whose record moved after that instant, oldest change first, with the deleted ones as `deleted` tombstones, `hasMore`, and `nextChangedSince` to pass next time. A worker that polls makes one call per cycle instead of re-reading the list. On the REST API: `GET /items?changedSince=…`. [Run a worker loop](/developers/guides#run-a-worker-loop).
- The tool descriptions, the server instructions and the skill say when to pass a cursor: `changedSince` on `list_items`, `updatedAfter` on `query_items`, `since` on `read_chat_messages`.

## 2026-10-02

- `create_tasks` is new: up to 100 tasks in one call, the way to hand Koma a list of outstanding work. The tasks are stored as written and indexed for search; no AI pass runs unless `enrich` is true. A row's `externalId` makes re-sending safe: the same id returns the task already made under `existing` instead of a duplicate, and one bad row never fails the batch. On the REST API it was `POST /tasks/batch`; its successor is `create_items`. [Tools](/developers/tools#create_items).
- The overview and [llms-full.txt](/llms-full.txt) open with one paragraph to paste into any agent: the address, the sign-in, the docs and the first call.
- After you approve an app whose callback is on your own computer, a Koma page confirms the connection before taking you back, with the link to copy if your agent runs in the cloud and the callback page does not load.

## 2026-09-30

- **A REST API** at `/api/v1`: the MCP server's operations over plain HTTP for Zapier, Make, n8n and scripts, with `POST /quick-add` and an OpenAPI document at `/api/v1/openapi.json`. [REST API](/developers/api).
- **API keys** beside OAuth: a person creates a `koma_` key under Settings, then Connections, and an agent without a browser sends it as a bearer token. Creating a new key replaces the old one; revocable at any time. [Authentication](/developers/authentication#api-keys).
- These developer docs. Every page is also Markdown (add `.md` to its address) and listed in [llms.txt](/llms.txt).
- The tool reference is generated from the server's live registration.

## 2026-09-23

- Writes made through MCP are recorded in the person's event log as their own actions, marked as coming through the connection. Before this they read as system activity.

## 2026-09-18

- `get_context` replaces `get_hub`. One call returns the person, today in their timezone, memory (read-only), projects, what is due, unsorted tasks, recent notes, collections with columns, automations with their last run and three days of activity.
- `create_project` and `update_project` are new.
- `update_task` accepts `projectId` to move a task; `null` moves it to unsorted.
- `list_automations`, `get_automation_runs` and `run_automation` are new.
- Every tool states all three of `readOnlyHint`, `destructiveHint` and `openWorldHint` explicitly, and carries a title.
- `update_task` retries once on a write conflict with a background pass, so an edit right after a create lands.

## 2026-09-04

- `list_tasks` and `list_notes` gain time windows (`createdAfter`, `updatedAfter`, `completedAfter` and their upper bounds) and a `sort` parameter.

## 2026-08-14

- `create_image_upload` is new: pre-signed slots for raw image bytes, for rows whose images come from a source without a stable URL.
- Row tools report every image that could not be ingested, per URL and with a reason.

## 2026-08-13

- Collections have full create, update and delete. The trash covers collections and rows.
- `list_deleted` and `restore_deleted` are new: every soft delete is now recoverable from a client.

## 2026-08-05

- Collections are on the server: `list_collections`, `get_collection_items`, `add_collection_items`, `update_collection_items`.

## 2026-06-29

- Notes and search: `search`, `get_note`, `list_notes`, `create_note`, `update_note`.
- Soft deletes: `delete_task`, `delete_note`.
- Every tool carries annotations and an output schema; results return both text and structured content.
- Tokens are verified locally; a rate limit of 60 requests a minute per token.

## 2026-06

- First release: tasks and projects over OAuth 2.1 at `https://koma.ac/api-preview/mcp`.
