| name | gemini-mcp |
| description | Manage MCP (Model Context Protocol) servers with Gemini CLI for extended tool capabilities, custom integrations, and enterprise workflows. Use when integrating external tools, databases, or APIs with Gemini. |
Gemini MCP Server Management
Comprehensive MCP (Model Context Protocol) server integration for extending Gemini CLI with custom tools and capabilities.
What is MCP?
MCP (Model Context Protocol) allows Gemini to connect to external servers that provide additional tools and capabilities:
- Database connections
- API integrations
- Custom business logic
- Enterprise systems
- Specialized tools
Quick Start
List MCP Servers
gemini mcp list
gemini -i
/mcp
gemini mcp test <server-name>
Add MCP Server
gemini mcp add
gemini mcp add \
--name "my-server" \
--command "python" \
--args "-m my_mcp_server" \
--cwd "./mcp-servers/"
Remove Server
gemini mcp remove <server-name>
MCP Configuration
Configuration File
{
"mcpServers": {
"database-tools": {
"command": "python",
"args": ["-m", "database_mcp_server"],
"cwd": "./mcp-tools/database",
"env": {
"DATABASE_URL": "postgresql://localhost/mydb",
"DB_PASSWORD": "$DB_PASSWORD_FROM_ENV"
},
"timeout": 30000,
"trust": false
},
"api-gateway": {
"command": "node",
"args": ["./api-mcp-server.js"],
"cwd": "./mcp-tools/api",
"env": {
"API_KEY": "$API_KEY",
"BASE_URL": "https://api.example.com"
},
"includeTools": ["getUser", "createOrder"],
"excludeTools": ["deleteUser"]
},
"analytics": {
"command": "docker",
"args": ["run", "-p", "8080:8080", "analytics-mcp:latest"],
"timeout": 60000,
"trust": true
}
}
}
Security Settings
{
"mcpServers": {
"secure-server": {
"command": "python",
"args": ["secure_server.py"],
"trust": false,
"includeTools": ["safe_read", "safe_write"],
"excludeTools": ["dangerous_delete"],
"allowedDomains": ["*.internal.com"],
"maxConcurrent": 5,
"rateLimit": {
"requests": 100,
"window": 60000
Building MCP Servers
Python MCP Server
import json
import sys
import psycopg2
from typing import Dict, Any
class DatabaseMCP:
def __init__(self):
self.conn = psycopg2.connect(
os.environ.get('DATABASE_URL')
)
def handle_request(self, request: Dict[str, Any]):
method = request.get('method')
params = request.get('params', {})
if method == 'query':
return self.execute_query(params.get('sql'))
elif method == 'insert':
return self.insert_data(
params.get('table'),
params.get('data')
)
def execute_query(self, sql: str):
cursor = self.conn.cursor()
cursor.execute(sql)
return cursor.fetchall()
def get_tools(self):
return [
{
"name": "database_query",
"description": ,
: {
: ,
: {
: {
: ,
:
}
},
: []
}
},
{
: ,
: ,
: {
: ,
: {
: {: },
: {: }
},
: [, ]
}
}
]
__name__ == :
server = DatabaseMCP()
server.start()
Node.js MCP Server
const { MCPServer } = require('@modelcontextprotocol/server');
const axios = require('axios');
class APIMCPServer extends MCPServer {
constructor() {
super();
this.baseURL = process.env.BASE_URL;
this.apiKey = process.env.API_KEY;
}
async getTools() {
return [
{
name: 'api_get',
description: 'Make GET request to API',
parameters: {
type: 'object',
properties: {
endpoint: {
type: 'string',
description: 'API endpoint path'
},
params: {
type: 'object',
description: 'Query parameters'
}
},
required: ['endpoint']
}
},
{
name: 'api_post',
: ,
: {
: ,
: {
: { : },
: { : }
},
: [, ]
}
}
];
}
() {
headers = {
: ,
:
};
(name) {
:
response = axios.(
,
{ headers, : params. }
);
response.;
:
postResponse = axios.(
,
params.,
{ headers }
);
postResponse.;
:
();
}
}
}
server = ();
server.();
Docker MCP Server
# Dockerfile for MCP server
FROM python:3.11-slim
WORKDIR /app
# Install dependencies
COPY requirements.txt .
RUN pip install -r requirements.txt
# Copy server code
COPY mcp_server.py .
# MCP protocol port
EXPOSE 8080
# Start server
CMD ["python", "mcp_server.py"]
docker build -t my-mcp-server .
docker run -p 8080:8080 -e DATABASE_URL="$DATABASE_URL" my-mcp-server
Usage Patterns
Database Operations
cat > ~/.gemini/mcp-servers.json << 'EOF'
{
"mcpServers": {
"postgres": {
"command": "python",
"args": ["-m", "postgres_mcp"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/db"
}
}
}
}
EOF
gemini --yolo -p "Query the users table and generate comprehensive report of active users from last week"
gemini --yolo -p "Create detailed sales analysis with charts from the orders table"
API Integration
gemini mcp add \
--name "stripe" \
--command "node" \
--args "stripe-mcp.js" \
--env "STRIPE_KEY=$STRIPE_SECRET_KEY"
gemini --yolo -p "Create a new customer and subscription using Stripe with full setup"
gemini --yolo -p "Generate comprehensive transaction report with analytics for this month"
Custom Business Logic
gemini mcp add \
--name "business-rules" \
--command "java" \
--args "-jar business-mcp.jar"
gemini --yolo -p "Validate this order against all business rules and generate compliance report"
gemini --yolo -p "Calculate pricing using custom algorithm and create detailed breakdown"
YOLO Mode with MCP Servers
YOLO mode with MCP servers enables powerful automation for trusted operations:
Automated Data Operations
gemini --yolo -p "Using the database MCP:
1. Query all user activity from last 30 days
2. Generate engagement analytics
3. Create user segmentation report
4. Export findings to CSV
5. Send summary email to stakeholders"
gemini --yolo -p "Synchronize data between PostgreSQL and Redis:
1. Read user sessions from Redis
2. Update last_active in PostgreSQL
3. Clean expired sessions
4. Generate sync report"
API Workflow Automation
gemini --yolo -p "Using Stripe and database MCP servers:
1. Fetch all subscription cancellations from Stripe
2. Update user status in our database
3. Send personalized retention offers
4. Log all actions for audit
5. Generate retention campaign report"
gemini --yolo -p "Complete order processing workflow:
1. Validate order via business rules MCP
2. Process payment via Stripe MCP
3. Update inventory via database MCP
4. Send confirmation via email MCP
5. Log transaction and generate receipt"
Enterprise Automation
gemini --yolo -p "Generate quarterly compliance report:
1. Query all financial data via database MCP
2. Validate against regulations via compliance MCP
3. Generate charts and visualizations
4. Create executive summary
5. Export to PDF and store securely"
gemini --yolo -p "Complete infrastructure health check:
1. Query metrics from monitoring MCP
2. Check service status via K8s MCP
3. Analyze logs via logging MCP
4. Generate incident reports
5. Update status dashboard"
Safe YOLO Practices for MCP
gemini --yolo -p "Generate analytics dashboard from database MCP"
gemini --yolo -p "Sync read-only data between MCP services"
gemini --yolo -p "Create comprehensive status reports from all MCPs"
gemini -p "Plan user data migration between databases"
gemini --yolo -p "Execute the reviewed migration plan"
MCP Server Management Automation
#!/bin/bash
manage_mcp_servers() {
local operation="$1"
case $operation in
health-check)
gemini --yolo -p "Check health of all MCP servers and create status report"
;;
restart-all)
gemini --yolo -p "Safely restart all MCP servers in dependency order"
;;
update-configs)
gemini --yolo -p "Update all MCP server configurations and validate"
;;
deploy-new)
gemini --yolo -p "Deploy new MCP servers from configs and test connections"
;;
esac
}
manage_mcp_servers health-check
Advanced Workflows
Multi-Server Orchestration
#!/bin/bash
orchestrate_mcp() {
gemini mcp start database
gemini mcp start api
gemini mcp start analytics
gemini --yolo -p "Using all available MCP tools:
1. Query user data from database
2. Enrich with API data
3. Analyze with analytics tools
4. Generate comprehensive report"
gemini mcp stop --all
}
Dynamic Server Management
#!/bin/bash
setup_project_mcp() {
local project_type="$1"
case $project_type in
ecommerce)
gemini mcp add --name "payment" --command "payment-mcp"
gemini mcp add --name "inventory" --command "inventory-mcp"
gemini mcp add --name "shipping" --command "shipping-mcp"
;;
analytics)
gemini mcp add --name "bigquery" --command "bq-mcp"
gemini mcp add --name "tableau" --command "tableau-mcp"
;;
devops)
gemini mcp add --name "kubernetes" --command "k8s-mcp"
gemini mcp add --name "terraform" --command "tf-mcp"
;;
esac
echo "MCP servers configured for $project_type project"
}
Health Monitoring
#!/bin/bash
monitor_mcp_health() {
while true; do
echo "=== MCP Server Status ==="
for server in $(gemini mcp list --json | jq -r '.servers[].name'); do
if gemini mcp test "$server" > /dev/null 2>&1; then
echo "✓ $server: Healthy"
else
echo "✗ $server: Unhealthy"
echo " Attempting restart..."
gemini mcp restart "$server"
fi
done
sleep 30
done
}
Load Balancing
{
"mcpServers": {
"api-pool": {
"type": "pool",
"strategy": "round-robin",
"servers": [
{
"command": "node",
"args": ["api-1.js"],
"port": 8081
},
{
"command": "node",
"args": ["api-2.js"],
"port": 8082
},
{
"command": "node"
Security Best Practices
Authentication
{
"mcpServers": {
"secure-server": {
"command": "python",
"args": ["server.py"],
"auth": {
"type": "bearer",
"token": "$MCP_AUTH_TOKEN"
},
"tls": {
"enabled": true,
"cert": "/path/to/cert.pem",
"key": "/path/to/key.pem",
"ca": "/path/to/ca.pem"
}
}
}
}
Tool Restrictions
#!/bin/bash
restrict_mcp_tools() {
local server="$1"
local allowed_tools=("$@")
cat > ~/.gemini/mcp-restrictions.json << EOF
{
"$server": {
"includeTools": [${allowed_tools[@]}],
"requireConfirmation": true,
"logAllCalls": true,
"maxCallsPerMinute": 10
}
}
EOF
gemini mcp update "$server" --config ~/.gemini/mcp-restrictions.json
}
restrict_mcp_tools "database" "read_only_query" "get_schema"
Audit Logging
import logging
import json
from datetime import datetime
class AuditedMCPServer:
def __init__(self):
self.audit_log = logging.getLogger('mcp.audit')
self.audit_log.setLevel(logging.INFO)
handler = logging.FileHandler('/var/log/mcp-audit.log')
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(message)s'
)
handler.setFormatter(formatter)
self.audit_log.addHandler(handler)
def handle_tool_call(self, tool, params, user_context):
self.audit_log.info(json.dumps({
'event': 'tool_call_start',
'tool': tool,
'params': params,
'user': user_context,
'timestamp': datetime.utcnow().isoformat()
}))
try:
result = self.execute_tool(tool, params)
self.audit_log.info(json.dumps({
'event': 'tool_call_success',
'tool': tool,
'result_size': len(str(result))
}))
return result
Exception e:
.audit_log.error(json.dumps({
: ,
: tool,
: (e)
}))
Troubleshooting
Common Issues
- Server Won't Start
gemini mcp logs <server-name>
python -m my_mcp_server --debug
lsof -i :8080
- Connection Timeout
gemini mcp update <server> --timeout 60000
ping localhost
telnet localhost 8080
- Tool Not Available
gemini -i
/tools
gemini mcp refresh <server>
gemini mcp debug <server>
Debug Mode
export GEMINI_MCP_DEBUG=true
gemini --verbose mcp test <server>
gemini --trace -p "Use MCP tools to query database"
Performance Optimization
Connection Pooling
{
"mcpServers": {
"database": {
"command": "python",
"args": ["db_mcp.py"],
"pool": {
"min": 2,
"max": 10,
"idle": 300000
}
}
}
}
Caching
export GEMINI_MCP_CACHE=true
export GEMINI_MCP_CACHE_TTL=300
gemini mcp cache clear
Related Skills
gemini-cli: Main Gemini CLI integration
gemini-auth: Authentication management
gemini-chat: Interactive chat sessions
gemini-tools: Tool execution workflows