<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yuji Yamamoto</title>
    <description>The latest articles on DEV Community by Yuji Yamamoto (@yamamoto_yuji_c3064a0e502).</description>
    <link>https://dev.to/yamamoto_yuji_c3064a0e502</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2617642%2Fd79da494-7849-45a9-8207-ac8b64120c9f.jpg</url>
      <title>DEV Community: Yuji Yamamoto</title>
      <link>https://dev.to/yamamoto_yuji_c3064a0e502</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yamamoto_yuji_c3064a0e502"/>
    <language>en</language>
    <item>
      <title>I Built 'firex' - A CLI Tool for Firestore Operations with AI Agent Integration</title>
      <dc:creator>Yuji Yamamoto</dc:creator>
      <pubDate>Mon, 22 Dec 2025 00:34:07 +0000</pubDate>
      <link>https://dev.to/yamamoto_yuji_c3064a0e502/i-built-firex-a-cli-tool-for-firestore-operations-with-ai-agent-integration-2cfm</link>
      <guid>https://dev.to/yamamoto_yuji_c3064a0e502/i-built-firex-a-cli-tool-for-firestore-operations-with-ai-agent-integration-2cfm</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Have you ever felt frustrated with Firestore and thought:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I just want to quickly check some data, but opening the console every time is tedious..."&lt;/li&gt;
&lt;li&gt;"I want to export production data to my local environment"&lt;/li&gt;
&lt;li&gt;"I need to query with multiple WHERE conditions, but the console has limitations"&lt;/li&gt;
&lt;li&gt;"I want Claude Code or Gemini CLI to directly operate Firestore"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve these problems, I created a CLI tool called &lt;strong&gt;firex&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/hummer98" rel="noopener noreferrer"&gt;
        hummer98
      &lt;/a&gt; / &lt;a href="https://github.com/hummer98/firex" rel="noopener noreferrer"&gt;
        firex
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Firebase Firestore CLI tool for command-line operations - Read, write, query, and manage Firestore data from your terminal
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;English | &lt;strong&gt;&lt;a href="https://github.com/hummer98/firex/README-jp.md" rel="noopener noreferrer"&gt;日本語&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/hummer98/firex/.github/banner.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fhummer98%2Ffirex%2F.github%2Fbanner.png" alt="firex banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;firex&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Firebase Firestore CLI tool for command-line operations.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;firex&lt;/code&gt; is a powerful command-line interface tool for managing Firebase Firestore databases. It allows developers to perform CRUD operations, execute queries, and manage data efficiently without relying on the Firebase Console GUI. It also works as an &lt;strong&gt;MCP (Model Context Protocol) server&lt;/strong&gt;, enabling AI assistants like Claude to interact with Firestore directly.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#command-reference" rel="noopener noreferrer"&gt;Command Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#configuration-file" rel="noopener noreferrer"&gt;Configuration File&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#environment-variables" rel="noopener noreferrer"&gt;Environment Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#timestamp-formatting" rel="noopener noreferrer"&gt;Timestamp Formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#troubleshooting" rel="noopener noreferrer"&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#security-considerations" rel="noopener noreferrer"&gt;Security Considerations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#toon-output-format" rel="noopener noreferrer"&gt;TOON Output Format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#mcp-server-integration" rel="noopener noreferrer"&gt;MCP Server Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#development" rel="noopener noreferrer"&gt;Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#requirements" rel="noopener noreferrer"&gt;Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document Operations&lt;/strong&gt;: Read, create, update, and delete Firestore documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collection Queries&lt;/strong&gt;: List documents with filtering, sorting, and pagination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch Operations&lt;/strong&gt;: Import and export collections to/from JSON files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Monitoring&lt;/strong&gt;: Watch documents and collections for changes with &lt;code&gt;--watch&lt;/code&gt; flag&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Output Formats&lt;/strong&gt;: JSON, YAML, table, and TOON format support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timestamp Formatting&lt;/strong&gt;: Flexible…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/hummer98/firex" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  What is firex?
&lt;/h2&gt;

&lt;p&gt;It's a CLI tool that lets you perform CRUD operations on Firestore directly from your terminal.&lt;/p&gt;

&lt;p&gt;Surprisingly, neither the &lt;code&gt;firebase&lt;/code&gt; CLI nor the &lt;code&gt;gcloud&lt;/code&gt; CLI provides commands to get or manipulate Firestore documents. firex fills this gap.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run instantly without installation&lt;/span&gt;
npx @hummer98/firex list &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="nt"&gt;--where&lt;/span&gt; &lt;span class="s2"&gt;"status==active"&lt;/span&gt; &lt;span class="nt"&gt;--limit&lt;/span&gt; 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Additionally, it works as an &lt;strong&gt;MCP (Model Context Protocol) server&lt;/strong&gt;, allowing AI coding agents like Claude Code and Gemini CLI to directly operate Firestore.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Basic CRUD Operations
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get a document&lt;/span&gt;
firex get &lt;span class="nb"&gt;users&lt;/span&gt;/user123

