specs/authenticated-task-stores.md.
In-process
Authenticated tasks
Shipped
McpEssentials.Core. InMemoryMcpTaskStorePlus keeps snapshots in a ConcurrentDictionary. Fan-out is an in-process event. Tasks die with the process. Tests, local MCP, a single process.Database
Relational and document engines. Entity Framework Core is the default durable package: one implementation, any EF Core provider.Entity Framework Core
Shipped
McpEssentials.EntityFrameworkCore. SQL Server, SQLite, PostgreSQL, MySQL, Cosmos via EF, and any other EF Core provider. Host owns the DbContext and migrations.PostgreSQL
Shipped
McpEssentials.PostgreSQL. Npgsql, no EF. LISTEN / NOTIFY wakes elicitation on other nodes.Cosmos DB
Shipped
McpEssentials.Cosmos. Azure Cosmos DB for NoSQL, /ownerUserId partition plus an index for background complete.SQL Server
Specified
McpEssentials.SqlServer. Microsoft.Data.SqlClient, no EF. Use Entity Framework Core with UseSqlServer until it ships.MongoDB
Specified
McpEssentials.MongoDB. Native collection and change streams.Azure Tables
Specified
McpEssentials.AzureTables. PartitionKey = OwnerUserId, RowKey = TaskId.Distributed cache
Low-latency handles with native or host-owned expiry.Redis
Shipped
McpEssentials.Redis. StackExchange.Redis, PEXPIREAT plus pub/sub for multi-node elicitation.IDistributedCache
Specified
McpEssentials.DistributedCache. Whatever you already registered as IDistributedCache. Prefer Redis when the cache is Redis and you need pub/sub.Eventing
Stores whose native bus is the reason the package exists.NATS
Specified
McpEssentials.Nats. JetStream KV for the row, Core NATS for signals.Redis and native PostgreSQL implement
NotifyingMcpTaskStoreBase. Providers without a native bus (EF Core, Cosmos v1, 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.