{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_2kkdrkmhxumr","handle":"fluid-recall","url":"https://wellknown.network/agents/fluid-recall","links":{"self":"https://wellknown.network/agents/fluid-recall/record.json","html":"https://wellknown.network/agents/fluid-recall","markdown":"https://wellknown.network/agents/fluid-recall/record.md","api":"https://wellknown.network/api/v1/agents/fluid-recall","status":"https://wellknown.network/api/v1/agents/fluid-recall/status","claim":"https://wellknown.network/agents/fluid-recall/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/fluid-recall/claim.json","badge":"https://wellknown.network/agents/fluid-recall/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/fluid-recall/history","tools":"https://wellknown.network/api/v1/agents/fluid-recall/tools"},"ard":{"identifier":"urn:air:fluidrecall.com:server:fluid-recall","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Fluid Recall","summary":"Agent-native spaced-recall system of record. Deterministic dueAt via remote MCP for Muse/any agent.","description":"Agent-native spaced-recall system of record. Deterministic dueAt via remote MCP for Muse/any agent.","publisher":{"name":"com.fluidrecall","url":null},"homepage":"https://fluidrecall.com","repository":null,"version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://fluidrecall.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-28T12:38:54.618828Z","publishedAt":"2026-09-28T12:38:54.618828Z","registryName":"com.fluidrecall/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":1,"provenance":"derived"},{"slug":"knowledge.memory","name":"Agent Memory","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.583,"provenance":"derived"},{"slug":"documents.extraction","name":"Data Extraction","confidence":0.554,"provenance":"derived"},{"slug":"automation.scheduling","name":"Scheduling & Cron","confidence":0.54,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["automation","commerce","content","documents","knowledge","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 4h ago.","lastOkAt":"2026-10-10T16:33:13.197Z","lastProbedAt":"2026-10-10T16:33:13.197Z","statusComputedAt":"2026-10-10T16:33:56.624Z","reliability30d":{"probes":38,"successRate":1,"p50Ms":739,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":38,"ok":38,"authBoundaryOk":0,"serviceOk":38,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T16:33:13.197Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":2541,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T10:27:39.542Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1178,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T03:26:20.760Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":700,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T20:30:19.269Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":899,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T14:32:30.793Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1242,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T08:27:38.146Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1453,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T01:24:36.252Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":860,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T18:27:33.863Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1261,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T12:25:51.625Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1760,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T06:23:43.988Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1091,"error":null,"detail":{"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"toolCount":34,"toolsHash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","serverName":"fluid-recall","capabilities":["tools","resources","events"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"createAccount","description":"Write. No bearer. Mint an anonymous account and a personal API token. Save the token for later Authorization: Bearer calls. The token is the tenant. Do not send"},{"name":"bootstrapAccount","description":"Write. Same mint as createAccount. No bearer."},{"name":"startSession","description":"Write when no bearer (mints a token), read when a bearer is present. Returns the account (when minted), the due queue, and first. Prompts only. Includes deckNot"},{"name":"nextDue","description":"Read. Due queue and first prompt. Requires a bearer. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an "},{"name":"gradeAndNext","description":"Write. recordReview, then the next due prompt. Requires cardId, rating, reviewedAt optional, and a new idempotencyKey. Schedule from dueAt. Prompts only. Includ"},{"name":"getStudySettings","description":"Read. Account fallback newCardsPerDay, timezone, and dayBoundaryHour. The fallback applies only to a deck whose own field is still null."},{"name":"get_profile","description":"Read. OpenAI profile for connection linking. Stable profile id (id), the account label when set (name), and optional email/nickname. No decks, cards, answers, o"},{"name":"updateStudySettings","description":"Write, destructive. Change the account fallback, timezone, or day boundary. Decks that already store an integer keep it. Send at least one field."},{"name":"createDeck","description":"Write. name and newCardsPerDay are required. Choose that integer with the person; there is no default of 20. Optional description and deckNote. Setting a note d"},{"name":"updateDeck","description":"Write, destructive. Rename, rewrite description, set or clear deckNote, and/or set newCardsPerDay. Send at least one. Null deckNote clears it. Does not move due"},{"name":"setDeckNote","description":"Write, destructive. Set or clear a deck coaching note. deckNote null clears it. Same write as updateDeck. Does not move dueAt. Coaching notes are instructions f"},{"name":"listDecks","description":"Read. No card bodies. Archived decks omitted unless includeArchived is true. Each deck includes deckNote."},{"name":"archiveDeck","description":"Write, destructive. Soft-archive a deck; it leaves listDue and the default deck list until unarchiveDeck. Cards and schedules stay. A second call returns alread"},{"name":"unarchiveDeck","description":"Write. Clear archivedAt. Schedule fields stay. An already-active deck returns alreadyActive true."},{"name":"addCard","description":"Write. Add one prompt/answer pair. Optional cardNote. Eligible immediately. listDue still applies newCardsPerDay. The response is prompts only."},{"name":"addCards","description":"Write. Add 1 to 100 prompt/answer pairs to one owned deck. All or nothing. Prompts only. After this, re-run previewDeadlinePlan with that deckId."},{"name":"updateCard","description":"Write, destructive. Correct prompt, answer, and/or cardNote. Send at least one. cardNote null clears it. Schedule stays. Response does not include the answer."},{"name":"setCardNote","description":"Write, destructive. Set or clear a card coaching note. cardNote null clears it. Additive with the deck note. Same write as updateCard. Does not include the answ"},{"name":"retireCard","description":"Write, destructive. Remove a card from future drills; reversible only with unretireCard. A second call returns alreadyRetired true. Inventory the deck first whe"},{"name":"unretireCard","description":"Write. Clear retiredAt. Schedule stays. An already-active card returns alreadyActive true."},{"name":"moveCard","description":"Write. Move an active card into another owned deck. Schedule stays. A card already there returns alreadyThere true. Does not include the answer."},{"name":"listDue","description":"Read. Prompts only. answerIncluded is false. Ordered learning, then review, then new. The new queue is capped by each deck's newCardsPerDay. Includes deckNote a"},{"name":"listUpcomingNew","description":"Read. New cards the daily cap is holding back. Prompts only. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for how an agent "},{"name":"listDeckCards","description":"Read. Prompt-only inventory of one owned deck, including cards that are not due. Order is dueAt, then createdAt, then cardId — not the drill order. Includes dec"},{"name":"inventoryDeck","description":"Read. Same as listDeckCards. Use this when you need a cardId that is not in the due list. Includes deckNote and cardNote (null when unset). Coaching notes are i"},{"name":"getCard","description":"Read. One card's prompt and schedule. No answer. A retired card is 404. Includes deckNote and cardNote (null when unset). Coaching notes are instructions for ho"},{"name":"revealCard","description":"Important read. One answer, after the person has tried to recall. Do not fold this into listDue. Includes deckNote and cardNote (null when unset). Coaching note"},{"name":"recordReview","description":"Write. Rating again | hard | good | easy plus reviewedAt and a new idempotencyKey. The scheduler returns dueAt. Do not invent an interval. Same key and body ret"},{"name":"undoReview","description":"Write. Undo the latest active grade, or reviewId when it is that latest one. Restores dueAt. A second undo of the same review returns alreadyUndone true. Does n"},{"name":"previewDeadlinePlan","description":"Read. Recommend newCardsPerDay from a deadline: ceil(remaining new cards / study days). Does not write. Send remainingNewCards, totalCards, or deckId. There is "},{"name":"applyDeadlinePlan","description":"Write, destructive. Same plan as previewDeadlinePlan, then PATCH that owned deck to the recommended integer. deckId is required. Discuss the number first."},{"name":"exportManifest","description":"Read. What this token can export and how many rows exist. Does not include answers. Off-boarding, not the drill loop."},{"name":"exportSnapshot","description":"Important read for leaving. Full studying dump for this token, including answers. Paginate cards and reviews with resource + cursor until complete is true."},{"name":"submitFeedback","description":"Write. Optional. Never required for study, bootstrap, or export. Append-only: feedback is logged and never edits study data. This is not data extraction and not"}],"package":null,"toolSurface":{"id":"ts_a6pz86e55fvf","endpointId":"ep_y37pn99kkzw2","hash":"17beb6f55a0c9b88a06a6931f16915fdcd160960ca5240136d80df81bdae8701","toolCount":34,"serverName":"fluid-recall","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-01T23:21:31.378Z","lastSeenAt":"2026-10-10T16:33:13.199Z","observations":33,"toolNames":["createAccount","bootstrapAccount","startSession","nextDue","gradeAndNext","getStudySettings","get_profile","updateStudySettings","createDeck","updateDeck","setDeckNote","listDecks","archiveDeck","unarchiveDeck","addCard","addCards","updateCard","setCardNote","retireCard","unretireCard","moveCard","listDue","listUpcomingNew","listDeckCards","inventoryDeck","getCard","revealCard","recordReview","undoReview","previewDeadlinePlan","applyDeadlinePlan","exportManifest","exportSnapshot","submitFeedback"],"distinctSurfaces":3},"endpointFacts":[{"id":"ep_y37pn99kkzw2","url":"https://fluidrecall.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-10T10:27:39.548Z","auth":{"observedAt":"2026-10-10T10:27:39.886Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://fluidrecall.com/.well-known/oauth-protected-resource/mcp","resource":"https://fluidrecall.com/mcp","authorizationServers":["https://fluidrecall.com"],"scopesSupported":["mcp","mcp:read","mcp:write","events:manage"]},"authorizationServer":{"url":"https://fluidrecall.com/.well-known/oauth-authorization-server","issuer":"https://fluidrecall.com","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none"],"dynamicClientRegistration":false,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":true},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":true,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-10T10:27:40.458Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"fluidrecall.com","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-22T19:02:59.000Z","validTo":"2026-12-21T20:02:56.000Z","daysToExpiry":71,"sanCount":3,"fingerprint256":"9A:0A:F3:3F:D8:4B:92:38:4B:1E:3B:B0:E5:CB:30:A7:CD:8E:AA:D0:2E:DD:6A:6B:55:F5:30:EB:24:AA:7F:A0"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.fluidrecall/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/com.fluidrecall%2Fmcp","firstSeenAt":"2026-09-30T14:20:07.963Z","fetchedAt":"2026-10-09T06:18:01.194Z","normalizedAt":"2026-10-09T06:18:01.194Z"}]},"firstSeenAt":"2026-09-30T14:20:07.963Z","updatedAt":"2026-10-10T16:35:08.165Z"}