VK API MCP Server (FastMCP)
Enables AI agents to interact with VKontakte through a unified FastMCP interface, supporting messaging, wall posts, user/group management, and real-time event handling.
README
VK API MCP Server (FastMCP)
🚀 Инструментальный сервер для VK API на базе FastMCP - единый интерфейс для работы с VKontakte через ИИ-агентов.
📋 Содержание
- Быстрый старт
- Возможности
- Установка и настройка
- Запуск в Gemini CLI
- Запуск в Cursor
- Структура проекта
- API и методы
- Примеры использования
- Отладка и тестирование
- Troubleshooting
🚀 Быстрый старт
1. Клонирование и установка
cd C:\Users\nikol\Projects\mcp_vk_api
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
2. Настройка токенов
# Скопируйте и отредактируйте config.ini
copy config.ini.example config.ini
Заполните config.ini:
[vk]
token = vk1.a.your_user_token_here
[google]
speech_api_key = your_google_speech_api_key
gemini_api_key = your_gemini_api_key
3. Запуск
# Gemini CLI
mcp run C:\Users\nikol\Projects\mcp_vk_api\main.py
# Или вручную
python -u main.py
✨ Возможности
🔧 Основные функции
- 10 агрегаторов VK API:
users,groups,messages,wall,likes,photos,docs,video,utils,recognition - Единый интерфейс: по одной функции на раздел VK API
- Long Poll: ожидание событий в реальном времени
- Автоматическое распознавание: речи и изображений
- Имитация человеческого поведения: задержки, статусы печати
- Кэширование: результатов распознавания
- Пагинация и retry: надежная работа с API
🎯 Специальные возможности
await_any_event: унифицированное ожидание сообщений/уведомлений- Автоформатирование: сообщения с именами пользователей и эмодзи
- Batch операции: массовые вызовы API
- Capability discovery: автоматическое обнаружение методов
- Универсальный клиент:
vk_client.pyдля тестирования
📦 Установка и настройка
Требования
- Python 3.11+
- VK User Token с правами:
messages,wall,photos,docs,video - Опционально: Google Speech API и Gemini API ключи
Зависимости
# Основные
fastmcp # MCP сервер
vk_api # VK API клиент
requests # HTTP запросы
# Опционально для распознавания
google-genai # Gemini API
Получение токенов
VK Token
- Перейдите на https://vkhost.github.io/
- Выберите "Kate Mobile"
- Авторизуйтесь и скопируйте токен
Google API (опционально)
- Speech API: https://console.cloud.google.com/apis/library/speech.googleapis.com
- Gemini API: https://makersuite.google.com/app/apikey
🎮 Запуск в Gemini CLI
Глобальная установка
# Установите MCP CLI
pip install mcp
# Запустите сервер
mcp run C:\Users\nikol\Projects\mcp_vk_api\main.py
Локальный запуск
cd C:\Users\nikol\Projects\mcp_vk_api
python -u main.py
Примеры команд в Gemini CLI
# Получить информацию о пользователе
vk-api users get_user_info {"user_ids": "1", "fields": "photo_200"}
# Ожидать сообщения 5 минут
vk-api messages await_any_event {"duration_s": 300}
# Отправить сообщение
vk-api messages send_message {"peer_id": 123, "message": "Привет!"}
🖥️ Запуск в Cursor
Настройка MCP в Cursor
- Откройте
C:\Users\nikol\.cursor\mcp.json - Добавьте конфигурацию:
{
"mcpServers": {
"vk-api": {
"command": "mcp",
"args": ["run", "C:\\Users\\nikol\\Projects\\mcp_vk_api\\main.py"],
"cwd": "C:\\Users\\nikol\\Projects\\mcp_vk_api"
}
}
}
- Перезагрузите серверы: Cursor Settings → MCP → Reload Servers
Использование в Cursor
- Откройте Command Palette (
Ctrl+Shift+P) - Выберите "MCP: Call Tool"
- Выберите
vk-apiи нужный агрегатор
📁 Структура проекта
mcp_vk_api/
├── 📄 main.py # MCP сервер, регистрация агрегаторов
├── 📄 vk_provider.py # Инициализация VK API
├── 📄 config.py # Загрузка конфигурации
├── 📄 vk_client.py # Универсальный тестовый клиент
├── 📄 requirements.txt # Python зависимости
├── 📄 goal.txt # Цель проекта
├── 📄 config.ini # Токены и настройки
│
├── 📁 tools/ # Агрегаторы VK API
│ ├── 📁 users/ # Пользователи VK
│ │ └── 📄 tools.py # get_user_info, search_users, get_friends, etc.
│ │
│ ├── 📁 groups/ # Группы VK
│ │ └── 📄 tools.py # get_group_info, search_groups, get_members
│ │
│ ├── 📁 messages/ # Сообщения и Long Poll
│ │ ├── 📄 tools.py # send_message, get_history, await_any_event
│ │ ├── 📄 formatting.py # Форматирование сообщений
│ │ └── 📄 human_behavior.py # Имитация человеческого поведения
│ │
│ ├── 📁 wall/ # Стена и посты
│ │ └── 📄 tools.py # get_wall_posts, create_comment, post_photo
│ │
│ ├── 📁 likes/ # Лайки
│ │ └── 📄 tools.py # is_liked, add, delete
│ │
│ ├── 📁 photos/ # Фотографии
│ │ └── 📄 tools.py # photos_get, photos_get_albums
│ │
│ ├── 📁 docs/ # Документы
│ │ └── 📄 tools.py # docs_get, docs_search
│ │
│ ├── 📁 video/ # Видео
│ │ └── 📄 tools.py # video_search, video_get, video_get_direct_url
│ │
│ ├── 📁 utils/ # Утилиты
│ │ └── 📄 tools.py # paginate, vk_retry, resolve_screen_name
│ │
│ ├── 📁 recognition/ # Распознавание речи и изображений
│ │ ├── 📄 tools.py # Агрегатор распознавания
│ │ ├── 📄 speech.py # Google Speech API
│ │ ├── 📄 gemini.py # Google Gemini API
│ │ ├── 📄 auto.py # Автоматическое распознавание
│ │ └── 📄 cache.py # Кэширование результатов
│ │
│ └── 📁 smart/ # Умные функции (заготовка)
│
├── 📁 data/ # Данные и кэш
│ ├── 📄 last_notifications.json # Время последних уведомлений
│ ├── 📄 last_ts.json # Время последних сообщений
│ └── 📁 recognition_cache/ # Кэш распознавания
│
├── 📁 logs/ # Логи
│ └── 📁 prompts/ # Логи промптов
│
├── 📁 tests/ # Тесты
│ ├── 📄 mcp_likes_test.py # Тест лайков
│ └── 📄 mcp_longpoll_test.py # Тест Long Poll
│
└── 📁 scripts/ # Скрипты (пусто)
🔌 API и методы
Принцип работы
Каждый агрегатор принимает два параметра:
method— строка, имя под-методаparams— объект с параметрами
Список агрегаторов
1. users - Пользователи VK
{
"method": "get_user_info",
"params": {"user_ids": "1,durov", "fields": "photo_200"}
}
Доступные методы:
get_user_info- информация о пользователяхsearch_users- поиск пользователейget_friends- друзья пользователяget_followers- подписчикиget_subscriptions- подпискиget_mutual- общие друзьяget_friend_requests- заявки в друзьяadd_friend- добавить в друзьяdelete_friend- удалить из друзей
2. groups - Группы VK
{
"method": "get_group_info",
"params": {"group_ids": "durov", "fields": "description"}
}
Доступные методы:
get_group_info- информация о группеsearch_groups- поиск группget_group_members- участники группы
3. messages - Сообщения и Long Poll
{
"method": "send_message",
"params": {"peer_id": 123, "message": "Привет!", "reply_to": 456}
}
Доступные методы:
send_message- отправить сообщениеget_conversations- список диалоговget_history- история сообщенийget_unread_messages- непрочитанные сообщенияmark_as_read- отметить как прочитанноеdelete_message- удалить сообщениеedit_message- редактировать сообщениеsend_photo- отправить фотоsearch_messages- поиск сообщенийset_typing_status- статус печатиawait_any_event- ожидание событий (Long Poll)
4. wall - Стена и посты
{
"method": "get_wall_posts",
"params": {"owner_id": "-1", "count": 5}
}
Доступные методы:
get_wall_posts- получить постыget_comments- комментарии к постуcreate_comment- создать комментарийpost_photo- пост с фотоpin_post- закрепить постunpin_post- открепить постedit_post- редактировать постdelete_post- удалить постwatch_wall_posts- наблюдение за постами
5. likes - Лайки
{
"method": "is_liked",
"params": {"type": "post", "owner_id": "-1", "item_id": 123}
}
Доступные методы:
is_liked- проверить лайкadd- поставить лайкdelete- убрать лайк
6. photos - Фотографии
{
"method": "photos_get",
"params": {"owner_id": "1", "album_id": "profile", "count": 3}
}
Доступные методы:
photos_get- получить фотографииphotos_get_albums- альбомы фотографийphotos_get_comments- комментарии к фотоphotos_create_comment- создать комментарий к фото
7. docs - Документы
{
"method": "docs_search",
"params": {"q": "инструкция", "count": 10}
}
Доступные методы:
docs_get- получить документыdocs_search- поиск документов
8. video - Видео
{
"method": "video_search",
"params": {"q": "vk", "count": 10}
}
Доступные методы:
video_search- поиск видеоvideo_get- получить видеоvideo_get_comments- комментарии к видеоvideo_get_direct_url- прямая ссылка на видео
9. utils - Утилиты
{
"method": "list_capabilities",
"params": {}
}
Доступные методы:
list_capabilities- список всех методовdescribe- описание методаpaginate- пагинацияvk_retry- надежный вызов APIresolve_screen_name- разрешение короткого имениresolve_cached- кэшируемое разрешениеexecute_batch- пакетный вызов
10. recognition - Распознавание
{
"method": "transcribe_speech",
"params": {"audio_source": "https://example.com/audio.mp3", "language": "ru-RU"}
}
Доступные методы:
transcribe_speech- распознавание речиanalyze_image- анализ изображенияget_supported_languages- поддерживаемые языкиget_available_features- доступные функции
💡 Примеры использования
Базовые операции
Получение информации о пользователе
{
"method": "get_user_info",
"params": {
"user_ids": "1,durov",
"fields": "photo_200,city,verified"
}
}
Поиск пользователей
{
"method": "search_users",
"params": {
"q": "Павел Дуров",
"count": 5
}
}
Отправка сообщения
{
"method": "send_message",
"params": {
"peer_id": 123456789,
"message": "Привет! Как дела?",
"reply_to": 987654321
}
}
Ожидание событий (Long Poll)
{
"method": "await_any_event",
"params": {
"duration_s": 300
}
}
Продвинутые операции
Пагинация диалогов
{
"method": "paginate",
"params": {
"api_method": "messages.getConversations",
"params": {},
"max_items": 50,
"page_size": 20
}
}
Пакетный вызов API
{
"method": "execute_batch",
"params": {
"calls": [
{"method": "users.get", "params": {"user_ids": "1"}},
{"method": "users.get", "params": {"user_ids": "2"}}
]
}
}
Распознавание речи
{
"method": "transcribe_speech",
"params": {
"audio_source": "C:/path/to/voice_message.mp3",
"language": "ru-RU",
"source_type": "file"
}
}
Анализ изображения
{
"method": "analyze_image",
"params": {
"image_source": "https://example.com/image.jpg",
"source_type": "url"
}
}
🧪 Отладка и тестирование
Универсальный клиент
# Тестирование через vk_client.py
python vk_client.py messages --args '{"method":"await_any_event","params":{"duration_s":60}}'
# Красивый вывод
python vk_client.py users --args '{"method":"get_user_info","params":{"user_ids":"1"}}' --pretty
# Из файла
python vk_client.py messages --args-file test_args.json
Прямой вызов (без MCP)
# Для отладки
python vk_client.py messages --direct --args '{"method":"get_conversations","params":{"count":5}}'
Логирование
# Запуск с подробными логами
python -u main.py 2>&1 | tee vk_api.log
Проверка токенов
# Тест VK API
python vk_client.py users --args '{"method":"get_user_info","params":{"user_ids":"1"}}'
# Тест Google API (если настроены)
python vk_client.py recognition --args '{"method":"get_supported_languages","params":{}}'
🔧 Troubleshooting
Частые проблемы
1. "VK API not initialized"
Причина: Неверный токен или отсутствует config.ini
Решение:
# Проверьте config.ini
cat config.ini
# Получите новый токен на https://vkhost.github.io/
2. "Skipping tool ... missing types"
Причина: Проблема с MCP сервером Решение:
# Перезагрузите MCP servers в Cursor
# Или перезапустите сервер
python -u main.py
3. "No prompts or tools found"
Причина: Неправильная конфигурация MCP Решение:
// Проверьте C:\Users\nikol\.cursor\mcp.json
{
"mcpServers": {
"vk-api": {
"command": "mcp",
"args": ["run", "C:\\Users\\nikol\\Projects\\mcp_vk_api\\main.py"],
"cwd": "C:\\Users\\nikol\\Projects\\mcp_vk_api"
}
}
}
4. Ошибки распознавания
Причина: Отсутствуют Google API ключи Решение:
# Установите google-genai
pip install google-genai
# Добавьте ключи в config.ini
[google]
speech_api_key = your_speech_api_key
gemini_api_key = your_gemini_api_key
5. "await_any_event" ждет только 60 секунд
Причина: Проблема с таймаутом
Решение: Обновлено в коде - теперь корректно работает с указанным duration_s
Отладка Long Poll
# Тест ожидания событий
python vk_client.py messages --args '{"method":"await_any_event","params":{"duration_s":120}}'
# Проверка непрочитанных сообщений
python vk_client.py messages --args '{"method":"get_unread_messages","params":{}}'
Проверка прав токена
# Тест основных функций
python vk_client.py users --args '{"method":"get_user_info","params":{"user_ids":"1"}}'
python vk_client.py messages --args '{"method":"get_conversations","params":{"count":1}}'
python vk_client.py wall --args '{"method":"get_wall_posts","params":{"owner_id":"1","count":1}}'
🔒 Безопасность
Рекомендации
- ✅ Не коммитьте
config.iniс токенами - ✅ Храните токены только локально
- ✅ Используйте переменные окружения для API ключей
- ✅ Регулярно обновляйте токены VK
- ❌ Не передавайте токены третьим лицам
Переменные окружения
# Альтернатива config.ini
export VK_TOKEN="vk1.a.your_token"
export GOOGLE_SPEECH_API_KEY="your_speech_key"
export GOOGLE_GEMINI_API_KEY="your_gemini_key"
🚀 Особенности и возможности
Автоматическое распознавание
- Голосовые сообщения распознаются автоматически при получении истории
- Кэширование результатов для экономии API вызовов
- Поддержка множества языков через Google Speech API
Имитация человеческого поведения
- Автоматические задержки при печати сообщений
- Статусы "печатает" для реалистичности
- Настраиваемые интервалы между действиями
Красивое форматирование
- Имена пользователей вместо ID
- Эмодзи и иконки для разных типов контента
- Структурированный вывод для удобства чтения
Универсальные утилиты
- Пагинация для больших списков
- Retry механизм для надежности
- Batch операции для эффективности
- Кэширование для оптимизации
📞 Поддержка
Полезные команды
# Список всех методов
python vk_client.py utils --args '{"method":"list_capabilities","params":{}}'
# Описание конкретного метода
python vk_client.py utils --args '{"method":"describe","params":{"aggregator":"messages","method":"await_any_event"}}'
# Статистика распознавания
python vk_client.py messages --args '{"method":"get_recognition_statistics","params":{}}'
# Очистка кэша
python vk_client.py messages --args '{"method":"clear_recognition_cache_data","params":{}}'
Логи и отладка
- Логи сервера:
python -u main.py 2>&1 | tee vk_api.log - Тестовые файлы:
tests/mcp_*.py - Кэш данных:
data/recognition_cache/
🎯 Цель проекта: Быть проактивным и полезным ассистентом в VK. Проверять новые сообщения и отвечать на них осмысленно.
📝 Лицензия: Проект для личного использования и обучения.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。