&lt;span class="c"&gt;# List a collection&lt;/span&gt;
firex list &lt;span class="nb"&gt;users&lt;/span&gt;

&lt;span class="c"&gt;# Create or update a document&lt;/span&gt;
firex &lt;span class="nb"&gt;set users&lt;/span&gt;/user123 &lt;span class="s1"&gt;'{"name": "John", "status": "active"}'&lt;/span&gt;

&lt;span class="c"&gt;# Partial update&lt;/span&gt;
firex update &lt;span class="nb"&gt;users&lt;/span&gt;/user123 &lt;span class="s1"&gt;'{"lastLogin": "2024-12-20"}'&lt;/span&gt;

&lt;span class="c"&gt;# Delete&lt;/span&gt;
firex delete &lt;span class="nb"&gt;users&lt;/span&gt;/user123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Complex Queries
&lt;/h3&gt;

&lt;p&gt;You can perform queries with multiple conditions - something firebase-tools can't do:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Multiple WHERE conditions + sort + limit&lt;/span&gt;
firex list products &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--where&lt;/span&gt; &lt;span class="s2"&gt;"category==electronics"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--where&lt;/span&gt; &lt;span class="s2"&gt;"price&amp;gt;1000"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--order-by&lt;/span&gt; price &lt;span class="nt"&gt;--order-dir&lt;/span&gt; desc &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--limit&lt;/span&gt; 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Real-time Monitoring
&lt;/h3&gt;

&lt;p&gt;Use the &lt;code&gt;--watch&lt;/code&gt; flag to monitor document or collection changes in real-time:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Watch document changes&lt;/span&gt;
firex get &lt;span class="nb"&gt;users&lt;/span&gt;/user123 &lt;span class="nt"&gt;--watch&lt;/span&gt;

&lt;span class="c"&gt;# Watch collection changes&lt;/span&gt;
firex list orders &lt;span class="nt"&gt;--watch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is useful for debugging during development or monitoring production environments.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Export &amp;amp; Import
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Export a collection to JSON&lt;/span&gt;
firex &lt;span class="nb"&gt;export users&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; backup.json

&lt;span class="c"&gt;# Export including subcollections&lt;/span&gt;
firex &lt;span class="nb"&gt;export users&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; full-backup.json &lt;span class="nt"&gt;--include-subcollections&lt;/span&gt;

&lt;span class="c"&gt;# Import&lt;/span&gt;
firex import backup.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  5. Multiple Project Support
&lt;/h3&gt;

&lt;p&gt;Manage multiple environments with &lt;code&gt;.firex.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .firex.yaml&lt;/span&gt;
&lt;span class="na"&gt;projectId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev-project&lt;/span&gt;
&lt;span class="na"&gt;credentialPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./dev-service-account.json&lt;/span&gt;

&lt;span class="na"&gt;profiles&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;staging&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;projectId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;staging-project&lt;/span&gt;
  &lt;span class="na"&gt;production&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;projectId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;prod-project&lt;/span&gt;
    &lt;span class="na"&gt;credentialPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./prod-service-account.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check production data&lt;/span&gt;
firex list &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  6. Output Format Options
&lt;/h3&gt;

&lt;p&gt;Choose the output format based on your needs:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;firex list &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; json   &lt;span class="c"&gt;# JSON (default)&lt;/span&gt;
firex list &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; yaml   &lt;span class="c"&gt;# YAML&lt;/span&gt;
firex list &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; table  &lt;span class="c"&gt;# Human-readable table&lt;/span&gt;
firex list &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; toon   &lt;span class="c"&gt;# Token-optimized (for AI agents)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  7. Timestamp Display Formats (New in v0.6.0)
&lt;/h3&gt;

&lt;p&gt;Format timestamps according to your preference:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;firex list logs &lt;span class="nt"&gt;--timestamp-format&lt;/span&gt; iso       &lt;span class="c"&gt;# 2024-12-22T10:30:00.000Z (default)&lt;/span&gt;
firex list logs &lt;span class="nt"&gt;--timestamp-format&lt;/span&gt; locale    &lt;span class="c"&gt;# 12/22/2024, 10:30:00 AM&lt;/span&gt;
firex list logs &lt;span class="nt"&gt;--timestamp-format&lt;/span&gt; relative  &lt;span class="c"&gt;# 2 hours ago&lt;/span&gt;
firex list logs &lt;span class="nt"&gt;--timestamp-format&lt;/span&gt; unix      &lt;span class="c"&gt;# 1703241000&lt;/span&gt;
firex list logs &lt;span class="nt"&gt;--timestamp-format&lt;/span&gt; unix-ms   &lt;span class="c"&gt;# 1703241000000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  8. Environment Diagnostics (New in v0.5.0)
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;doctor&lt;/code&gt; command helps diagnose your environment setup:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check your environment&lt;/span&gt;
firex doctor

&lt;span class="c"&gt;# JSON output for CI/CD&lt;/span&gt;
firex doctor &lt;span class="nt"&gt;--json&lt;/span&gt;

&lt;span class="c"&gt;# Verbose output for debugging&lt;/span&gt;
firex doctor &lt;span class="nt"&gt;--verbose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js version (requires 18.0.0+)&lt;/li&gt;
&lt;li&gt;Firebase CLI installation&lt;/li&gt;
&lt;li&gt;Authentication (ADC or Service Account)&lt;/li&gt;
&lt;li&gt;Firestore API access&lt;/li&gt;
&lt;li&gt;Config file validation&lt;/li&gt;
&lt;li&gt;Emulator connection&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  AI Coding Agent Integration (MCP Server)
&lt;/h2&gt;

&lt;p&gt;The standout feature of firex is that it works as an &lt;strong&gt;MCP server&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Do We Need an MCP Server?
&lt;/h3&gt;

&lt;p&gt;Have you ever seen an AI coding agent try to access Firestore with commands like this?&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Non-existent command that AI tends to generate&lt;/span&gt;
gcloud firestore documents get projects/PROJECT_ID/databases/&lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;/documents/users/user123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;As mentioned earlier, CLI commands for Firestore operations don't exist, so AI generates fictional commands.&lt;/p&gt;

&lt;p&gt;By registering firex as an MCP server, AI can use the correct tools to operate Firestore.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is MCP?
&lt;/h3&gt;

&lt;p&gt;MCP (Model Context Protocol) is a protocol for AI to integrate with external tools. It was created by Anthropic and is now adopted by many AI coding agents including Claude Code, Gemini CLI, and VS Code (GitHub Copilot).&lt;/p&gt;
&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;
&lt;h4&gt;
  
  
  For Claude Code
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add firex &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;FIRESTORE_PROJECT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-project-id &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;GOOGLE_APPLICATION_CREDENTIALS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/service-account.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; npx @hummer98/firex mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  For Claude Desktop
&lt;/h4&gt;

&lt;p&gt;Add to &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"firex"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"@hummer98/firex"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"FIRESTORE_PROJECT_ID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-project-id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"GOOGLE_APPLICATION_CREDENTIALS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/service-account.json"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;

&lt;p&gt;After setup, just give natural language instructions to the AI:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Get 10 users with status 'active' from the users collection"

"Update user123's lastLogin to today's date"

"Export the orders collection"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The AI will call the appropriate firex tools to operate Firestore.&lt;/p&gt;
&lt;h3&gt;
  
  
  Available MCP Tools
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_get&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Get a document&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Query a collection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_set&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create or update a document&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Partial update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_delete&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete a document&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_collections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List collections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_export&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;firestore_import&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Import data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Comparison with Other Tools
&lt;/h2&gt;

&lt;p&gt;In 2025, Google released the official &lt;a href="https://firebase.google.com/docs/ai-assistance/mcp-server" rel="noopener noreferrer"&gt;Firebase MCP Server&lt;/a&gt;. Here's how firex compares:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;firex&lt;/th&gt;
&lt;th&gt;Firebase MCP Server&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Get document&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query (filter)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create/Update document&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete document&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Export/Import&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works as CLI&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (MCP only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time monitoring&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;--watch&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timestamp formatting&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment diagnostics&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;doctor&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manage all Firebase&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (Auth, Storage, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;When to use which&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;firex&lt;/strong&gt;: Specialized for Firestore data operations. Use when you also want a CLI, need export/import, or prefer detailed timestamp control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firebase MCP&lt;/strong&gt;: Use when you want to manage all of Firebase (Auth, Storage, Hosting, etc.) with AI&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Authentication Setup
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Option A: Service account key&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_APPLICATION_CREDENTIALS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/service-account.json

&lt;span class="c"&gt;# Option B: gcloud ADC&lt;/span&gt;
gcloud auth application-default login

&lt;span class="c"&gt;# Option C: Emulator (for development)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;FIRESTORE_EMULATOR_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Run
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Specify project ID&lt;/span&gt;
npx @hummer98/firex list &lt;span class="nb"&gt;users&lt;/span&gt; &lt;span class="nt"&gt;--project-id&lt;/span&gt; your-project-id

&lt;span class="c"&gt;# Or set via environment variable&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;FIRESTORE_PROJECT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-project-id
npx @hummer98/firex list &lt;span class="nb"&gt;users&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Check and Debug Production Data
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check a specific user's data&lt;/span&gt;
firex get &lt;span class="nb"&gt;users&lt;/span&gt;/problematic-user-id

&lt;span class="c"&gt;# Check recently created documents&lt;/span&gt;
firex list logs &lt;span class="nt"&gt;--order-by&lt;/span&gt; createdAt &lt;span class="nt"&gt;--order-dir&lt;/span&gt; desc &lt;span class="nt"&gt;--limit&lt;/span&gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Data Backup and Migration
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Export from production&lt;/span&gt;
firex &lt;span class="nb"&gt;export users&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; production &lt;span class="nt"&gt;--output&lt;/span&gt; users-backup.json

&lt;span class="c"&gt;# Import to staging&lt;/span&gt;
firex import users-backup.json &lt;span class="nt"&gt;--profile&lt;/span&gt; staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Real-time Debugging During Development
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Monitor data changes while operating the frontend&lt;/span&gt;
firex list orders &lt;span class="nt"&gt;--watch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Data Operations via AI Coding Agent
&lt;/h3&gt;

&lt;p&gt;With Claude Code or Gemini CLI:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Get orders from the past week and calculate the total amount"
"Update all orders with status='pending' to 'processing'"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Global installation&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @hummer98/firex

&lt;span class="c"&gt;# Or run with npx (no installation needed)&lt;/span&gt;
npx @hummer98/firex &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;firex was born from my personal desire to "interact with Firestore from the terminal."&lt;/p&gt;

&lt;p&gt;The MCP server feature is especially useful when developing Firebase projects with Claude Code or Gemini CLI. Just say "show me this data" or "update that field," and the AI handles it for you.&lt;/p&gt;

&lt;p&gt;Feedback and feature requests are welcome on GitHub Issues and Discussions!&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/hummer98" rel="noopener noreferrer"&gt;
        hummer98
      &lt;/a&gt; / &lt;a href="https://github.com/hummer98/firex" rel="noopener noreferrer"&gt;
        firex
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Firebase Firestore CLI tool for command-line operations - Read, write, query, and manage Firestore data from your terminal
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;English | &lt;strong&gt;&lt;a href="https://github.com/hummer98/firex/README-jp.md" rel="noopener noreferrer"&gt;日本語&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/hummer98/firex/.github/banner.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fhummer98%2Ffirex%2F.github%2Fbanner.png" alt="firex banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;firex&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Firebase Firestore CLI tool for command-line operations.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;firex&lt;/code&gt; is a powerful command-line interface tool for managing Firebase Firestore databases. It allows developers to perform CRUD operations, execute queries, and manage data efficiently without relying on the Firebase Console GUI. It also works as an &lt;strong&gt;MCP (Model Context Protocol) server&lt;/strong&gt;, enabling AI assistants like Claude to interact with Firestore directly.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of Contents&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#command-reference" rel="noopener noreferrer"&gt;Command Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#configuration-file" rel="noopener noreferrer"&gt;Configuration File&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#environment-variables" rel="noopener noreferrer"&gt;Environment Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#timestamp-formatting" rel="noopener noreferrer"&gt;Timestamp Formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#troubleshooting" rel="noopener noreferrer"&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#security-considerations" rel="noopener noreferrer"&gt;Security Considerations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#toon-output-format" rel="noopener noreferrer"&gt;TOON Output Format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#mcp-server-integration" rel="noopener noreferrer"&gt;MCP Server Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#development" rel="noopener noreferrer"&gt;Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#requirements" rel="noopener noreferrer"&gt;Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hummer98/firex#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document Operations&lt;/strong&gt;: Read, create, update, and delete Firestore documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collection Queries&lt;/strong&gt;: List documents with filtering, sorting, and pagination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch Operations&lt;/strong&gt;: Import and export collections to/from JSON files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Monitoring&lt;/strong&gt;: Watch documents and collections for changes with &lt;code&gt;--watch&lt;/code&gt; flag&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Output Formats&lt;/strong&gt;: JSON, YAML, table, and TOON format support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timestamp Formatting&lt;/strong&gt;: Flexible…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/hummer98/firex" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Related Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/@hummer98/firex" rel="noopener noreferrer"&gt;npm: @hummer98/firex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;MCP (Model Context Protocol)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google-gemini/gemini-cli" rel="noopener noreferrer"&gt;Gemini CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://firebase.google.com/docs/ai-assistance/mcp-server" rel="noopener noreferrer"&gt;Firebase MCP Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>firebase</category>
      <category>firestore</category>
      <category>cli</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
