Anneal

Zero-friction personal operating system: habits, tasks, and FSRS-5 study retention via remote MCP.

От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноТолько чтение

Что умеет

  • Meta.Discover Tools: Lists EVERY tool this server offers with its name and description. Use this to discover tools that may not be visible in your initial tool list. You can call any tool by name even
  • Meta.Whoami: Identity, handle, the RESOLVED TIMEZONE, the scopes this key holds and what it therefore may do. Call this once at the start of a session: the zone it reports is what every logging tool w
  • Meta.Vocabulary: Every icon slug (451, across 15 categories), all 18 colour swatches with their human names and hex values, and the 9 textures with how each one reads. Use this when you need the full

Какие данные видит

Нужен ли аккаунт

Не нужен: сервер работает без входа

Zero-friction personal operating system: habits, tasks, and FSRS-5 study retention via remote MCP.

Список инструментов сервера (60)

Технические названия из tools/list. Нужны только разработчикам.

meta.discover_toolsLists EVERY tool this server offers with its name and description. Use this to discover tools that may not be visible in your initial tool list. You can call any tool by name even if it was not listed ΓÇö just call anneal_discover_tools first to find the right name, then use tools/call with that name. Optionally filter by a search term.
meta.whoamiIdentity, handle, the RESOLVED TIMEZONE, the scopes this key holds and what it therefore may do. Call this once at the start of a session: the zone it reports is what every logging tool will attribute entries to.
meta.vocabularyEvery icon slug (451, across 15 categories), all 18 colour swatches with their human names and hex values, and the 9 textures with how each one reads. Use this when you need the full set; use anneal_design_suggest when you are naming one specific thing.
meta.design_suggestCall this BEFORE creating a habit, subject, folder or deck when the user has not said how it should look. Returns name-matched icon candidates, all 18 colours with their human names, the 9 textures, WHAT THE SIBLINGS ALREADY USE, and a deterministic default. Then choose: pick the icon for what the thing IS, not what it is called; pick a colour not in takenBySiblings so the list stays scannable, letting the human name carry the mood (mint and sage for calm, signal red and tangerine for urgency, indigo and storm for focused work); pick a texture no sibling is using. If nothing fits, pass null for colour and texture ΓÇö the derived default is good and a forced choice is worse than a derived one.
meta.todaySTART HERE. One call gives the date in the user's own zone, which habits are still due, how many cards are due for review, and what the study plan wants. Most follow-up questions are answerable from this without another round trip.
meta.searchOne search across habits, subjects, chapters, folders, decks and cards. Use it when the user names something and you need its id.
meta.dayEverything that happened on one date: habit entries, day notes, study sessions, tests, mistakes and cards reviewed. Superseded and withdrawn entries are already resolved, so this matches exactly what the app shows for that day.
meta.rangeEverything that stands between two dates, paginated. Use for weekly reviews.
meta.lifetimeThe full standing event log with summary statistics ΓÇö 'show me everything I've ever logged'. Superseded versions and tombstoned entries are resolved out, so this is what still stands rather than every row ever written.
habits.listEvery active habit, in the user's own order, with its current streak and adherence. Archived and deleted habits are NOT included ΓÇö use the dedicated tools for those.
habits.list.archivedHabits the user archived. They keep their history and stay chartable.
habits.list.deletedHabits in Trash. Restorable until purged; nothing here is gone yet.
habits.getOne habit with its streak, adherence, recent entries and day notes. An id that is not the caller's reads as absent, never as refused.
habits.createCreate a habit. Only `name` is required. CHOOSE THE ICON FOR WHAT THE HABIT IS, not what it is called ΓÇö 'morning meditation' is a sun or lungs, not a clock. Call anneal_design_suggest first to get real candidates and to see what colours and textures the siblings already use. Passing null for colour and texture is always fine: a stable, good-looking default is derived from the id, and a forced choice is worse than a derived one. `type` decides how it is logged: BINARY (done/not), QUANTITATIVE (a number and a unit), DURATION (seconds), CHECKLIST (sub-items), AVOIDANCE (a streak of not doing it). H-ACTIVE-RANGE: `activeFrom` and `activeTo` define the date range. Omit both (or set null) for 'Every Day' mode ΓÇö the habit runs from today forever. Past dates are not accepted.
habits.updateChange a habit's name, description, icon, colour, texture or config. An omitted field is left alone ΓÇö this never clears what it was not asked to change.
habits.archiveHide a habit from the active list. Reversible, keeps all history, no confirmation.
habits.unarchiveReturn an archived habit to the active list.
habits.deleteMove a habit to Trash. Soft: the row survives, its standing log entries are tombstoned under one batch id, and anneal_habits_restore brings it back. Nothing is destroyed here.
habits.restoreBring a habit back out of Trash.
habits.reorderSet the order of the habit list. Ids not belonging to the caller are ignored rather than refused, so a partial list reorders only what it legitimately names.
habits.erase_allDESTRUCTIVE. Moves EVERY habit ΓÇö including archived ones ΓÇö to Trash as a single batch and tombstones every standing log entry. The log itself is append-only and is never deleted; withdrawal is the strongest erasure it permits. Requires confirm: true.
habits.logRecord one entry. The payload must match the habit's type: completed/skipped for BINARY, quantity for QUANTITATIVE, duration for DURATION, checklist for CHECKLIST, avoided or lapsed for AVOIDANCE. Pass supersedesId to correct an earlier entry ΓÇö corrections APPEND, they never overwrite, and the original stays auditable for ever. STRICT RULE: only TODAY can be logged. Past and future dates are both rejected. If the habit has an activeFrom/activeTo range, the day must fall within that range.
habits.edit_entryCorrect an entry at any age. This APPENDS a superseding entry rather than editing one ΓÇö the correction wins on read and statistics recalculate retroactively, while the original value remains in the log. 'Actually yesterday's run was 7 km' is this tool.
habits.delete_entryWithdraw one entry by appending a tombstone. It stops counting and stops being shown; the record that it once existed remains, because the log is append-only.
habits.historyThe entries standing for one habit, newest first, with superseded ones resolved.
habits.notes.writeWrite or rewrite the comment on one habit for today. Rewriting supersedes the standing note for that day, so exactly one note ever stands per habit per day. STRICT RULE: notes can only be written for today (no-cheat invariant). Past and future dates are both refused via MCP.
habits.notes.clearWithdraw the note on one habit for today. Appends a tombstone. STRICT RULE: note operations are limited to today (no-cheat invariant).
habits.notes.listEvery day note standing for one habit, newest day first.
habits.timerStop or read the running stopwatch on a DURATION habit. NOTE: 'start' is deprecated ΓÇö DURATION habits are binary-complete, use anneal_habits_log instead. Stopping logs the elapsed seconds. This is a separate stopwatch from the study timer.
study.subjects.listEvery study subject with its target retention and archive state.
study.subjects.createCreate a study subject ΓÇö a paper, not a topic. Pick an icon for the SUBJECT (anneal_design_suggest gives real candidates); colour may be null.
study.subjects.renameChange a subject's name.
study.subjects.archiveArchive a subject. Its history is kept and stays chartable.
study.subjects.set_target_retentionSet how well the user wants to remember this subject at exam time, 0-1 (e.g. 0.9). Per-subject on purpose: a language paper and a physics paper do not deserve the same target, and forcing one number on both is how a plan becomes impossible.
study.boards.listThe shipped board/programme presets that can seed a syllabus. Use the ids with anneal_study_board_seed ΓÇö the CONTENT of a preset can never be supplied by a caller.
study.boards.seedCreate the subjects and chapters of a published board programme. Only the two ids cross the boundary; the content comes from the shipped table, never from the caller (AZ-06).
study.treeThe whole syllabus: subjects, every node beneath them at any depth, and each planning unit's current retention. This is the one call to understand what a user is studying.
study.nodes.createAdd a node to a subject at any depth. `kind` is a LABEL only (chapter, unit, topic…) and never decides what may contain what — mirror the real book. `parentId` null puts it directly under the subject. `planningUnit` true means sessions and the planner attach here; set it on the level the user actually studies at.
study.nodes.renameChange a chapter or topic's name.
study.nodes.updateChange a node's marks, priority or whether it is a planning unit. Changing planningUnit rewrites nothing ΓÇö every statistic is derived on read, so history re-aggregates.
study.nodes.archiveArchive a chapter or topic. Its evidence is kept.
study.nodes.link_deckAttach (or detach) a card deck to a chapter, so reviews of those cards count as evidence for that part of the syllabus. Pass linked: false to detach.
study.exams.listEvery dated exam with its scope, weight and stored goal.
study.exams.createAdd a dated exam to a subject. `scope` says what it actually covers: {kind:'all'} or {kind:'nodes', nodeIds:[…]} for a pre-board over half the syllabus. Getting the scope right is what stops the planner pulling the whole syllabus forward for a partial paper.
study.exams.updateChange an exam's name, date, time, weight, scope or goal.
study.exams.deleteMove an exam to Trash. Soft; restorable.
study.logs.sessionRecord a study session. REQUIRED: the node and the arc (startMinute/endMinute, minutes since midnight ΓÇö 7:00pm to 8:30pm is 1140 to 1290). EVERYTHING ELSE IS OPTIONAL AND MUST STAY THAT WAY: do not invent a rating, a focus score or a location the user did not give you. 'I studied thermodynamics 7 to 8:30, felt good' is nodeId + 1140/1290 + rating 3. STRICT RULE: only TODAY can be logged. Past and future dates are both rejected (no-cheat invariant).
study.logs.testRecord a mock or practice paper. `lost` is what makes this more than an hour with a number attached: which nodes the dropped marks came from, so the planner knows what to bring forward. Give it whenever the user can say where they lost marks.
study.logs.mistakeRecord a specific mistake against a chapter. Mistakes are retired by later evidence, never deleted, and an open mistake pulls that chapter up the plan.
study.withdrawWithdraw a session, test or mistake by appending a tombstone. There is no study-event delete and there must not be ΓÇö the log is append-only.
study.sessions.listStudy sessions, tests and mistakes that currently stand, newest first.
study.plan.todayThe ranked plan for today: which chapters, why each one, and how long. Driven by exam dates, retention decay, coverage debt and open mistakes. 'What should I study today?' is exactly this tool, and the reasons are meant to be read back to the user.
study.plan.configureSet how many minutes the user has today (the session dial), or dismiss/restore a chapter from today's plan without archiving it.
study.timerStart, stop or read the study stopwatch. Stopping logs a session against the node it was started on. This is a SEPARATE stopwatch from the habit timers.
study.erase_allDESTRUCTIVE. Moves every subject, node and exam to Trash as one batch and tombstones every standing study entry. The log itself is never deleted. Requires confirm: true.
library.folders.listEvery folder, with its parent, its decks and how many cards sit under it.
library.folders.createCreate a folder, optionally inside another (pass parentId to nest). Choose an icon that matches the SUBJECT ΓÇö call anneal_design_suggest for real candidates. colour and texture may be null; a stable default is derived from the id.
library.folders.updateRename or restyle a folder, or MOVE it by passing a new parentId (null puts it at the root).
library.folders.deleteMove a folder and everything under it ΓÇö subfolders, decks and cards ΓÇö to Trash under one batch id, so one restore brings the whole subtree back. Soft; nothing is destroyed.
library.decks.listDecks, with card counts and how many are due today.