AstroWay/api v2.190.0 · es
todos los sistemas funcionando con normalidad

Estructura de salida tipizada de MCP: ¿por qué 600+ herramientas tienen outputSchema

La mayoría de los servidores MCP devuelven a los agentes un JSON no tipizado - la modelo debe adivinar la forma de la respuesta. Publicamos una estricta outputSchema para 600+ herramientas. Exploramos cómo funciona, qué error lo abrió en los clientes de modo estricto y cómo lo arreglamos a través de esquemas abiertos.

MCP-інструмент може повернути що завгодно - протокол не вимагає описувати форму відповіді. Тому більшість серверів віддають агенту голий JSON, а модель вгадує структуру з тексту. Це працює, поки не ламається: агент бере поле, якого немає, або неправильно інтерпретує вкладеність.

Ми пішли строгим шляхом: понад 600 з наших MCP-інструментів публікують outputSchema - машинну схему відповіді, згенеровану з того самого OpenAPI-контракту, що й REST API.

Cuando el instrumento declara un esquema de salida, el cliente conoce la forma de la respuesta antes de la llamada. El agente no adivina - ve que chart.houses.ascendant existe y tiene tipo «número, longitud eclíptica en grados». Menos alucinaciones sobre la estructura, una cadena de llamadas más precisa, posibilidad de validar la respuesta del lado del cliente.

El catálogo creció paso a paso: 285 instrumentos al inicio, luego 624, ahora más de 630 - y la salida tipada se acercó casi a una cobertura total (más de 600 de 630+). Los esquemas no se escriben a mano: el generador lee en vivo /v1/openapi.json en la compilación, por lo que el drift entre REST y MCP es imposible por construcción.

La estricticidad tiene su precio. Cuando el instrumento declara un esquema closed (ningún campo más allá de los listados), y la respuesta contiene metadatos adicionales, el cliente en modo strict lo rechaza. En los instrumentos chart-family capturamos exactamente eso:

McpError: MCP error -32602: Structured content does not match
the tool's output schema: data must NOT have additional properties

Causa: los esquemas Zod generados estaban en forma closed, y la respuesta real del backend incluía varios campos de metadata de servicio, no declarados en el esquema. El cliente validaba structuredContent contra el esquema en modo strict y lanzaba -32602.

Detalle interesante: Claude Desktop y Cursor no mostraban el bug - están en modo loose y pasan los campos adicionales. Caían los clientes SDK en modo strict, que validan de forma rígida. Es decir, el problema era invisible en los clientes más populares y solo aparecía en integraciones propias sobre el SDK MCP.

Solución: esquemas abiertos en lugar de closed

Sección titulada «Solución: esquemas abiertos en lugar de closed»

La solución no es descartar la tipificación, sino hacer los esquemas abiertos. En el generador de instrumentos, los esquemas ZodObject de salida se convierten a forma passthrough: los campos declarados siguen siendo obligatorios y tipados, y los campos de servicio adicionales pasan la validación, sin romper la llamada.

Para el catálogo hosted se aplicó una variante de respaldo: quitar outputSchema del registro de aquellos instrumentos donde la validación ya estaba rota, para que los clientes strict no fallen mientras los esquemas no estén completamente abiertos. El compromiso es consciente: es mejor una llamada correcta sin validación del cliente que un fallo rígido.

Lección simple: la salida tipada de MCP es útil, pero el esquema de respuesta debe estar abierto a campos adicionales. La API evoluciona, aparecen metadatos, y un esquema closed convierte cada adición en un breaking change para los clientes strict.

El catálogo tipado está disponible por ambas vías:

// hosted, без установки
{
"mcpServers": {
"astroway": {
"url": "https://mcp.astroway.info/mcp",
"headers": { "Authorization": "Bearer aw_live_..." }
}
}
}

O el paquete stdio npx -y @astroway/mcp con la clave en ASTROWAY_API_KEY. Ambos devuelven el mismo catálogo tipado; la guía completa de clientes está en /agent-setup/.

MakSeong · AstroWay

Construyo AstroWay API: envuelvo Swiss Ephemeris en un REST puro y escribo sobre los detalles aburridos que realmente importan.

// construye sobre esto

El mismo Swiss Ephemeris que en Solar Fire - en 4 líneas de código.

Clave gratuita sin tarjeta. 5 000 llamadas al mes antes del primer pago.

Más del blog ver todas las publicaciones →

Engineering 2026-07-15

Tres SDK oficiales: TypeScript, Python, PHP en lugar de curl sin procesar

El HTTP crudo funciona, pero un cliente tipado ahorra horas: autocompletado de rutas, tipos de solicitud y respuesta, reintento incorporado en 408/409/429/5xx y jerarquía de errores estilo Stainless. Analizamos los tres SDK oficiales - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - y cómo se generaron a partir de un único contrato OpenAPI.

Industry 2026-06-05

Free Astrology API: Which One Has the Best Free Tier in 2026?

A side-by-side of free tiers across the major astrology APIs - credits, request caps, card requirements - and how much you can actually build for free.

Engineering 2026-06-05

Horoscope API Tutorial: Build a Daily Horoscope Feature

Add daily, weekly and monthly horoscopes to your app via API - sign-based text vs transit-based personalization - with TypeScript and Python code.