Claude How To # MCP (Model Context Protocol) Ця папка містить вичерпну документацію та приклади конфігурацій MCP-серверів та їх використання з Claude Code. ## Огляд MCP (Model Context Protocol) — це стандартизований спосіб доступу Claude до зовнішніх інструментів, API та джерел даних у реальному часі. На відміну від пам'яті, MCP забезпечує живий доступ до змінюваних даних. Ключові характеристики: - Доступ до зовнішніх сервісів у реальному часі - Синхронізація даних у реальному часі - Розширювана архітектура - Безпечна автентифікація - Взаємодія на основі інструментів ## Архітектура MCP ```mermaid graph TB A["Claude"] B["MCP Server"] C["External Service"] A -->|Request: list_issues| B B -->|Query| C C -->|Data| B B -->|Response| A A -->|Request: create_issue| B B -->|Action| C C -->|Result| B B -->|Response| A style A fill:#e1f5fe,stroke:#333,color:#333 style B fill:#f3e5f5,stroke:#333,color:#333 style C fill:#e8f5e9,stroke:#333,color:#333 ``` ## Екосистема MCP ```mermaid graph TB A["Claude"] -->|MCP| B["Filesystem
MCP Server"] A -->|MCP| C["GitHub
MCP Server"] A -->|MCP| D["Database
MCP Server"] A -->|MCP| E["Slack
MCP Server"] A -->|MCP| F["Google Docs
MCP Server"] B -->|File I/O| G["Local Files"] C -->|API| H["GitHub Repos"] D -->|Query| I["PostgreSQL/MySQL"] E -->|Messages| J["Slack Workspace"] F -->|Docs| K["Google Drive"] style A fill:#e1f5fe,stroke:#333,color:#333 style B fill:#f3e5f5,stroke:#333,color:#333 style C fill:#f3e5f5,stroke:#333,color:#333 style D fill:#f3e5f5,stroke:#333,color:#333 style E fill:#f3e5f5,stroke:#333,color:#333 style F fill:#f3e5f5,stroke:#333,color:#333 style G fill:#e8f5e9,stroke:#333,color:#333 style H fill:#e8f5e9,stroke:#333,color:#333 style I fill:#e8f5e9,stroke:#333,color:#333 style J fill:#e8f5e9,stroke:#333,color:#333 style K fill:#e8f5e9,stroke:#333,color:#333 ``` ## Методи встановлення MCP Claude Code підтримує кілька транспортних протоколів для підключення до MCP-серверів: ### HTTP-транспорт (рекомендовано) ```bash # Базове HTTP-підключення claude mcp add --transport http notion https://mcp.notion.com/mcp # HTTP з заголовком автентифікації claude mcp add --transport http secure-api https://api.example.com/mcp \ --header "Authorization: Bearer your-token" ``` ### Stdio-транспорт (локальний) Для локально запущених MCP-серверів: ```bash # Локальний Node.js-сервер claude mcp add --transport stdio myserver -- npx @myorg/mcp-server # Зі змінними оточення claude mcp add --transport stdio myserver --env KEY=value -- npx server ``` ### SSE-транспорт (застарілий) Транспорт Server-Sent Events застарілий на користь `http`, але все ще підтримується: ```bash claude mcp add --transport sse legacy-server https://example.com/sse ``` ### Примітка для Windows На нативній Windows (не WSL) використовуйте `cmd /c` для команд npx: ```bash claude mcp add --transport stdio my-server -- cmd /c npx -y @some/package ``` ### Автентифікація OAuth 2.0 Claude Code підтримує OAuth 2.0 для MCP-серверів, що його потребують. При підключенні до сервера з OAuth Claude Code обробляє весь потік автентифікації: ```bash # Підключення до MCP-сервера з OAuth (інтерактивний потік) claude mcp add --transport http my-service https://my-service.example.com/mcp # Попередньо налаштовані облікові дані OAuth для неінтерактивного встановлення claude mcp add --transport http my-service https://my-service.example.com/mcp \ --client-id "your-client-id" \ --client-secret "your-client-secret" \ --callback-port 8080 ``` | Функція | Опис | |---------|------| | **Інтерактивний OAuth** | Використовуйте `/mcp` для запуску OAuth-потоку через браузер | | **Попередньо налаштовані OAuth-клієнти** | Вбудовані OAuth-клієнти для популярних сервісів: Notion, Stripe та інших (v2.1.30+) | | **Попередньо налаштовані облікові дані** | Прапорці `--client-id`, `--client-secret`, `--callback-port` для автоматизованого встановлення | | **Зберігання токенів** | Токени зберігаються безпечно у системному keychain | | **Step-up auth** | Підтримка step-up автентифікації для привілейованих операцій | | **Кешування виявлення** | Метадані OAuth discovery кешуються для швидших перепідключень | | **Перевизначення метаданих** | `oauth.authServerMetadataUrl` у `.mcp.json` для перевизначення стандартного OAuth metadata discovery | #### Перевизначення OAuth Metadata Discovery Якщо ваш MCP-сервер повертає помилки на стандартному ендпоінті OAuth metadata (`/.well-known/oauth-authorization-server`), але має робочий OIDC-ендпоінт, ви можете вказати Claude Code отримувати метадані OAuth з конкретного URL. Встановіть `authServerMetadataUrl` в об'єкті `oauth` конфігурації сервера: ```json { "mcpServers": { "my-server": { "type": "http", "url": "https://mcp.example.com/mcp", "oauth": { "authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration" } } } } ``` URL повинен використовувати `https://`. Ця опція потребує Claude Code v2.1.64 або новішої. ### MCP-конектори Claude.ai MCP-сервери, налаштовані у вашому обліковому записі Claude.ai, автоматично доступні в Claude Code. Будь-які MCP-підключення, налаштовані через веб-інтерфейс Claude.ai, будуть доступні без додаткової конфігурації. MCP-конектори Claude.ai також доступні в режимі `--print` (v2.1.83+), що дозволяє неінтерактивне та скриптове використання. Для вимкнення MCP-серверів Claude.ai у Claude Code встановіть змінну оточення `ENABLE_CLAUDEAI_MCP_SERVERS` у `false`: ```bash ENABLE_CLAUDEAI_MCP_SERVERS=false claude ``` > **Примітка:** Ця функція доступна лише для користувачів, авторизованих через облікові записи Claude.ai. ## Процес налаштування MCP ```mermaid sequenceDiagram participant User participant Claude as Claude Code participant Config as Config File participant Service as External Service User->>Claude: Type /mcp Claude->>Claude: List available MCP servers Claude->>User: Show options User->>Claude: Select GitHub MCP Claude->>Config: Update configuration Config->>Claude: Activate connection Claude->>Service: Test connection Service-->>Claude: Authentication successful Claude->>User: ✅ MCP connected! ``` ## Пошук інструментів MCP Коли описи інструментів MCP перевищують 10% контекстного вікна, Claude Code автоматично вмикає пошук інструментів для ефективного вибору правильних інструментів без перевантаження контексту моделі. | Налаштування | Значення | Опис | |-------------|----------|------| | `ENABLE_TOOL_SEARCH` | `auto` (за замовч.) | Автоматично вмикається, коли описи інструментів перевищують 10% контексту | | `ENABLE_TOOL_SEARCH` | `auto:` | Автоматично вмикається при користувацькому порозі `N` інструментів | | `ENABLE_TOOL_SEARCH` | `true` | Завжди увімкнено незалежно від кількості інструментів | | `ENABLE_TOOL_SEARCH` | `false` | Вимкнено; всі описи інструментів надсилаються повністю | > **Примітка:** Пошук інструментів потребує Sonnet 4 або новіший, або Opus 4 або новіший. Моделі Haiku не підтримують пошук інструментів. ## Динамічне оновлення інструментів Claude Code підтримує сповіщення MCP `list_changed`. Коли MCP-сервер динамічно додає, видаляє або змінює доступні інструменти, Claude Code отримує оновлення та автоматично коригує список інструментів — без потреби перепідключення або перезапуску. ## MCP Apps MCP Apps — перше офіційне розширення MCP, що дозволяє викликам інструментів MCP повертати інтерактивні UI-компоненти, які рендеряться безпосередньо в інтерфейсі чату. Замість текстових відповідей MCP-сервери можуть надавати інтерактивні дашборди, форми, візуалізації даних та багатокрокові воркфлови — все відображається прямо в розмові. ## MCP Elicitation MCP-сервери можуть запитувати структурований ввід від користувача через інтерактивні діалоги (v2.1.49+). Це дозволяє MCP-серверу запитувати додаткову інформацію під час воркфлову — наприклад, підтвердження, вибір зі списку опцій або заповнення обов'язкових полів — додаючи інтерактивність до взаємодії з MCP-серверами. ## Ліміт описів інструментів та інструкцій Починаючи з v2.1.84, Claude Code встановлює **ліміт 2 КБ** на описи та інструкції інструментів для кожного MCP-сервера. Це запобігає споживанню надмірного контексту окремими серверами з занадто багатослівними визначеннями інструментів. ## MCP Prompts як слеш-команди MCP-сервери можуть надавати промпти, що відображаються як слеш-команди в Claude Code. Промпти доступні за конвенцією іменування: ``` /mcp____ ``` Наприклад, якщо сервер `github` надає промпт `review`, його можна викликати як `/mcp__github__review`. ## Дедуплікація серверів Коли один і той самий MCP-сервер визначений на кількох рівнях (local, project, user), локальна конфігурація має пріоритет. Це дозволяє перевизначати налаштування MCP рівня проєкту або користувача локальними кастомізаціями без конфліктів. ## MCP-ресурси через @-згадки Ви можете посилатися на MCP-ресурси безпосередньо в промптах через синтаксис `@`: ``` @server-name:protocol://resource/path ``` Наприклад, для посилання на конкретний ресурс бази даних: ``` @database:postgres://mydb/users ``` Це дозволяє Claude отримувати та включати вміст MCP-ресурсів у контекст розмови. ## Рівні MCP Конфігурації MCP можна зберігати на різних рівнях з різним ступенем поширення: | Рівень | Розташування | Опис | Доступний для | Потребує підтвердження | |--------|-------------|------|---------------|----------------------| | **Local** (за замовч.) | `~/.claude.json` (під шляхом проєкту) | Приватний для поточного користувача, лише поточний проєкт (раніше називався `project`) | Лише ви | Ні | | **Project** | `.mcp.json` | Комітиться в git-репозиторій | Члени команди | Так (при першому використанні) | | **User** | `~/.claude.json` | Доступний у всіх проєктах (раніше називався `global`) | Лише ви | Ні | ### Використання рівня Project Зберігайте конфігурації MCP, специфічні для проєкту, у `.mcp.json`: ```json { "mcpServers": { "github": { "type": "http", "url": "https://api.github.com/mcp" } } } ``` Члени команди побачать запит на підтвердження при першому використанні MCP проєкту. ## Управління конфігурацією MCP ### Додавання MCP-серверів ```bash # Додати HTTP-сервер claude mcp add --transport http github https://api.github.com/mcp # Додати локальний stdio-сервер claude mcp add --transport stdio database -- npx @company/db-server # Список всіх MCP-серверів claude mcp list # Деталі конкретного сервера claude mcp get github # Видалити MCP-сервер claude mcp remove github # Скинути вибори підтвердження для проєкту claude mcp reset-project-choices # Імпорт з Claude Desktop claude mcp add-from-claude-desktop ``` ## Таблиця доступних MCP-серверів | MCP-сервер | Призначення | Типові інструменти | Авторизація | Реальний час | |-----------|------------|-------------------|-------------|-------------| | **Filesystem** | Файлові операції | read, write, delete | Дозволи ОС | ✅ Так | | **GitHub** | Управління репозиторіями | list_prs, create_issue, push | OAuth | ✅ Так | | **Slack** | Командна комунікація | send_message, list_channels | Токен | ✅ Так | | **Database** | SQL-запити | query, insert, update | Облікові дані | ✅ Так | | **Google Docs** | Доступ до документів | read, write, share | OAuth | ✅ Так | | **Asana** | Управління проєктами | create_task, update_status | API Key | ✅ Так | | **Stripe** | Платіжні дані | list_charges, create_invoice | API Key | ✅ Так | | **Memory** | Постійна пам'ять | store, retrieve, delete | Локальна | ❌ Ні | ## Практичні приклади ### Приклад 1: Конфігурація GitHub MCP **Файл:** `.mcp.json` (корінь проєкту) ```json { "mcpServers": { "github": { "command": "npx", "args": ["@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } } } ``` **Доступні інструменти GitHub MCP:** #### Управління Pull Request - `list_prs` — список усіх PR у репозиторії - `get_pr` — деталі PR, включаючи diff - `create_pr` — створення нового PR - `update_pr` — оновлення опису/назви PR - `merge_pr` — мердж PR у main - `review_pr` — додавання коментарів рев'ю **Приклад запиту:** ``` /mcp__github__get_pr 456 # Повертає: Title: Add dark mode support Author: @alice Description: Implements dark theme using CSS variables Status: OPEN Reviewers: @bob, @charlie ``` #### Управління Issue - `list_issues` — список усіх issue - `get_issue` — деталі issue - `create_issue` — створення нового issue - `close_issue` — закриття issue - `add_comment` — додавання коментаря #### Інформація про репозиторій - `get_repo_info` — деталі репозиторію - `list_files` — структура файлового дерева - `get_file_content` — читання вмісту файлу - `search_code` — пошук по кодовій базі #### Операції з комітами - `list_commits` — історія комітів - `get_commit` — деталі конкретного коміту - `create_commit` — створення нового коміту **Налаштування**: ```bash export GITHUB_TOKEN="your_github_token" # Або додайте через CLI: claude mcp add --transport stdio github -- npx @modelcontextprotocol/server-github ``` ### Підстановка змінних оточення в конфігурації Конфігурації MCP підтримують підстановку змінних оточення з резервними значеннями. Синтаксис `${VAR}` та `${VAR:-default}` працює в полях: `command`, `args`, `env`, `url` та `headers`. ```json { "mcpServers": { "api-server": { "type": "http", "url": "${API_BASE_URL:-https://api.example.com}/mcp", "headers": { "Authorization": "Bearer ${API_KEY}", "X-Custom-Header": "${CUSTOM_HEADER:-default-value}" } }, "local-server": { "command": "${MCP_BIN_PATH:-npx}", "args": ["${MCP_PACKAGE:-@company/mcp-server}"], "env": { "DB_URL": "${DATABASE_URL:-postgresql://localhost/dev}" } } } } ``` Змінні розгортаються під час виконання: - `${VAR}` — використовує змінну оточення, помилка якщо не встановлена - `${VAR:-default}` — використовує змінну оточення, резервне значення якщо не встановлена ### Приклад 2: Налаштування Database MCP **Конфігурація:** ```json { "mcpServers": { "database": { "command": "npx", "args": ["@modelcontextprotocol/server-database"], "env": { "DATABASE_URL": "postgresql://user:pass@localhost/mydb" } } } } ``` **Приклад використання:** ```markdown User: Fetch all users with more than 10 orders Claude: I'll query your database to find that information. # Використання інструменту MCP database: SELECT u.*, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id HAVING COUNT(o.id) > 10 ORDER BY order_count DESC; # Результати: - Alice: 15 orders - Bob: 12 orders - Charlie: 11 orders ``` **Налаштування**: ```bash export DATABASE_URL="postgresql://user:pass@localhost/mydb" # Або додайте через CLI: claude mcp add --transport stdio database -- npx @modelcontextprotocol/server-database ``` ### Приклад 3: Мульти-MCP воркфлов **Сценарій: генерація щоденного звіту** ```markdown # Щоденний звіт з використанням кількох MCP ## Налаштування 1. GitHub MCP — метрики PR 2. Database MCP — дані продажів 3. Slack MCP — публікація звіту 4. Filesystem MCP — збереження звіту ## Воркфлов ### Крок 1: Отримання даних GitHub /mcp__github__list_prs completed:true last:7days ### Крок 2: Запит до бази даних SELECT COUNT(*) as sales, SUM(amount) as revenue FROM orders WHERE created_at > NOW() - INTERVAL '1 day' ### Крок 3: Генерація звіту ### Крок 4: Збереження у файлову систему ### Крок 5: Публікація в Slack ``` ### Приклад 4: Операції Filesystem MCP **Конфігурація:** ```json { "mcpServers": { "filesystem": { "command": "npx", "args": ["@modelcontextprotocol/server-filesystem", "/home/user/projects"] } } } ``` **Доступні операції:** | Операція | Команда | Призначення | |---------|---------|------------| | Список файлів | `ls ~/projects` | Показати вміст каталогу | | Читання файлу | `cat src/main.ts` | Читання вмісту файлу | | Запис файлу | `create docs/api.md` | Створення нового файлу | | Редагування файлу | `edit src/app.ts` | Модифікація файлу | | Пошук | `grep "async function"` | Пошук у файлах | | Видалення | `rm old-file.js` | Видалення файлу | ## MCP vs Пам'ять: матриця вибору ```mermaid graph TD A["Need external data?"] A -->|No| B["Use Memory"] A -->|Yes| C["Does it change frequently?"] C -->|No/Rarely| B C -->|Yes/Often| D["Use MCP"] B -->|Stores| E["Preferences
Context
History"] D -->|Accesses| F["Live APIs
Databases
Services"] style A fill:#fff3e0,stroke:#333,color:#333 style B fill:#e1f5fe,stroke:#333,color:#333 style C fill:#fff3e0,stroke:#333,color:#333 style D fill:#f3e5f5,stroke:#333,color:#333 style E fill:#e8f5e9,stroke:#333,color:#333 style F fill:#e8f5e9,stroke:#333,color:#333 ``` ## Патерн запит/відповідь ```mermaid sequenceDiagram participant App as Claude participant MCP as MCP Server participant DB as Database App->>MCP: Request: "SELECT * FROM users WHERE id=1" MCP->>DB: Execute query DB-->>MCP: Result set MCP-->>App: Return parsed data App->>App: Process result App->>App: Continue task Note over MCP,DB: Real-time access
No caching ``` ## Змінні оточення Зберігайте конфіденційні облікові дані у змінних оточення: ```bash # ~/.bashrc або ~/.zshrc export GITHUB_TOKEN="ghp_xxxxxxxxxxxxx" export DATABASE_URL="postgresql://user:pass@localhost/mydb" export SLACK_TOKEN="xoxb-xxxxxxxxxxxxx" ``` Потім посилайтесь на них у конфігурації MCP: ```json { "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } ``` ## Claude як MCP-сервер (`claude mcp serve`) Сам Claude Code може працювати як MCP-сервер для інших додатків. Це дозволяє зовнішнім інструментам, редакторам та системам автоматизації використовувати можливості Claude через стандартний протокол MCP. ```bash # Запуск Claude Code як MCP-сервера через stdio claude mcp serve ``` Інші додатки можуть підключатися до цього сервера як до будь-якого stdio-сервера MCP. Наприклад, додавання Claude Code як MCP-сервера в іншому екземплярі Claude Code: ```bash claude mcp add --transport stdio claude-agent -- claude mcp serve ``` Це корисно для побудови мультиагентних воркфловів, де один екземпляр Claude оркеструє інший. ## Managed MCP Configuration (Enterprise) Для корпоративних розгортань IT-адміністратори можуть застосовувати політики MCP-серверів через конфігураційний файл `managed-mcp.json`. Цей файл забезпечує ексклюзивний контроль над дозволеними або заблокованими MCP-серверами на рівні організації. **Розташування:** - macOS: `/Library/Application Support/ClaudeCode/managed-mcp.json` - Linux: `~/.config/ClaudeCode/managed-mcp.json` - Windows: `%APPDATA%\ClaudeCode\managed-mcp.json` **Функції:** - `allowedMcpServers` — білий список дозволених серверів - `deniedMcpServers` — чорний список заборонених серверів - Підтримує зіставлення за назвою сервера, командою та URL-патернами - Загальноорганізаційні політики MCP застосовуються перед конфігурацією користувача - Запобігає неавторизованим підключенням серверів **Приклад конфігурації:** ```json { "allowedMcpServers": [ { "serverName": "github", "serverUrl": "https://api.github.com/mcp" }, { "serverName": "company-internal", "serverCommand": "company-mcp-server" } ], "deniedMcpServers": [ { "serverName": "untrusted-*" }, { "serverUrl": "http://*" } ] } ``` > **Примітка:** Коли і `allowedMcpServers`, і `deniedMcpServers` збігаються з сервером, правило заборони має пріоритет. ## MCP-сервери плагінів Плагіни можуть включати власні MCP-сервери, які автоматично доступні при встановленні плагіна. MCP-сервери плагінів визначаються двома способами: 1. **Окремий `.mcp.json`** — розміщення файлу `.mcp.json` у кореневому каталозі плагіна 2. **Вбудований у `plugin.json`** — визначення MCP-серверів безпосередньо у маніфесті плагіна Використовуйте змінну `${CLAUDE_PLUGIN_ROOT}` для посилання на шляхи відносно каталогу встановлення плагіна: ```json { "mcpServers": { "plugin-tools": { "command": "node", "args": ["${CLAUDE_PLUGIN_ROOT}/dist/mcp-server.js"], "env": { "CONFIG_PATH": "${CLAUDE_PLUGIN_ROOT}/config.json" } } } } ``` ## MCP, обмежений субагентом MCP-сервери можна визначати вбудовано у фронтматері агента через ключ `mcpServers:`, обмежуючи їх конкретним субагентом, а не всім проєктом. Це корисно, коли агенту потрібен доступ до конкретного MCP-сервера, який не потрібен іншим агентам у воркфлові. ```yaml --- mcpServers: my-tool: type: http url: https://my-tool.example.com/mcp --- You are an agent with access to my-tool for specialized operations. ``` MCP-сервери, обмежені субагентом, доступні лише в контексті виконання цього агента і не поширюються на батьківського чи суміжних агентів. ## Ліміти виводу MCP Claude Code встановлює ліміти на вивід інструментів MCP для запобігання переповненню контексту: | Ліміт | Поріг | Поведінка | |-------|-------|----------| | **Попередження** | 10 000 токенів | Відображається попередження про великий вивід | | **Максимум за замовч.** | 25 000 токенів | Вивід обрізається за цим лімітом | | **Збереження на диск** | 50 000 символів | Результати інструментів, що перевищують 50K символів, зберігаються на диск | Максимальний ліміт виводу налаштовується через змінну оточення `MAX_MCP_OUTPUT_TOKENS`: ```bash # Збільшити максимальний вивід до 50 000 токенів export MAX_MCP_OUTPUT_TOKENS=50000 ``` ## Розв'язання проблеми роздування контексту через виконання коду З масштабуванням MCP підключення до десятків серверів із сотнями або тисячами інструментів створює значну проблему: **роздування контексту** (context bloat). Це, мабуть, найбільша проблема MCP у масштабі, і інженерна команда Anthropic запропонувала елегантне рішення — використання виконання коду замість прямих викликів інструментів. > **Джерело**: [Code Execution with MCP: Building More Efficient Agents](https://www.anthropic.com/engineering/code-execution-with-mcp) — блог Anthropic Engineering ### Проблема: два джерела марнування токенів **1. Визначення інструментів перевантажують контекстне вікно** Більшість MCP-клієнтів завантажують усі визначення інструментів наперед. При підключенні до тисяч інструментів модель повинна обробити сотні тисяч токенів, перш ніж прочитати запит користувача. **2. Проміжні результати споживають додаткові токени** Кожен проміжний результат інструменту проходить через контекст моделі. Наприклад, при перенесенні транскрипту зустрічі з Google Drive до Salesforce — повний транскрипт проходить через контекст **двічі**: при читанні та при записі в призначення. Дводинна зустріч може означати 50 000+ додаткових токенів. ```mermaid graph LR A["Model"] -->|"Tool Call: getDocument"| B["MCP Server"] B -->|"Full transcript (50K tokens)"| A A -->|"Tool Call: updateRecord
(re-sends full transcript)"| B B -->|"Confirmation"| A style A fill:#ffcdd2,stroke:#333,color:#333 style B fill:#f3e5f5,stroke:#333,color:#333 ``` ### Рішення: MCP-інструменти як код-API Замість передачі визначень інструментів та результатів через контекстне вікно, агент **пише код**, який викликає MCP-інструменти як API. Код виконується в ізольованому середовищі, і лише кінцевий результат повертається до моделі. ```mermaid graph LR A["Model"] -->|"Writes code"| B["Code Execution
Environment"] B -->|"Calls tools directly"| C["MCP Servers"] C -->|"Data stays in
execution env"| B B -->|"Only final result
(minimal tokens)"| A style A fill:#c8e6c9,stroke:#333,color:#333 style B fill:#e1f5fe,stroke:#333,color:#333 style C fill:#f3e5f5,stroke:#333,color:#333 ``` #### Як це працює MCP-інструменти представляються як файлове дерево типізованих функцій: ``` servers/ ├── google-drive/ │ ├── getDocument.ts │ └── index.ts ├── salesforce/ │ ├── updateRecord.ts │ └── index.ts └── ... ``` Кожен файл інструменту містить типізовану обгортку: ```typescript // ./servers/google-drive/getDocument.ts import { callMCPTool } from "../../../client.js"; interface GetDocumentInput { documentId: string; } interface GetDocumentResponse { content: string; } export async function getDocument( input: GetDocumentInput ): Promise { return callMCPTool( 'google_drive__get_document', input ); } ``` Агент пише код для оркестрації інструментів: ```typescript import * as gdrive from './servers/google-drive'; import * as salesforce from './servers/salesforce'; // Дані передаються безпосередньо між інструментами — ніколи через модель const transcript = ( await gdrive.getDocument({ documentId: 'abc123' }) ).content; await salesforce.updateRecord({ objectType: 'SalesMeeting', recordId: '00Q5f000001abcXYZ', data: { Notes: transcript } }); ``` **Результат: використання токенів знижується з ~150 000 до ~2 000 — зменшення на 98,7%.** ### Ключові переваги | Перевага | Опис | |---------|------| | **Прогресивне розкриття** | Агент переглядає файлову систему для завантаження лише потрібних визначень інструментів | | **Ефективність контексту** | Дані фільтруються/трансформуються в середовищі виконання перед поверненням до моделі | | **Потужний контроль потоку** | Цикли, умови та обробка помилок виконуються в коді без повернення через модель | | **Збереження конфіденційності** | Проміжні дані (персональні дані, чутливі записи) залишаються в середовищі виконання; ніколи не потрапляють у контекст моделі | | **Збереження стану** | Агенти можуть зберігати проміжні результати у файли та будувати повторно використовувані функції | #### Приклад: фільтрація великих наборів даних ```typescript // Без виконання коду — всі 10 000 рядків проходять через контекст // TOOL CALL: gdrive.getSheet(sheetId: 'abc123') // -> повертає 10 000 рядків у контекст // З виконанням коду — фільтрація в середовищі виконання const allRows = await gdrive.getSheet({ sheetId: 'abc123' }); const pendingOrders = allRows.filter( row => row["Status"] === 'pending' ); console.log(`Found ${pendingOrders.length} pending orders`); console.log(pendingOrders.slice(0, 5)); // Лише 5 рядків потрапляють до моделі ``` #### Приклад: цикл без повернення через модель ```typescript // Опитування для сповіщення про деплой — виконується цілком у коді let found = false; while (!found) { const messages = await slack.getChannelHistory({ channel: 'C123456' }); found = messages.some( m => m.text.includes('deployment complete') ); if (!found) await new Promise(r => setTimeout(r, 5000)); } console.log('Deployment notification received'); ``` ### Компроміси Виконання коду додає власну складність. Запуск коду, згенерованого агентом, потребує: - **Безпечного ізольованого середовища виконання** з відповідними лімітами ресурсів - **Моніторингу та логування** виконаного коду - Додаткових **інфраструктурних витрат** порівняно з прямими викликами інструментів Переваги — зменшення вартості токенів, нижча затримка, покращена композиція інструментів — слід зважити проти цих витрат на впровадження. Для агентів з кількома MCP-серверами прямі виклики інструментів можуть бути простішими. Для агентів у масштабі (десятки серверів, сотні інструментів) виконання коду — значне покращення. ### MCPorter: середовище виконання для композиції MCP-інструментів [MCPorter](https://github.com/steipete/mcporter) — TypeScript-середовище виконання та CLI-інструментарій для виклику MCP-серверів без шаблонного коду, що допомагає зменшити роздування контексту через вибіркове надання інструментів та типізовані обгортки. **Що вирішує:** замість завантаження всіх визначень інструментів з усіх MCP-серверів наперед, MCPorter дозволяє виявляти, інспектувати та викликати конкретні інструменти за потребою — тримаючи контекст компактним. **Ключові функції:** | Функція | Опис | |---------|------| | **Zero-config discovery** | Автовиявлення MCP-серверів з Cursor, Claude, Codex або локальних конфігурацій | | **Типізовані клієнти інструментів** | `mcporter emit-ts` генерує `.d.ts` інтерфейси та готові обгортки | | **Composable API** | `createServerProxy()` надає інструменти як camelCase-методи з хелперами `.text()`, `.json()`, `.markdown()` | | **Генерація CLI** | `mcporter generate-cli` перетворює будь-який MCP-сервер у CLI з фільтрацією `--include-tools` / `--exclude-tools` | | **Приховування параметрів** | Опціональні параметри приховані за замовчуванням, зменшуючи багатослівність схеми | **Встановлення:** ```bash npx mcporter list # Без встановлення — виявлення серверів миттєво pnpm add mcporter # Додати до проєкту brew install steipete/tap/mcporter # macOS через Homebrew ``` **Приклад — композиція інструментів у TypeScript:** ```typescript import { createRuntime, createServerProxy } from "mcporter"; const runtime = await createRuntime(); const gdrive = createServerProxy(runtime, "google-drive"); const salesforce = createServerProxy(runtime, "salesforce"); // Дані передаються між інструментами без проходження через контекст моделі const doc = await gdrive.getDocument({ documentId: "abc123" }); await salesforce.updateRecord({ objectType: "SalesMeeting", recordId: "00Q5f000001abcXYZ", data: { Notes: doc.text() } }); ``` **Приклад — виклик інструменту через CLI:** ```bash # Виклик конкретного інструменту npx mcporter call linear.create_comment issueId:ENG-123 body:'Looks good!' # Список доступних серверів та інструментів npx mcporter list ``` MCPorter доповнює підхід з виконанням коду, описаний вище, надаючи інфраструктуру для виклику MCP-інструментів як типізованих API — спрощуючи утримання проміжних даних поза контекстом моделі. ## Найкращі практики ### Безпекові рекомендації #### Рекомендовано ✅ - Використовуйте змінні оточення для всіх облікових даних - Регулярно ротуйте токени та API-ключі (рекомендовано щомісяця) - Використовуйте токени лише для читання, де можливо - Обмежуйте область доступу MCP-серверів до мінімально необхідної - Моніторте використання MCP-серверів та журнали доступу - Використовуйте OAuth для зовнішніх сервісів, де доступно - Впроваджуйте rate limiting для MCP-запитів - Тестуйте MCP-підключення перед продакшен-використанням - Документуйте всі активні MCP-підключення - Тримайте пакети MCP-серверів оновленими #### Не рекомендовано ❌ - Не хардкодьте облікові дані в конфігураційних файлах - Не комітьте токени чи секрети в git - Не поширюйте токени в командних чатах чи листах - Не використовуйте персональні токени для командних проєктів - Не надавайте зайвих дозволів - Не ігноруйте помилки автентифікації - Не відкривайте MCP-ендпоінти публічно - Не запускайте MCP-сервери з правами root/admin - Не кешуйте чутливі дані в журналах - Не вимикайте механізми автентифікації ### Найкращі практики конфігурації 1. **Контроль версій**: тримайте `.mcp.json` у git, але використовуйте змінні оточення для секретів 2. **Мінімальні привілеї**: надавайте мінімальні дозволи для кожного MCP-сервера 3. **Ізоляція**: запускайте різні MCP-сервери в окремих процесах, де можливо 4. **Моніторинг**: логуйте всі MCP-запити та помилки для аудиту 5. **Тестування**: тестуйте всі конфігурації MCP перед розгортанням у продакшен ### Поради щодо продуктивності - Кешуйте часто запитувані дані на рівні додатку - Використовуйте конкретні MCP-запити для зменшення передачі даних - Моніторте час відповіді MCP-операцій - Розгляньте rate limiting для зовнішніх API - Використовуйте пакетну обробку для кількох операцій ## Інструкції з встановлення ### Передумови - Node.js та npm встановлені - Claude Code CLI встановлений - API-токени/облікові дані для зовнішніх сервісів ### Покрокове налаштування 1. **Додайте перший MCP-сервер** через CLI (приклад: GitHub): ```bash claude mcp add --transport stdio github -- npx @modelcontextprotocol/server-github ``` Або створіть файл `.mcp.json` у корені проєкту: ```json { "mcpServers": { "github": { "command": "npx", "args": ["@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } } } ``` 2. **Встановіть змінні оточення:** ```bash export GITHUB_TOKEN="your_github_personal_access_token" ``` 3. **Протестуйте підключення:** ```bash claude /mcp ``` 4. **Використовуйте MCP-інструменти:** ```bash /mcp__github__list_prs /mcp__github__create_issue "Title" "Description" ``` ### Встановлення конкретних сервісів **GitHub MCP:** ```bash npm install -g @modelcontextprotocol/server-github ``` **Database MCP:** ```bash npm install -g @modelcontextprotocol/server-database ``` **Filesystem MCP:** ```bash npm install -g @modelcontextprotocol/server-filesystem ``` **Slack MCP:** ```bash npm install -g @modelcontextprotocol/server-slack ``` ## Усунення несправностей ### MCP-сервер не знайдено ```bash # Перевірте, чи встановлений MCP-сервер npm list -g @modelcontextprotocol/server-github # Встановіть, якщо відсутній npm install -g @modelcontextprotocol/server-github ``` ### Помилка автентифікації ```bash # Перевірте, чи встановлена змінна оточення echo $GITHUB_TOKEN # Перевстановіть, якщо потрібно export GITHUB_TOKEN="your_token" # Перевірте дозволи токена # Дозволи GitHub-токена: https://github.com/settings/tokens ``` ### Таймаут з'єднання - Перевірте мережеве з'єднання: `ping api.github.com` - Перевірте доступність API-ендпоінта - Перевірте rate limits API - Спробуйте збільшити таймаут у конфігурації - Перевірте наявність фаєрволу або проксі ### MCP-сервер аварійно завершується - Перевірте журнали MCP-сервера: `~/.claude/logs/` - Перевірте, що всі змінні оточення встановлені - Перевірте дозволи файлів - Спробуйте перевстановити пакет MCP-сервера - Перевірте конфліктуючі процеси на тому ж порту ## Пов'язані концепції ### Пам'ять vs MCP - **Пам'ять**: зберігає постійні, незмінні дані (налаштування, контекст, історія) - **MCP**: доступ до живих, змінюваних даних (API, бази даних, сервіси реального часу) ### Коли використовувати кожен - **Пам'ять** для: налаштувань користувача, історії розмов, засвоєного контексту - **MCP** для: поточних GitHub issue, живих запитів до бази даних, даних реального часу ### Інтеграція з іншими функціями Claude - Комбінуйте MCP з пам'яттю для збагаченого контексту - Використовуйте MCP-інструменти в промптах для кращого міркування - Поєднуйте кілька MCP для складних воркфловів ## Додаткові ресурси - [Офіційна документація MCP](https://code.claude.com/docs/en/mcp) - [Специфікація протоколу MCP](https://modelcontextprotocol.io/specification) - [GitHub-репозиторій MCP](https://github.com/modelcontextprotocol/servers) - [Доступні MCP-сервери](https://github.com/modelcontextprotocol/servers) - [MCPorter](https://github.com/steipete/mcporter) — TypeScript-середовище та CLI для виклику MCP-серверів - [Code Execution with MCP](https://www.anthropic.com/engineering/code-execution-with-mcp) — блог Anthropic Engineering - [Довідник CLI Claude Code](https://code.claude.com/docs/en/cli-reference) - [Документація Claude API](https://docs.anthropic.com) --- **Останнє оновлення**: 9 квітня 2026 **Версія Claude Code**: 2.1.97 **Сумісні моделі**: Claude Sonnet 4.6, Claude Opus 4.6, Claude Haiku 4.5