MCP (Model Context Protocol) Guide
Что такое MCP?
Model Context Protocol (MCP) — это открытый протокол для подключения AI-моделей к внешним данным и инструментам. MCP позволяет создавать серверы, которые предоставляют инструменты (tools) для AI-моделей, расширяя их возможности.
Основные концепции:
- MCP Server — сервер, который предоставляет инструменты и данные
- MCP Client — клиент, который подключается к серверам и использует их инструменты
- Tools — функции, которые может вызывать AI-модель (например, поиск в интернете, работа с файлами, API вызовы)
Как работает MCP?
- Сервер регистрирует инструменты и запускается
- Клиент подключается к серверу и получает список доступных инструментов
- AI-модель использует инструменты через клиента для выполнения задач
- Результаты возвращаются модели для дальнейшей обработки
Архитектура проекта
MCP_guide/
├── mcp_server.py # MCP сервер с инструментами
├── main.py # Клиент и агент
├── model.py # Модель Groq
├── settings.py # Настройки
├── requirements.txt # Зависимости
└── README.md # Этот файл
Установка и запуск
1. Установка зависимостей
pip install -r requirements.txt
2. Настройка переменных окружения
Создайте файл .env в корне проекта:
GROQ_API=your_groq_api_key_here
MODEL_NAME=llama3-8b-8192
MCP_SERVER_URL=http://127.0.0.1:8000
TAVILY_API=your_tavily_api_key_here
3. Получение API ключей
- Groq API: Зарегистрируйтесь на groq.com
- Tavily API: Зарегистрируйтесь на tavily.com
4. Запуск проекта
Для начала запускаем сервер mcp_server.py
python mcp_server.py
Либо
fastmcp run mcp_server.py
Затем сам код
python main.py
Доступные инструменты
В данном проекте реализованы следующие инструменты:
1. tavily_search
- Описание: Поиск информации в интернете
- Параметры:
query(строка) - Пример: Поиск новостей, информации о технологиях
2. add
- Описание: Сложение двух чисел
- Параметры:
a(int),b(int) - Пример:
add(5, 3)→8
3. reverse
- Описание: Переворачивание текста
- Параметры:
text(строка) - Пример:
reverse("hello")→"olleh"
4. greet
- Описание: Создание приветствия
- Параметры:
name(строка) - Пример:
greet("Анна")→"Привет, Анна!"
Транспорты MCP
stdio (рекомендуется)
- Простой и надежный
- Работает через стандартный ввод/вывод
- Подходит для локальной разработки
streamable-http
- Работает через HTTP с Server-Sent Events
- Требует правильных заголовков
- Подходит для веб-приложений
Примеры использования
Базовый пример
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
async def main():
# Подключение к MCP серверу
client = MultiServerMCPClient({
"demo": {
"command": "python",
"args": ["mcp_server.py"],
"transport": "stdio",
}
})
# Получение инструментов
tools = await client.get_tools()
print(f"Доступно инструментов: {len(tools)}")
asyncio.run(main())
Использование с LangGraph
from langgraph.prebuilt import create_react_agent
# Создание агента с MCP инструментами
agent = create_react_agent(
tools=tools,
model=llm
)
# Вызов агента
result = agent.invoke({
"messages": [{"role": "user", "content": "Сложи 5 и 3"}]
})
Устранение неполадок
Ошибка "Not Acceptable: Client must accept text/event-stream"
- Причина: Неправильная конфигурация HTTP транспорта
- Решение: Используйте stdio транспорт или добавьте правильные заголовки
Ошибка "Expected dict, got string"
- Причина: Неправильный формат входных данных для агента
- Решение: Передавайте данные в формате
{"messages": [...]}
Ошибка подключения к серверу
- Причина: Сервер не запущен или неправильный URL
- Решение: Убедитесь, что сервер запущен и URL корректный
Расширение функциональности
Добавление нового инструмента
- Добавьте функцию в
mcp_server.py:
@mcp.tool()
def multiply(a: int, b: int) -> int:
"""Умножить два числа."""
return a * b
- Перезапустите сервер
Подключение к внешним API
@mcp.tool()
def weather(city: str) -> str:
"""Получить погоду для города."""
# Ваш код для API вызова
return f"Погода в {city}: солнечно"
Полезные ссылки
Лицензия
MIT License
Metadata
Release files for iflow-mcp-switchblxdee-mcp-guide 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iflow_mcp_switchblxdee_mcp_guide-0.1.0.tar.gz | 5.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iflow_mcp_switchblxdee_mcp_guide-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.3 kB
Release files / iflow_mcp_switchblxdee_mcp_guide-0.1.0.tar.gz
| Download URL | iflow_mcp_switchblxdee_mcp_guide-0.1.0.tar.gz |
|---|---|
| Size | 5.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5f17230f7db062e6ff5c533691154b4e43e44ba0644ce9bc0ca5bbf3aad89a04
|
|
BLAKE2b-256 checksum How to use checksums |
811d1df348c21aafd6356bf22c655b1a3d6800930a66b165d3a79a57cabdfeab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / iflow_mcp_switchblxdee_mcp_guide-0.1.0-py3-none-any.whl
| Download URL | iflow_mcp_switchblxdee_mcp_guide-0.1.0-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
232f7e6103b43de9e1bf79a0f6d32cd893778ddcf88c552ba65ed7e223c6acdf
|
|
BLAKE2b-256 checksum How to use checksums |
5fed5db5c93d551cf9f6ed0b211424cfaac1fc53a2d393b63281959aa5ac891d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|