使用说明
Firestore MCP 服务器
一个MCP(模型上下文协议)服务器,它将Firestore数据库作为一组只读工具进行暴露。该项目提供了三种传输方式(可流式传输的HTTP、SSE、STDIO),因此可以在本地、传统服务器或无服务器环境中(如Vercel)运行。
亮点
- 能够识别Firestore的工具,用于列出集合、检查采样模式以及运行过滤/聚合查询
- 为 Firestore 原语(时间戳、GeoPoint、引用)提供安全的序列化方法,以避免 JSON 错误
- 在STDIO、可流式HTTP和SSE传输中共享的干净MCP服务器引导程序
- 用于开发的即用型脚本(
npm run dev*) 和生产 (npm start,npm run start:*) - 与Codex CLI、Claude CLI、Gemini CLI或任何MCP兼容的客户端配合使用
先决条件
- Node.js 18及以上版本 (或您的托管服务提供商所需的运行时)
- Firebase服务帐户JSON文件 具有Firestore访问权限
- 环境变量
FIREBASE_SERVICE_ACCOUNT包含JSON字符串(单行或转义)
.env 示例:
FIREBASE_SERVICE_ACCOUNT='{"type":"service_account","project_id":"your-project",...}'
PORT=3000
安装并运行
npm install
# Streamable HTTP (recommended for remote/serverless)
npm run dev # hot reload via tsx
npm start # production build (uses dist/mcp-streamable-server.js)
# SSE HTTP (legacy long-lived connections)
npm run dev:sse
npm run start:sse
# STDIO (local CLI integrations)
npm run dev:stdio
npm run start:stdio
# Build TypeScript -> dist/
npm run build
运输方式
可流式传输的HTTP(推荐)
- 文件:
src/mcp-streamable-server.ts - 终点:
GET /health– 就绪性探针GET|POST|DELETE /mcp– 由……处理/负责StreamableHTTPServerTransport
- 默认无状态,可部署到 Vercel、Netlify、Cloudflare 等平台。
服务器发送事件(旧版)
- 文件:
src/mcp-http-server.ts - 工作流程:
GET /mcp打开SSE流并返回会话IDPOST /mcp?sessionId=...发送JSON-RPC消息DELETE /mcp?sessionId=...结束会议
- 适用于如铁路或渲染等保持连接开放的平台。
STDIO(仅限本地)
- 文件:
src/index.ts - 通过标准输入输出暴露相同的工具集;非常适合本地命令行界面使用或测试。
MCP 工具
| 工具 | 目的 | 备注 |
|---|---|---|
list_collections |
列出所有顶级集合。 | 返回一个以换行符分隔的列表。 |
inspect_collection_schema |
示例文档(默认10个)和报告字段类型及示例。 | 支持嵌套对象;Firestore特殊类型可安全序列化。 |
query_firestore |
运行过滤、排序、限制和聚合操作。 | 聚合操作(sum, avg忽略非数值条目,响应报告中会显示被忽略的条目数量。 |
示例 query_firestore 呼叫;打电话
{
"name": "query_firestore",
"arguments": {
"collectionPath": "users",
"filters": [
{"field": "age", "operator": ">=", "value": 18}
],
"orderBy": [
{"field": "createdAt", "direction": "desc"}
],
"limit": 10,
"aggregation": {
"count": true,
"sum": "points",
"avg": "score"
}
}
}
连接MCP客户端
Codex CLI(STDIO)
{
"mcpServers": {
"firestore": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"],
"env": {
"FIREBASE_SERVICE_ACCOUNT": "<service-account-json>"
}
}
}
}
Codex/Claude/Gemini 命令行界面(远程流式可传输HTTP)
将客户端指向已部署的终端,并进行设置 transport 到;给;对于;为了 streamable-http:
{
"mcpServers": {
"firestore": {
"url": "https://your-app.example.com/mcp",
"transport": "streamable-http"
}
}
}
笔记
- 该服务器为只读模式;如需执行数据修改操作,必须单独实现。
FIREBASE_SERVICE_ACCOUNT必须保持私密——请在您的托管控制面板或密钥管理器中进行配置。
部署
Vercel(可流式传输的HTTP)
npm i -g vercelvercel loginvercel env add FIREBASE_SERVICE_ACCOUNTnpm run buildvercel --prod
渲染(可流式传输的HTTP)
- 使用蓝图
render.yaml或手动配置它:- 构建命令:
npm run build - 启动命令:
npm start - 必需的环境变量:
FIREBASE_SERVICE_ACCOUNT
- 构建命令:
铁路(SSE 或 Streamable)
- 构建命令:
npm run build - 启动命令:
npm start(可流式传输)onpm run start:sse上海证券交易所 - 环境变量:
FIREBASE_SERVICE_ACCOUNT
API 概述
GET /– 服务元数据GET /health– 健康检查- 可流式传输的HTTP:
GET|POST|DELETE /mcp - 上海证券交易所
GET /mcp,POST /mcp?sessionId=...,DELETE /mcp?sessionId=...
故障排除
- 缺少凭据确保
FIREBASE_SERVICE_ACCOUNT是一个定义正确且有效的JSON。 - 非数值聚合结果响应中指示了有多少文档被忽略。
- 会话错误对于SSE(服务器发送事件),包括
sessionId查询参数;对于可流式传输的HTTP,请确保客户端发送Mcp-Session-Id在需要时添加标题。 - **CORS(跨源资源共享)**默认情况下启用了开放的CORS(跨源资源共享);如果您控制客户端来源,请进行收紧设置。
许可证
MIT——参见 LICENSE 详情请见。