# Проблемы подключения

{% hint style="info" %}
Большинство проблем подключения связаны с сетевой конфигурацией Docker. Контейнер работает в изолированной сети и не имеет прямого доступа к localhost хост-машины.
{% endhint %}

## localhost не работает внутри контейнера

### Симптом

MCP-сервер не может подключиться к Neo4j, LM Studio или другим сервисам по адресу `localhost`.

### Причина

`localhost` внутри контейнера указывает на сам контейнер, а не на хост-машину. Сервисы на хосте недоступны по этому адресу.

### Решение

Используйте специальный адрес `host.docker.internal`:

```env
# Неправильно
OPENAI_API_BASE=http://localhost:1234/v1
NEO4J_URI=bolt://localhost:7687

# Правильно
OPENAI_API_BASE=http://host.docker.internal:1234/v1
NEO4J_URI=bolt://host.docker.internal:7687
```

Если сервис (например, Neo4j) тоже запущен в Docker, используйте имя сервиса из docker-compose:

```yaml
# docker-compose.yml
services:
  neo4j:
    ...
  mcp-app:
    environment:
      - NEO4J_URI=bolt://neo4j:7687  # имя сервиса, не localhost!
```

## Cursor не видит MCP-сервер

### Проверка 1: Контейнер запущен

```powershell
docker ps --filter name=<container_name>
```

### Проверка 2: Порт доступен

```powershell
Test-NetConnection -ComputerName localhost -Port 8002
```

### Проверка 3: Файл mcp.json

```powershell
Get-Content "$env:APPDATA\Cursor\User\globalStorage\mcp.json"
```

### Проверка 4: JSON валиден

```powershell
$content = Get-Content "$env:APPDATA\Cursor\User\globalStorage\mcp.json" -Raw
try {
    $json = $content | ConvertFrom-Json
    Write-Host "JSON валиден" -ForegroundColor Green
} catch {
    Write-Host "Ошибка JSON: $_" -ForegroundColor Red
}
```

### Решение

1. Перезапустите Cursor (закройте все окна)
2. Проверьте правильность URL в mcp.json
3. Убедитесь, что контейнер запущен и порт доступен

## Ошибка "Connection refused"

### Симптом

```
ECONNREFUSED 127.0.0.1:8002
```

### Причины

1. Контейнер не запущен
2. Контейнер всё ещё инициализируется
3. Порт неправильный

### Решение

```powershell
# Проверить статус
docker ps -a --filter name=<container_name>

# Проверить логи
docker logs <container_name>

# Перезапустить
docker restart <container_name>
```

## Порт уже занят

### Симптом

```
Error: port is already allocated
```

### Найти процесс

```powershell
netstat -ano | findstr :8002
# Найти PID и завершить процесс
taskkill /PID <PID> /F
```

### Использовать другой порт

```powershell
docker run -d -p 8102:8002 `
    --name 1c_syntaxcheck_mcp `
    -e LICENSE_KEY=YOUR_LICENSE_KEY `
    comol/1c_syntaxcheck_mcp:latest
```

Обновите mcp.json:

```json
{
  "mcpServers": {
    "1c-syntax-checker-mcp": {
      "url": "http://localhost:8102/mcp",
      "connection_id": "1c_lsp_service_001"
    }
  }
}
```

## Windows Firewall блокирует

### Проверка

```powershell
Get-NetFirewallRule -DisplayName "*Docker*" | Format-Table Name, Enabled
```

### Добавление правила

```powershell
# От администратора
New-NetFirewallRule -DisplayName "MCP Servers" `
    -Direction Inbound `
    -LocalPort 8000,8002,8003,8004,8006,8007,8008 `
    -Protocol TCP `
    -Action Allow
```

## MCP работает, но ИИ не использует инструменты

### Причина 1: Нет Cursor Rules

Добавьте правила, указывающие ИИ использовать MCP:

```markdown
При работе с кодом 1С используй MCP-серверы:
- 1c-syntax-checker-mcp для проверки синтаксиса
- 1c-docs-mcp для поиска по справке
```

### Причина 2: Неявный запрос

Попробуйте явно указать:

* "Проверь синтаксис этого кода через MCP"
* "Найди в справке метод Запрос.Выполнить"

### Причина 3: Сервер не подключён

Проверьте список подключённых серверов в Cursor.

## Timeout при запросах

### Симптом

Запросы к MCP-серверу зависают или возвращают timeout.

### Причины

1. Сервер перегружен (идёт индексация)
2. Недостаточно ресурсов
3. Проблемы с embedding моделью

### Решение

```powershell
# Проверить состояние
docker stats <container_name>

# Проверить логи
docker logs --tail 50 <container_name>
```

## Включение SSE транспорта

### Симптом

Некоторые клиенты требуют SSE (Server-Sent Events) вместо стандартного HTTP транспорта.

### Решение

Добавьте переменную окружения `USESSE=true`:

```powershell
docker run -d -p 8002:8002 `
  --name 1c_syntaxcheck_mcp `
  -e LICENSE_KEY=YOUR_LICENSE_KEY `
  -e USESSE=true `
  comol/1c_syntaxcheck_mcp:latest
```

{% hint style="info" %}
SSE обычно нужен только для legacy-клиентов. Cursor работает со стандартным HTTP транспортом.
{% endhint %}

## Скрипт полной диагностики

```powershell
Write-Host "=== Диагностика MCP серверов ===" -ForegroundColor Cyan

# Docker
Write-Host "`nDocker:" -ForegroundColor Yellow
docker --version

# Контейнеры
Write-Host "`nКонтейнеры:" -ForegroundColor Yellow
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# Порты
Write-Host "`nПорты:" -ForegroundColor Yellow
@(8000, 8002, 8003, 8004, 8006, 8007, 8008) | ForEach-Object {
    $result = Test-NetConnection -ComputerName localhost -Port $_ -WarningAction SilentlyContinue
    if ($result.TcpTestSucceeded) {
        Write-Host "  ✓ Порт $_ доступен" -ForegroundColor Green
    } else {
        Write-Host "  ✗ Порт $_ недоступен" -ForegroundColor Red
    }
}

# mcp.json
Write-Host "`nmcp.json:" -ForegroundColor Yellow
$mcpPath = "$env:APPDATA\Cursor\User\globalStorage\mcp.json"
if (Test-Path $mcpPath) {
    Write-Host "  Файл существует" -ForegroundColor Green
    try {
        Get-Content $mcpPath -Raw | ConvertFrom-Json | Out-Null
        Write-Host "  JSON валиден" -ForegroundColor Green
    } catch {
        Write-Host "  JSON невалиден!" -ForegroundColor Red
    }
} else {
    Write-Host "  Файл не найден!" -ForegroundColor Red
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.onerpa.ru/mcp-servery-1c/ustranenie-nepoladok/podklyuchenie.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
