Skip to main content
Glama

tutu-mcp-proxy

lint lint-pages tests pages

Compacting/Grounding-MCP-Proxy vor mcp.tutu.ru, gebaut für den Tutu-Hackathon (Track 2 – „Tool-Optimierung“). Dieselben 16 Tools, dasselbe Verhalten, plus:

  • Reduzierter, immer geladener Katalog. tools/list des echten Servers umfasst ~108 KB noch vor der ersten Suche (uv run python tutu.py measure, reproduzierbar aus fixtures/). Die drei schwersten Tools (search_rail, get_rail_seatmap, search_hotels) erhalten eine kurze top-level description; der abgeschnittene Text geht nicht verloren, sondern wandert in das Aufrufergebnis des zugehörigen get_<domain>_instructions (tutu_mcp/proxy/compact_tools.py) – bezahlt wird er nur von der Session, die ihn wirklich liest. inputSchema bleibt überall unangetastet.

  • check_groundedness. Vergleicht den Antwortentwurf deterministisch mit den tool_result-Werten, auf die er sich stützt – zieht aus dem Text Preise/Zeiten/Zug-und-Flugnummern/Links heraus und prüft deren tatsächliches Vorhandensein im JSON, ohne LLM-Richter (tutu_mcp/groundedness.py).

  • Erklärung bei leerer Ausgabe. Häufigster Fehler: Ein Agent liest eine leere gefilterte Suche als „diesen fährt nicht“, obwohl das Werkzeug nur das zurückgab, was im Verkauf ist. Die Zähler von Tutu selbst –meta.post_filter_dropped_* – zeigen, welcher Filter die Liste geleert hat: Der Proxy wandelt sie in einen Satz um und legt ihn dem Ergebnis bei (_empty_result_note), sodass der Agent eine Tatsache nennt, statt einer Vermutung über einen Fahrplan, den man ihm nicht übermittelt hat (tutu_mcp/proxy/empty_results.py).

  • Premise-Gate + assess_request. check_groundedness prüft den AUSGANG des Schritts, dies prüpt der AG: Ein die Suche einschränkendes Wert muss von den Angaben oder aus einem früheren tool_result stammen. Ein vom Agenten ausgedachter Filter (Klassiker: stillschweigend die Endzeit eines Ereignisses annehmen und damit Rückflüge herausfiltern) erhält clarification_required statt Daten (tutu_mcp/premises.py).

  • Mock-Ansatz. Antwortet mit aufgezeichneten Fixtures statt mit dem Live-Server – er lässt sich beliebig oft ausführen, ohne das gemeinsame Rate-Limit des Hackathons zu berühren.

Trace-Viewer

Jeder Eval-Lauf wird eine einzige eigenständige HTML-Datei: Doppelklick, ohne Server und ohne Netz. Die veröffentlichte Galerie: https://trum-ok.github.io/tutu-mcp-hackathon/trace-viewer.html.

Trace-Viewer: Kopfzeile mit Lauf-Metriken und Analyse eines Szenarios

make viewer        # из последнего настоящего прогона эвалов
make viewer-demo   # из рукописных демо-трейсов — без модели и без ключа

Im Interface: Modus Übersicht – die ganze Matrix aus Szenarien × Optionen in einer Tabelle; Nur Fehler grenzt die Liste auf Fehlgeschlagene ein; Seite an Seite platziert ein Szenario aus beiden Varianten aneinander, mit hervorgehobenen Abweichungen in den Prüfungen. Ein Klick auf einen hervorgehobenen Wert in der Antwort öffnet einen Dialog mit dem genauen Fragment der Server-Antwort, aus dem er stammt – oder mit der direkten Genussangabe, dass er in keiner von ihnen vorkommt. Syn hetische Läufe (demo:/scripted:) sind mit einem Bernstein-Badge „NICHT GEMESSEN“ markiert – man soll eine handgeschriebene Demonstration nicht mit einer Messung verwechseln.

Wie er gebaut wird – docs/deploy.md.

