El problema
Los servidores MCP (Protocolo de contexto modelo) necesitan claves API para llamar a servicios externos, pero administrar de forma segura estos secretos en las implementaciones de MCP es un problema sin resolver para la mayoría de los equipos. Los errores comunes incluyen codificar claves en el código del servidor MCP, pasarlas como variables de entorno de texto sin formato en Docker o almacenarlas en archivos de configuración controlados por versión. Estas prácticas crean vulnerabilidades de seguridad que los equipos de cumplimiento señalan durante las revisiones, lo que impide que las implementaciones de MCP lleguen a producción.
La solucion de Scavio
Implemente un patrón de administración de secretos de MCP seguro utilizando variables de entorno inyectadas en tiempo de ejecución desde un administrador de secretos (AWS Secrets Manager, HashiCorp Vault o incluso un archivo .env local excluido de git). El servidor MCP lee claves API de variables de entorno, nunca de código o archivos de configuración. Para el servidor MCP de Scavio en mcp.scavio.dev/mcp, la clave API se pasa como encabezado, manteniéndola completamente fuera del código base del servidor MCP.
Antes
Antes: un equipo tenía claves API codificadas en 4 configuraciones de servidor MCP registradas en GitHub. Una auditoría de seguridad marcó los 4. La rotación de las claves comprometidas tomó 2 días y rompió 3 integraciones posteriores. La implementación de MCP estuvo bloqueada en producción durante 3 semanas durante la corrección.
Después
Después: todos los secretos de MCP se almacenan en AWS Secrets Manager y se inyectan como variables de entorno al iniciar el contenedor. La rotación de claves está automatizada sin tiempo de inactividad. La auditoría de seguridad pasó la primera revisión. Los servidores MCP alcanzaron la producción en 1 semana.
Para quien es
Ingenieros de DevOps y equipos de seguridad que implementan servidores MCP en producción. Cualquiera que no haya superado una auditoría de seguridad debido a claves API codificadas en la infraestructura del agente.
Beneficios clave
- Cero secretos codificados en el código del servidor MCP o archivos de configuración
- Rotación de claves automatizada sin necesidad de reiniciar el servidor MCP
- Pasar auditorías de seguridad en la primera revisión con gestión de secretos documentada
- La inyección de variables de entorno funciona con Docker, K8 y sin servidor
- La clave API de Scavio permanece en los encabezados, nunca en el código fuente del servidor MCP
Ejemplo en Python
import os
import requests
# Secret injected via environment variable at runtime
# Never hardcode: API_KEY = "sk-abc123" # DO NOT DO THIS
API_KEY = os.environ["SCAVIO_API_KEY"]
def mcp_search_handler(query: str, platform: str = "google") -> dict:
"""MCP tool handler that reads API key from environment."""
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query},
timeout=10,
)
return r.json()
# For AWS Secrets Manager rotation:
import json
try:
import boto3
client = boto3.client("secretsmanager")
secret = json.loads(client.get_secret_value(SecretId="scavio-api-key")["SecretString"])
API_KEY = secret["api_key"]
except ImportError:
pass # Fall back to env var in non-AWS environments
result = mcp_search_handler("secure mcp deployment patterns")
print(f"Results: {len(result.get("organic", []))}")Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
if (!API_KEY) throw new Error("SCAVIO_API_KEY environment variable is required");
async function mcpSearchHandler(query, platform = "google") {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform, query }),
});
return res.json();
}
// For secret rotation without restart:
async function getRotatedKey() {
// AWS Secrets Manager, Vault, or any secret store
// Cache with TTL to avoid per-request lookups
const cached = globalThis.__scavioKeyCache;
if (cached && Date.now() - cached.ts < 300000) return cached.key;
// Fetch fresh key from secret manager here
const freshKey = process.env.SCAVIO_API_KEY; // placeholder
globalThis.__scavioKeyCache = { key: freshKey, ts: Date.now() };
return freshKey;
}
const result = await mcpSearchHandler("secure mcp deployment patterns");
console.log(`Results: ${(result.organic || []).length}`);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
YouTube
Búsqueda de videos con transcripciones y metadatos
Amazon
Búsqueda de productos con precios, calificaciones y reseñas