Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Renamed MCP prompts `/firestore:generate_rules` to `/firestore:generate_security_rules` and `/storage:generate_rules` to `/storage:generate_security_rules`.
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { prompt } from "../../prompt";

export const generateRules = prompt(
export const generateSecurityRules = prompt(
"firestore",
{
name: "generate_rules",
name: "generate_security_rules",
description:
"Generate secure Firebase Firestore Security Rules and corresponding unit tests for your project.",
arguments: [],
Expand Down Expand Up @@ -261,7 +261,7 @@ The test suite must:

'''bash
# Step-1: Navigate to test directory
cd rules_test
cd security_rules_test_firestore

# Step-2: Install dependencies
npm install
Expand Down Expand Up @@ -296,10 +296,10 @@ Provide your response in this structure:

## Generated Files Structure

A complete 'rules_test/' directory will be created as an independent Node.js project:
A complete 'security_rules_test_firestore/' directory will be created as an independent Node.js project:

'''
rules_test/
security_rules_test_firestore/
├── package.json
├── firebase.json
├── firestore.rules (symlinked or copied from root)
Expand Down Expand Up @@ -327,11 +327,11 @@ rules_test/
- Project ID: [project-id]
- Files created:
- firestore.rules (project root)
- rules_test/package.json
- rules_test/firebase.json
- rules_test/firestore.rules
- rules_test/tests/firestore.test.js
- rules_test/README.md
- security_rules_test_firestore/package.json
- security_rules_test_firestore/firebase.json
- security_rules_test_firestore/firestore.rules
- security_rules_test_firestore/tests/firestore.test.js
- security_rules_test_firestore/README.md
'''

**After providing the analysis and summary, create all necessary files:**
Expand All @@ -341,26 +341,26 @@ Files to Create:
1. 'firestore.rules' (in project root)
- Complete Firebase Security Rules with comments

2. 'rules_test/package.json'
2. 'security_rules_test_firestore/package.json'
- Include dependencies: '@firebase/rules-unit-testing', 'jest'
- Include scripts: 'test', 'emulator:start'
- Use the provided Project ID

3. 'rules_test/firebase.json'
3. 'security_rules_test_firestore/firebase.json'
- Configure Firestore emulator
- Reference the rules file
- Use the provided Project ID

4. 'rules_test/firestore.rules'
4. 'security_rules_test_firestore/firestore.rules'
- Copy of the generated rules

5. 'rules_test/tests/firestore.test.js' (or '.ts' if TypeScript)
5. 'security_rules_test_firestore/tests/firestore.test.js' (or '.ts' if TypeScript)
- Complete test suite using '@firebase/rules-unit-testing'
- All CRUD operations tested
- Auth scenarios covered
- Clear test Descriptions

6. 'rules_test/README.md'
6. 'security_rules_test_firestore/README.md'
- Prerequisites checklist
- Step-by-step commands with exact terminal instructions
- Expected output
Expand All @@ -376,7 +376,7 @@ Files to Create:
5. **Do not modify rules during test validation** - only fix test code
6. **Always use firebase_validate_security_rules** before generating the tests
7. **Tests must be JavaScript / TypeScript only** - regardless of the codebase language
8. **Create a self-contained test environment** - the 'rules_test/' directory should be independently runnable
8. **Create a self-contained test environment** - the 'security_rules_test_firestore/' directory should be independently runnable
9. **Provide complete, runnable code** - no placeholders or TODOs
10. **Document all assumptions** about data structure or access patterns
`,
Expand Down
4 changes: 2 additions & 2 deletions src/mcp/prompts/firestore/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { ServerPrompt } from "../../prompt";
import { generateRules } from "./generate_rules";
import { generateSecurityRules } from "./generate_security_rules";

export const firestorePrompts: ServerPrompt[] = [];

firestorePrompts.push(generateRules);
firestorePrompts.push(generateSecurityRules);
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { prompt } from "../../prompt";

export const generateRules = prompt(
export const generateSecurityRules = prompt(
"storage",
{
name: "generate_rules",
name: "generate_security_rules",
description:
"Generate secure Firebase Storage Security Rules and corresponding unit tests for your project.",
arguments: [],
Expand Down Expand Up @@ -142,10 +142,10 @@ Provide your response in this structure:

## Generated Files Structure

A complete 'storage_rules_test/' directory will be created as an independent Node.js project:
A complete 'security_rules_test_storage/' directory will be created as an independent Node.js project:

'
storage_rules_test/
security_rules_test_storage/
├── package.json
├── firebase.json
├── storage.rules (symlinked or copied from root)
Expand Down Expand Up @@ -177,18 +177,18 @@ storage_rules_test/
- Bucket: [bucket-name]
- Files created:
- storage.rules (project root)
- storage_rules_test/package.json
- storage_rules_test/firebase.json
- storage_rules_test/storage.rules
- storage_rules_test/tests/storage.test.js
- storage_rules_test/test-files/[mock files]
- storage_rules_test/README.md
- security_rules_test_storage/package.json
- security_rules_test_storage/firebase.json
- security_rules_test_storage/storage.rules
- security_rules_test_storage/tests/storage.test.js
- security_rules_test_storage/test-files/[mock files]
- security_rules_test_storage/README.md

## Setup and Run Instructions

'''bash
# Navigate to test directory
cd storage_rules_test
cd security_rules_test_storage

# Install dependencies
npm install
Expand All @@ -209,21 +209,21 @@ Files to Create:
- File type and size validations
- Authentication and authorization logic

2. 'storage_rules_test/package.json'
2. 'security_rules_test_storage/package.json'
- Include dependencies: '@firebase/rules-unit-testing', 'jest'
- Include scripts: 'test', 'emulator:start'
- Use the provided Project ID and Bucket Name

3. 'storage_rules_test/firebase.json'
3. 'security_rules_test_storage/firebase.json'
- Configure Firebase Storage emulator
- Reference the rules file
- Use the provided Project ID and Bucket Name
- Configure emulator port (default: 9199)

4. 'storage_rules_test/storage.rules'
4. 'security_rules_test_storage/storage.rules'
- Copy of the generated rules

5. 'storage_rules_test/tests/storage.test.js' (or '.ts' if TypeScript)
5. 'security_rules_test_storage/tests/storage.test.js' (or '.ts' if TypeScript)
- Complete test suite using '@firebase/rules-unit-testing'
- All upload/read/delete operations tested
- File type validation tests
Expand All @@ -232,15 +232,15 @@ Files to Create:
- Clear test Descriptions
- Helper functions for creating mock files

6. 'storage_rules_test/test-files/' (directory)
6. 'security_rules_test_storage/test-files/' (directory)
- Create mock files for testing:
- 'test-image.jpg' (small valid image)
- 'test-image-large.jpg' (oversized image for size validation)
- 'test-document.pdf' (valid document)
- 'test-invalid.exe' (invalid file type)
- Or document how to generate these files in tests

7. 'storage_rules_test/README.md'
7. 'security_rules_test_storage/README.md'
- Setup instructions
- How to run tests
- How to deploy rules
Expand All @@ -254,7 +254,7 @@ Files to Create:
3. **Do not modify rules during test validation** - only fix test code
4. **Always use firebase_validate_security_rules** before generating the tests
5. **Tests must be JavaScript / TypeScript only** - regardless of the codebase language
6. **Create a self-contained test environment** - the 'storage_rules_test/' directory should be independently runnable
6. **Create a self-contained test environment** - the 'security_rules_test_storage/' directory should be independently runnable
7. **Provide complete, runnable code** - no placeholders or TODOs
8. **Test with realistic file scenarios** - include various file types and sizes
9. **Document all assumptions** about storage structure, file types, and access patterns
Expand Down
4 changes: 2 additions & 2 deletions src/mcp/prompts/storage/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { ServerPrompt } from "../../prompt";
import { generateRules } from "./generate_rules";
import { generateSecurityRules } from "./generate_security_rules";

export const storagePrompts: ServerPrompt[] = [];

storagePrompts.push(generateRules);
storagePrompts.push(generateSecurityRules);
Loading