kit-memory-demo
Continuity for agents: a live memory you can read and cite right now, outliving the context window.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"kit-memory-demo": {
"url": "https://demo-mcp.kit-project.com/mcp"
}
}
}Remote endpoints
https://demo-mcp.kit-project.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (7)
🟡focus(area, project, kit_session_id)
Set this operator's write focus: the knowledge area new memories are stored under, and optionally the project being worked on. The wake card's chips call this; it is also callable directly. Holds until changed or idle past the TTL; explicit area/project args on commit/note/handoff still win.
Input Schema
{
"type": "object",
"properties": {
"area": {
"type": "string",
"description": "Knowledge-area slug for new writes. Empty string or omitted clears to General (no area routing)."
},
"project": {
"type": "string",
"description": "Project slug for new writes. Empty string clears."
},
"kit_session_id": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Your own session ID from wake; reuse for this conversation. A child or subagent must wake separately, without its parent's ID."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢presence(window_minutes, scope, to, message, kit_session_id)
Read live Lady Whiskerdown facet presence within the requested window.
Input Schema
{
"type": "object",
"properties": {
"window_minutes": {
"type": "integer",
"description": "Live window in minutes. Defaults to 30. Maximum 1440."
},
"scope": {
"type": "string",
"enum": [
"work",
"personal",
"general",
"all"
],
"description": "Which conversations to include. Defaults to work, which withholds personal threads."
},
"to": {
"type": "string",
"description": "Delivery address of a live session, taken from this tool's own facets list. Sends instead of reading. The address is issued by the server and bound to the session that holds it; a session id is not an address and will not be accepted as one."
},
"message": {
"type": "string",
"description": "At most 400 characters, delivered in full in that session's next presence check or memory-read footer, quoted as another session's words. Sending means queued, not confirmed read. Nothing wakes or spawns; quiet sessions are refused and unread messages expire after 30 minutes."
},
"kit_session_id": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Your own session ID from wake; reuse for this conversation. A child or subagent must wake separately, without its parent's ID."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢ranking_compare(query, limit, category, project, tier, ...)
Compare search ranking for a query with and without the recently learned boost. Returns every row whose rank or score changes, with baseline rank, boosted rank, position delta, score delta, sample source, boost window, and units.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query to compare over the real caller-scoped memory sample"
},
"limit": {
"type": "number",
"description": "Max candidate rows to compare, default 50 and capped by the API at 100"
},
"category": {
"type": "string",
"description": "Optional memory category filter"
},
"project": {
"type": "string",
"description": "Optional project filter"
},
"tier": {
"type": "string",
"description": "Optional memory tier filter"
},
"surface": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Optional surface filter"
},
"kit_session_id": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Your own session ID from wake; reuse for this conversation. A child or subagent must wake separately, without its parent's ID."
}
},
"required": [
"query"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪recall(query, limit, kit_session_id)
Recall this Lady Whiskerdown's knowledge by semantic search. Use before answering any user question about this Lady Whiskerdown, the customer/product, project facts, onboarding, architecture, policies, product decisions, or imported documents. Returns the most relevant memories you have access to, scoped to your knowledge area.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What to search for, in natural language"
},
"limit": {
"type": "number",
"description": "Max results (default 10)"
},
"kit_session_id": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Your own session ID from wake; reuse for this conversation. A child or subagent must wake separately, without its parent's ID."
}
},
"required": [
"query"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢remember(id, kit_session_id)
Read a single Lady Whiskerdown memory by id (as returned by recall). No graph or entity enrichment: the receiver endpoint returns the memory itself, scoped to this key.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": [
"number",
"string"
],
"description": "Memory id (number or m#N as shown by recall)"
},
"kit_session_id": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Your own session ID from wake; reuse for this conversation. A child or subagent must wake separately, without its parent's ID."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢areas(kit_session_id)
List the knowledge areas in this Lady Whiskerdown.
Input Schema
{
"type": "object",
"properties": {
"kit_session_id": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Your own session ID from wake; reuse for this conversation. A child or subagent must wake separately, without its parent's ID."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪wake(scope, kit_session_id)
Meet Lady Whiskerdown. Call this FIRST in every new chat (VS Code/Copilot, Cursor, Claude Code, Codex), before the first substantive answer. It returns who this Lady Whiskerdown is (`you_are`), which knowledge areas this key can see, which tools it may use, and the working contract. The identity in `you_are` is offered, not imposed: adopt it for the session only if your operator chose that; otherwise answer as yourself, reading Lady Whiskerdown's archive. For anything this Lady Whiskerdown/customer/project/product should know, call recall first instead of using general model knowledge.
Input Schema
{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"work",
"personal",
"all"
]
},
"kit_session_id": {
"type": "string",
"minLength": 8,
"maxLength": 160,
"pattern": "^[A-Za-z0-9:_-]+$",
"description": "Your own session ID from wake; reuse for this conversation. A child or subagent must wake separately, without its parent's ID."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence