specs/authenticated-task-stores.md.
In-process
InMemoryMcpTaskStorePlus keeps snapshots in a ConcurrentDictionary. Fan-out is an in-process event. Tasks die with the process.
Database
Relational and document engines. Entity Framework Core is the default durable package: one implementation, any EF Core provider.
Use EF Core when the host already has a
DbContext. Native PostgreSQL and SQL Server packages exist for hosts that want ADO.NET (and, for Postgres, LISTEN / NOTIFY) without an EF model.
Distributed cache
Low-latency handles with native or host-owned expiry.
Prefer Redis when you need pub/sub for elicitation across nodes. Use
IDistributedCache when that abstraction is already in DI and a host-supplied bus covers fan-out.
Eventing
Stores whose native bus is the reason the package exists.
Providers without a native bus (EF Core,
IDistributedCache, Azure Tables) take an optional IMcpTaskInputSignalBus. Missing bus plus multiple nodes means ElicitAsync waits until timeout.
Shared row
StoredMcpTask is the persistence foundation. Durable entities subclass it (EF adds RowVersion). Keep these rows on their own table; tasks expire in minutes.
Swap in production
HTTP identity stays on the platform accessor. Development uses Core. Production registers a durable store with the same factory.McpTasks with AddMcpTasksTable. See Entity Framework Core for which overload to call (OnModelCreating vs AddDbContext).
Isolation helpers stay in Core. Provider packages depend on McpEssentials.Core, not on each other.