Skip to main content
Glama

TrailSmith — погодозависимый агент для маршрутов по Карпатам (задание MCP)

Репозиторий: https://github.com/mashta-lilia/trailsmith-mcp-agent (полная история коммитов; этот архив — экспорт отслеживаемых файлов на одном коммите)

Доменный агент данных, который проверяет, оценивает риски и перепланирует многодневные пешие маршруты в массиве Чорногора. Он использует два MCP-подключения:

  • Существующий сервер (часть A): OpenWeather MCP — живые 5-дневные прогнозы по населённым пунктам.

  • Пользовательский сервер (часть B): trailsmith (этот репозиторий, trailsmith_mcp/) — четыре доменных инструмента на основе локального курируемого набора данных о маршрутах.

Агент (Claude Agent SDK) проверяет маршрут, порождает по одному субагенту-оценщику дня на каждый день параллельно (прогноз → детерминированный разбор → оценка риска), порождает субагентов-перепланировщиков для дней no_go, объединяет и повторно проверяет, и выдаёт итоговый план с видимым следом ценности от исходного текста прогноза до решения.

Попробуйте одной командой (ключи API не нужны)

python -m venv .venv
.\.venv\Scripts\pip install -r requirements.txt
.\.venv\Scripts\python scripts\walkthrough.py demo\itinerary_storm.json --fixtures scenario_storm

Это запускает весь рабочий процесс планирования на записанном прогнозе — проверка, оценка каждого дня, перепланирование опасного дня, оценка логистики — без LLM и без учётных данных:

[2] day 2 2026-08-21  NESAMOVYTE -> BYSTRETS  (10.2 km, 500 m)
    forecast: 2026-08-21 conditions='Thunderstorm thunderstorm with heavy rain' ...
    risk: 100 no_go
      +70  thunderstorm_on_exposed_ridge: Thunderstorm forecast on an exposed ridge.
      +35  wet_exposed_ridge: 25.0 mm precipitation on an exposed ridge at 2036 m: ...
[3] day 2 is no_go - replanning
    chose ['CH-022', 'CH-014'] (9.3 km) -> 60 caution [relaxation: none]

Полное пошаговое руководство с живой погодой и агентом: docs/quickstart.md.

Related MCP server: GemmaJnana

Предварительные требования

  • Python 3.12+ (проверено на 3.13)

  • Go 1.21+ (только для сборки бинарника OpenWeather MCP)

  • Ключ API OpenWeatherMap (бесплатный тариф) и ключ API Anthropic

Установка

PowerShell, из корня репозитория:

python -m venv .venv
.\.venv\Scripts\pip install -r requirements.txt
go install github.com/mschneider82/mcp-openweather@latest
New-Item -ItemType Directory -Force bin
Copy-Item "$env:USERPROFILE\go\bin\mcp-openweather.exe" bin\
Copy-Item .env.example .env

Затем отредактируйте .env:

Переменная

Для чего нужна

ANTHROPIC_API_KEY

агент (Claude Agent SDK). Необязательно, если вы выполнили claude /login.

OWM_API_KEY

живые вызовы OpenWeather. Новый ключ активируется до ~2 ч.

OPENWEATHER_MCP_BIN

необязательное переопределение; по умолчанию bin\mcp-openweather.exe.

REPLAY

1 для подачи записанных фикстур вместо живого API.

FIXTURE_SET

необязательное имя каталога воспроизведения; по умолчанию openweather.

Секреты хранятся только в .env (в git-игноре, как и любые варианты .env.*). Ничего чувствительного не коммитится.

Независимые команды запуска

  • Пользовательский MCP-сервер (отдельный процесс): .\.venv\Scripts\python -m trailsmith_mcp

  • Агент: .\.venv\Scripts\python -m agent.runner demo\itinerary_clean.json

  • Смоук-тесты: .\.venv\Scripts\python scripts\smoke_custom_server.py (обнаруживает и вызывает пользовательский сервер через stdio), .\.venv\Scripts\python scripts\smoke_weather_server.py [city] (существующий сервер).

Агент сам запускает свои MCP-подключения; ручной запуск trailsmith_mcp демонстрирует разделение процессов и независимый запуск.

Демонстрационные входные данные

Файл

Назначение

demo/itinerary_clean.json

3-дневный переход по долине/смешанный — чистое прохождение

demo/itinerary_storm.json

День 2 пересекает открытый хребет Туркул. Перепланирование срабатывает только при штормовой погоде — запустите с FIXTURE_SET=scenario_storm (см. ниже)

demo/itinerary_invalid.json

Неизвестный ID сегмента — демонстрация структурированной ошибки

demo/itinerary_5day.json

Изменённый корректный вход: 5 дней, высокая физическая подготовка

demo/itinerary_lowfitness.json

Изменённый корректный вход: низкая подготовка → одно мягкое нарушение DAILY_ASCENT_EXCEEDED в день 1

**Перед живой демонстрацией запустите ** — он сдвигает даты в окно прогноза, заново записывает настоящие фикстуры и пересобирает штормовой сценарий под новые даты одним шагом.

Демонстрационные даты должны попадать в живое 5-дневное окно прогноза. Они установлены на 2026-08-20 и далее; перед живой демонстрацией сдвиньте каждую date и заново запустите scripts/fetch_fixtures.py. Вне окна парсер корректно выдаёт NO_FORECAST_FOR_DATE, и день деградирует до weather_known=false / caution — это легитимный путь, но не тот, который вы хотите показывать как чистый прогон.

