目录 / Anneal
MCP
鉴权未知
未评级
已上架
Anneal
Zero-friction personal operating system: habits, tasks, and FSRS-5 study retention via remote MCP.
该来源不提供完整文件导出(国内平台多为平台内托管),仅存元数据与原链
接入信息
- 传输形态
- http
- 鉴权方式
- 鉴权未知
- 端点
https://anneal--imsovikde.run.tools
鉴权方式未标注,请核对官方文档后再接入——不要直接使用以下片段
{
"mcpServers": {
"Anneal": {
"url": "https://anneal--imsovikde.run.tools"
}
}
}
能力清单
| 工具 | 说明 |
|---|---|
| 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 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.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 will attribute entries to. |
| 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 set; use anneal_design_suggest when you are naming one specific thing. |
| meta.design_suggest | Call 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.today | START 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.search | One search across habits, subjects, chapters, folders, decks and cards. Use it when the user names something and you need its id. |
| meta.day | Everything 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.range | Everything that stands between two dates, paginated. Use for weekly reviews. |
| meta.lifetime | The 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.list | Every 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.archived | Habits the user archived. They keep their history and stay chartable. |
| habits.list.deleted | Habits in Trash. Restorable until purged; nothing here is gone yet. |
| habits.get | One 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.create | Create 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.update | Change 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.archive | Hide a habit from the active list. Reversible, keeps all history, no confirmation. |
| habits.unarchive | Return an archived habit to the active list. |
| habits.delete | Move 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.restore | Bring a habit back out of Trash. |
| habits.reorder | Set 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_all | DESTRUCTIVE. 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.log | Record 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_entry | Correct 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_entry | Withdraw 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.history | The entries standing for one habit, newest first, with superseded ones resolved. |
| habits.notes.write | Write 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.clear | Withdraw the note on one habit for today. Appends a tombstone. STRICT RULE: note operations are limited to today (no-cheat invariant). |
| habits.notes.list | Every day note standing for one habit, newest day first. |
| habits.timer | Stop 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.list | Every study subject with its target retention and archive state. |
| study.subjects.create | Create 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.rename | Change a subject's name. |
| study.subjects.archive | Archive a subject. Its history is kept and stays chartable. |
| study.subjects.set_target_retention | Set 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.list | The 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.seed | Create 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.tree | The 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.create | Add 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.rename | Change a chapter or topic's name. |
| study.nodes.update | Change 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.archive | Archive a chapter or topic. Its evidence is kept. |
| study.nodes.link_deck | Attach (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.list | Every dated exam with its scope, weight and stored goal. |
| study.exams.create | Add 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.update | Change an exam's name, date, time, weight, scope or goal. |
| study.exams.delete | Move an exam to Trash. Soft; restorable. |
| study.logs.session | Record 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.test | Record 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.mistake | Record 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.withdraw | Withdraw 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.list | Study sessions, tests and mistakes that currently stand, newest first. |
| study.plan.today | The 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.configure | Set how many minutes the user has today (the session dial), or dismiss/restore a chapter from today's plan without archiving it. |
| study.timer | Start, 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_all | DESTRUCTIVE. 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.list | Every folder, with its parent, its decks and how many cards sit under it. |
| library.folders.create | Create 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.update | Rename or restyle a folder, or MOVE it by passing a new parentId (null puts it at the root). |
| library.folders.delete | Move 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.list | Decks, with card counts and how many are due today. |
| library.decks.create | Create a deck, optionally inside a folder (pass folderId). |
| library.decks.update | Rename or restyle a deck, or MOVE it into another folder by passing folderId (null = root). |
| library.decks.delete | Move a deck and its cards to Trash under one batch id. Soft; restorable. |
| library.cards.list | Cards in a deck, or every card due for review across the library when dueOnly is true. 'Review my due cards' is this tool followed by anneal_library_card_review per card. |
| library.cards.create | Add one card to a deck. |
| library.cards.create_bulk | The 'I just read this chapter ΓÇö make me twenty flashcards' tool. Give it a deckId, or a deckTitle (and optionally a folderId) and the deck is created for you. Up to 200 cards in one call, written in a single round trip. Write real question/answer pairs, not headings: one fact per card, front short enough to recall from, back the answer alone. |
| library.cards.update | Change a card's front or back, or MOVE it to another deck by passing a new deckId. |
| library.cards.delete | Move one card to Trash. Soft; restorable. |
| library.cards.review | Grade a card you have just reviewed: 1 Again, 2 Hard, 3 Good, 4 Easy. This schedules the next review with FSRS, appends a CARD_REVIEWED event and increments the day's activity tally ΓÇö all three, exactly as the review screen does. STRICT RULE: only TODAY can be graded. Past and future dates are both rejected (no-cheat invariant). |
| library.erase_all | DESTRUCTIVE. Moves every folder, deck and card to Trash as one batch. Requires confirm: true. |
| trash.list | Everything soft-deleted, grouped by the batch it was deleted in ΓÇö habits, library items and exams in one view. Each group restores as one action. |
| trash.restore_batch | Restore exactly the rows sharing one deletion batch id. A restored deck whose folder is gone surfaces at the root; a restored card whose deck is gone lands in a 'Recovered' deck. |
| trash.purge_batch | DESTRUCTIVE AND IRREVERSIBLE. Destroys the definition rows in one Trash batch for ever. The event log is NOT touched ΓÇö it is append-only and the entries are already tombstoned. Requires confirm: true. |
| trash.purge_all | DESTRUCTIVE AND IRREVERSIBLE. Destroys every soft-deleted row for ever. Call anneal_trash_list first and tell the user the real counts before doing this. The event log is never touched. Requires confirm: true. |
| insights.metrics.list | The live metric registry with each metric's chart compatibility. Read this before building a chart so the metric key is never guessed. |
| insights.views.list | Every saved chart view, pinned ones first. |
| insights.views.save | Save a chart request as a named view. `request` is the same shape anneal_insights_run takes; it is re-validated on the way in. |
| insights.views.update | Change a saved view's name, pinned state or order. |
| insights.views.delete | Remove a saved view. |
| account.profile.get | Display name, handle, avatar seed, avatar visibility and member-since. |
| account.profile.set_name | Set the user's display name. Writes BOTH the private preference and the profiles row a partner reads ΓÇö writing only one leaves every partner seeing a bare handle. |
| account.avatar.set_seed | Set the avatar seed. Mirrors to the profiles row so partners see the new face. |
| account.avatar.set_visibility | Whether this account can be found by its username in partner search. |
| account.username_claim | Claim a username. Refused identically whether it is taken, reserved or badly formed ΓÇö the refusal is never a policy oracle. |
| account.settings.get | Theme, sound, mode, name, avatar seed, timezone and the study dial. |
| account.settings.set | Set one preference. 'Switch me to dark mode' is key theme, value dark; 'mute the sounds' is key sound, value off. The key list is closed ΓÇö anything else is refused here rather than failing later against a database constraint. |
| account.sessions.list | Every live session, including the ones this MCP server itself created ΓÇö an agent you can see is an agent you can revoke. |
| account.sessions.revoke | Sign one device or agent out immediately. |
| account.deletion_status | Read-only. Whether a deletion has been requested and when it falls due. Requesting or cancelling deletion needs the user's actual password and is deliberately not available to an API key. |
| partners.users.search | Find someone by handle. Exact match or a 3-character prefix, at most five results, no listing and no count ΓÇö all of it enforced inside Postgres, not here. This plus request_send is the 'find rahul and send him a partner request' flow. |
| partners.list | Every partnership and its state ΓÇö pending, active, ended or blocked. |
| partners.requests.send | Send a partnership request. IMPORTANT: this reports success whether or not a row was written ΓÇö a request to someone who has blocked you is indistinguishable from one that was delivered, by design. Do NOT tell the user their request definitely arrived. |
| partners.requests.accept | Accept a pending partnership. Accepting shares ZERO data ΓÇö nothing is visible until an explicit grant is created. |
| partners.partnership_end | End a partnership. Grants are revoked with it; there is no cooldown either way. |
| partners.users.block | Block a user. Revokes sharing both directions, hides the relationship from them, and is permanent. Their future requests vanish silently. |
| partners.grants.list | Every grant this account has issued: to whom, which module, what tier, what window. |
| partners.grants.create | Grant a partner sight of one module at one tier for one window ΓÇö 'share my habits with Aisha, stats only, last 30 days'. Never pass a grantor or grantee id: the database derives both from the partnership, and an attempt to name them is reported as a policy violation. |
| partners.grants.revoke | Revoke one grant. Takes effect immediately; nothing survives on their device. |
| partners.stop_sharing_all | Revoke every grant this account has issued, in one act. Requires confirm: true. |
| partners.grants.audit | The append-only trail of every grant change. It outlives the grant and the partnership. |
| partners.access_log | Every time a partner actually read shared data, and what they read. |
| partners.partner_data_read | Everything a partner has actually shared with this account, for a date range (defaults to their whole shared history). READ-ONLY AND NEVER EXPORTABLE ΓÇö a partner's data can be read and never copied, by design. Every read writes an entry in their access log, which they can see. |
纠错与举报(发现条目失效、署名有误或涉及侵权?)
提交举报 / 纠错
侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。