Por qué la seguridad importa en los servidores MCP
Los servidores MCP no son APIs pasivas: son agentes que pueden leer archivos, ejecutar consultas de base de datos, publicar en herramientas de comunicación y navegar por la web en nombre de una IA. Un servidor mal configurado puede exponer datos sensibles, permitir mutaciones no deseadas o convertirse en un vector de ataque si las entradas no se validan correctamente.
Antes de desplegar cualquier servidor MCP más allá de su máquina local, revise las cinco prácticas a continuación.
1. Principio de mínimo privilegio
Otorgue a cada servidor únicamente los permisos que necesita para realizar su trabajo. No le dé a un servidor acceso a recursos que no utiliza.
Sistema de archivos: Restrinja las rutas raíz permitidas a los directorios específicos que la IA debe manejar. Nunca apunte el servidor de sistema de archivos a / o C:\.
{
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/home/app/data"
]
}
Bases de datos: Cree un usuario de base de datos dedicado con los privilegios mínimos necesarios. Para análisis de solo lectura, use un rol exclusivo de SELECT:
CREATE USER mcp_readonly WITH PASSWORD 'strongpassword';
GRANT CONNECT ON DATABASE mydb TO mcp_readonly;
GRANT USAGE ON SCHEMA public TO mcp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
Luego conéctese con ese usuario en lugar de las credenciales de escritura de su aplicación.
2. Autenticación y claves de API
Los servidores MCP a menudo requieren claves de API o tokens para acceder a servicios externos. El manejo inadecuado de estas credenciales es el error de seguridad más común.
- Nunca incluya credenciales en duro en archivos de configuración que se suban al control de versiones.
- Use variables de entorno y cárguelas desde un gestor de secretos o un archivo
.envexcluido de git. - Rote las claves regularmente. Trate cualquier clave almacenada en un archivo de configuración como potencialmente comprometida.
- Use tokens con alcance limitado. Los Tokens de Acceso Personal de GitHub admiten permisos detallados: cree uno por servidor con solo los alcances que ese servidor necesita.
En la configuración de Claude Desktop, pase los secretos a través de env:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
3. Validación de entradas
Las entradas generadas por IA fluyen directamente hacia sus servidores como argumentos de herramientas. Trátelas con el mismo escepticismo que aplicaría a las entradas suministradas por usuarios en una aplicación web.
- Sanee las rutas de archivos. Verifique que las rutas resueltas permanezcan dentro de la raíz permitida antes de realizar cualquier operación de archivo. Rechace rutas que contengan secuencias de traversal
... - Parametrice las consultas SQL. Nunca interpole cadenas proporcionadas por la IA directamente en SQL. Use consultas parametrizadas o sentencias preparadas para prevenir inyecciones.
- Valide contra un esquema. La integración de Zod en el SDK de TypeScript para MCP aplica tipos de entrada en el límite. Defina esquemas estrictos para cada argumento de herramienta.
server.tool(
"read_report",
"Read a report file by name",
{
filename: z
.string()
.regex(/^[a-zA-Z0-9_-]+\.csv$/, "Invalid filename format"),
},
async ({ filename }) => {
// filename tiene garantizado coincidir con el patrón seguro
const fullPath = path.join(REPORTS_DIR, filename);
// ...
}
);
4. Seguridad de red
De forma predeterminada, los servidores MCP se comunican mediante stdio con el cliente local. Si expone un servidor a través de una red (para agentes remotos o configuraciones multiusuario), se requieren controles adicionales.
- Localhost por defecto. Mantenga los servidores enlazados a
127.0.0.1a menos que necesite explícitamente acceso remoto. - Use TLS para el transporte remoto. Nunca envíe tráfico MCP a través de HTTP sin cifrar en una red que no controle completamente.
- Reglas de firewall. Si ejecuta en un servidor, restrinja las conexiones entrantes a rangos de IP de confianza.
- Evite exponer interfaces de administración. No ejecute servidores MCP con credenciales de superusuario de base de datos o acceso al sistema de archivos en directorios del sistema en máquinas expuestas a Internet.
5. Registro de auditoría
Debe poder responder: ¿qué hizo la IA, cuándo y con qué entradas? Sin registros, las anomalías son invisibles hasta que el daño está hecho.
- Registre cada invocación de herramienta. Anote el nombre de la herramienta, los argumentos de entrada y el resultado con una marca de tiempo.
- Centralice los registros. Envíe los registros a un almacén central (Datadog, CloudWatch, Loki) en lugar de escribir solo en disco local.
- Configure alertas sobre anomalías. Establezca alertas para patrones inusuales: lecturas masivas de archivos, grandes conjuntos de resultados SQL, mensajes enviados a canales de Slack inesperados.
- Retenga los registros. Conserve un mínimo de 30 días de registros de auditoría para la investigación de incidentes.
Un envoltorio de registro simple en un servidor personalizado:
server.tool("query_db", "Run a SQL query", { sql: z.string() }, async ({ sql }) => {
console.log(JSON.stringify({
event: "tool_invocation",
tool: "query_db",
input: { sql },
timestamp: new Date().toISOString(),
}));
const result = await runQuery(sql);
console.log(JSON.stringify({
event: "tool_result",
tool: "query_db",
rowCount: result.rows.length,
timestamp: new Date().toISOString(),
}));
return { content: [{ type: "text", text: JSON.stringify(result.rows) }] };
});
Ejemplo: Configuración segura de PostgreSQL
Combinando las prácticas anteriores en una configuración de servidor Postgres lista para producción:
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://mcp_readonly:${DB_PASSWORD}@db.internal:5432/analytics"
],
"env": {
"DB_PASSWORD": "${DB_PASSWORD}"
}
}
}
}
- Utiliza un rol
mcp_readonlycon permisos exclusivos deSELECT - Contraseña cargada desde una variable de entorno, no incluida en duro
- Se conecta a un nombre de host interno, no a un endpoint público
- Combínelo con el registro de auditoría en su base de datos (extensión pg_audit) para una observabilidad completa
Recursos
- Especificación de MCP — documentación oficial del protocolo
- OWASP API Security Top 10 — principios generales de seguridad de API aplicables a los servidores MCP
- Tokens detallados de GitHub — configure correctamente el alcance de su token de GitHub