{"id":"05a744f5-9a03-4272-a9f5-aea00a46c2c9","slug":"story-teller-mcp-wsl","kind":"mcp","name":"story-teller-mcp-wsl","summary":"Durable project context for multi-repo agentic development via MCP and AnythingLLM.","owner":"tom-kido","repoUrl":"https://github.com/tom-kido/story-teller-mcp-wsl","license":"Apache-2.0","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-04-04T10:31:12.000Z","addedAt":"2026-10-29T03:33:13.075Z","logoUrl":"https://avatars.githubusercontent.com/u/50622084?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["memory-knowledge"],"tags":["agent-memory","anythingllm","context-management","multi-repo"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-29T03:34:04.544Z","sample":false,"url":"https://conduits.dev/tools/story-teller-mcp-wsl","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# story-teller MCP\n\nDurable project context for multi-repo agentic development.\n\n`story-teller MCP` is an MCP server for preserving and reconstructing project context across many coding sessions. It is designed for workflows where design, coding, infrastructure, and deployment happen in separate conversations or even separate repositories, but still need a shared memory layer.\n\nToday, the backend is `AnythingLLM`. The long-term goal is backend portability, including Azure Foundry.\n\n## What Problem This Solves\n\nWhen you use AI coding agents across multiple repos, the context gets fragmented quickly.\n\nTypical failure modes:\n- one repo contains the implementation, but the design decisions live in an old chat\n- infrastructure decisions are discussed in another thread\n- deployment notes are stored somewhere else\n- when work resumes, the agent no longer knows which decisions are current\n\n`story-teller MCP` treats one project as one durable thread:\n- `project_id = thread name = thread slug = session identity`\n- project context is stored in the backend thread history\n- `get_project_context` reconstructs resumable context from that history\n\n## Core Idea\n\nInstead of storing context in local ad hoc notes, `story-teller MCP` uses an LLM-backed thread as the canonical memory for a project.\n\nEach project gets:\n- a project thread\n- an initial bootstrap message\n- durable notes\n- saved summaries\n- resumable context reconstruction\n\nThis makes it possible to manage:\n- a hub project such as `make_env`\n- multiple derived repos\n- long-running work that spans many sessions\n\n## Current Backend\n\n- `AnythingLLM`\n\nCurrent model:\n- one AnythingLLM workspace for `story-teller`\n- one thread per project\n- thread history acts as durable context memory\n\nPlanned backend:\n- `Azure Foundry`\n\n## Available Tools\n\n- `create_project_context`\n- `list_project_contexts`\n- `get_project_context`\n- `append_project_note`\n- `update_project_summary`\n- `continue_project_story`\n- `summarize_project_context`\n\n`append_project_note` accepts:\n- `kind=decision`\n- `kind=task`\n- `kind=risk`\n- `kind=memo`\n\nFor tasks, `status` can be set to values like:\n- `open`\n- `done`\n- `blocked`\n\n## How It Works\n\n### 1. Create a Project Context\n\n`create_project_context`:\n- creates an AnythingLLM thread\n- uses the project folder name as the durable identity\n- sends a bootstrap message containing:\n  - title\n  - related paths\n  - initial summary\n\n### 2. Add Durable Notes\n\n`append_project_note` writes structured notes into the project thread.\n\nThese notes are intended for things like:\n- decisions\n- open tasks\n- risks\n- handoff memos\n\n### 3. Resume Work\n\n`get_project_context` reconstructs project state from thread history and returns a resumable view centered on:\n- `currentContext`\n- `latestDecisions`\n- `openTasks`\n- `notes`\n- `recentConversation`\n\nThis is the main retrieval path for continuing work later.\n\n### 4. Save Summaries\n\n`summarize_project_context` asks the backend LLM to generate a resumable summary and stores that result in the same thread.\n\n## Example Use Case\n\nA hub project:\n- `make_env`\n\nDerived projects:\n- `story-teller-mcp-wsl`\n- `foundry-agentConsole-wsl`\n- `mcp-resourceFinder-wsl`\n- `anythingllm-agentConsole-wsl`\n\nIn this pattern:\n- the hub repo tracks cross-project direction\n- each child repo has its own project context thread\n- the MCP layer provides consistent retrieval and note-taking across all of them\n\n## Quick Start\n\n```bash\ncd /home/t-kido/projects/story-teller-mcp-wsl\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\ncp .env.example .env\n```\n\nMinimal `.env`:\n\n```env\nSTORY_TELLER_BACKEND=anythingllm\nANYTHINGLLM_BASE_URL=http://127.0.0.1:3001\nANYTHINGLLM_API_KEY=your-api-key\nANYTHINGLLM_WORKSPACE_SLUG=story-teller-mcp\nANYTHINGLLM_MODE=chat\n```\n\nRun with MCP Inspector:\n\n```bash\ncd /home/t-kido/projects/story-teller-mcp-wsl\nsource .venv/bin/activate\nmcp dev app.py\n```\n\nRegister in an MCP client:\n\n- command: `/home/t-kido/projects/story-teller-mcp-wsl/.venv/bin/python`\n- arguments: `/home/t-kido/projects/story-teller-mcp-wsl/app.py`\n\n## Quick Start for AnythingLLM-backed Usage\n\nThis is the shortest path to get `story-teller MCP` working with an existing local AnythingLLM desktop setup.\n\n### Prerequisites\n\n- AnythingLLM desktop app is already installed and running on Windows\n- API key is available from AnythingLLM settings\n- a dedicated workspace exists for `story-teller MCP`\n- WSL can reach AnythingLLM at `http://127.0.0.1:3001`\n\n### 1. Prepare `.env`\n\n```env\nSTORY_TELLER_BACKEND=anythingllm\nANYTHINGLLM_BASE_URL=http://127.0.0.1:3001\nANYTHINGLLM_API_KEY=your-api-key\nANYTHINGLLM_WORKSPACE_SLUG=story-teller-mcp\nANYTHINGLLM_MODE=chat\n```\n\n### 2. Register the MCP server in your client\n\nUse STDIO mode with:\n\n- command: `/home/t-kido/projects/story-teller-mcp-wsl/.venv/bin/python`\n- arguments: `/home/t-kido/projects/story-teller-mcp-wsl/app.py`\n\n### 3. Create the first project context\n\nExample:\n\n```text\ncreate_project_context(\n  project_id=\"make_env\",\n  title=\"AI Agent Lab Hub\",\n  related_paths=\"/home/t-kido/projects/make_env,/home/t-kido/projects/story-teller-mcp-wsl,/home/t-kido/projects/foundry-agentConsole-wsl,/home/t-kido/projects/mcp-resourceFinder-wsl\",\n  initial_summary=\"Hub project for agent-related experiments and derived projects.\"\n)\n```\n\nExpected result:\n\n- a thread named `make_env` appears in the `story-teller-MCP` AnythingLLM workspace\n- the thread receives a bootstrap message\n- later calls such as `append_project_note` and `get_project_context` use the same thread\n\n### 4. Save a note and resume later\n\n```text\nappend_project_note(\n  project_id=\"make_env\",\n  kind=\"decision\",\n  note=\"Use make_env as the long-term hub project.\"\n)\n```\n\n```text\nget_project_context(project_id=\"make_env\")\n```\n\nThis is the core loop:\n\n1. create a project context\n2. save decisions, tasks, and memos into the same thread\n3. reconstruct resumable context when work continues later\n\n## Example Workflow\n\nCreate a project:\n\n```text\ncreate_project_context(\n  project_id=\"make_env\",\n  title=\"AI Agent Lab Hub\",\n  related_paths=\"/home/t-kido/projects/make_env,/home/t-kido/projects/story-teller-mcp-wsl\",\n  initial_summary=\"Hub project for agent-related experiments and derived projects.\"\n)\n```\n\nSave a decision:\n\n```text\nappend_project_note(\n  project_id=\"make_env\",\n  kind=\"decision\",\n  note=\"Use make_env as the long-term hub project.\"\n)\n```\n\nSave an open task:\n\n```text\nappend_project_note(\n  project_id=\"make_env\",\n  kind=\"task\",\n  status=\"open\",\n  note=\"Reconnect story-teller MCP after changing the implementation.\"\n)\n```\n\nReconstruct project state:\n\n```text\nget_project_context(project_id=\"make_env\")\n```\n\n## Multi-repo Sample Structure\n\nOne practical pattern is to use one hub repo plus multiple child repos.\n\nExample:\n\n```text\n/home/t-kido/projects/\n  make_env/\n  story-teller-mcp-wsl/\n  foundry-agentConsole-wsl/\n  mcp-resourceFinder-wsl/\n  anythingllm-agentConsole-wsl/\n```\n\nSuggested role split:\n\n- `make_env`\n  - hub repo\n  - cross-project direction\n  - architecture notes\n  - high-level coordination\n- `story-teller-mcp-wsl`\n  - context layer implementation\n- `foundry-agentConsole-wsl`\n  - local console app for Foundry-style agent experiments\n- `mcp-resourceFinder-wsl`\n  - Azure resource lookup MCP server\n- `anythingllm-agentConsole-wsl`\n  - local console app for AnythingLLM experiments\n\nRecommended thread mapping:\n\n- `make_env` -> hub context\n- `story-teller-mcp-wsl` -> story-teller implementation context\n- `foundry-agentConsole-wsl` -> Foundry experiment context\n- `mcp-resourceFinder-wsl` -> MCP resource server context\n- `anythingllm-agentConsole-wsl` -> AnythingLLM console app context\n\n## Multi-repo Example Usage\n\n### Pattern\n\n1. keep high-level direction in the hub project thread\n2. keep implementation details in the child project thread\n3. use `get_project_context` before resuming work in any repo\n4. record important decisions and open tasks as structured notes\n\n### Example\n\nIn the hub repo:\n\n```text\nappend_project_note(\n  project_id=\"make_env\",\n  kind=\"decision\",\n  note=\"Use story-teller MCP as the shared context layer across child repos.\"\n)\n```\n\nIn the `story-teller-mcp-wsl` repo:\n\n```text\nappend_project_note(\n  project_id=\"story-teller-mcp-wsl\",\n  kind=\"task\",\n  status=\"open\",\n  note=\"Document the AnythingLLM quick-start path.\"\n)\n```\n\nWhen resuming work in the child repo:\n\n```text\nget_project_context(project_id=\"story-teller-mcp-wsl\")\n```\n\nWhen checking project-wide direction:\n\n```text\nget_project_context(project_id=\"make_env\")\n```\n\nThis gives a simple but effective split:\n\n- hub thread for cross-project memory\n- child thread for repo-specific memory\n- one stable `project_id` per repo\n\n## Output Shape\n\n`get_project_context` is designed to return a resumable view of the project state, including:\n\n- `title`\n- `currentContext`\n- `latestDecisions`\n- `openTasks`\n- `notes`\n- `recentConversation`\n\nThis is the heart of the system.\n\n## Design Principles\n\n- Use the backend thread as the durable memory, not a local scratch file\n- Keep history, even when decisions change\n- Prefer the latest explicit direction over older conflicting notes\n- Make context resumable, not just searchable\n- Keep the project identity stable through `project_id`\n\n## Current Limitations\n\n- Backend is currently AnythingLLM-centered\n- Summary quality depends on the connected LLM\n- `openTasks` extraction is based on structured notes, not full semantic task mining\n- Output schema is still evolving\n\n## Project Status\n\nAs of April 4, 2026, this project is still at the stage of turning the core idea into a working implementation. It has not yet gone through sustained real-world validation.\n\nThat means:\n- practical usefulness is still being evaluated\n- missing features and bugs are possible\n- some ideas may turn out to be less effective than expected in day-to-day use\n\nPlease treat the project as experimental for now.\n\nAlso, due to limited time, I may not be able to respond quickly, or at all, to bug reports or feature requests. I appreciate your understanding.\n\nThese documents were generated with the help of Codex and were published without a detailed line-by-line review. Some wording or nuance may differ from how the author would personally explain the project. Please keep that in mind.\n\n## Roadmap\n\n- Azure Foundry backend\n- stronger structured note schema\n- better summary parsing\n- streamable HTTP support\n- MCP registry packaging\n- public examples and demos\n\n## Repository Notes\n\n- This repository is licensed under Apache-2.0\n- `NOTICE` requests attribution to the original story-teller MCP project when practical\n- `.env` is intentionally ignored\n- `.venv` and caches are ignored\n- `prompt_for_LLM.txt` contains the current workspace prompt used for the backend LLM behavior\n\n## Attribution Request\n\nModification and extension are welcome.\n\nIf you build on this project, please preserve attribution to the original\n`story-teller MCP` repository and acknowledge the original idea where practical.\nThe formal license is Apache-2.0, and the repository also includes a `NOTICE`\nfile to make that request visible.\n\n## Why Public?\n\nThis project is aimed at people exploring:\n- multi-repo AI-assisted development\n- MCP as a context layer\n- durable agent memory\n- hub-and-spoke repo workflows\n\nIf that is also your problem, this repo is intended to be practical, inspectable, and hackable.\n"}