Crypto News MCP Server
Интеллектуальный MCP (Model Context Protocol) сервер для анализа криптовалютных новостей с использованием ИИ. Предоставляет 10 специализированных инструментов для анализа настроений, трендов и событий в мире криптовалют через Perplexity API.
🚀 Функциональность
Основные возможности
- Анализ настроений криптовалютных новостей в реальном времени
- Прогнозирование трендов на основе новостного фона
- Сравнительный анализ различных криптовалют
- Мониторинг событий, влияющих на рынок
- Корреляционный анализ настроений и цен
- Кэширование результатов для оптимизации производительности
- Real-time обновления через Server-Sent Events (SSE)
10 MCP Инструментов
| Инструмент | Описание | Параметры |
|---|---|---|
getLatestCryptoNews | Получение последних новостей | cryptocurrency, maxArticles? |
analyzeCryptocurrency | Комплексный анализ криптовалюты | cryptocurrency, timeRange? |
getMarketSentiment | Анализ настроений рынка | cryptocurrency, timeRange? |
compareCryptocurrencies | Сравнение криптовалют | cryptocurrencies |
getPositiveNews | Позитивные новости | cryptocurrency, limit? |
getNegativeNews | Негативные новости | cryptocurrency, limit? |
getTrendForecast | Прогноз трендов | cryptocurrency |
searchCryptoNews | Поиск по ключевым словам | cryptocurrency, keywords |
getMarketMovingEvents | События, влияющие на рынок | cryptocurrency |
analyzeSentimentPriceCorrelation | Корреляция настроений и цен | cryptocurrency |
🏗️ Архитектура
Схема архитектуры
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Cursor IDE │ │ Cline VS Code │ │ Other Clients │
│ │ │ │ │ │
└─────────┬───────┘ └─────────┬────────┘ └─────────┬───────┘
│ │ │
└──────────────────────┼───────────────────────┘
│
┌────────────▼────────────┐
│ MCP Protocol Layer │
│ ┌─────┐ ┌─────┐ ┌─────┐│
│ │ SSE │ │HTTP │ │STDIO││
│ └─────┘ └─────┘ └─────┘│
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ CryptoNewsTools │
│ (@Tool Annotations) │
│ ┌─────────────────────┐│
│ │ 10 MCP Instruments ││
│ └─────────────────────┘│
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ Application Services │
│ ┌─────────────────────┐ │
│ │ NewsAnalyticsService│ │
│ │ SentimentAnalyzer │ │
│ │ NewsUpdateService │ │
│ └─────────────────────┘ │
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ PerplexityNewsClient │
│ (AI Integration) │
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ Perplexity API │
│ (External Service) │
└─────────────────────────┘Технологический стек
- Framework: Spring Boot 3.3.0 + Spring AI 1.0.0-M6
- Language: Java 21 с Lombok для упрощения кода
- Protocol: MCP (Model Context Protocol)
- AI Integration: Perplexity API для анализа новостей
- Database: H2 (embedded) для кэширования
- Cache: Caffeine для высокопроизводительного кэширования
- Logging: SLF4J с Logback
- Build: Maven
- Containerization: Docker
Ключевые компоненты
1. CryptoNewsTools (@Tool)
Основной класс с 10 MCP инструментами, использующий Spring AI аннотации:
@Component
@Slf4j
public class CryptoNewsTools {
@Tool("Get latest cryptocurrency news")
public String getLatestCryptoNews(String cryptocurrency, Integer maxArticles) {
// Реализация получения новостей
}
@Tool("Analyze cryptocurrency sentiment and trends")
public String analyzeCryptocurrency(String cryptocurrency, String timeRange) {
// Комплексный анализ
}
}2. NewsAnalyticsService
Основная бизнес-логика с кэшированием и транзакциями:
@Service
@Transactional
@Slf4j
public class NewsAnalyticsService {
@Cacheable(value = "news-cache")
public List getLatestCryptoNews(String cryptocurrency, Integer maxArticles) {
// Логика получения и анализа новостей
}
}3. Data Models (Lombok)
Современные модели данных с минимумом бойлерплейт кода:
@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NewsItem {
private String title;
private String description;
private String cryptocurrency;
private LocalDateTime publishedDate;
private SentimentScore sentimentScore;
}📁 Структура проекта
crypto-new-ai-analyzer/
├── spring-ai-mcp-server/
│ ├── src/main/java/com/cryptonews/mcpserver/
│ │ ├── SpringAiMcpApplication.java # Главный класс приложения
│ │ ├── tools/
│ │ │ └── CryptoNewsTools.java # 10 MCP инструментов (@Tool)
│ │ ├── service/
│ │ │ ├── NewsAnalyticsService.java # Основная бизнес-логика
│ │ │ ├── SentimentAnalyzer.java # Анализ настроений
│ │ │ ├── NewsUpdateService.java # Обновления в реальном времени
│ │ │ └── SseService.java # Server-Sent Events
│ │ ├── client/
│ │ │ └── PerplexityNewsClient.java # Интеграция с Perplexity API
│ │ ├── model/
│ │ │ ├── NewsItem.java # Модель новости (@Data)
│ │ │ ├── SentimentScore.java # Модель оценки настроений
│ │ │ └── CryptoAnalytics.java # Модель аналитики (@Value)
│ │ └── config/
│ │ ├── CachingConfig.java # Конфигурация кэширования
│ │ └── PerplexityApiProperties.java # Настройки API (@Data)
│ ├── src/main/resources/
│ │ └── application.yml # Конфигурация приложения
│ ├── Dockerfile # Docker образ
│ └── pom.xml # Maven зависимости
├── memory-bank/ # Документация проекта
└── README.md # Эта документация🛠️ Примеры использования инструментов
1. Получение последних новостей
Входные параметры:
{
"tool": "getLatestCryptoNews",
"parameters": {
"cryptocurrency": "BTC",
"maxArticles": 5
}
}Пример ответа:
[
{
"id": 1,
"title": "Bitcoin Reaches New All-Time High",
"description": "Bitcoin surged to $75,000 following institutional adoption...",
"cryptocurrency": "BTC",
"publishedDate": "2024-06-10T10:30:00",
"source": "CryptoNews",
"url": "https://example.com/news/1",
"sentimentScore": {
"positiveScore": 0.8,
"negativeScore": 0.1,
"neutralScore": 0.1,
"compoundScore": 0.7,
"label": "POSITIVE"
}
}
]2. Комплексный анализ криптовалюты
Входные параметры:
{
"tool": "analyzeCryptocurrency",
"parameters": {
"cryptocurrency": "ETH",
"timeRange": "7 days"
}
}Пример ответа:
{
"cryptocurrency": "ETH",
"timeRange": "7 days",
"totalArticles": 45,
"sentimentCounts": {
"positive": 28,
"negative": 12,
"neutral": 5
},
"averageSentiment": 0.35,
"sentimentTrend": 0.15,
"keyTopics": ["DeFi", "Ethereum 2.0", "Smart Contracts"],
"topPositiveNews": [...],
"topNegativeNews": [...],
"marketMovingEvents": "Ethereum London hard fork implementation...",
"trendForecast": "Bullish outlook based on upcoming upgrades..."
}3. Анализ настроений рынка
{
"tool": "getMarketSentiment",
"parameters": {
"cryptocurrency": "BTC",
"timeRange": "24 hours"
}
}4. Сравнение криптовалют
{
"tool": "compareCryptocurrencies",
"parameters": {
"cryptocurrencies": "BTC,ETH,ADA"
}
}5. Поиск новостей по ключевым словам
{
"tool": "searchCryptoNews",
"parameters": {
"cryptocurrency": "BTC",
"keywords": "institutional adoption"
}
}🐳 Развертывание с Docker
Предварительные требования
- Docker и Docker Compose
- API ключ Perplexity (получить на perplexity.ai)
Шаг 1: Клонирование репозитория
git clone
cd crypto-new-ai-analyzerШаг 2: Сборка Docker образа
cd spring-ai-mcp-server
docker build -t crypto-mcp-server .Шаг 3: Настройка API ключа
Метод 1: Использование .env файла (рекомендуется)
# Создайте .env файл в директории проекта
echo "PERPLEXITY_API_KEY=your_api_key_here" > .env
echo "PERPLEXITY_API_URL=https://api.perplexity.ai" >> .env
echo "PERPLEXITY_MODEL=llama-3-sonar-large-32k-online" >> .envМетод 2: Переменные окружения
export PERPLEXITY_API_KEY=your_api_key_here
export PERPLEXITY_API_URL=https://api.perplexity.ai
export PERPLEXITY_MODEL=llama-3-sonar-large-32k-onlineШаг 4: Запуск контейнера
С Docker Compose (рекомендуется)
docker-compose up -dНапрямую с Docker
docker run -d \
--name crypto-mcp-server \
-p 8080:8080 \
-p 8089:8089 \
-e PERPLEXITY_API_KEY=your_api_key_here \
-e PERPLEXITY_API_URL=https://api.perplexity.ai \
-e PERPLEXITY_MODEL=llama-3-sonar-large-32k-online \
crypto-mcp-server⚠️ Безопасность API ключей
- Используйте .env файл для локальной разработки
- .env файл добавлен в .gitignore - не попадёт в Git
- Никогда не коммитьте API ключи в открытые репозитории
- Используйте переменные окружения в продакшене
🔗 Подключение к IDE
Cursor IDE
- Откройте настройки Cursor (
Cmd/Ctrl + ,) - Перейдите в раздел "Features" → "Model Context Protocol"
- Выберите один из методов подключения:
Метод 1: SSE транспорт (рекомендуется для реального времени)
{
"mcpServers": {
"crypto-news-sse": {
"name": "Crypto News MCP Server (SSE)",
"transport": {
"type": "sse",
"url": "http://localhost:8089/mcp/sse",
"timeout": 30000
},
"description": "Crypto News MCP Server через Server-Sent Events"
}
}
}Метод 2: HTTP транспорт
{
"mcpServers": {
"crypto-news-analyzer": {
"url": "http://localhost:8080",
"transport": "http",
"description": "Crypto News Analysis with AI"
}
}
}Метод 3: Docker exec (альтернативный)
{
"mcpServers": {
"crypto-news-analyzer": {
"command": "docker",
"args": [
"exec",
"-i",
"crypto-mcp-server",
"java",
"-Dspring.ai.mcp.server.transport.stdio.enabled=true",
"-jar",
"/app/crypto-mcp-server.jar"
],
"description": "Crypto News Analysis via Docker exec"
}
}
}Cline (VS Code Extension)
- Установите расширение Cline в VS Code
- Откройте настройки расширения
- Добавьте MCP сервер в конфигурацию:
{
"cline.mcpServers": [
{
"name": "crypto-news-analyzer",
"url": "http://localhost:8080"
}
]
}🧪 Тестирование подключения
Проверка работы сервера
# Проверка health endpoint
curl http://localhost:8080/actuator/health
# Проверка информации о приложении
curl http://localhost:8080/actuator/info
# Тест SSE подключения
curl -N -H "Accept: text/event-stream" http://localhost:8089/mcp/sse
# Проверка логов контейнера
docker logs crypto-mcp-serverПример вызова через Cursor
После подключения MCP сервера в Cursor, вы можете использовать инструменты в чате:
Анализ последних новостей:
@crypto-news-analyzer Проанализируй последние новости по Bitcoin за неделю и дай прогноз трендаСравнение криптовалют:
@crypto-news-analyzer Сравни настроения рынка для BTC, ETH и ADA за последние 24 часаПоиск событий:
@crypto-news-analyzer Найди все события, которые могут повлиять на курс Ethereum в ближайшее времяАнализ корреляции:
@crypto-news-analyzer Проанализируй корреляцию между настроениями в новостях и движением цены Bitcoin⚙️ Конфигурация
application.yml
server:
port: 8080
spring:
ai:
mcp:
server:
transport:
stdio:
enabled: true
http:
enabled: true
sse:
enabled: true
cache:
type: caffeine
caffeine:
spec: maximumSize=1000,expireAfterWrite=1h
perplexity:
api:
url: ${PERPLEXITY_API_URL:https://api.perplexity.ai}
key: ${PERPLEXITY_API_KEY}
model: sonar-pro
backup-model: sonar
news:
analytics:
max-articles-per-request: 20
default-time-range-hours: 24
logging:
level:
com.cryptonews: DEBUG
org.springframework.ai: DEBUG
root: INFOПеременные окружения
# Обязательные
PERPLEXITY_API_KEY=your_perplexity_api_key
# Опциональные
PERPLEXITY_API_URL=https://api.perplexity.ai
SERVER_PORT=8080
LOGGING_LEVEL_ROOT=INFO🔧 Разработка
Локальный запуск
cd spring-ai-mcp-server
# Установка зависимостей и сборка
mvn clean package
# Запуск в режиме разработки
mvn spring-boot:run -Dspring-boot.run.profiles=devЗапуск тестов
# Все тесты
mvn test
# Только unit тесты
mvn test -Dtest=*Test
# Интеграционные тесты
mvn test -Dtest=*IntegrationTestHot reload для разработки
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.devtools.restart.enabled=true"📊 Мониторинг и отладка
Actuator endpoints
- Health:
GET /actuator/health- Состояние приложения - Metrics:
GET /actuator/metrics- Метрики производительности - Info:
GET /actuator/info- Информация о приложении - Loggers:
GET /actuator/loggers- Управление уровнями логирования
Полезные команды для отладки
# Просмотр логов в реальном времени
docker logs -f crypto-mcp-server
# Проверка использования ресурсов
docker stats crypto-mcp-server
# Подключение к контейнеру
docker exec -it crypto-mcp-server /bin/bash
# Проверка конфигурации Spring
docker exec crypto-mcp-server curl http://localhost:8080/actuator/configprops🤝 Примеры интеграции
Интеграция с Trading Bot
import requests
# Получение анализа настроений для принятия торговых решений
def get_trading_signal(crypto):
response = requests.post('http://localhost:8080/tools/analyzeCryptocurrency',
json={
'cryptocurrency': crypto,
'timeRange': '24 hours'
})
analysis = response.json()
if analysis['averageSentiment'] > 0.5:
return 'BUY'
elif analysis['averageSentiment'] {
const crypto = match[1];
try {
const response = await axios.post('http://localhost:8080/tools/getLatestCryptoNews', {
cryptocurrency: crypto,
maxArticles: 5
});
bot.sendMessage(msg.chat.id, `Анализ новостей для ${crypto}:\n${JSON.stringify(response.data, null, 2)}`);
} catch (error) {
bot.sendMessage(msg.chat.id, 'Ошибка получения данных');
}
});🚨 Устранение проблем
Частые проблемы и решения
- Сервер не запускается
# Проверьте логи
docker logs crypto-mcp-server
# Убедитесь что порты свободны
netstat -tulpn | grep :8080- Ошибки API ключа Perplexity
# Проверьте переменные окружения
docker exec crypto-mcp-server env | grep PERPLEXITY- MCP сервер не подключается к Cursor
- Убедитесь что сервер запущен: curl http://localhost:8080/actuator/health - Проверьте конфигурацию MCP в настройках Cursor - Перезапустите Cursor после изменения конфигурации
- Медленные ответы от инструментов
- Проверьте кэш: curl http://localhost:8080/actuator/metrics/cache.gets - Увеличьте размер кэша в application.yml
📈 Метрики производительности
Типичные показатели производительности:
- Время ответа API: 200-500ms для кэшированных результатов
- Время анализа новостей: 1-3 секунды для новых запросов
- Использование памяти: 512MB-1GB в зависимости от загрузки
- Concurrent users: До 100 одновременных пользователей
📝 Changelog
v1.0.0 (Current)
- ✅ Реализованы все 10 MCP инструментов
- ✅ Интеграция с Perplexity API
- ✅ Spring AI 1.0.0-M6 поддержка
- ✅ Docker containerization
- ✅ Lombok и SLF4J рефакторинг
- ✅ Комплексное тестирование
🆘 Поддержка
При возникновении проблем:
- Проверьте документацию - большинство вопросов освещены здесь
- Изучите логи -
docker logs crypto-mcp-server - Проверьте health endpoints -
/actuator/health - Создайте issue в репозитории с подробным описанием проблемы
Полезные ссылки:
🎯 Разработано с использованием Spring AI и MCP Protocol для интеграции с современными IDE и AI-ассистентами.
⭐ Поставьте звезду репозиторию, если проект оказался полезным!
