firestore-operations-manager
关于
This skill handles Firebase/Firestore operations including CRUD, queries, and batch processing for standard applications. It also supports advanced A2A agent communication patterns and integrates with MCP servers and Cloud Run services. Use it when working with Firestore operations, agent-to-agent messaging, or Cloud Run integration.
技能文档
Firestore Operations Manager
Overview
This skill manages Firebase/Firestore operations for both regular web/mobile applications and AI agent-to-agent (A2A) frameworks. It handles:
- Basic Operations: CRUD, queries, batch processing for standard applications
- A2A Framework: Agent-to-agent communication patterns using Firestore as state store
- MCP Integration: Model Context Protocol server communication via Firestore
- Cloud Run Services: Integration patterns for Cloud Run services accessing Firestore
- Security: Proper authentication, validation, and security rules for both humans and agents
Core Capabilities
For Everyone (Basic Firestore)
- Create, read, update, delete documents
- Complex queries with filters and ordering
- Batch operations for efficiency
- Collection management and organization
- Security rules generation and validation
- Data migrations and transformations
For AI Power Users (A2A/MCP)
- Agent session management with Firestore state
- Agent-to-agent messaging and task coordination
- MCP server communication patterns
- Agent memory and context storage
- Cloud Run service integration
- Multi-agent workflow orchestration
When to Use This Skill
This skill activates when users mention:
- Basic operations: "create a firestore document", "query users collection", "batch update documents"
- A2A patterns: "setup agent communication", "A2A task queue", "agent-to-agent messaging"
- MCP integration: "MCP server firestore", "agent memory storage", "session management"
- Cloud Run: "Cloud Run firestore integration", "service account access"
- Security: "firestore security rules", "agent authentication", "service account permissions"
Workflow
Phase 1: Setup and Initialization
For basic users:
- Check if Firebase Admin SDK is installed
- Guide through credential setup (service account JSON)
- Initialize Firestore connection
- Run connection test
- Create basic usage examples
For A2A/MCP users:
- Perform basic setup (above)
- Install additional dependencies (@google-cloud/firestore)
- Create A2A collection structure (sessions, memory, tasks, messages, logs)
- Configure service account whitelisting
- Setup security rules for agent access
- Create MCP service wrapper classes
Example setup:
# Basic setup
npm install firebase-admin
# A2A/MCP setup
npm install firebase-admin @google-cloud/firestore dotenv
# Set credentials
export GOOGLE_APPLICATION_CREDENTIALS="./serviceAccountKey.json"
# Run setup command
/firestore-setup
Phase 2: Basic CRUD Operations
For standard database operations:
Create documents:
const { db, admin } = require('./src/firebase');
// Single document
await db.collection('users').add({
name: 'John Doe',
email: '[email protected]',
createdAt: admin.firestore.FieldValue.serverTimestamp()
});
// With custom ID
await db.collection('users').doc('user123').set({
name: 'Jane Doe',
email: '[email protected]'
});
Read documents:
// Single document
const doc = await db.collection('users').doc('user123').get();
const userData = doc.data();
// Query
const snapshot = await db.collection('users')
.where('status', '==', 'active')
.orderBy('createdAt', 'desc')
.limit(10)
.get();
snapshot.forEach(doc => console.log(doc.data()));
Update documents:
// Partial update
await db.collection('users').doc('user123').update({
status: 'active',
updatedAt: admin.firestore.FieldValue.serverTimestamp()
});
// Increment counter
await db.collection('stats').doc('views').update({
count: admin.firestore.FieldValue.increment(1)
});
Delete documents:
// Single delete
await db.collection('users').doc('user123').delete();
// Batch delete
const batch = db.batch();
const docs = await db.collection('temp').limit(500).get();
docs.forEach(doc => batch.delete(doc.ref));
await batch.commit();
Phase 3: A2A Framework Operations
For agent-to-agent communication patterns:
1. Create Agent Session:
const { MCPService } = require('./src/mcp-service');
const mcp = new MCPService('[email protected]');
// Create session for agent workflow
const sessionId = await mcp.createSession({
task: 'process_user_data',
priority: 'high',
metadata: { userId: 'user123' }
});
console.log(`Session created: ${sessionId}`);
2. Store Agent Context:
// Store agent memory/context in Firestore
await mcp.storeContext(sessionId, {
conversation: [...messages],
userPreferences: { theme: 'dark' },
currentStep: 'data_validation'
});
// Retrieve context later
const context = await db
.collection('agent_memory')
.doc('[email protected]')
.collection('contexts')
.doc(sessionId)
.get();
3. Agent-to-Agent Messaging:
// Send message from one agent to another
await mcp.sendMessage(
'[email protected]',
{
action: 'analyze_data',
data: { userId: 'user123', fields: ['name', 'email'] }
}
);
// Receive messages (in receiving agent)
const messages = await mcp.receiveMessages();
messages.forEach(msg => {
console.log(`From: ${msg.from}, Payload:`, msg.payload);
});
4. Task Queue Management:
// Create task for another agent
await db.collection('a2a_tasks').add({
taskType: 'data_processing',
assignedTo: '[email protected]',
status: 'pending',
priority: 1,
payload: { userId: 'user123' },
createdAt: admin.firestore.FieldValue.serverTimestamp()
});
// Agent claims and processes task
const taskQuery = await db.collection('a2a_tasks')
.where('assignedTo', '==', '[email protected]')
.where('status', '==', 'pending')
.orderBy('priority', 'asc')
.limit(1)
.get();
if (!taskQuery.empty) {
const task = taskQuery.docs[0];
await task.ref.update({ status: 'in_progress' });
// Process task...
await task.ref.update({ status: 'completed' });
}
5. Agent Activity Logging:
// Log agent activities for audit trail
await mcp.logActivity({
action: 'processed_data',
userId: 'user123',
duration: 1500, // ms
result: 'success'
}, 'info');
Phase 4: Cloud Run Integration
For Cloud Run services accessing Firestore:
Setup Cloud Run service class:
const { CloudRunService } = require('./src/cloudrun-service');
const cloudrun = new CloudRunService();
// In your Cloud Run endpoint
app.post('/api/users/:userId/data', async (req, res) => {
const { userId } = req.params;
try {
// Log request
await cloudrun.logRequest('/api/users/data', 'POST', userId);
// Get user data from Firestore
const userData = await cloudrun.getUserData(userId);
// Store response
await cloudrun.storeResponse(req.id, {
userId,
data: userData,
status: 'success'
});
res.json({ success: true, data: userData });
} catch (error) {
await cloudrun.storeResponse(req.id, {
userId,
error: error.message,
status: 'error'
});
res.status(500).json({ error: error.message });
}
});
Phase 5: Security Rules Management
Generate and deploy security rules for both users and agents:
For basic users:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
For A2A/MCP (service accounts):
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isServiceAccount() {
return request.auth.token.email.matches('.*@.*\\.iam\\.gserviceaccount\\.com$');
}
function isAuthorizedAgent() {
return isServiceAccount() && request.auth.token.email in [
'[email protected]',
'[email protected]'
];
}
// Agent sessions
match /agent_sessions/{sessionId} {
allow read, write: if isAuthorizedAgent();
}
// Agent memory
match /agent_memory/{agentId}/{document=**} {
allow read, write: if isAuthorizedAgent();
}
// A2A messages
match /a2a_messages/{messageId} {
allow create: if isAuthorizedAgent();
allow read: if isAuthorizedAgent() &&
(resource.data.from == request.auth.token.email ||
resource.data.to == request.auth.token.email);
}
}
}
Deploy rules:
firebase deploy --only firestore:rules
Advanced Patterns
Pattern 1: Multi-Agent Workflow Orchestration
// Coordinator agent creates workflow
const workflowId = await db.collection('workflows').add({
name: 'user_data_processing',
steps: [
{ agent: '[email protected]', status: 'pending' },
{ agent: '[email protected]', status: 'pending' },
{ agent: '[email protected]', status: 'pending' }
],
createdAt: admin.firestore.FieldValue.serverTimestamp()
});
// Each agent listens for their step
const unsubscribe = db.collection('workflows')
.doc(workflowId)
.onSnapshot(async (doc) => {
const workflow = doc.data();
const myStep = workflow.steps.find(s => s.agent === myEmail && s.status === 'pending');
if (myStep) {
// Process step
await processStep(myStep);
// Mark complete and notify next agent
myStep.status = 'completed';
await doc.ref.update({ steps: workflow.steps });
}
});
Pattern 2: Agent Context Sharing
// Agent 1 stores context
await db.collection('shared_context').doc('task_abc').set({
sharedBy: '[email protected]',
sharedWith: ['[email protected]'],
context: {
userId: 'user123',
analysis: { sentiment: 'positive', score: 0.85 }
},
expiresAt: new Date(Date.now() + 3600000) // 1 hour
});
// Agent 2 retrieves context
const contextDoc = await db.collection('shared_context').doc('task_abc').get();
if (contextDoc.exists && contextDoc.data().sharedWith.includes(myEmail)) {
const context = contextDoc.data().context;
// Use context...
}
Pattern 3: Rate Limiting for Agents
// Check and enforce rate limits
const rateLimitRef = db.collection('rate_limits').doc(agentEmail);
const rateLimitDoc = await rateLimitRef.get();
if (rateLimitDoc.exists) {
const { count, resetAt } = rateLimitDoc.data();
if (Date.now() < resetAt && count >= 100) {
throw new Error('Rate limit exceeded');
}
if (Date.now() >= resetAt) {
// Reset counter
await rateLimitRef.set({
count: 1,
resetAt: Date.now() + 60000 // 1 minute
});
} else {
// Increment counter
await rateLimitRef.update({
count: admin.firestore.FieldValue.increment(1)
});
}
} else {
// First request
await rateLimitRef.set({
count: 1,
resetAt: Date.now() + 60000
});
}
Performance Optimization
For Basic Users:
- Use batch operations - Write/update 500 docs at once
- Create indexes - Required for complex queries
- Paginate results - Use cursor-based pagination
- Cache frequently read data - Reduce read costs
For A2A/MCP Users:
- Connection pooling - Reuse Firestore connections
- Batch agent messages - Combine multiple messages
- TTL for agent data - Clean up expired sessions automatically
- Denormalize agent state - Avoid cross-collection queries
Cost Optimization
Firestore costs:
- Document reads: $0.06 per 100k
- Document writes: $0.18 per 100k
- Document deletes: $0.02 per 100k
Reduce costs:
- Use batch writes (1 operation vs 500)
- Cache agent context locally
- Archive old agent logs to Cloud Storage
- Set up billing alerts
Security Best Practices
- Never allow open access - Always require authentication
- Whitelist service accounts - Don't allow all service accounts
- Validate all inputs - Check types, formats, required fields
- Make logs immutable - Prevent tampering with audit trails
- Rotate credentials - Change service account keys every 90 days
- Monitor usage - Set up Firebase console alerts
- Test rules - Use Firebase Emulator before deploying
Troubleshooting
Issue: Permission Denied
- Check security rules allow the operation
- Verify service account is whitelisted
- Ensure GOOGLE_APPLICATION_CREDENTIALS is set
Issue: A2A Messages Not Delivered
- Verify recipient agent email is correct
- Check message status in Firestore console
- Ensure security rules allow cross-agent messaging
Issue: Rate Limit Errors
- Implement exponential backoff
- Use batch operations
- Increase rate limits in configuration
Issue: Cloud Run Connection Fails
- Verify service account has Firestore permissions
- Check VPC connectivity if using private IP
- Ensure project ID matches in code and credentials
Examples
See examples/firestore-usage.js for complete code examples covering:
- Basic CRUD operations
- Complex queries and pagination
- Batch operations
- A2A agent communication
- MCP server integration
- Cloud Run service patterns
- Security rules testing
Resources
Summary
This skill provides comprehensive Firestore operations for:
- Everyone: Standard database CRUD, queries, batch ops, security
- AI Power Users: A2A communication, MCP integration, Cloud Run services, multi-agent workflows
Use /firestore-setup to initialize, then leverage the agents and commands for specific operations!
快速安装
/plugin add https://github.com/jeremylongshore/claude-code-plugins-plus/tree/main/firestore-manager在 Claude Code 中复制并粘贴此命令以安装该技能
GitHub 仓库
相关推荐技能
llamaguard
其他LlamaGuard是Meta推出的7-8B参数内容审核模型,专门用于过滤LLM的输入和输出内容。它能检测六大安全风险类别(暴力/仇恨、性内容、武器、违禁品、自残、犯罪计划),准确率达94-95%。开发者可通过HuggingFace、vLLM或Sagemaker快速部署,并能与NeMo Guardrails集成实现自动化安全防护。
sglang
元SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。
langchain
元LangChain是一个用于构建LLM应用程序的框架,支持智能体、链和RAG应用开发。它提供多模型提供商支持、500+工具集成、记忆管理和向量检索等核心功能。开发者可用它快速构建聊天机器人、问答系统和自主代理,适用于从原型验证到生产部署的全流程。
evaluating-llms-harness
测试该Skill通过60+个学术基准测试(如MMLU、GSM8K等)评估大语言模型质量,适用于模型对比、学术研究及训练进度追踪。它支持HuggingFace、vLLM和API接口,被EleutherAI等行业领先机构广泛采用。开发者可通过简单命令行快速对模型进行多任务批量评估。
