Firestore Server
平台与服务by devlimelabs
通过标准化MCP接口安全访问Firebase Firestore,支持CRUD、复杂查询、批处理、事务及细粒度权限控制。
什么是 Firestore Server?
通过标准化MCP接口安全访问Firebase Firestore,支持CRUD、复杂查询、批处理、事务及细粒度权限控制。
核心功能 (23 个工具)
firestore-list-collectionsList Firestore collections
firestore-get-collectionGet documents from a Firestore collection
firestore-get-documentGet a document from Firestore
firestore-create-documentCreate a new document in Firestore
firestore-update-documentUpdate an existing Firestore document
firestore-delete-documentDelete a document from Firestore
firestore-query-collectionQuery documents in a Firestore collection
firestore-list-subcollectionsList subcollections of a document
firestore-get-collection-by-pathGet documents from a collection using full path (supports subcollections)
firestore-get-document-by-pathGet a document using full path (supports subcollections)
firestore-create-document-by-pathCreate a document in a collection using full path (supports subcollections)
firestore-update-document-by-pathUpdate a document using full path (supports subcollections)
firestore-delete-document-by-pathDelete a document using full path (supports subcollections)
firestore-query-collection-by-pathQuery documents in a collection using full path (supports subcollections)
firestore-batch-writeExecute multiple write operations in a single atomic batch
firestore-batch-readRead multiple documents in a single operation
firestore-transactionExecute a transaction with read and write operations
firestore-increment-fieldAtomically increment a numeric field value
firestore-array-unionAdd elements to an array field without duplicates
firestore-array-removeRemove elements from an array field
firestore-server-timestampSet a field to the server timestamp
firestore-delete-fieldDelete specific fields from a document
firestore-field-value-batchExecute multiple field value operations in a batch
README
Firestore MCP Server
A Model Context Protocol (MCP) server that provides secure, permission-controlled access to Firebase Firestore. This server allows AI assistants and other MCP clients to interact with Firestore databases through a standardized interface.
Features
Core Functionality
- 🔐 Granular Permissions: Control access at the collection and operation level
- 📄 Full CRUD Operations: Create, read, update, and delete documents
- 🔍 Advanced Queries: Support for filtering, ordering, and limiting results
- 📁 Subcollection Support: Work with nested collections and documents
- 🔄 Batch Operations: Execute multiple operations atomically
- 💾 Transactions: Ensure data consistency with transactional operations
- 🎯 Field Value Operations: Atomic increments, array operations, and server timestamps
Security & Control
- ✅ Collection-level access control
- 🛡️ Operation-specific permissions (read, write, delete, query)
- 🔒 Default deny with explicit allow rules
- 📋 Conditional permissions (coming soon)
Installation
Using npm/yarn/pnpm
npm install mcp-firestore
# or
yarn add mcp-firestore
# or
pnpm add mcp-firestore
From Source
git clone https://github.com/yourusername/mcp-firestore.git
cd mcp-firestore
pnpm install
pnpm build
Configuration
Environment Variables
Create a .env file with your Firestore configuration:
# Required
FIRESTORE_PROJECT_ID=your-project-id
# Optional - for authentication
GOOGLE_APPLICATION_CREDENTIALS=path/to/service-account.json
Permission Configuration
Create a permissions.json file to control access:
{
"collections": [
{
"collectionId": "users",
"operations": ["read", "write", "query"]
},
{
"collectionId": "posts",
"operations": ["read", "query"]
}
],
"defaultAllow": false
}
Usage
Starting the Server
# With default permissions
mcp-firestore
# With custom permissions file
mcp-firestore --config permissions.json
# With full access (development only)
mcp-firestore --full-access
# With read-only access to specific collections
mcp-firestore --read-only --collections users,posts
Claude Desktop Integration
Add to your Claude Desktop configuration:
{
"servers": {
"firestore": {
"command": "mcp-firestore",
"args": ["--config", "path/to/permissions.json"],
"env": {
"FIRESTORE_PROJECT_ID": "your-project-id"
}
}
}
}
Available Tools
Basic Operations
-
firestore-list-collections
- List all accessible collections
json{} -
firestore-get-collection
- Get all documents from a collection
json{ "collectionId": "users" } -
firestore-get-document
- Get a specific document
json{ "collectionId": "users", "documentId": "user123" } -
firestore-create-document
- Create a new document
json{ "collectionId": "users", "documentId": "user123", "data": { "name": "John Doe", "email": "john@example.com" } } -
firestore-update-document
- Update an existing document
json{ "collectionId": "users", "documentId": "user123", "data": { "name": "Jane Doe" } } -
firestore-delete-document
- Delete a document
json{ "collectionId": "users", "documentId": "user123" }
Query Operations
- firestore-query-collection
- Query documents with filters
json{ "collectionId": "users", "filters": [ { "field": "age", "operator": ">", "value": 18 } ], "orderBy": { "field": "createdAt", "direction": "desc" }, "limit": 10 }
Subcollection Operations
-
firestore-list-subcollections
- List subcollections of a document
json{ "documentPath": "users/user123" } -
firestore-get-collection-by-path
- Get documents from a subcollection
json{ "collectionPath": "users/user123/orders" } -
firestore-create-document-by-path
- Create a document in a subcollection
json{ "collectionPath": "users/user123/orders", "data": { "item": "Widget", "quantity": 2 } }
Batch Operations
-
firestore-batch-write
- Execute multiple write operations atomically
json{ "operations": [ { "type": "create", "collectionPath": "products", "documentId": "product1", "data": { "name": "Widget" } }, { "type": "update", "documentPath": "inventory/product1", "data": { "count": 100 } } ] } -
firestore-batch-read
- Read multiple documents in one operation
json{ "documentPaths": [ "users/user1", "users/user2", "products/product1" ] } -
firestore-transaction
- Execute a transaction with reads and conditional writes
json{ "reads": ["products/product1"], "operations": [ { "type": "update", "documentPath": "products/product1", "data": { "stock": 99 } } ], "conditionScript": "return readResults['products/product1'].data.stock > 0;" }
Field Value Operations
-
firestore-increment-field
- Atomically increment a numeric field
json{ "documentPath": "stats/daily", "field": "visitCount", "incrementBy": 1 } -
firestore-array-union
- Add elements to an array without duplicates
json{ "documentPath": "users/user123", "field": "tags", "elements": ["premium", "verified"] } -
firestore-server-timestamp
- Set fields to server timestamp
json{ "documentPath": "users/user123", "fields": ["lastLogin", "modifiedAt"] }
Resources
The server also provides MCP resources for direct access to Firestore data:
firestore://collections- List all collectionsfirestore://collection/{collectionId}- Access collection datafirestore://collection/{collectionId}/document/{documentId}- Access document datafirestore://path/{path}- Access any path (collections or documents)
Examples
Basic CRUD Operations
// Create a new user
await client.callTool("firestore-create-document", {
collectionId: "users",
documentId: "user123",
data: {
name: "John Doe",
email: "john@example.com",
createdAt: new Date().toISOString()
}
});
// Update user data
await client.callTool("firestore-update-document", {
collectionId: "users",
documentId: "user123",
data: {
lastLogin: new Date().toISOString()
}
});
// Query active users
await client.callTool("firestore-query-collection", {
collectionId: "users",
filters: [
{ field: "status", operator: "==", value: "active" }
],
orderBy: { field: "createdAt", direction: "desc" },
limit: 10
});
Working with Subcollections
// Create an order for a user
await client.callTool("firestore-create-document-by-path", {
collectionPath: "users/user123/orders",
data: {
items: ["widget1", "widget2"],
total: 99.99,
status: "pending"
}
});
// Get all orders for a user
await client.callTool("firestore-get-collection-by-path", {
collectionPath: "users/user123/orders"
});
Batch Operations
// Atomic updates across multiple documents
await client.callTool("firestore-batch-write", {
operations: [
{
type: "update",
documentPath: "products/widget1",
data: { stock: 95 }
},
{
type: "create",
collectionPath: "orders",
data: {
product: "widget1",
quantity: 5,
userId: "user123"
}
},
{
type: "update",
documentPath: "users/user123",
data: { orderCount: 1 }
}
]
});
Field Value Operations
// Increment a counter
await client.callTool("firestore-increment-field", {
documentPath: "stats/global",
field: "totalOrders",
incrementBy: 1
});
// Add tags without duplicates
await client.callTool("firestore-array-union", {
documentPath: "products/widget1",
field: "tags",
elements: ["bestseller", "featured"]
});
// Set server timestamp
await client.callTool("firestore-server-timestamp", {
documentPath: "logs/access",
fields: ["timestamp", "lastModified"]
});
Security Best Practices
- Use Minimal Permissions: Only grant access to collections and operations that are necessary
- Default Deny: Set
defaultAllow: falsein production environments - Service Account Security: Protect your service account credentials
- Environment Variables: Never commit credentials to version control
- Audit Access: Regularly review permission configurations
Development
Running Tests
pnpm test
pnpm test:coverage
Building
pnpm build
Docker
# Build image
docker build -t mcp-firestore .
# Run container
docker run -e FIRESTORE_PROJECT_ID=your-project mcp-firestore
Troubleshooting
Common Issues
-
Authentication Errors
- Ensure
GOOGLE_APPLICATION_CREDENTIALSpoints to a valid service account - Check that the service account has necessary Firestore permissions
- Ensure
-
Permission Denied
- Verify collection is listed in permissions configuration
- Check that the operation is allowed for the collection
-
Connection Issues
- Confirm project ID is correct
- Check network connectivity to Firestore
Contributing
Contributions are welcome! Please read our Contributing Guide for details.
License
MIT License - see LICENSE for details.
Acknowledgments
Built on the Model Context Protocol by Anthropic.
常见问题
Firestore Server 是什么?
通过标准化MCP接口安全访问Firebase Firestore,支持CRUD、复杂查询、批处理、事务及细粒度权限控制。
Firestore Server 提供哪些工具?
提供 23 个工具,包括 firestore-list-collections、firestore-get-collection、firestore-get-document 等。
相关 Skills
MCP构建
by anthropics
聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。
✎ 想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。
Slack动图
by anthropics
面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。
✎ 帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。
接口设计评审
by alirezarezvani
审查 REST API 设计是否符合行业规范,自动检查命名、HTTP 方法、状态码与文档覆盖,识别破坏性变更并给出设计评分,适合评审接口方案和版本迭代前把关。
✎ 做API和架构方案时,它能帮你提前揪出接口设计问题并对齐最佳实践,评审视角系统,团队协作更省心。
相关 MCP Server
Slack 消息
编辑精选by Anthropic
Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。
✎ 这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。
by netdata
io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。
✎ 这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。
by d4vinci
Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。
✎ 这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。