NativeKeel

Static health check for React Native and Expo projects: upgrades, store rules, crashes, security

By AlicanAkyol (individual) JavaScript Local · stdio Developer toolsSecurity

33 popularity score ★ 6 ↓ 786/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 nativekeel -- npx -y nativekeel@latest mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "nativekeel": {
      "command": "npx",
      "args": [
        "-y",
        "nativekeel@latest",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "nativekeel": {
      "command": "npx",
      "args": [
        "-y",
        "nativekeel@latest",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "nativekeel": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "nativekeel@latest",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.nativekeel]
command = "npx"
args = ["-y", "nativekeel@latest", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user nativekeel npx -- -y nativekeel@latest mcp

Settings 1

NATIVEKEEL_MCP_ROOTS Optional: Extra project folders the server may scan, separated by the system path delimiter; set it when the client starts servers outside the project folder.

What it does

NativeKeel is a command-line scanner for React Native and Expo apps that also runs as a local MCP server over stdio (`npx -y nativekeel@latest mcp`). An assistant can point it at a project folder and get back findings with file and line references and a suggested fix: upgrade blockers, settings that Google Play or the App Store would reject, packages off the versions an Expo SDK expects, likely runtime crashes, leaked secrets, insecure network settings, accessibility gaps and performance patterns.

Beyond the scan it builds an ordered upgrade plan and gives a go or no-go verdict on moving to the newest React Native. It also checks whether a given npm library suits a given React Native version, explains a build, launch or store-review error and where the project is affected, and compares the project with an earlier git revision after an upgrade to show what was fixed and what is new. If a release build has already written a source map, it can break the JavaScript bundle down by package and compare it with an older map.

The README lists six MCP tools. The server code (src/mcp.js) registers nine, because `security_audit`, `improve_app` and `upgrade_readiness` are there too but left out of that list. The code caps each findings list it returns at 80 and reports how many were cut. The package has no dependencies beyond Node.js built-ins, and npm releases carry provenance from GitHub Actions. The maker also sells fixed-price upgrade work, while the tool itself is free and MIT-licensed.

What it needs

RuntimeNode.js 20+
Runs onmacOS, Windows, Linux
Also
  • git on PATH for verify_upgrade

npx comes with Node.js. The React Native or Expo project must sit inside the folder the client starts the server in, or in a folder named in NATIVEKEEL_MCP_ROOTS. `verify_upgrade` needs the project to be in a git repository. `measure_bundle` needs a source map from a release build you have already made. No account or API key.

Limits

  • Not covered Static only: it never runs the app or project code and does not measure frame rate or startup time
  • Not covered Its security review is not a penetration test or a compliance verdict
  • Size cap Each findings list is cut at 80 entries, with the number dropped reported (src/mcp.js)
  • Size cap measure_bundle returns the 30 largest packages, 10 duplicates and 10 largest JSON files
  • Limit Only folders under the server's start folder or NATIVEKEEL_MCP_ROOTS can be scanned. A start at the filesystem root counts for nothing
  • Limit Started from a plugin folder (Codex), the boundary is the home folder unless NATIVEKEEL_MCP_ROOTS is set
  • Not covered Accessibility checks cover React Native's own touchables and inputs, not custom components or focus order
  • Limit Unused-package results can miss dynamic imports
  • Limit Its filter for instruction-like text in results is, by its own docs, not a full prompt-injection defense

Static only: it never runs the app or project code, does not measure frame rate or startup time, and its security review is not a penetration test or compliance verdict. Each findings list is cut at 80 entries (src/mcp.js). Only folders under the server's start directory or NATIVEKEEL_MCP_ROOTS can be scanned; when started from a plugin folder (Codex) the boundary is the home folder unless NATIVEKEEL_MCP_ROOTS is set. Accessibility checks cover React Native's own touchables and inputs, not custom components or focus order. Unused-package results can miss dynamic imports. Its filter for instruction-like text in results is, by its own docs, not a complete prompt-injection defense.

Who it suits

Suits developers maintaining React Native or Expo apps who want an assistant to check a project before upgrading React Native or Expo, adding a native library or preparing a store release, all locally and without an account. It reads only and changes nothing, so the assistant still makes the fixes. Projects that are not React Native or Expo get nothing from it, and anyone needing runtime profiling, device testing or a formal security assessment needs other tools.

Tools 9

9 only read. A ? marks an optional parameter.

scan_project
Scan a project folder for findings with file:line locations and fixes, filterable by severitypath: stringmin_severity?: enumoffline?: boolean
security_audit
Security review of secrets, data exposure, account access, backend rules, unsafe code execution and dependency risks, with evidence and fixespath: stringoffline?: booleanmin_severity?: enum
improve_app
Order existing findings across all areas into a review plan with prerequisites and checkspath: stringoffline?: boolean
measure_bundle
Break the release JavaScript bundle down by package from its source map, optionally against an older mappath: stringmap?: stringbase?: string
upgrade_plan
Build an ordered, phased upgrade plan with the reason and steps for each phasepath: stringoffline?: boolean
upgrade_readiness
Verdict on upgrading to the newest version, with the breaking changes that hit this project's code and dependenciespath: stringoffline?: boolean
check_library
Look up an npm library's latest version, New Architecture support, maintenance and the range fitting a React Native versionname: stringreact_native?: string
explain_error
Explain a build, launch, crash or store-review error, its fix and where the project is affectederror: stringpath?: stringoffline?: boolean
verify_upgrade
Compare the project with a git revision to show findings fixed and addedpath: stringbase?: stringoffline?: boolean

Similar servers