Skip to main content
Glama
toby7979

sealmyapp

by toby7979
README.md
# SealMyApp tools

Free, open-source security helpers for vibe-coded apps (Lovable, Bolt, Cursor, Replit, v0, and anything on Supabase or Firebase):

- **An MCP server** your AI assistant can call to check whether a key is safe to expose, audit Supabase Row Level Security, generate safe RLS policies and run a pre-launch checklist.
- **A Cursor rule**, **an Agent Skill** (Claude Code and other skill-aware agents) and **an `AGENTS.md` snippet** that stop the AI from leaking secrets or "fixing" empty results with `using (true)`.

Everything here runs locally and makes no network calls.

> Made by [SealMyApp](https://sealmyapp.com), a paid service that finds, fixes and monitors security holes in vibe-coded apps. The tools in this repo are free and MIT-licensed, and you don't need a SealMyApp account to use them.

## Install the MCP server

Requires Node.js 20+ and git. The first run downloads and builds the package from GitHub, so it takes a little longer.

**Claude Code**

```bash
claude mcp add sealmyapp -- npx -y github:toby7979/sealmyapp-tools
```

**Claude Desktop** (`claude_desktop_config.json`: Settings → Developer → Edit Config)

```json
{
  "mcpServers": {
    "sealmyapp": {
      "command": "npx",
      "args": ["-y", "github:toby7979/sealmyapp-tools"]
    }
  }
}
```

**Cursor** (`.cursor/mcp.json` in your project, or `~/.cursor/mcp.json` for all projects)

```json
{
  "mcpServers": {
    "sealmyapp": {
      "command": "npx",
      "args": ["-y", "github:toby7979/sealmyapp-tools"]
    }
  }
}
```

**VS Code** (`.vscode/mcp.json`; note the top-level key is `servers`)

```json
{
  "servers": {
    "sealmyapp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "github:toby7979/sealmyapp-tools"]
    }
  }
}
```

Then ask your assistant things like *"Is a key starting sk_live_ safe in my frontend?"*, *"Give me SQL to audit RLS in my Supabase project"* or *"Run the pre-launch security checklist for my Lovable app"*.

## Tools

| Tool | Input | What it returns |
|---|---|---|
| `check_key_exposure` | `key_or_prefix` | Whether the key is public by design (Supabase anon/publishable, Stripe `pk_`, Firebase web key) or secret (`sk_live_`, `service_role`, `sk-ant-`, ...), and what to do next: rotate first if it's secret. Classified offline from the format. Pass only a prefix; the full key is never echoed back. |
| `supabase_rls_audit_sql` | none | Read-only SQL that lists tables without RLS, policies whose USING/WITH CHECK is `true`, views that bypass RLS and public buckets, plus how to read the results. |
| `rls_policy_template` | `table_kind`: `profiles` \| `posts` \| `orders` \| `messages` \| `files`; optional `owner_column` | Example owner-based policies (select/insert/update/delete with `auth.uid()`) and caveats. |
| `vibe_security_checklist` | optional `builder`: `lovable` \| `bolt` \| `cursor` \| `replit` \| `v0` \| `other` | A pre-launch checklist covering secrets, Supabase, Firebase, auth and payments, with notes for your builder. |
| `scan_my_app_instructions` | `url` | How to run a free, ownership-verified scan of an app you own at sealmyapp.com, and a link to start it. It does not call any API or start a scan. |

Every tool's output ends with a one-line link to SealMyApp's free scan.

## Cursor rule

Copy [`rules/cursor/vibe-security.mdc`](rules/cursor/vibe-security.mdc) into your project's `.cursor/rules/` folder:

```bash
mkdir -p .cursor/rules
curl -fsSL https://raw.githubusercontent.com/toby7979/sealmyapp-tools/main/rules/cursor/vibe-security.mdc -o .cursor/rules/vibe-security.mdc
```

It's set to `alwaysApply: true`. Change it to `false` if you'd rather Cursor pull it in only when the description matches the task.

## Agent Skill (Claude Code and other skill-aware agents)

Copy the [`skills/vibe-security`](skills/vibe-security) folder into `.claude/skills/` in your project (or `~/.claude/skills/` for all projects):

```bash
mkdir -p .claude/skills/vibe-security
curl -fsSL https://raw.githubusercontent.com/toby7979/sealmyapp-tools/main/skills/vibe-security/SKILL.md -o .claude/skills/vibe-security/SKILL.md
```

The agent loads it automatically when you work on keys, env vars, RLS, Firebase rules, auth or payments.

## AGENTS.md

For Codex and other agents that read `AGENTS.md`, paste the section from [`AGENTS.md`](AGENTS.md) into your project's `AGENTS.md`.

## Privacy

- The MCP server runs on your machine over stdio. No tool makes a network call, sends telemetry or reads your files. A test (`test/privacy.test.ts`) fails the build if network or file-system APIs appear in the source.
- `check_key_exposure` works from the key's format only and never tests the key against any API. Pass a prefix (for example `sk_live_`) rather than a whole key: whatever you type goes into your assistant's conversation, which is handled by your AI provider, not by this tool.
- `scan_my_app_instructions` only builds a link. Nothing is sent to SealMyApp unless you open it and start a scan yourself.

## Development

```bash
npm install      # also builds via the prepare script
npm test         # builds, then runs unit tests and a stdio test that spawns the server and lists its tools
npm run build
npm run list-tools
```

The server uses the official MCP TypeScript SDK (`@modelcontextprotocol/server`, v2) with the stdio transport. It serves both 2025-era clients and the 2026-07-28 protocol.

## Contributing

Issues and pull requests are welcome, especially:

- new key formats for `check_key_exposure` (please link the provider's docs saying whether the key is publishable or secret),
- policy templates for other common table shapes,
- builder-specific checklist notes that you've checked against the builder's current UI.

Please keep the tools offline (no network calls) and add a test for any change. Never paste a real secret into an issue; a prefix is enough. Report security problems in this repo privately to hello@sealmyapp.com.

## Licence

MIT. Copyright (c) 2026 Richmond Capital Holdings Ltd. See [LICENSE](LICENSE).

TDQS

A3.8/5.0

Scored across 5 tools

Disambiguation4/5

Most tools target clearly distinct outputs: key classification (check_key_exposure), RLS audit SQL, RLS policy templates, a general checklist, and scan instructions. The two RLS tools (supabase_rls_audit_sql vs rls_policy_template) share a domain and could be momentarily confused, but one audits existing tables while the other provides example policies, so the boundary is workable.

Naming Consistency3/5

All names use snake_case, which is consistent, but the structural convention is mixed: some are verb-led actions (check_key_exposure, scan_my_app_instructions) while others are noun phrases (supabase_rls_audit_sql, rls_policy_template, vibe_security_checklist). Readable but not a single predictable pattern.

Tool Count5/5

Five tools is well-scoped for a lightweight pre-launch security assistant. Each tool covers a distinct advisory function and none feels redundant or padded.

Completeness3/5

The surface covers key exposure, Supabase RLS auditing, RLS templates, and a generic pre-launch checklist, but it lacks an actual scan execution (scan_my_app_instructions only explains how), no dedicated Firebase rules tool despite the checklist mentioning it, and no secret-rotation guidance beyond advisory text. Usable but with notable gaps for the stated 'secure your AI-built app' purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues