GC-201b · Module 1

Built-in vs External Tools

3 min read

Gemini CLI ships with a set of built-in tools that require zero configuration: read_file, write_file, edit, glob, search_file_content, run_shell_command, google_web_search, web_fetch, list_directory, codebase_investigator, save_memory, and write_todos. These tools are always available and always reliable. They form the foundation of every Gemini CLI workflow. External tools from MCP servers and extensions layer on top of this foundation.

The practical question is: when should you use a built-in tool versus an MCP server? Built-in tools handle file operations, search, and shell execution. MCP servers handle external systems — databases, APIs, cloud services, version control platforms. The dividing line is the boundary of your filesystem. If the tool needs to reach beyond your local machine, it is an MCP server. If it operates on local files and commands, built-in tools handle it.

BUILT-IN TOOLS (always available, zero config)
├── read_file, write_file, edit     → File operations
├── glob, list_directory             → File discovery
├── search_file_content              → Content search (ripgrep-style)
├── run_shell_command                → Shell execution
├── google_web_search, web_fetch     → Web access
├── codebase_investigator            → Deep code analysis
└── save_memory, write_todos         → Session state

EXTERNAL TOOLS (MCP servers, require config)
├── Database servers                 → Query, schema, migrations
├── GitHub/GitLab servers            → PRs, issues, code review
├── Cloud service servers            → Deploy, monitor, configure
└── Custom internal servers          → Your team's specific tools

Do This

  • Use built-in tools for all local file operations and shell commands
  • Use MCP servers for external systems — databases, APIs, cloud services
  • Leverage google_web_search for current documentation and API references

Avoid This

  • Install an MCP server for file operations that built-in tools handle natively
  • Use run_shell_command to query databases when a proper MCP server provides typed tools
  • Ignore web_fetch when you could pull live API docs directly into context