Skip to main content
Glama
DarkGenius

Zenrus MCP

by DarkGenius
README.md
# Zenrus MCP Server

[![npm version](https://badge.fury.io/js/zenrus-mcp.svg)](https://www.npmjs.com/package/zenrus-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

MCP-сервер для получения актуальных курсов валют и цен на нефть с сайта [zenrus.ru](https://zenrus.ru/).

## Возможности

Сервер предоставляет следующие инструменты:

### Базовые инструменты (получение данных)

- `get_usd_rate` - Get current USD/RUB exchange rate
- `get_eur_rate` - Get current EUR/RUB exchange rate
- `get_brent_usd_rate` - Get current Brent crude oil price in USD per barrel
- `get_brent_rub_rate` - Get current Brent crude oil price in RUB per barrel

### Расчетные инструменты (вычисления)

- `calculate_barrels_for_rub` - Calculate how many barrels can be purchased for given amount in RUB
- `calculate_barrels_for_usd` - Calculate how many barrels can be purchased for given amount in USD
- `calculate_barrels_for_eur` - Calculate how many barrels can be purchased for given amount in EUR

### Формат возвращаемых данных

Все инструменты возвращают **структурированные JSON данные** с числовыми значениями, которые могут быть использованы в вычислениях:

**Курсы валют** (`get_usd_rate`, `get_eur_rate`):

```json
{
  "rate": 81.08,
  "currency": "USD/RUB",
  "description": "US Dollar to Russian Ruble exchange rate"
}
```

**Цены на нефть** (`get_brent_usd_rate`, `get_brent_rub_rate`):

```json
{
  "price": 62.17,
  "commodity": "Brent Crude Oil",
  "currency": "USD",
  "unit": "per barrel"
}
```

**Расчеты** (`calculate_barrels_for_rub`, `calculate_barrels_for_usd`, `calculate_barrels_for_eur`):

```json
{
  "amount": 100000,
  "currency": "RUB",
  "barrels": 19.8374,
  "pricePerBarrel": 5041,
  "commodity": "Brent Crude Oil"
}
```

Такой подход позволяет AI-модели:

- Использовать данные в математических вычислениях
- Форматировать вывод по своему усмотрению
- Легко парсить и обрабатывать результаты
- Сохранять семантику данных

### Примеры использования

Для расчетных инструментов передавайте параметр `amount`:

```json
{
  "name": "calculate_barrels_for_usd",
  "arguments": {
    "amount": 1000
  }
}
```

Результат покажет, сколько баррелей можно купить:

```json
{
  "amount": 1000,
  "currency": "USD",
  "barrels": 16.0848,
  "pricePerBarrel": 62.17,
  "commodity": "Brent Crude Oil"
}
```

## Установка

### Из npm (рекомендуется)

Пакет будет автоматически загружен при первом использовании с `npx`:

```bash
npx -y zenrus-mcp
```

### Для разработки

```bash
git clone https://github.com/DarkGenius/zenrus-mcp.git
cd zenrus-mcp
npm install
npm run build
```

## Использование

### Конфигурация

Добавьте следующую конфигурацию в файл настроек ваших AI-инструментов:

```json
{
  "mcpServers": {
    "zenrus": {
      "command": "npx",
      "args": ["-y", "zenrus-mcp"]
    }
  }
}
```

### Запуск сервера вручную

```bash
npm start
```

## Разработка

```bash
# Сборка проекта
npm run build

# Режим разработки с автоматической пересборкой
npm run dev

# Запуск тестов
npm test

# Запуск тестов в watch-режиме
npm run test:watch

# Отладка (выполняет запрос к API и выводит данные)
npm run debug
```

## Отладка

Для проверки работоспособности сервера используйте команду:

```bash
npm run debug
```

Этот скрипт выполнит реальный запрос к zenrus.ru и выведет:

- Полученные данные в JSON формате
- Результаты работы каждого MCP-инструмента
- Статистику выполнения

## Структура проекта

```
zenrus-mcp/
├── src/
│   ├── index.ts              # Основной код MCP сервера
│   ├── api.ts                # API модуль с кешированием
│   ├── debug.ts              # Скрипт для отладки
│   └── __tests__/
│       └── parser.test.ts    # Тесты парсинга данных
├── dist/                     # Скомпилированные файлы
├── package.json
├── tsconfig.json
├── vitest.config.ts
└── README.md
```

## Как это работает

### Получение данных

Сервер получает данные с zenrus.ru из JavaScript файла `currents.js`, который содержит актуальные курсы в формате:

```javascript
var current = {0:81.08,1:94.15,2:62.17,...}
```

Где:

- `0` - курс USD в рублях
- `1` - курс EUR в рублях
- `2` - цена Brent в долларах

Цена Brent в рублях вычисляется автоматически: `USD * Brent(USD)`

### Кеширование

Данные кешируются на **60 минут** для снижения нагрузки на удаленный API. При каждом запросе:

1. Проверяется наличие и актуальность кешированных данных
2. Если данные устарели (прошло > 60 минут), выполняется новый запрос
3. Новые данные сохраняются в кеш

URL использует Unix timestamp для cache busting: `currents.js?v1234567890`

## Технологии

- [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) - SDK для создания MCP серверов
- TypeScript
- Node.js

## Лицензия

MIT

TDQS

A4/5.0

Scored across 7 tools

Disambiguation4/5

The tools are clearly distinguished by their specific purposes: three calculate barrels for different currencies (EUR, RUB, USD), two get Brent crude prices in different currencies (RUB, USD), and two get exchange rates (EUR/RUB, USD/RUB). There is minimal overlap, as each tool targets a distinct combination of currency and operation type, though the 'calculate_barrels_for_rub' might be slightly redundant given the direct price tools, but descriptions clarify the difference.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with clear, descriptive naming. The verbs 'calculate' and 'get' are used appropriately across tools, and the naming structure (e.g., calculate_barrels_for_eur, get_brent_rub_rate) is uniform throughout, making it easy to predict and understand each tool's function without confusion.

Tool Count5/5

With 7 tools, the count is well-scoped for the server's purpose of providing Brent crude oil price calculations and exchange rates. Each tool serves a specific, necessary function in this domain, covering key operations like price retrieval and conversion calculations without being overly sparse or bloated, ensuring efficient coverage of the intended use cases.

Completeness5/5

The tool set provides complete coverage for the domain of Brent crude oil price calculations and exchange rates. It includes all necessary operations: getting current prices in key currencies (USD, RUB), retrieving relevant exchange rates (EUR/RUB, USD/RUB), and calculating barrel purchases for major currencies (EUR, RUB, USD). There are no obvious gaps, allowing agents to perform comprehensive calculations without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues