# Optovia MCP Server

Node MCP сервер, который проксирует существующие GraphQL эндпоинты Optovia и подставляет токены:
- GEO: маршруты/узлы (`find_product_routes`, `nodes`)
- Orders: таймлайн заказа (`getOrder` через team endpoint)
- Расширение: м2м/сервисные токены для открытых операций, user/team токен — для защищённых.

## Быстрый старт
```bash
cd lang/mcp
npm install
npm start
```

## Переменные окружения
- `GEO_GRAPHQL_URL` — GraphQL endpoint geo-сервиса.
- `GEO_M2M_TOKEN` — опционально, сервисный Bearer для geo (если нет userToken).
- `ORDERS_GRAPHQL_URL` — GraphQL endpoint orders team.
- `SERVICE_TOKEN_EXCHANGE` / другие — при необходимости добавить для новых инструментов.

## Токены
- Инструменты помечены как:
  - `match_offers_with_route`, `search_nodes` — принимают `userToken`, но могут использовать `GEO_M2M_TOKEN`, если нет пользовательского.
  - `order_timeline` — требует `userToken` с scope `teams:member` и `team_uuid` в payload.
- MCP не хранит пользовательский токен, он прокидывается в `Authorization: Bearer ...`. Для сервисных чтений можно использовать `*_M2M_TOKEN`.

## Текущие инструменты
- `match_offers_with_route(productUuid, destinationUuid, limitSources?, limitRoutes?, userToken?)`
  - дергает geo `find_product_routes`, возвращает варианты маршрутов от офферов до точки назначения.
- `search_nodes(transportType?, limit?, offset?, userToken?)`
  - список узлов логистики с координатами/транспортами.
- `order_timeline(orderUuid, userToken)`
  - заказ с этапами/трипами (orders team endpoint, нужен токен).

## Конфиг .mcp.json (пример)
```json
{
  "mcpServers": {
    "optovia-mcp": {
      "command": "node",
      "args": ["lang/mcp/src/index.js"],
      "env": {
        "GEO_GRAPHQL_URL": "https://geo.optovia.ru/graphql",
        "ORDERS_GRAPHQL_URL": "https://orders.optovia.ru/graphql",
        "GEO_M2M_TOKEN": "bearer-token-if-needed"
      }
    }
  }
}
```
