Tutu MCP
Dorthin, wo nicht gesucht wird
Wir stellen eine Reise mit Umstieg zusammen, wenn es kein direktes Ticket gibt.
Die Suche eines beliebigen Dienstes beantwortet die Frage „Gibt es ein Ticket von A nach B?“. Wenn es keine direkte Verbindung gibt, ist die Ausgabe leer – und der Nutzer geht. Dabei kann man hinkommen, und beide benötigten Tickets werden dort ebenfalls verkauft.
Lebendiges Beispiel. Die Anfrage „Moskau → Uglitsch“ vom 20. August 2026 im MCP Tutu:
search_multitransport → 0 вариантов
search_bus → 0 вариантов
search_rail → 0 вариантовUnsere Antwort auf dieselbe Anfrage:
Москва → Ярославль автобус 09:00 → 13:00 863 ₽
пересадка в Ярославле — 40 минут
Ярославль → Углич автобус 13:40 → 16:25 616 ₽
итого 1 479 ₽, на месте в 16:25Beide Tickets verkauft Tutu. Deren Suche wird diese Route nie anzeigen.
So funktioniert es
запрос «Москва → Плёс»
↓
MCP Туту: прямой поиск → 0 вариантов, регион «Ивановская область»
↓
узлы-кандидаты: справочник «регион → центр» + предложения агента
↓
для каждого узла: сначала плечо «узел → цель», затем «откуда → узел»
↓
код сводит стыковки: отбрасывает рейсы, на которые не успеть, считает запас и сумму
↓
карточки маршрутовDie Suche steuert ein Agent: Er entscheidet selbst, welche Städte und Daten er prüft, und der Nutzer sieht seine Arbeit als Verlauf auf dem Bildschirm. Aber Umstiege, Preise und Ranking berechnet der Code – das Modell wird nicht an die Arithmetik gelassen, genau dort machen Agenten Fehler. Schwere Antworten von Tutu gehen nicht durch das Modell: Es erhält Identifikatoren der gefundenen Streckenabschnitte und kurze Zusammenfassungen, während die vollständigen Daten direkt in die Oberfläche gehen.
Wenn man am gewählten Tag nicht abreisen kann, schickt das Backend den Agenten zusätzlich nach Hotels: Es wird der nächstgelegene Abreisetag gesucht und eine Unterkunft für genau so viele Nächte ausgewählt, wie man warten muss.
Wenn der Agent nicht verfügbar ist oder an ein Limit stößt, wechselt die Oberfläche stillschweigend auf die deterministische Suche – der Bildschirm zeigt in jedem Fall ein Ergebnis.
Related MCP server: Bay Area Transit MCP
Start
npm install
cp .env.example .env # вписать OPENROUTER_API_KEY (необязательно)
npm run db:up # Postgres в Docker
npm run migrate # схема базы
npm run warm # прогрев кэша реальными ответами Туту
npm run dev # http://localhost:3100OPENROUTER_API_KEY ist optional: Ohne ihn wird die Städte-Hinweisfunktion deaktiviert, die Suche arbeitet mit dem Regionenverzeichnis.
Befehle
Befehl | Funktion |
| Anwendung auf http://localhost:3100 |
| Routenzusammenstellung in der Konsole |
| Cache-Vorwärmung aus |
| Was sich gerade im Cache befindet |
| Prüfung der Live-Verbindung mit MCP Tutu |
| Postgres in Docker |
| Prisma-Migrationen |
| ESLint |
Struktur
Der gesamte Code liegt in src/, im Stammverzeichnis nur die Konfiguration. Die Oberfläche ist in einem Ordner zusammengefasst, die Logik ist nach Modulen aufgeteilt – nach Sinn, nicht nach Dateityp:
src/
app/ роутинг Next: страница и три API — тонкие, только вызовы модулей
api/agent/ агентный поиск потоком
api/route/ детерминированный поиск (страховка)
api/stay/ гостиницы
frontend/ всё, что видно в браузере
components/route/ форма, календарь, подсказки, лента, карточки, гостиницы
hooks/ чтение потока агента, определение города
design.ts палитра и подписи из макета
format.ts, geo.ts форматирование и расстояния
config.ts константы интерфейса
modules/ логика, зависимости однонаправленные: agent → routing → tutu
tutu/ клиент MCP, кэш, типы, прокси, снятые ответы (fixtures)
routing/ сборка маршрутов, справочники регионов и городов
agent/ цикл, инструменты, промпт, ошибки, ретраи, состояние
lib/ клиент PrismaWarum es innerhalb der Module keine Schichten domain/, infra/, api/ gibt. Eine solche Aufteilung ist bei Zehntausenden von Zeilen und anderthalb Dutzend Domänen gerechtfertigt. Hier gibt es ein einziges Szenario: Schichten würden Ordner mit je einer Datei und ein leeres contract/ ergeben. Wenn ein Modul tausend Zeilen überschreitet, entstehen sie rund um die vorhandenen Dateien.
Arbeit mit MCP Tutu
Verbindung: https://mcp.tutu.ru/mcp, streamable HTTP, keine Autorisierung erforderlich.
Zwei technische Entscheidungen, ohne die das nicht funktioniert:
Antworten wiegen ~26 KB. Die Tools sind so umhüllt, dass das vollständige JSON in die Oberfläche geht und als Karten gezeichnet wird, während an das Sprachmodell eine komprimierte Zusammenfassung über toModelOutput geht. Messung bei einer echten Suche: 26 305 → 1 971 Zeichen, Einsparung 93 %.
Der Server hat ein striktes Rate Limit. Etwa fünfzig aufeinanderfolgende Anfragen haben uns den Zugang zur gesamten Domäne auf TCP-Ebene für mehrere Stunden gesperrt. Deshalb: view: 'compact', Antwort-Cache in Postgres, nicht mehr als zwei Knoten pro Suche, und vor der Demo – Cache-Vorwärmung aus fixtures/ mit dem Befehl npm run warm. Wenn der Server nicht verfügbar ist, zeigt der Bildschirm das, was im Cache liegt, und stürzt nicht ab.
Stack
Next.js 16 (App Router) · TypeScript · @ai-sdk/mcp · Prisma 7 + Postgres 18 ·
Tailwind 4 + shadcn/ui · OpenRouter (optional)
Dokumente
SPECIFICATION.md— das Produkt als Ganzes: Problem, Belege, Technik, RegelwerkSCREEN-SPEC.md— Bildschirmspezifikation für das LayoutUSER-GUIDE.md— Benutzerhandbuchfixtures/README.md— was die gespeicherten Antworten sind und wozu sie dienen
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only public transit departures, stop search, and city coverage for bus and train users.
Real-time transit stops, routes, arrivals, vehicle positions, and schedules via OneBusAway APIs.
Plan journeys by train, bus, tram, metro and ferry across 42 European countries.
Transitland MCP — global GTFS aggregator
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables querying global transit data including agencies, routes, stops, and departures through a GTFS aggregator.22 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables querying real-time BART and SF Muni transit data, including departures, trip planning, fares, advisories, routes, alerts, vehicle positions, and schedules, from any MCP-compatible client.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables querying real-time bike-share feed data, including station availability, nearby bikes and docks, route checks, alerts, and system information across many cities.-
- AlicenseAqualityBmaintenanceEnables public-transport journey planning, place search, realtime departures and timetables, usable from any MCP client.9MIT