Tutu MCP
찾아지지 않는 곳으로
직행 티켓이 없을 때, 환승으로 여정을 조합합니다.
어떤 서비스의 검색도 "A에서 B로 가는 티켓이 있는가"라는 질문에 답합니다. 직행 연결편이 없으면 결과는 비어 있고 — 사용자는 떠나갑니다. 하지만 갈 수 있는 방법이 있고, 필요한 두 티켓 모두 같은 곳에서 판매되고 있습니다.
실제 사례. MCP Tutu에서 2026년 8월 20일 "모스크바 → 우글리치" 요청:
search_multitransport → 0 вариантов
search_bus → 0 вариантов
search_rail → 0 вариантов같은 요청에 대한 우리의 답변:
Москва → Ярославль автобус 09:00 → 13:00 863 ₽
пересадка в Ярославле — 40 минут
Ярославль → Углич автобус 13:40 → 16:25 616 ₽
итого 1 479 ₽, на месте в 16:25두 티켓 모두 Tutu가 판매합니다. 그들의 검색은 이 경로를 절대 보여주지 않습니다.
작동 방식
запрос «Москва → Плёс»
↓
MCP Туту: прямой поиск → 0 вариантов, регион «Ивановская область»
↓
узлы-кандидаты: справочник «регион → центр» + предложения агента
↓
для каждого узла: сначала плечо «узел → цель», затем «откуда → узел»
↓
код сводит стыковки: отбрасывает рейсы, на которые не успеть, считает запас и сумму
↓
карточки маршрутов검색은 에이전트가 제어합니다. 에이전트가 어떤 도시와 날짜를 확인할지 스스로 결정하고, 사용자는 화면의 피드로 그 작업 과정을 볼 수 있습니다. 하지만 환승, 가격, 순위는 코드가 계산합니다 — 모델은 산술에 접근할 수 없습니다. 바로 그 부분에서 에이전트가 실수하기 때문입니다. Tutu의 무거운 응답은 모델을 통과하지 않습니다. 모델은 찾은 구간의 식별자와 짧은 요약만 받고, 전체 데이터는 인터페이스로 직접 전달됩니다.
선택한 날짜에 출발할 수 없으면, 백엔드가 에이전트를 호텔 검색으로 보냅니다: 가장 가까운 출발일을 찾고, 기다려야 하는 밤 수만큼 정확히 숙박을 선택합니다.
에이전트를 사용할 수 없거나 한도에 도달하면, 인터페이스는 조용히 결정론적 검색으로 전환됩니다 — 화면은 어떤 경우에도 결과를 표시합니다.
Related MCP server: Bay Area Transit MCP
실행
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는 선택 사항입니다. 없으면 도시 힌트가 비활성화되고,
검색은 지역 디렉토리로 작동합니다.
명령어
명령어 | 기능 |
| http://localhost:3100에서 애플리케이션 |
| 콘솔에서 경로 조합 |
|
|
| 현재 캐시에 있는 내용 |
| MCP Tutu와의 실시간 연결 확인 |
| Docker의 Postgres |
| Prisma 마이그레이션 |
| ESLint |
구조
모든 코드는 src/에 있고, 루트에는 설정만 있습니다. 인터페이스는 한 폴더로
구성되고, 로직은 파일 유형이 아닌 의미에 따라 모듈로 나뉩니다:
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/ клиент Prisma모듈 내부에 domain/, infra/, api/ 레이어가 없는 이유. 이러한 구분은
수만 줄의 코드와 15개 이상의 도메인에서 정당화됩니다. 여기에는 하나의 시나리오만
있습니다. 레이어를 만들면 파일 하나짜리 폴더와 빈 contract/가 생길 뿐입니다.
모듈이 천 줄을 넘어서면 기존 파일 주위에 레이어가 생길 것입니다.
MCP Tutu 작업
연결: https://mcp.tutu.ru/mcp, streamable HTTP, 인증 불필요.
이것 없이는 작동하지 않는 두 가지 엔지니어링 결정:
응답 크기가 약 26KB입니다. 도구는 전체 JSON이 인터페이스로 전달되어 카드로
그려지고, 언어 모델에는 toModelOutput을 통한 압축 요약만 전달되도록 래핑되어
있습니다. 실제 검색 측정: 26,305 → 1,971자, 93% 절약.
서버에 엄격한 rate limit이 있습니다. 약 50개의 연속 요청으로 TCP 수준에서
몇 시간 동안 전체 도메인에 대한 접근이 차단되었습니다. 따라서: view: 'compact',
Postgres의 응답 캐시, 검색당 최대 2개 노드, 데모 전에는 npm run warm 명령으로
fixtures/에서 캐시를 예열합니다. 서버를 사용할 수 없으면 화면은 캐시에 있는
내용을 표시하고 충돌하지 않습니다.
스택
Next.js 16 (App Router) · TypeScript · @ai-sdk/mcp · Prisma 7 + Postgres 18 ·
Tailwind 4 + shadcn/ui · OpenRouter (선택 사항)
문서
SPECIFICATION.md— 제품 전체: 문제, 증거, 기술, 규정SCREEN-SPEC.md— 퍼블리싱을 위한 화면 사양USER-GUIDE.md— 사용자 가이드fixtures/README.md— 저장된 응답이 무엇이고 왜 필요한지
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