Skip to main content
Glama
pandaGaume

mcp-cache

by pandaGaume

mcp-cache

Cache slots for an mcp-broker: one contract, cache.v1, for values kept by UNS id with a time to live, and pluggable stores.

MCP client ──> mcp-broker ──> slot "cache" (CacheBehavior)
                                  │  one broker decision per UNS id, audited
                                  └──> ICacheStore: memory, Redis

Entries are addressed by UNS id, like SCADA values and their history: one broker policy governs the live value, its history and its cached copy. UNS ids and broker-decided access come from mcp-uns.

Design and decisions: docs/brief_cache_slot.md (French).

Packages

package

what

@cyanmycelium/mcp-cache

the contract, MemoryCacheStore, CacheBehavior, CacheSlotStore, the declaration, and the conformance suite under /conformance

@cyanmycelium/mcp-cache-redis

RedisCacheStore: one cache shared by every process, expiry kept by the server

Related MCP server: DistributedAI

Use

import { DirectTransport } from "@cyanmycelium/mcp-broker-provider";
import { McpServerBuilder } from "@cyanmycelium/mcp-core";
import { CacheBehavior, buildCacheDeclaration } from "@cyanmycelium/mcp-cache";
import { RedisCacheStore } from "@cyanmycelium/mcp-cache-redis";
import { BrokerAccessGuard } from "@cyanmycelium/mcp-uns";

const store = await RedisCacheStore.connectAsync("redis://127.0.0.1:6379", { prefix: "site1:" });
const transport = new DirectTransport("ws://localhost:3000/provider/cache", { secret });
const server = new McpServerBuilder().withName("cache").withTransport(transport).register(new CacheBehavior(store, new BrokerAccessGuard(transport.broker))).build();
await server.start();
await transport.broker.declare(buildCacheDeclaration({ version: "1", namespace: "uns://site1" }));

Tools

tool

broker capability, checked per id

cache.capabilities

none

cache.get

cache.read: each id answers hit, miss, or a refusal

cache.scan

cache.read (ids you may not read are left out)

cache.set, cache.delete

cache.write, outcome reported

Develop

npm install
npm run typecheck
npm test
npm run build

The Redis store runs the conformance suite on a fake Redis that misbehaves the way SCAN may. Against a real server, give the standard Redis settings in the environment or in a .env file at the root, which git ignores:

REDIS_URL=rediss://my-cache.example.com:6380
REDIS_PASSWORD=<password>

REDIS_URL carries its scheme: rediss:// for TLS (Azure Cache for Redis on 6380, for one), redis:// otherwise. REDIS_PASSWORD and REDIS_USERNAME (for an ACL user) are optional. Each test writes under its own key prefix and deletes its keys afterwards.

tests/broker.test.ts starts a real broker with @cyanmycelium/mcp-broker/testing.

License

Apache-2.0.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables key-value storage operations using multiple backends (memory, filesystem, redis, MongoDB, HTTP) via MCP tools like get, set, and list.
    22 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables multiple MCP clients to collaborate through a shared store with identity, project-scoped access, versioned memory proposals, review queues, and leased jobs with fencing tokens.
    2
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes get, set, and delete operations over a Redis/Valkey-compatible key-value store as MCP tools, with per-user key namespacing and TTL support on writes. Enables clients to cache and retrieve arbitrary string values statelessly over SSE or direct HTTP, using their own backend.
    MIT