Фикстуры и офлайн-воспроизведение

  • Запись настоящих ответов: .\.venv\Scripts\python scripts\fetch_fixtures.py сохраняет дословный текст инструментов в fixtures/openweather/. Он также записывает ответ для несуществующего города — который этот сервер возвращает как успешное тело из всех нулей, а не как ошибку, поэтому он сохраняется как обычный .txt. Фикстуры .error.txt нет, потому что вышестоящий сервер ни разу её не создал.

  • Офлайн-воспроизведение: установите REPLAY=1 и запустите агента обычным образом. Сервер воспроизведения (scripts/replay_weather_server.py) предоставляет тот же контракт weather и подаёт записанный текст дословно — разбор и обработка ошибок агента работают без изменений; ничего не предразобрано.

    $env:REPLAY=1
    .\.venv\Scripts\python -m agent.runner demo\itinerary_clean.json
  • Штормовой сценарий. Риск no_go требует грозы или тяжёлых условий, которых в карпатских прогнозах часто нет — в спокойный день агент корректно сообщает ok/caution и никогда не перепланирует, поэтому ветку перепланирования нельзя продемонстрировать по требованию. fixtures/scenario_storm/ содержит явно помеченный синтетический вход (одна строка условий изменена в иначе подлинной записи) для отработки этой ветки; см. его README и раскрывайте это при демонстрации. Выберите его:

    $env:REPLAY=1; $env:FIXTURE_SET="scenario_storm"
    .\.venv\Scripts\python -m agent.runner demo\itinerary_storm.json

Лимиты частоты запросов

Бесплатный тариф OpenWeatherMap позволяет 60 вызовов/мин. Что фактически ограничивает наш объём вызовов:

  • validate_itinerary отклоняет маршруты длиннее 7 дней (Itinerary.days имеет max_length=7), поэтому порождается не более 7 оценщиков дней.

  • Каждый оценщик дня ограничен maxTurns=6, поэтому он не может зациклиться на погодном API после сбоя.

  • Худший случай, таким образом, значительно ниже лимита в минуту. Ширина параллельного пакета определяется планировщиком задач CLI Claude Code, а не этим кодом — мы ограничиваем общее количество вызовов, а не их параллельность.

Ограничения стоимости (agent/orchestrator.py): max_budget_usd=1.50 и max_turns=30 в основном цикле, плюс maxTurns для каждого субагента. Это жёсткие ограничения SDK, а не инструкции в промпте; agent/runner.py выводит количество ходов и стоимость в долларах, а также помечает запуск, остановленный на лимите.

Проверка всей системы

.\.venv\Scripts\python scripts\verify.py

Выполняет 12 проверок — оба MCP-подключения и обнаружение их инструментов, разделение процессов, успешный вызов каждого, структурированная ошибка против пустого успеха, консервативная деградация на непригодном прогнозе, побайтовая идентичность регенерации набора данных и тестовый набор. Учётные данные Anthropic не нужны.

Тесты

.\.venv\Scripts\python -m pytest tests -q

45 модульных тестов покрывают правила валидации, эвристики риска, поиск по графу, логистику, парсер текста прогноза (включая некорректный ввод) и регрессионные тесты для каждого контракта и ошибки корректности, найденных при ревью.

Документация

Начните с индекса документации.

Документ

Ответы

Краткое руководство

Как это запустить?

Архитектура

Как это устроено и куда попадает каждый результат?

Контракты инструментов

Что именно принимает и возвращает каждый инструмент?

Обоснование дизайна

Почему именно так и каковы ограничения?

Устранение неполадок

Почему оно ведёт себя не так, как описано?

Сценарий защиты

Как это демонстрируется?

Происхождение данных

Откуда взялись данные о маршрутах?

Скрипты

Скрипт

Назначение

scripts/refresh_demo.py

Подготовить демо к сегодняшнему дню: сдвинуть демо-даты в окно прогноза, заново записать настоящие фикстуры, пересобрать привязанный к датам штормовой сценарий, вывести команды демо

scripts/verify.py

Однокомандное доказательство всей системы: оба MCP-подключения, разделение процессов, контракты ошибок, деградация при сбоях, воспроизводимость набора данных, тесты

scripts/walkthrough.py

Запустить весь доменный рабочий процесс детерминированно, без LLM и учётных данных

scripts/smoke_custom_server.py

Запустить пользовательский сервер в отдельном процессе, вывести список и вызвать его инструменты

scripts/smoke_weather_server.py

Вызвать существующий сервер OpenWeather MCP (нужен ключ)

scripts/fetch_fixtures.py

Записать настоящие ответы API для офлайн-воспроизведения

scripts/replay_weather_server.py

Подавать записанные фикстуры под тем же контрактом weather

scripts/build_dataset.py

Детерминированно перегенерировать набор данных о маршрутах

F
license - not found
-
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

  • A
    license
    B
    quality
    D
    maintenance
    A comprehensive MCP server providing 30 tools for geocoding, routing, and OpenStreetMap data analysis. It enables AI assistants to search for locations, calculate travel routes, and perform quality assurance checks on map data.
    30
    3
    MIT
  • F
    license
    -
    quality
    B
    maintenance
    Multi-domain MCP server enabling AI agents to plan and execute vacation travel and birthday party logistics via local tool pipelines.
  • F
    license
    A
    quality
    D
    maintenance
    A FastMCP server that exposes hospitality data — accommodations, events, and gastronomy — through a unified MCP interface, supporting multiple worlds for real or fictional data.
    5

View all related MCP servers

Related MCP Connectors

  • MCP server for the Fail Modes taxonomy — a knowledge base of AI system failure modes

  • MCP server for generating rough-draft project plans from natural-language prompts.

  • Hosted MCP server to manage a restaurant menu from AI agents - 39 tools over the DuckHub API.

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/mashta-lilia/trailsmith-mcp-agent'

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