Dynoxide

Local DynamoDB emulator on SQLite whose MCP mode gives coding agents 35 table and item tools

By nubo-db Rust Local · stdio DatabasesDeveloper toolsTesting

62 popularity score ★ 105 ↓ 16k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add dynoxide -- npx -y dynoxide mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "dynoxide": {
      "command": "npx",
      "args": [
        "-y",
        "dynoxide",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "dynoxide": {
      "command": "npx",
      "args": [
        "-y",
        "dynoxide",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "dynoxide": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "dynoxide",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.dynoxide]
command = "npx"
args = ["-y", "dynoxide", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user dynoxide npx -- -y dynoxide mcp
Local (container)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add dynoxide -- docker run -i --rm ghcr.io/nubo-db/dynoxide mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "dynoxide": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/nubo-db/dynoxide",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "dynoxide": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/nubo-db/dynoxide",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "dynoxide": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/nubo-db/dynoxide",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.dynoxide]
command = "docker"
args = ["run", "-i", "--rm", "ghcr.io/nubo-db/dynoxide", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user dynoxide docker -- run -i --rm ghcr.io/nubo-db/dynoxide mcp

Settings 1

DYNOXIDE_MCP_AUTH_TOKEN Optional: Bearer token for the --http transport, used instead of the generated, persisted one; needed for a non-loopback bind. Not used over stdio.

In a container, a setting goes in with -e NAME=value after docker run.

What it does

Dynoxide is a stand-in for Amazon DynamoDB that runs on your own machine. It keeps data in SQLite and ships as one native binary, so it needs no JVM or Docker. The same binary can serve the DynamoDB HTTP API for SDKs and tests, or, with the `mcp` subcommand, run as an MCP server so a coding agent can create tables, write and read items, run queries, scans, PartiQL and transactions, and read stream records against a local copy instead of a real AWS account.

Without `--db-path` the database lives in memory and is gone when the process stops; with it, the data is kept in a SQLite file. Agent-oriented extras include named snapshots you can roll back to, an automatic snapshot before every `delete_table` (the ten most recent are kept), a `--read-only` switch that refuses every write tool, caps on how much a query or scan returns, and a `--data-model` flag that loads a OneTable schema so the agent sees entity names and key templates. `dynoxide import --mcp` can also load a DynamoDB table export into memory, optionally anonymised, and serve that copy.

The v1.3.0 source registers exactly 35 tools (src/mcp/server.rs), matching the docs' count. In the code, `--max-items` and `--max-size-bytes` have no default, so query and scan results are not capped unless you set them. The server talks over stdio by default; `--http` switches to Streamable HTTP on port 19280, bound to 127.0.0.1 unless `--host` is given.

What it needs

RuntimeNode.jsorDocker

The prebuilt binary for macOS (x64, arm64), Linux (x64, arm64) or Windows (x64). The npm way needs Node.js with npx; the package pulls the right binary through optionalDependencies. The container way needs Docker. No AWS account or credentials are needed.

Limits

Built for local development, testing and CI, not as a production DynamoDB. Cloud-only operations (backups and point-in-time restore, global tables, Kinesis streaming, resource policies, capacity management) return UnknownOperationException. ConsistentRead is accepted but does nothing, streams expose a single shard, and transaction-contention errors are not emulated. Vector search is exact brute-force KNN and differs from AWS in ways that can make a test pass locally and fail on AWS; an index added via `update_table` is not searchable at once. The `--data-model` schema is context only: writes are not checked against it. The WebAssembly build is still missing several operations.

Who it suits

Developers building on DynamoDB who want an agent to design tables, seed data and try queries without touching a real AWS account or paying for it. It runs entirely on your machine with no sign-in. It does not reach AWS at all, so it is the wrong pick for inspecting or changing live DynamoDB tables; use a server that works with your AWS account for that. For working on a copy of real data, pair `dynoxide import --mcp` with `--mcp-read-only`.

Tools 35

list_tables
List the tables in the local database
describe_table
Show a table's keys, indexes, vector indexes and status
create_table
Create a table, optionally with GSIs, LSIs, streams or vector indexes
delete_table
Drop a table, taking an automatic snapshot first
update_table
Change a table's settings, indexes or vector indexes
get_item
Fetch one item by its key
put_item
Write or replace one item, with an optional condition
update_item
Change attributes of one item with an update expression
delete_item
Remove one item by its key
batch_get_item
Fetch many items across tables in one call
batch_write_item
Put or delete many items in one call
bulk_put_items
Load a large set of items into a table
query
Read items by partition key, on a table or an index
scan
Read every item in a table or index, with filters
search_vectors
Run a nearest-neighbour search on a vector index
transact_get_items
Read several items as one transaction
transact_write_items
Write several items all-or-nothing
execute_partiql
Run one PartiQL SELECT, INSERT, UPDATE or DELETE statement
batch_execute_partiql
Run a batch of PartiQL statements
execute_transaction_partiql
Run PartiQL statements as one transaction
update_time_to_live
Turn TTL on or off for a table
describe_time_to_live
Show a table's TTL setting
sweep_ttl
Delete items whose TTL has passed, on demand
tag_resource
Add tags to a table
untag_resource
Remove tags from a table
list_tags_of_resource
List a table's tags
list_streams
List the tables' change streams
describe_stream
Show a stream and its single shard
get_shard_iterator
Get a position for reading a stream shard
get_records
Read change records from a stream
create_snapshot
Save a point-in-time copy of the database
restore_snapshot
Roll the database back to a saved snapshot
list_snapshots
List the saved snapshots
delete_snapshot
Remove a saved snapshot
get_database_info
Report database details, including any import notices

Similar servers