MCP серверы

Ответить
ya
^-^
Сообщения: 3596
Зарегистрирован: 16 дек 2021, 19:56

Re: MCP серверы

Сообщение ya »

## **llama.cpp и MCP: официальная интеграция**

Хорошая новость — **llama.cpp уже имеет встроенную поддержку MCP серверов**! Это было добавлено в PR #26062. Вот как это работает:

---

## **Способ 1: Встроенная поддержка llama.cpp (рекомендуется)**

### Запуск llama-server с MCP-сервером

**1. Создайте конфиг `mcp.json`:**

```json
{
"mcpServers": {
"example": {
"command": "/path/to/mcp-server",
"args": ["arg1", "arg2"]
}
}
}
```

**2. Запустите llama-server с этим конфигом:**

```bash
llama-server -m model.gguf --mcp-servers-config mcp.json --port 8080
```

**3. Или передайте JSON прямо в параметр:**

```bash
llama-server -m model.gguf --mcp-servers-json '{"mcpServers": {"test": {"command": "echo"}}}' --port 8080
```

### Параметры конфигурации MCP-сервера:

| Ключ | Описание |
|------|---------|
| `command` | Путь к исполняемому файлу (обязателен) |
| `args` | Массив аргументов |
| `env` | Объект переменных окружения |
| `cwd` | Рабочая директория процесса |
| `timeout_ms` | Timeout для tool-call (по умолчанию 30000 мс) |

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

- MCP-сервер запускается как **дочерний процесс** (stdio транспорт)
- Запускается один раз при старте для получения списка инструментов
- После этого перезапускается при вызове инструментов
- Инструменты доступны как `<server_name>_<tool_name>` в Web UI
- Работает в CLI и в API

---

## **Способ 2: Готовые MCP-обёртки для llama.cpp**

Если нужен более простой способ, используйте эти проекты:

### **A. llama-cpp-mcp** (TypeScript/Node.js)
**[https://github.com/chadsten/llama-cpp-mcp](https://github.com/chadsten/llama-cpp-mcp)**

```bash
npm install llama-cpp-mcp
npx llama-cpp-mcp
```

Поддерживает инструменты:
- `llama_health` — статус сервера
- `llama_complete` — полная генерация текста
- `llama_tokenize` — токенизация
- `llama_start`/`llama_stop` — управление процессом

### **B. local-llm-mcp** (JavaScript)
**[https://github.com/Codetoil/local-llm-mcp](https://github.com/Codetoil/local-llm-mcp)**

Работает с llama-server, Ollama, vLLM, LM Studio:

```bash
git clone https://github.com/Codetoil/local-llm-mcp
cd local-llm-mcp
npm install
node index.js
```

### **C. llamacpp-mcp** (Python)
**[https://github.com/lukasmki/llamacpp-mcp](https://github.com/lukasmki/llamacpp-mcp)**

```bash
git clone https://github.com/lukasmki/llamacpp-mcp
cd llamacpp-mcp
uv sync
uv run llamacpp-mcp -i /path/to/model.gguf
```

---

## **Пример: полная настройка**

### Шаг 1 — Напишите простой MCP-сервер на C++ (опционально):

Создайте исполняемый файл, который читает JSON-RPC из stdin и пишет в stdout:

```cpp
#include <iostream>
#include <string>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() {
std::string line;
while (std::getline(std::cin, line)) {
try {
auto request = json::parse(line);

// Обработка MCP запросов
if (request["method"] == "tools/list") {
json response = {
{"jsonrpc", "2.0"},
{"id", request["id"]},
{"result", {
{"tools", json::array()}
}}
};
std::cout << response.dump() << std::endl;
}
} catch(...) {}
}
return 0;
}
```

Компилируется:
```bash
g++ -std=c++17 mcp-server.cpp -o mcp-server
```

### Шаг 2 — Конфигурируйте llama.cpp:

```bash
./llama-server \
-m Qwen3.6-32B-Instruct-GGUF \
--mcp-servers-config mcp.json \
--jinja \
--port 8080
```

Где `mcp.json`:
```json
{
"mcpServers": {
"my_server": {
"command": "/path/to/mcp-server",
"timeout_ms": 60000
}
}
}
```

### Шаг 3 — Используйте инструменты:

Откройте Web UI (`http://localhost:8080`), и инструменты `my_server_*` будут доступны в чате.

---

## **Альтернатива: Web UI MCP CORS прокси**

Если ваш MCP-сервер удалённый, используйте флаг:

```bash
llama-server -m model.gguf --webui-mcp-proxy --port 8080
```

Это позволит Web UI подключаться к удалённым MCP-серверам через WebSocket или HTTP.

---

## **Ключевые моменты:**

✅ **MCP работает с любым GGUF форматом** (Qwen, Llama, Mistral, DeepSeek и т.д.)
✅ **Инструменты видны в Web UI и доступны через API**
✅ **Поддерживается JSON парсинг** (nlohmann/json встроен в llama.cpp)
✅ **Процесс работает локально** — полная приватность
❌ **C++ поддержка MCP** — нужно писать собственный сервер на C++ или использовать готовые обёртки

Какой подход вам интереснее — встроенная поддержка или готовая обёртка?
Ответить