Skip to main content
Glama
state-bridge-mcp

state-bridge-mcp

by jonjoe

state-bridge-mcp

MCP server + client SDK for bridging Zustand stores over WebSocket. Lets any MCP-capable AI inspect and manipulate your app's live state.

How it works

┌─────────────┐   WebSocket   ┌──────────────┐   stdio   ┌──────────┐
│  Your App   │──────────────▶│  MCP Server  │◀─────────▶│  Claude  │
│  (client)   │◀──────────────│  (server)    │           │          │
└─────────────┘               └──────────────┘           └──────────┘

The server runs as an MCP server (launched by Claude, Cursor, etc.) and opens a WebSocket port. Your app connects as a client and exposes its Zustand stores. The AI can then list stores, read state, write state, and call actions.

Related MCP server: redux-mcp

Installation

npm install state-bridge-mcp

Server Setup

Add to your .mcp.json (or equivalent MCP config):

{
  "mcpServers": {
    "app-state": {
      "command": "npx",
      "args": ["state-bridge-mcp"]
    }
  }
}

Custom port

{
  "mcpServers": {
    "app-state": {
      "command": "npx",
      "args": ["state-bridge-mcp", "--port", "9000"]
    }
  }
}

Or via environment variable: STATE_BRIDGE_PORT=9000

Default port: 8098

Client Usage

import { createStateBridge } from 'state-bridge-mcp/client';
import { useSessionStore, useAppStore } from './store';

const bridge = createStateBridge({
  stores: {
    session: useSessionStore,
    app: useAppStore,
  },
  url: 'ws://localhost:8098',
});

// Later, to tear down:
bridge.stop();

React Native (Android emulator)

For Android emulator, use 10.0.2.2 to reach the host machine:

const bridge = createStateBridge({
  stores: { session: useSessionStore, app: useAppStore },
  url: 'ws://10.0.2.2:8098',
});

Client Config

Option

Type

Default

Description

stores

Record<string, StoreEntry>

required

Named map of Zustand stores

url

string

ws://localhost:8098

WebSocket URL of the MCP server

reconnectInterval

number

3000

Auto-reconnect interval in ms. 0 to disable.

onConnect

() => void

—

Called when WebSocket opens

onDisconnect

() => void

—

Called when WebSocket closes

MCP Tools

Once connected, the AI has access to these tools:

Tool

Description

connection_status

Check if a client app is connected

list_stores

List all stores and their top-level state keys

get_state

Read state from a store (supports dot-paths like settings.theme)

set_state

Write a value at a dot-path (supports arbitrary depth)

call_action

Invoke a store action function by name

Store Compatibility

Any object with getState() and setState() works. Zustand stores satisfy this out of the box:

type StoreEntry = {
  getState: () => Record<string, unknown>;
  setState: (partial: Record<string, unknown>) => void;
};

License

MIT

Available Tools

5 tools
call_actionB

Invoke a store action function by name (e.g. "clearHistory", "setActiveTab")

Inputs: store (required), action (required), args.

connection_statusB

Check if a client app is connected via WebSocket

Inputs: no named parameters.

get_stateA

Read state from a Zustand store. Optionally provide a dot-path to read a specific slice.

Inputs: store (required), path.

list_storesA

List all Zustand stores and their top-level state keys

Inputs: no named parameters.

set_stateA

Write a value to a Zustand store at the given path

Inputs: path (required), store (required), value.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool addresses a distinct concern: actions, connections, reading state, listing stores, and writing state. No overlap or ambiguity between tools.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_state, list_stores), making them predictable and easy to understand.

    Tool Count5/5

    With 5 tools, the set is well-scoped for a state management bridge, covering all essential operations without unnecessary bloat.

    Completeness4/5

    The tools cover core state operations (list, get, set, actions) and a connection check. Missing subscription or store creation, but these are minor gaps for the intended purpose.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers