zaezd
Заезд
Ein Reise-Engine, der mit einem Anlass beginnt. Man weiß nicht, wohin man fahren soll, sondern warum: man möchte zu einer Konferenz zum eigenen Thema. Заезд findet die nächste Offline-Veranstaltung, berechnet den Hin- und Rückweg, ein Hotel in der Nähe des Veranstaltungsorts und den vollen Teilnahmepreis und zeigt bis zu drei erklärbare Pakete auf einem Bildschirm.
Die erste Vertikale sind IT-Konferenzen. Den Veranstaltungskatalog liefert confcal MCP, Transport und Unterkunft Tutu MCP, und alles setzt ein deterministischer Komponist zusammen, nicht ein Modell.
Was wo
Was | Wo |
Reisebildschirm |
|
Reise per Link |
|
MCP-Endpunkt |
|
Liveness-Check |
|
Benutzerhandbuch | |
Zweiminütige Aufnahme | docs/demo.mp4, Server, Bildschirm und Agent |
Related MCP server: Travel Planner MCP Server
End-to-End-Szenario
Sie öffnen die Wurzel. Auf dem Bildschirm ist bereits eine zusammengestellte Reise, kein leeres Formular. Oben stehen Veranstaltung, Datum, Stadt, Veranstaltungsort und die Gehzeit dorthin vom nächstgelegenen Hotel. Darunter bis zu drei Karten: die Hinfahrt mit Zug- oder Flugnummer, das Hotel mit Preis für die gesamte Übernachtung und Entfernung zum Veranstaltungsort, die Rückfahrt, die Gesamtsumme als eine Zahl und darunter eine Rechenzeile, die aufgeht. Danach eine Stadtkarte mit Veranstaltungsort und Hotels, das Wetter für die Reisedaten, weitere Veranstaltungen zum Thema und eine Liste dessen, was nicht aufgenommen wurde und warum.
Sie klicken auf „Zahlungslinks zusammenstellen“ – es erscheint eine Checkliste mit zwei bis drei Tutu-Links. Die Beschriftung jeder einzelnen wird aus dem übernommen, was Tutu tatsächlich zurückgegeben hat: „Warenkorb öffnen“, wo ein Warenkorb geöffnet wird, und „Auswahlseite öffnen“, wo es keinen Warenkorb geben wird.
Dasselbe für den Agenten: find_event_trips mit Thema und Abfahrtsstadt gibt dieselbe Reise als Struktur zurück, get_trip_details öffnet das Paket, create_trip_checkout erstellt die Checkliste. Ein Host, der zeichnen kann, erhält denselben Bildschirm als MCP App.
Start aus dem Quellcode
npm install
ZAEZD_MODE=replay npm run devEs öffnet sich http://localhost:8080. Im Modus replay arbeitet das Produkt mit aufgezeichneten Antworten aus fixtures/ und geht nicht ins Netz: Man kann damit ohne Internet und ohne Schlüssel leben, und das Referenzdatum ist der Tag der Aufzeichnung. Der Live-Modus ist ZAEZD_MODE=live.
Vollständige Prüfung:
npm run verifyDas sind Synchronität der Regeln, Abgleich der dokumentierten Befehle, Typprüfung, Linter, Erstellung des Browser-Baums, ausführbare Gherkin-Szenarien und Unit-Tests. Alles offline.
Der Browser-Baum wird nicht aus ästhetischen Gründen vor den Szenarien erstellt. Ein Szenario fordert vom Server genau jenes boot.js an, das zum Host geht, und in einem sauberen Klon gibt es diese Datei noch nicht.
Start im Container
Das Image wird aus dem Repository gebaut und enthält im Inneren sowohl den Code als auch die Fixtures. Daher benötigt der Container im Modus replay weder Internet noch Geheimnisse.
cp .env.example .env # и отредактируйте
docker compose up -d --buildDer Bildschirm erscheint unter http://127.0.0.1:8080. Ohne die Datei .env startet Compose nicht: Das ist beabsichtigt, damit niemand das Produkt mit fremden Standardwerten ausführt.
Ohne Compose dasselbe mit einem einzigen Befehl:
docker build -t zaezd .
docker run -d --name zaezd -p 127.0.0.1:8080:8080 --env-file .env zaezdEinmalig, ohne Umgebungsdatei, nur um es anzusehen:
docker run --rm -p 127.0.0.1:8080:8080 \
-e ZAEZD_MODE=replay -e ZAEZD_PUBLIC_URL=http://localhost:8080 zaezdUmgebungsvariablen
Die vollständige Liste mit Kommentaren liegt in .env.example. Kurz:
Variable | Zweck | Standard |
|
|
|
| Port innerhalb des Containers |
|
| Adresse, unter der das Produkt von außen sichtbar ist. Daraus werden die Reiselinks und das CSP des Widgets gebaut |
|
| Kontakt im |
|
| MCP des Veranstaltungskatalogs | öffentlicher confcal |
| MCP von Tutu |
|
Es gibt keinen einzigen Schlüssel oder Token: Beide Quellen sind offen. Der Wert von ZAEZD_PUBLIC_URL sollte ehrlich gesetzt werden – genau diese Adresse geht als Link auf den Bildschirm an den Agenten und gelangt in das CSP des Widgets. Wenn sie nicht mit der tatsächlichen übereinstimmt, bleibt das Board im Host leer.
Der Container trägt einen HEALTHCHECK auf /healthz, sodass docker ps nur dann healthy anzeigt, wenn die Anwendung tatsächlich antwortet.
Hinter einem Reverse-Proxy
Die docker-compose.yaml selbst weiß nichts von Proxy, Domains und Netzwerken – das sind Eigenschaften der Plattform, nicht des Produkts. All das wird in docker-compose.override.yaml gelegt; sie steht in der Gitignore und lebt nur auf der Maschine, die den Dienst ausrollt. Beispiel für Traefik:
services:
zaezd:
ports: !reset [] # наружу светит прокси, а не контейнер
environment:
ZAEZD_PUBLIC_URL: https://zaezd.example.com
labels:
traefik.enable: 'true'
traefik.http.routers.zaezd.rule: Host(`zaezd.example.com`)
traefik.http.routers.zaezd.entrypoints: https
traefik.http.routers.zaezd.tls: 'true'
traefik.http.routers.zaezd.tls.certresolver: letsencrypt
traefik.http.services.zaezd.loadbalancer.server.port: '8080'
networks: [proxy]
networks:
proxy:
external: trueDie Namen des Entrypoints, des Zertifikats-Resolvers und des Netzwerks sind bei jedem anders, daher sind sie im Beispiel Platzhalter. Für nginx oder Caddy wird der Override anders sein; das Produkt ändert sich dadurch nicht: Es hört auf PORT und liefert /healthz.
An einen Agenten anbinden
Der Endpunkt <адрес>/mcp funktioniert über streamable HTTP und benötigt keinen Schlüssel. Lokal ist das http://localhost:8080/mcp, bei einem bereitgestellten Dienst Ihre Adresse aus ZAEZD_PUBLIC_URL.
Claude Desktop akzeptiert entfernte Server nicht direkt in claude_desktop_config.json; dort leben nur stdio-Befehle. Fügen Sie Заезд daher entweder über Settings, Connectors, Add custom connector hinzu oder tragen Sie einen proxierenden Start ein:
{
"mcpServers": {
"zaezd": { "command": "npx", "args": ["-y", "mcp-remote", "http://localhost:8080/mcp"] }
}
}Claude Code und Codex CLI:
claude mcp add --transport http zaezd http://localhost:8080/mcp
codex mcp add zaezd --url http://localhost:8080/mcpQwen Code:
qwen mcp add --transport http zaezd http://localhost:8080/mcpEin Host, der Widgets zeichnen kann, erhält denselben Bildschirm über die Ressource ui://zaezd/trip-board. Ein Host ohne Widgets erhält dieselbe Antwort als Text.
Architektur
Abhängigkeiten verlaufen nur nach unten.
Schicht | Wo | Was sie tut |
L0 |
| reine Regeln: Daten, Machbarkeit, Preis, Auswahl der Pakete. Ohne Ein-/Ausgabe und ohne Uhr |
L1 |
| Clients für confcal und Tutu, Normalisierung, Cache, Replay-Modus |
L2 |
| Geokodierung, Produktionskalender, Wetter. Jeder mit Timeout und Ersatzantwort |
L3 |
| Zusammenstellung der Reise, Budgets, Live-Zahlungslinks, Anfrage im Link |
L4 |
| Bildschirm und drei Werkzeuge. Hier gibt es keine Geschäftslogik |
Das Diagramm und zwei Sequenzen finden sich in docs/architecture.md, Entscheidungen mit Begründungen in docs/decisions.md.
Das Entscheidende: Daten, Preise und Machbarkeit berechnet der Code, nicht das Modell. Drei identische Live-Durchläufe durch das Modell ergaben drei verschiedene Anzahlen von Nächten und eine Preisstreuung um das Anderthalbfache. Deshalb lebt der Algorithmus in src/composer/dates.ts und ist durch eine Szenarientabelle abgedeckt.
Einschränkungen
Die Liste ist ehrlich; lesen Sie sie als Teil des Produkts.
Ein Online-Event baut keine Reise, und ein Event in derselben Stadt auch nicht. In beiden Fällen sagt Заезд das direkt, statt einen leeren Bildschirm zu zeigen;
Der Live-Katalog von confcal kennt 21 Städte, und Live-Offline-Events gibt es in etwa 15 davon. Leere Städte werden nicht versteckt; der Zähler wird auf dem Bildschirm angezeigt;
Pro Anfrage wird eine Reise berechnet. Bis zu fünf weitere Veranstaltungen zum Thema werden als Liste gezeigt, aber nicht berechnet: Ein Fächer aus fünf Zusammenstellungen ist ein Spinner, kein Produkt;
Die Wettervorhersage ist nur für 16 Tage im Voraus verfügbar. Danach verschwindet der Wetterblock einfach;
Die Adresse des Veranstaltungsorts stammt aus dem Katalog und wird nie dazuerfunden. Wenn der Katalog sie nicht geliefert hat, sagt der Bildschirm das und setzt keine Markierung auf der Karte; die Antwort an den Agenten bittet darum, die Adresse in offenen Quellen zu suchen und dem Menschen zu sagen, dass die Adresse nicht aus dem Katalog stammt;
Der Tutu-Multitransport zählt Erwachsene; Kinder- und Ermäßigungstarife gibt es in der Reise nicht;
Der Flugticket-Link öffnet in einem kalten Browser die Suche, nicht den Warenkorb: Der Warenkorb wird nur in einem Browser mit einer lebenden Tutu-Sitzung angelegt. Deshalb sagt die Beschriftung eines solchen Buttons genau das;
Es gibt keine Sitzplatzpläne im Wagen;
Der Teilnahmepreis der Veranstaltung fließt nur dann in die Gesamtsumme ein, wenn der Katalog ihn als Zahl angegeben hat. Einen Textpreis wie „kostenlos für Studierende“ zeigt Заезд unverändert an und nimmt ihn nicht in die Summe auf;
Im Modus
replaysind die Zahlungslinks aus der Aufzeichnung zusammengestellt und höchstwahrscheinlich abgelaufen. Der Bildschirm und die Antwort an den Agenten warnen davor;Vom Katalog werden auf einmal acht Veranstaltungen abgefragt: Bei einer größeren Anzahl hört er mitten in der Antwort auf, den Stream zu liefern. Messung und Begründung stehen im Entscheidungsprotokoll.
Gemessen
Metrik | Wert |
Werkzeuge von Tutu MCP | 16 |
Manifest von Tutu MCP | 102 143 Zeichen, etwa 25,5 Tausend Token |
Werkzeuge des Заезд-Gateways | 3 |
Manifest des Заезд-Gateways | 10 181 Zeichen, etwa 2,5 Tausend Token |
Live-Zusammenstellung der Reise, kalt | 12,1 s |
Live-Zusammenstellung der Reise, wiederholt | 0,2 s |
Zusammenstellung der Reise aus der Aufzeichnung | 36 ms |
Externe Quellen | 6 |
Ausführbare Szenarien | 217 |
Unit-Tests | 336 |
Geprüft in Agenten | Claude Code, Qwen Code |
Repository-Karte
specs/ спецификация продукта, она же источник правды
features/ исполняемые сценарии на Gherkin и шаги к ним
tests/ юнит-тесты чистого слоя
src/ код продукта по слоям
fixtures/ записанные ответы источников
scripts/ record.ts и вспомогательные утилиты
docs/ руководство пользователя, архитектура, журнал решенийLizenz
MIT, siehe LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables LLMs to perform travel-related tasks by interacting with Google Maps and travel planning services including location search, place details, and travel time calculations.53999MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI-assisted travel planning with real-time weather forecasts, place discovery, customized itinerary generation based on interests and budget, and travel distance calculations between cities.
- AlicenseAqualityBmaintenanceEnables AI agents to plan trips by searching flights, accommodations, and activities, and managing itineraries collaboratively with role-based permissions.2031MIT
- FlicenseNot gradedqualityDmaintenanceEnables travel planning through natural language, providing weather forecasts, attraction search, itinerary generation, and distance calculations using free APIs.
Related MCP Connectors
TravelMind: 8 MCP tools for travel (12306 trains, flights, hotels, geocode, planning, policy).
whentofly: flexible-date economy/business flight search + price-level context for AI agents
Flight search & booking for AI agents. 400+ airlines, $20-50 cheaper than OTAs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EvilFreelancer/zaezd'
If you have feedback or need assistance with the MCP directory API, please join our Discord server