Tizón MCP Server
MCP server for operating a fictional restaurant, providing tools to consult the menu, manage active orders, view shift summaries, update dish availability, and advance order statuses. Includes a playground that teaches JSON-RPC by showing live protocol interactions.
README
Tizón · Servidor MCP
Un servidor Model Context Protocol para operar un restaurante, con un playground que enseña el JSON-RPC en vivo.
Tizón es ficticio. Es la tercera pieza del mismo restaurante inventado, junto con su sitio y la app de pedidos.
pnpm install
pnpm dev
Instalarlo en un cliente MCP
En Claude Code:
claude mcp add tizon -- npx tsx bin/tizon-mcp.ts
Cualquier host MCP sirve — Claude Code, Cursor, VS Code, el tuyo. El servidor
también habla HTTP en /api/mcp, así que se puede consumir remoto.
La superficie es idéntica por los dos transportes: crearServidor() no sabe por
dónde lo están hablando. El transporte es detalle de despliegue, no de diseño.
Las cinco herramientas
| Herramienta | Qué hace |
|---|---|
consultar_carta |
Platillos con precio, estación de cocina y si están agotados |
pedidos_activos |
Comandas en cocina, con minutos de espera y cuáles van retrasadas |
resumen_del_turno |
Entregadas, retrasadas, espera promedio, qué se cancela más |
marcar_disponibilidad |
Agotar un platillo o reponerlo |
avanzar_pedido |
Mover una comanda al siguiente estado |
Las decisiones, que es de lo que va el proyecto
Que algo sea un servidor MCP no dice nada. Lo que dice algo es cómo está diseñada la superficie.
Cinco herramientas, no veinte. Cada una responde a una pregunta o hace una acción que alguien en el restaurante haría. Más herramientas no es más capacidad: es más superficie donde el modelo puede elegir mal.
No hay escotilla genérica. No existe ejecutar_consulta ni nada que acepte
SQL o un filtro arbitrario. Es la omisión más importante del servidor: una
escotilla lo convierte en una API cruda, hace imposible razonar sobre qué puede
pasar, y traslada al modelo decisiones que le tocan al servidor. Hay una prueba
que verifica que no exista.
Las descripciones dicen cuándo llamar, no solo qué hace la herramienta. Es lo que más mueve la aguja para que el modelo acierte a elegirla, y hay una prueba que falla si alguna se queda demasiado corta.
La salida es texto para leer, no un volcado de JSON. El consumidor es un modelo: un texto compacto y etiquetado cuesta menos tokens y se interpreta mejor que un objeto anidado.
Los errores enseñan. Un folio inexistente devuelve los folios que sí existen; un identificador de platillo inválido devuelve los válidos. Un error que solo dice «no encontrado» obliga al modelo a adivinar otra vez; uno que dice qué sí hay le permite corregirse en el mismo turno.
Fallar claro antes que fingir éxito. Avanzar una comanda ya entregada es un error, no un no-op silencioso. Si el modelo cree que avanzó algo, seguirá razonando sobre algo falso.
Dos superficies sobre un mismo estado. Las herramientas MCP devuelven texto
porque su consumidor es un modelo; /api/tablero devuelve JSON porque su
consumidor es una interfaz. Hacer que la interfaz parsee el texto pensado para
el modelo sería atarlas por el lado equivocado.
El playground
/ es un cliente MCP, no un chat. Pide tools/list al servidor, deja llamar
cada herramienta con argumentos reales y enseña el JSON-RPC que va y viene.
Al lado, el tablero que esas llamadas modifican.
No hay un modelo de por medio, a propósito. Un playground que enseña el
protocolo demuestra más sobre MCP que un chat donde un modelo hace de
intermediario y tapa el mecanismo. Para ver el agente de verdad está la
instalación por stdio, arriba.
El estado vive en memoria del servidor y se resiembra en cada arranque en frío, así que nadie le arruina la demo a nadie.
Pruebas
pnpm prueba:mcp
Diecisiete comprobaciones que hablan el protocolo de verdad — levantan el
servidor por stdio y le mandan JSON-RPC, sin mockear el SDK y sin llamar a
ningún modelo. Cubren descubrimiento, lectura, acción, idempotencia y los
errores que enseñan. Dos de ellas verifican decisiones de diseño y no
implementación: que las descripciones expliquen cuándo usar cada herramienta, y
que no haya aparecido una escotilla genérica.
Notas de implementación
Contra la especificación 2026-07-28, que pasó a ser sin estado: no hay
handshake de initialize ni sesión a nivel de protocolo. Por eso se construye
un servidor por petición y esto escala detrás de un balanceador normal, sin
sesiones pegajosas. SDK de TypeScript v2.
Tres cosas que solo salieron probando, por si le ahorran a alguien la tarde:
createMcpHandlerdevuelve un objeto{ fetch, notify, bus, close }, no una función. Exportarlo directo como route handler compila y revienta en runtime.- Su
.fetchtampoco encaja como route handler de Next: recibe(request, options?)y Next pasa(request, context). Hay que envolverlo. - En
ImageResponse, satori exigedisplayexplícito en cualquierdivcon más de un hijo — ytexto + <br/> + textoson tres. El build falla.
Capturas
tools/shot.mjs maneja Chrome por CDP, avisa si algo desborda a lo ancho y
guarda la página completa.
pnpm shot http://localhost:3000 capturas/playground.png
ESCALA=2 pnpm shot ... # doble resolución, para publicar
EVAL='...' pnpm shot ... # ejecuta y muestra lo que devuelva
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。