feat: session-level memory ingestion
New memory_store_session MCP tool and POST /api/sessions HTTP endpoint store a full conversation as a single memory unit — all turns concatenated as [role] content lines, stored with memory_type=session and auto-tagged session:<id>.
Why two ingestion strategies?
Turn-level storage (default) is best for precise fact retrieval. Session-level storage improves session-recall benchmarks.
| Strategy | LongMemEval R@5 | Delta |
|---|---|---|
| Turn-level (v10.34) | 80.4% | — |
| Session-level (v10.35) | 86.0% | +5.6% |
Biggest gains: multi-session +15.2%, temporal-reasoning +10.6% — zero LLM API calls.
What's Included
New MCP Tool — memory_store_session
- Accepts a list of
{role, content}turn objects + optionalsession_id,tags,metadata - Concatenates all turns as
[role] contentlines into a single memory body - Stores with
memory_type=sessionand auto-tagsession:<id>(UUID if not provided) - 10 new handler tests
New HTTP Endpoint — POST /api/sessions
- REST endpoint mirroring the MCP tool for HTTP API consumers
- Same concatenation and tagging semantics
- 7 new endpoint tests
LongMemEval --ingestion-mode flag
--ingestion-mode session|turn|bothfor direct apples-to-apples strategy comparison- Session results: R@5 86.0%, R@10 92.1%
Memory Type Ontology
sessionandconversation_turnadded as first-class memory types
README: MemPalace comparison
- New section with honest benchmark gap context and explanation of why session-level ingestion narrows the gap to MemPalace-style approaches
Test Count
1,537 tests passing (+17 new: 10 handler + 7 HTTP endpoint)
Upgrade Notes
No breaking changes. Existing turn-level storage and retrieval is unchanged. The new memory_store_session tool is additive.
Full Changelog: https://github.com/doobidoo/mcp-memory-service/blob/main/CHANGELOG.md#10350---2026-04-08