Related MCP server: Yourttoo MCP Server

Was herausgekommen ist

Vier Läufen mit je 22 Szenarien auf gpt-5.6-luna mit --effort low, 19. August 2026. Der Unterschied zwischen den Läufen ist die reine Modell variante: Das Backend ist identisch, die Szenarienliste ebenfalls.

Metrik

baseline

proxy

Tool-Oberfläche, Tokens

25 269

15 364

Dasselbe, Bytes

115 329

74 971

Tastenerfolg

17–18 / 22

19–21 / 22

Fundiertheit der Aussagen

97–98 %

99 %

Erfundene Aussagen pro Laufen

4

1

Eingabetoken pro Lauf

3.3–4.4 млн /

на 0,43–0,67 lb. в meiner

Premise-Gate ausgelöst

0

8–12

Überflüssige Rückfragen

0

0

Zu der Zeile mit den erfundenen Behauptungen gehört der Prozentwert: 4 hinein aus 189 geprüften Aussagen gegenüber 1 aus 184 – das macht 97,9 % gegen 99,5 %, die Differenz wirkt wie Rauschen. In Absoluten sind das viermal weniger falsche Fakten, die zum Benutzer gelangen; der Benutzer bekommt ja die Fakten, nicht den Prozent – aber benutzer# bemessen. The ProzentSearch is der Anteil der prüfungsaussagen: einen vom Benutzer selbst genannten Schwellenwert („günstiger als 3000 ₽“) ist die Payload auszudrücken und kommt nicht in the Nenner.

The preisliche „Oberfläche“ – 39 %, und sie hängt vom Lauf nicht ab: Es ist ein statischer Wert, den der Agent mancher Session vor dem ersten Search bezahlt. Alles andere ist das Verhalten des Modells, deshalb wird ein Bereich angegeben.

Die letzte Zeile ist nicht weniger wichtig als die erste: Premise-Gate scheint 8–12 Mal pro Lauf aus und hat dabei kein einziges fragte in Scenario, wo es keinen Grund zum Fragen gab (Negativkontrolle no_overask plus Prüfung did_not_over_ask). A mechanism that put“ such Rückfragen hätte specrmelid ideal premis-metriken und das Produkt versaut.

Die Varianten weichen in fünf Zent ab, and die gewinnt den Proxy: Die leere gefilterte Ausgabe wird nicht als „der Zug fährt nicht“ gelesen, den Tippfehler bei den Wochentagen fällt vor der Suche auf, die stillschweigend eingefügte Personenanzahl wird vom Gate gestoppt, und die Plätze neben eich werden mit dem richtigen tool gesucht. Den einzigen ständigen Fehlschlag des Proxys – multitransport_basic: Der Agent beziffert die Preisdifferenz (2 275,07 − 1 700 = 575), davon beides halft getrennt bestätigt, das Zahl selbst fehlt im Payload. Durch so eine Arithmetik mit einer falschen unterscheidlich erkennen (den Stunt mit der Nacht multiplizieren – ein separates Szenario, und gilt als Fehler) ist nicht unmöglich, deterministisch zu prüfen; das ist die Grenze der Methodik, nicht ein Fehler vom Proxy.

Zwei Dinge fürdie Ehrlichkeit des Berichts: Fixture-Aussetzer werden getrennt von Tool-Fehlern gezählt – eine Lücke in der Aufzeichnung duer kein Fehler von dowtet werden; undTokenzahlen sind ~ markiert, wenn es eine Schätzung ist – OpenAI hat keinen Token-Zähl-Endpunkt, der genaue Werte stammt from einer echten Testanfrage (usage.prompt_tokens), --estimate-tokens setzt dafür die tiktoken-Offline-Schätzung ein.

