Configuración de Sesión
Acepta API keys, ajustes y preferencias de los usuarios que se conectan a tu servidor MCP.
Visión General
La mayoría de servidores MCP necesitan valores proporcionados por el usuario, como API keys, preferencias o ajustes. La forma en que estos valores llegan a tu servidor depende de cómo esté desplegado:
| Tipo de Servidor | Cómo proporcionan la config los usuarios |
|---|---|
| Remoto (HTTP) | Parámetros de query o headers HTTP |
| Local (stdio) | Argumentos de línea de comandos |
Cuando defines un esquema de configuración, SpainMCP se encarga de forma automática de:
- Generar un formulario OAuth UI para servidores remotos
- Pasar los valores a tu servidor en el formato adecuado
- Validar las entradas y aplicar valores por defecto
Los esquemas de configuración están limitados a 20 campos y 1KB de tamaño total. Mantén los esquemas centrados en los ajustes esenciales.
Definir tu Esquema
Exporta un configSchema usando Zod para declarar qué configuración acepta tu servidor:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod/v4";
import type { ServerContext } from "@spainmcp/sdk";
export const configSchema = z.object({
apiKey: z.string()
.meta({ "x-from": { header: "x-api-key" } })
.describe("Tu API key"),
model: z.string().default("gpt-4").describe("Modelo a usar"),
temperature: z.number().min(0).max(1).default(0.7).describe("Temperatura"),
});
export default function createServer({
config,
}: ServerContext<z.infer<typeof configSchema>>) {
const server = new McpServer({
name: "My Server",
version: "1.0.0",
});
// Acceder a los valores proporcionados por el usuario
console.log(`API Key: ${config.apiKey}`);
console.log(`Model: ${config.model}`);
return server.server;
}{
"type": "object",
"properties": {
"apiKey": {
"type": "string",
"description": "Tu API key",
"x-from": { "header": "x-api-key" }
},
"model": {
"type": "string",
"default": "gpt-4",
"description": "Modelo a usar"
},
"temperature": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.7,
"description": "Temperatura"
}
},
"required": ["apiKey"]
}SpainMCP extrae este esquema de manera automática — no hace falta configuración adicional.
Transporte de Config (x-from y x-to)
Las extensiones x-from y x-to determinan cómo fluyen los valores de configuración a través del gateway.
x-from — De dónde lee SpainMCP la config
Indica dónde busca SpainMCP el valor cuando un usuario se conecta:
z.string().meta({
"x-from": { header: "x-api-key" } // Leer de un header
})
z.string().meta({
"x-from": { query: "model" } // Leer de un parámetro de query
})Por defecto: Si no se especifica x-from, se asume { query: "<nombreDePropiedad>" }.
x-to — Hacia dónde envía SpainMCP la config al upstream
Define cómo reenvía SpainMCP el valor a tu servidor upstream. Resulta útil cuando tu servidor espera un nombre de header diferente al que proporcionan los clientes:
z.string().meta({
"x-from": { header: "api-key" }, // El cliente envía: header api-key
"x-to": { header: "Authorization" } // El upstream recibe: header Authorization
})Esto es útil cuando:
- Tu servidor upstream espera un header
Authorization, pero no puedes usarauthorizationcomox-from(está reservado para OAuth de SpainMCP) - Quieres renombrar headers para compatibilidad con APIs existentes
- Necesitas mapear nombres de parámetros amigables a nombres técnicos de headers
Por defecto: Si no se indica x-to, los valores se reenvían con la misma ubicación que x-from.
Ejemplo: API Key de PostHog
export const configSchema = z.object({
posthogApiKey: z.string()
.meta({
"x-from": { header: "posthog-api-key" }, // El cliente envía este header
"x-to": { header: "Authorization" } // PostHog espera Authorization
})
.describe("Tu API key de PostHog"),
});Con esta configuración:
- Los clientes se conectan con el header
posthog-api-key: sk-xxx - Tu servidor recibe el header
Authorization: sk-xxx
Tipos Soportados
Solo los tipos simples admiten x-from:
stringnumberboolean
Los objetos anidados y los arrays no están soportados — solo se permiten esquemas planos.
Headers Reservados
Los siguientes headers no pueden usarse como fuente x-from:
authorization— Reservado para OAuth de SpainMCPcookie— Reservado para gestión de sesionescf-*— Headers de infraestructura Cloudflarespainmcp-*— Headers internos del servicio
Estas restricciones solo aplican a x-from. Puedes usar cualquier nombre de header (incluyendo Authorization) en x-to para reenviar valores a tu servidor upstream.
Cómo llega la Configuración a tu Servidor
En servidores publicados por URL, el SpainMCP Gateway pasa todos los parámetros de query y headers directamente a tu servidor upstream.
GET /mcp?apiKey=sk-xxx&model=gpt-4
x-api-key: sk-xxxTu servidor recibe headers y query params tal cual — SpainMCP los transmite sin modificación.
En servidores locales (stdio), los valores de configuración se pasan como argumentos de línea de comandos al proceso del servidor.
npx @spainmcp/cli run mi-servidor --config '{"apiKey":"sk-xxx","model":"gpt-4"}'Coerción de Tipos
Dado que los parámetros de query, headers y argumentos CLI son strings, SpainMCP convierte los valores automáticamente:
| Tipo del Schema | Coerción |
|---|---|
string | Sin coerción |
number | Number(value) — falla si no es numérico |
boolean | "true" / "1" se convierte en true, "false" / "0" en false |
Buenas Prácticas
Diseño del Schema
- Mantén el esquema lo más simple posible — solo los campos que el usuario realmente necesita proporcionar
- Usa valores
defaultsiempre que sea razonable para reducir la fricción de configuración - Proporciona descripciones claras con
.describe()— aparecen en el formulario de conexión - Marca como requeridos solo los campos verdaderamente imprescindibles (normalmente solo la API key)
Seguridad
- Usa siempre
x-from: { header: "..." }para valores sensibles como API keys — los headers no se registran en logs de acceso, a diferencia de los query params - Nunca pongas valores sensibles por defecto en el esquema
- Considera usar
x-to: { header: "Authorization" }para reenviar API keys a APIs upstream que esperan el header estándar
Resolución de Problemas
¿La configuración no se detecta?
- Comprueba que tu archivo exporta
configSchemacomo named export en el punto de entrada del servidor - Verifica que el esquema usa
z.object({...})de nivel superior - Ejecuta
spainmcp mcp publishde nuevo para forzar un re-escaneo del esquema
¿Errores de tipo?
- Confirma que solo usas
string,numberoboolean— los tipos complejos no están soportados - Comprueba que los valores
defaultcoinciden con el tipo declarado - Revisa que los
min/maxde los campos numéricos son razonables
Preguntas Frecuentes
¿Pueden los usuarios cambiar la configuración a mitad de sesión?
No. La configuración se fija en el momento de la conexión. Para cambiar valores, el usuario debe desconectarse y volver a conectarse con los nuevos parámetros.
¿Pueden ser todos los campos opcionales?
Sí. Si todos los campos tienen valores default, los usuarios pueden conectarse sin proporcionar configuración alguna. El formulario UI mostrará los defaults que pueden modificarse.
¿Dónde puedo ver la configuración de un servidor?
En la página del servidor en mcp.lat, la sección de conexión muestra el esquema de configuración con los campos requeridos y sus descripciones.
Ver También
- Publicar — Publica tu servidor MCP en SpainMCP
- Conectar a MCPs — Cómo los clientes se conectan a servidores con configuración