Ejemplos Prácticos de MCP Servers
Configuraciones reales de MCP para los casos de uso más comunes.
Configuración base en Claude Code
Toda la configuración de MCP en Claude Code va en ~/.claude/settings.json:
{
"mcpServers": {
"nombre-del-servidor": {
"command": "comando-a-ejecutar",
"args": ["argumento1", "argumento2"],
"env": {
"VARIABLE": "valor"
}
}
}
}
Ejemplo 1: MCP Server de Filesystem
El MCP de filesystem permite a Claude leer y escribir archivos en directorios específicos — con control granular de qué directorios puede acceder.
Instalación y configuración
# No requiere instalación global — npx lo descarga automáticamente
// ~/.claude/settings.json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/home/usuario/proyectos",
"/home/usuario/documentos"
]
}
}
}
Puedes pasar múltiples directorios al servidor de filesystem. Claude solo tendrá acceso a esos directorios específicos, no a todo el sistema de archivos.
Herramientas que expone
Tras configurarlo, Claude tendrá acceso a:
read_file— leer el contenido de un archivowrite_file— crear o sobreescribir un archivoedit_file— editar partes específicas de un archivolist_directory— listar el contenido de un directoriocreate_directory— crear directoriosmove_file— mover o renombrar archivossearch_files— buscar archivos por nombre o contenido
Uso en conversación
Claude: Voy a analizar tu proyecto...
[Lee múltiples archivos automáticamente via MCP]
Tú: "Refactoriza todos los servicios para usar el nuevo patrón de repositorio"
Claude: Voy a proceder:
[Lee src/services/ via MCP filesystem]
[Analiza los patrones actuales]
[Escribe los archivos refactorizados via MCP filesystem]
[Ejecuta los tests para verificar]
Ejemplo 2: MCP Server de PostgreSQL
Permite a Claude consultar y analizar tu base de datos directamente.
Configuración
// ~/.claude/settings.json
{
"mcpServers": {
"postgres-dev": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://dev_user:dev_password@localhost:5432/myapp_dev"
]
}
}
}
Nunca apuntes el MCP a tu base de datos de producción. Usa una réplica de lectura o la base de datos de desarrollo. Un error podría resultar en pérdida de datos.
Con múltiples bases de datos
{
"mcpServers": {
"postgres-dev": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://...dev"],
},
"postgres-staging": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://...staging"],
}
}
}
Herramientas disponibles
query— ejecutar queries SQL (SELECT, INSERT, UPDATE, DELETE)list_tables— listar todas las tablas del schemadescribe_table— ver la estructura de una tablalist_schemas— listar schemas disponibles
Caso de uso: análisis de datos
Tú: "¿Cuáles son los 10 usuarios con más pedidos en los últimos 30 días?"
Claude: Voy a consultar la base de datos...
[Ejecuta via MCP postgres]:
SELECT u.email, COUNT(o.id) as total_orders
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE o.created_at >= NOW() - INTERVAL '30 days'
GROUP BY u.id, u.email
ORDER BY total_orders DESC
LIMIT 10;
[Devuelve resultados y análisis]
Ejemplo 3: MCP Server de GitHub
Permite a Claude interactuar con tu repositorio de GitHub: crear issues, revisar PRs, buscar código.
Configuración
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_tu_token_aqui"
}
}
}
}
Crea un Personal Access Token con solo los permisos que necesites:
repopara repos privadospublic_repopara solo repos públicosissuessi solo necesitas gestionar issues
Herramientas disponibles
get_file_contents— leer archivos del reposearch_repositories— buscar repossearch_code— buscar en el códigocreate_issue— crear issuescreate_pull_request— crear PRslist_pull_requests— listar PRsget_pull_request— detalles de un PRadd_issue_comment— comentar en issues/PRs
Caso de uso: crear issues desde bugs
Tú: "Encontré un bug: el endpoint /api/users no valida el campo email"
Claude: Voy a crear un issue en GitHub...
[Crea issue via MCP GitHub con título, descripción, labels]
✅ Issue #247 creado: "Bug: /api/users no valida campo email"
URL: https://github.com/miorg/mirepo/issues/247
Ejemplo 4: Configuración completa en Gemini CLI
// ~/.gemini/settings.json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/home/usuario/proyectos"
]
},
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://user:pass@localhost/dev_db"
]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."
}
}
}
}
Ejemplo 5: MCP Server personalizado
Puedes crear tu propio MCP Server para exponer datos de tu empresa.
// mcp-server-jira/index.ts
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new Server(
{ name: 'jira-mcp', version: '1.0.0' },
{ capabilities: { tools: {} } }
);
// Definir herramientas disponibles
server.setRequestHandler('tools/list', async () => ({
tools: [
{
name: 'get_ticket',
description: 'Obtiene los detalles de un ticket de Jira',
inputSchema: {
type: 'object',
properties: {
ticket_id: { type: 'string', description: 'ID del ticket (ej: PROJ-123)' }
},
required: ['ticket_id']
}
},
{
name: 'create_ticket',
description: 'Crea un nuevo ticket en Jira',
inputSchema: {
type: 'object',
properties: {
summary: { type: 'string' },
description: { type: 'string' },
issue_type: { type: 'string', enum: ['Bug', 'Story', 'Task'] }
},
required: ['summary', 'issue_type']
}
}
]
}));
// Implementar las herramientas
server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params;
if (name === 'get_ticket') {
// Llamar a la API de Jira
const ticket = await fetchJiraTicket(args.ticket_id);
return { content: [{ type: 'text', text: JSON.stringify(ticket) }] };
}
if (name === 'create_ticket') {
const result = await createJiraTicket(args);
return { content: [{ type: 'text', text: `Ticket creado: ${result.key}` }] };
}
throw new Error(`Herramienta desconocida: ${name}`);
});
// Iniciar el servidor
const transport = new StdioServerTransport();
await server.connect(transport);
Configurar el servidor personalizado
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/path/to/mcp-server-jira/index.js"],
"env": {
"JIRA_URL": "https://miempresa.atlassian.net",
"JIRA_EMAIL": "usuario@empresa.com",
"JIRA_API_TOKEN": "tu-api-token"
}
}
}
}
Verificar que los MCP Servers están activos
# En Claude Code, verificar servidores activos
claude mcp list
# Ver logs de un servidor específico
claude mcp logs filesystem
# Reiniciar un servidor
claude mcp restart postgres
Si un MCP Server no responde, verifica:
- Que el comando está instalado:
npx @modelcontextprotocol/server-filesystem --version - Los permisos de red (firewalls para servidores de base de datos)
- Las variables de entorno están definidas
- Los logs del servidor:
~/.claude/mcp-logs/