Modelof the Resistance-Effort gelten pro Lauf (--model/OPENAI_MODEL, --effort/OPENAI_EFFORT);ohne beide das reasoning Over-Feld, das das Model nicht send has keine Reasoning-Art / AOR aender from Schulzwert, dies ist nicht dasselbe wie explizite --effort none. Der Runner trifft standardmäßig auf /v1/responses – Chat Completions verwenden bei aktuellen Reasoning-Modellen Function Tools nicht zusammen mit Reasoning? – so, --api chat ist für OpenAI-konforme Gate ohne /v1/responses. Fixture-Vergleich für Werte: Arbeitsgruppe is missing in Standard F, we Schema benutzen oft, calculate the writes page: 1, sort: "priceasc" u.s.w. an places, Menschen erfassen sie nicht; andernfalls würde ein Vielfaches mit Fit hätte dies zum fixture.

Wie genau die Evaluation gestrickt ist, was passiert sind., was considered Metrik isst und why the self-test of the harness in CI steh seit – docs/evals.md.

Schnellstart

Mann braucht uv und Python ≥ 3.13 (ein Riß mit uv sync on.).

git clone https://github.com/Trum-ok/tutu-mcp-hackathon
cd tutu-mcp-hackathon
uv sync
uv run python tutu.py serve            # mock-режим (по умолчанию) — http://127.0.0.1:8800/mcp
TUTU_PROXY_MODE=live uv run python tutu.py serve   # проксирует настоящий mcp.tutu.ru

Ein beliebiger MCP-Client – über http://127.0.0.1:8800/mcp (Streamable HTTP, ohne Autorisierung, wie beim Upstream). Einige Wörter <URL> – das ist diese Adresse oder die Adresse des Deployten Proxy (siehe docs/deploy.md).

claude mcp add --transport http tutu <URL>          # Claude Code
// Cursor · ~/.cursor/mcp.json
{ "mcpServers": { "tutu": { "url": "<URL>" } } }

// Claude Desktop · claude_desktop_config.json — через mcp-remote, он не умеет HTTP напрямую
{ "mcpServers": { "tutu": { "command": "npx", "args": ["-y", "mcp-remote", "<URL>"] } } }

Was sollte sein. Der Niederlage stehen zwei Zeilen: Modus und die Ab­plik. Der Client zeigt nach dem Verbinden 18 Tools: 16 native Tools aus Tu­tu sowie assess_request und check_groundedness. Sind es nur 16, hat sich der Client mit Tutu selbst verbunden, nicht mit dem Proxy.

Wie viel konnte abgeschnitten werden

tools/list: 110 164 → 79 411 Bytes (−27,9 %), und mit initialize-Instruktionen auf meiden Seiten −33,1 % (der Proxy liefert einen eigenen Anweisungsblock von 1,9 KB statt 11,2 KB von Tutu). Beide Zahlen sind bereits unter Einbeziehung der zwei eigenen Tools (assess_request 1300 Bytes, check_groundedness 1100 Bytes).“

Die Aufschl prism Katalog-Schichten, den genoppe prize der Kompression und die Grenze, die man bewusst nicht geht – docs/compaction.md.

Dokumentation

Eine ausführlicheDokumentation finden Sie auf einer separaten Seite: make docs baut site/index.html oder öffnen Sie die bereits veröffentlichte: https://trum-ok.github.io/ttu-mcp-hackathon/.

Datei

Inhalt

docs/findings.md

Rohmessungen des Live-Servers und die Case-Study motivieren

docs/compaction.md

Was genau wird gepresst, was es kostet und was nicht gemacht wurde

docs/evals.md

Aufbau der Eval-Harness, Fixture, Moment einer

docs/structure.md

Repo-Struktur und Dependency-Richtung

docs/configuration.md

environmental variables und alle make-Settings

docs/deploy.md

Docker, Render, GitHub Pagesel, Buil (both sides) aus

Team rezo

Lizenz

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

  • TravelMind: 8 MCP tools for travel (12306 trains, flights, hotels, geocode, planning, policy).

  • AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.

  • Geo-based flight search MCP server. Find more flights between any two places on earth

View all MCP Connectors

Latest Blog Posts

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/Trum-ok/tutu-mcp-hackathon'

If you have feedback or need assistance with the MCP directory API, please join our Discord server