使用说明
🚀 MCP Client для Kotlin
Полнофункциональный клиент для подключения к удаленным MCP (Model Context Protocol) серверам.
✨ Возможности
- ✅ Подключение к удаленным MCP серверам через HTTP/HTTPS
- ✅ Полная поддержка JSON-RPC 2.0 протокола
- ✅ Работа с инструментами (Tools) - вызов и управление
- ✅ Работа с ресурсами (Resources) - список и чтение
- ✅ Работа с промптами (Prompts)
- ✅ Настройка пользовательских заголовков (API ключи, токены)
- ✅ Асинхронная работа с корутинами Kotlin
- ✅ Batch операции - параллельное выполнение запросов
- ✅ Удобные утилиты для работы с MCP
- ✅ Интерактивный CLI
- ✅ Подробное логирование
- ✅ Обработка ошибок
Требования
- Java 24+
- Kotlin 2.2.21+
Установка
Вариант 1: Использование как Gradle зависимости (Рекомендуется)
Добавьте JitPack репозиторий в ваш проект:
settings.gradle.kts (Kotlin DSL):
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
settings.gradle (Groovy):
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Добавьте зависимость в ваш модуль:
build.gradle.kts (Kotlin DSL):
dependencies {
implementation("com.github.germanbakunov:McpClient:1.0.0")
}
build.gradle (Groovy):
dependencies {
implementation 'com.github.germanbakunov:McpClient:1.0.0'
}
📘 Подробнее о публикации и использовании смотрите в PUBLISHING.md
Вариант 2: Клонирование репозитория
- Клонируйте репозиторий
- Установите зависимости:
./gradlew build
Конфигурация
Способ 1: Файл local.properties (рекомендуется)
Создайте файл local.properties в корне проекта:
# Local configuration file
CONTEXT7_API_KEY=your_actual_api_key_here
Файл local.properties уже добавлен в .gitignore, поэтому ваши API ключи не попадут в git.
Все примеры автоматически загружают токен из этого файла:
import org.example.mcp.McpUtils
val apiKey = McpUtils.requireProperty("local.properties", "CONTEXT7_API_KEY")
Способ 2: Конфигурационный файл JSON
Пример конфигурации для подключения к Context7:
{
"mcpServers": {
"context7": {
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "YOUR_API_KEY"
}
}
}
}
Использование
Базовый пример
import kotlinx.coroutines.runBlocking
import org.example.mcp.McpClient
import org.example.mcp.McpConfig
import org.example.mcp.McpUtils
fun main() = runBlocking {
// Загружаем API ключ из local.properties
val apiKey = McpUtils.requireProperty("local.properties", "CONTEXT7_API_KEY")
// Создаем конфигурацию
val config = McpConfig(
url = "https://mcp.context7.com/mcp",
headers = mapOf(
"CONTEXT7_API_KEY" to apiKey
)
)
// Создаем клиент
val client = McpClient(config)
try {
// Инициализация соединения
client.initialize()
// Получение списка инструментов
val tools = client.listTools()
tools.tools.forEach { tool ->
println("Tool: ${tool.name}")
println("Description: ${tool.description}")
}
// Вызов инструмента
val arguments = buildJsonObject {
put("libraryName", "react")
put("query", "How to use React hooks?")
}
val result = client.callTool("resolve-library-id", arguments)
} finally {
client.close()
}
}
Работа с ресурсами
// Получение списка ресурсов
val resources = client.listResources()
// Чтение конкретного ресурса
val content = client.readResource("resource://example")
Работа с промптами
// Получение списка промптов
val prompts = client.listPrompts()
🎯 Быстрый старт
1. Установка переменной окружения
export CONTEXT7_API_KEY="your_api_key_here"
2. Запуск базового примера
./gradlew run
# или
./run-basic.sh
3. Другие примеры
# Вызов инструментов
./run-tool-call.sh
# Batch операции
./run-batch.sh
# Интерактивный CLI
./run-interactive.sh
Структура проекта
src/
├── main/
│ └── kotlin/
│ ├── Main.kt # Пример использования
│ └── org/example/mcp/
│ ├── McpClient.kt # Основной клиент
│ ├── McpConfig.kt # Конфигурация
│ └── models/
│ ├── JsonRpc.kt # JSON-RPC модели
│ └── McpModels.kt # MCP модели данных
API
McpClient
Методы
suspend fun initialize(): InitializeResult- Инициализация соединенияsuspend fun listTools(): ListToolsResult- Список доступных инструментовsuspend fun callTool(name: String, arguments: JsonObject?): CallToolResult- Вызов инструментаsuspend fun listResources(): ListResourcesResult- Список доступных ресурсовsuspend fun readResource(uri: String): ReadResourceResult- Чтение ресурсаsuspend fun listPrompts(): ListPromptsResult- Список доступных промптовfun close()- Закрытие соединения
Обработка ошибок
try {
val result = client.callTool("some-tool", arguments)
} catch (e: McpException) {
println("MCP Error: ${e.message}")
println("Error code: ${e.error?.code}")
}
Логирование
Клиент использует Ktor Logging для вывода HTTP запросов/ответов. Уровень логирования можно настроить через logback.
Лицензия
MIT
📚 Примеры
Подробные примеры использования смотрите в EXAMPLES.md
Доступные примеры кода:
src/main/kotlin/org/example/examples/BasicExample.kt- Базовый примерsrc/main/kotlin/org/example/examples/ToolCallExample.kt- Вызов инструментовsrc/main/kotlin/org/example/examples/ConfigFileExample.kt- Работа с конфигурациейsrc/main/kotlin/org/example/examples/BatchOperationsExample.kt- Batch операцииsrc/main/kotlin/org/example/examples/InteractiveCli.kt- Интерактивный CLI
🧪 Тестирование
# Сборка проекта
./gradlew build
# Запуск тестов
./gradlew test
# Очистка и пересборка
./gradlew clean build
🔧 Расширенная настройка
Кастомные заголовки
val config = McpConfig(
url = "https://your-server.com/mcp",
headers = mapOf(
"Authorization" to "Bearer YOUR_TOKEN",
"X-Custom-Header" to "value"
)
)
Кастомное имя клиента
val client = McpClient(
config = config,
clientName = "MyApplication",
clientVersion = "1.0.0"
)
🤝 Вклад в проект
Вклад приветствуется! Пожалуйста:
- Форкните репозиторий
- Создайте ветку для фичи (
git checkout -b feature/AmazingFeature) - Закоммитьте изменения (
git commit -m 'Add some AmazingFeature') - Запушьте в ветку (
git push origin feature/AmazingFeature) - Откройте Pull Request
📝 TODO
- [ ] Поддержка WebSocket транспорта
- [ ] Поддержка Server-Sent Events (SSE)
- [ ] Кеширование запросов
- [ ] Retry механизм с экспоненциальной задержкой
- [ ] Метрики и мониторинг
- [ ] Более подробная документация API
🐛 Известные проблемы
Пока нет известных проблем. Если вы нашли баг, пожалуйста, создайте issue.
📄 Лицензия
MIT
🔗 Полезные ссылки
- Model Context Protocol Specification
- Context7 MCP Server
- Context7 Documentation
- Kotlin Coroutines
- Ktor Client
👤 Автор
Создано для работы с MCP серверами на Kotlin.
🙏 Благодарности
- Команде Kotlin за отличный язык
- Команде Ktor за мощный HTTP клиент
- Команде Context7 за MCP сервер
