You're viewing a demo portfolio

Join the waitlist
PRSM
This tool is no longer present in the server's latest manifest. Showing the last observed version (server version 0.1.0).

manage_kv

Inactive

Tool of io.github.butterbase-ai/mcp

declared in 0.1.0

Manage app KV store: config rules (expose/unexpose namespaces) and data-plane operations (get/set/del/incr etc). Actions — Config: - "list_rules": List all KV namespace exposure rules for the app - "expose": Expose a key pattern with read/write role access control - "unexpose": Remove an exposure rule by pattern - "stats": Get KV usage stats (key count, memory, etc.) - "scan": Scan keys by prefix (cursor-based, params: prefix, limit, cursor) - "flush": Delete ALL keys in the KV store (requires confirm: true; include_config?: true also wipes rules) Actions — Data plane: - "get": Get the value of a key (opts: raw?, touch?) - "set": Set a key to a value (opts: ttl?, ephemeral?, raw?) - "del": Delete one key - "incr": Increment a key's integer value (opts: by?) - "decr": Decrement a key's integer value (opts: by?) - "setnx": Set a key only if it does not already exist (opts: value, ttl?) - "setex": Set a key with an explicit TTL in seconds (same as set + ttl) - "cas": Compare-and-swap: atomically set next only if current value matches expected - "exists": Check if a key exists - "ttl": Get remaining TTL of a key in seconds - "expire": Set a TTL on an existing key - "mget": Get values of multiple keys at once (uses batch op) - "mset": Set multiple key-value pairs at once (uses batch op; entries: {key: value}) Parameters by action: list_rules: { app_id, action: "list_rules" } expose: { app_id, action: "expose", pattern, read, write } unexpose: { app_id, action: "unexpose", pattern } stats: { app_id, action: "stats" } scan: { app_id, action: "scan", prefix?, limit?, cursor? } flush: { app_id, action: "flush", confirm: true, include_config? } get: { app_id, action: "get", key, raw?, touch? } set: { app_id, action: "set", key, value, ttl?, ephemeral?, raw? } del: { app_id, action: "del", key } incr: { app_id, action: "incr", key, by? } decr: { app_id, action: "decr", key, by? } setnx: { app_id, action: "setnx", key, value, ttl? } setex: { app_id, action: "setex", key, value, ttl } cas: { app_id, action: "cas", key, expected, next } exists: { app_id, action: "exists", key } ttl: { app_id, action: "ttl", key } expire: { app_id, action: "expire", key, ttl } mget: { app_id, action: "mget", keys } mset: { app_id, action: "mset", entries } Warning: "flush" deletes ALL keys and cannot be undone. Always pass confirm: true explicitly.

Parameters schema

{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "app_id",
    "action"
  ],
  "properties": {
    "by": {
      "type": "number",
      "description": "Amount to increment/decrement (default 1, for incr/decr)"
    },
    "key": {
      "type": "string",
      "description": "The KV key for single-key data-plane actions"
    },
    "raw": {
      "type": "boolean",
      "description": "Store/retrieve raw string without JSON wrapping (for set/get)"
    },
    "ttl": {
      "type": [
        "number",
        "null"
      ],
      "description": "TTL in seconds (null = no expiry; for set, setex, expire, setnx)"
    },
    "keys": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of keys for mget"
    },
    "next": {
      "description": "The next value to set for CAS if expected matches"
    },
    "read": {
      "enum": [
        "public",
        "authed",
        "owner",
        "deny"
      ],
      "type": "string",
      "description": "Read access role for expose"
    },
    "limit": {
      "type": "integer",
      "maximum": 1000,
      "description": "Max keys to return per scan page (max 1000)",
      "exclusiveMinimum": 0
    },
    "touch": {
      "type": "boolean",
      "description": "Reset TTL to original on read (for get)"
    },
    "value": {
      "description": "The value to set — can be any JSON (object, array, string, number)"
    },
    "write": {
      "enum": [
        "public",
        "authed",
        "owner",
        "deny"
      ],
      "type": "string",
      "description": "Write access role for expose"
    },
    "action": {
      "enum": [
        "list_rules",
        "expose",
        "unexpose",
        "stats",
        "scan",
        "flush",
        "get",
        "set",
        "del",
        "incr",
        "decr",
        "setnx",
        "setex",
        "cas",
        "exists",
        "ttl",
        "expire",
        "mget",
        "mset"
      ],
      "type": "string",
      "description": "The action to perform"
    },
    "app_id": {
      "type": "string",
      "description": "The app ID (e.g. app_abc123def456)"
    },
    "cursor": {
      "type": "string",
      "description": "Pagination cursor for scan (omit for first page)"
    },
    "prefix": {
      "type": "string",
      "description": "Key prefix for scan (e.g. \"user:\")"
    },
    "confirm": {
      "type": "boolean",
      "description": "Must be true to execute flush"
    },
    "entries": {
      "type": "object",
      "description": "Object of key→value pairs for mset (values can be any JSON)",
      "additionalProperties": {}
    },
    "pattern": {
      "type": "string",
      "description": "Key pattern for expose/unexpose (e.g. \"user:*\")"
    },
    "expected": {
      "description": "The expected current value for CAS (compare-and-swap)"
    },
    "ephemeral": {
      "type": "boolean",
      "description": "Store in ephemeral DB (shorter-lived, for set/setnx)"
    },
    "include_config": {
      "type": "boolean",
      "description": "Also wipe exposure rules when flushing (use with flush)"
    }
  },
  "additionalProperties": false
}

What this tool wraps· 0 endpoints

min confidence0.700.50

No endpoints wrapped at confidence ≥ 0.50.

Parent server

io.github.butterbase-ai/mcp

https://github.com/butterbase-ai/butterbase-oss

1/7 registries
View full server →