Skip to main content
Glama

Athena Agent — fuente de terremotos en vivo

Un agente de IA Athena respaldado por un servidor MCP. Obtiene lecturas sísmicas reales de la fuente pública de USGS y las muestra en un widget interactivo dentro del chat.

Ejecútalo

npm install
npm start          # http://localhost:8787/mcp

Verifica antes de tocar Athena:

npx @modelcontextprotocol/inspector@latest --server-url http://localhost:8787/mcp --transport http

Deberías ver una herramienta, get_recent_earthquakes, y un recurso, ui://widget/quakes.html, con mimeType text/html+skybridge.

Related MCP server: usgs-earthquakes

Exponer a través de HTTPS

Athena requiere HTTPS. Para desarrollo:

ngrok http 8787

Registra el agente en https://athenachat.bot/chatbot/mybots/create y establece la URL de MCP en https://<your-subdomain>.ngrok.app/mcp — la ruta /mcp es obligatoria.

Para una URL que sobreviva más allá de la demo, haz push de este repositorio y despliégalo en Render o Railway. Comando de compilación npm install, comando de inicio npm start. Ambos inyectan PORT, que el servidor lee.

Indicaciones que activan la herramienta

  • "Muéstrame los terremotos recientes"

  • "¿Ha habido actividad sísmica hoy?"

  • "¿Ha habido grandes terremotos en la última semana?"

Qué hace que el widget sea interactivo

Control

Comportamiento

Deslizador de magnitud

Filtra al instante en el navegador, sin llamada al servidor

Clic en una fila

Expande profundidad, coordenadas, indicador de tsunami

Botones de ventana de tiempo

Vuelve a llamar a get_recent_earthquakes mediante window.openai.callTool y vuelve a renderizar con datos nuevos

El estado sobrevive al re-renderizado mediante window.openai.setWidgetState.

Adaptar esto a otra fuente de datos

Dos lugares cambian, ambos marcados en el código.

  1. server.js — la función fetchData. Devuelve { items: [...], meta: {...} }. Actualiza también el nombre de la herramienta, la descripción y inputSchema para que coincidan con el nuevo dominio.

  2. public/widget.html — la función render y los dos manejadores de los controles.

Todo lo demás (transporte, registro de recursos, CORS, metadatos) es independiente del dominio.

Cosas que te harán perder el tiempo

  • window.openai es undefined → el mimeType del recurso no es exactamente text/html+skybridge.

  • callTool no hace nada → a la herramienta le falta _meta["openai/widgetAccessible"]: true.

  • El widget no puede obtener datos de una API directamente → el CSP del iframe lo bloquea. Obtén los datos desde el servidor.

  • Athena sigue mostrando herramientas antiguas → Configuración → Conectores → Actualizar.

  • La documentación de Athena importa @modelcontextprotocol/sdk/server/streamable-http.js. Esa ruta no existe. La correcta es streamableHttp.js.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides access to the USGS Quakes API within Claude Desktop, enabling users to retrieve earthquake data and details through natural language queries.
    3
    11 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides access to the USGS Earthquake Catalog for querying earthquake events via the FDSNWS API, enabling natural language questions about earthquake data.
    198 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server wrapping the USGS Earthquake Hazards API, enabling AI assistants to search the global earthquake catalog, look up event details, count quakes, find 'Did You Feel It' reports, and read realtime feeds.
    5
    MIT