Экосистема готовых серверов: зачем использовать чужой код

Когда MCP появился в ноябре 2024, Anthropic одновременно выпустил репозиторий modelcontextprotocol/servers — коллекцию эталонных реализаций. Это не просто примеры: это production-ready серверы с обработкой ошибок, тестами и документацией, которые поддерживает сама Anthropic.

Принципиальный момент: готовый сервер работает через тот же stdio-транспорт, что и твой собственный. Claude Desktop запускает его как дочерний процесс, передаёт запросы через stdin/stdout. С точки зрения агента — никакой разницы, написал ли сервер ты или Anthropic.

server-filesystem
@modelcontextprotocol/server-filesystem
Файловые операции с sandbox-ограничением: чтение, запись, поиск по содержимому, просмотр директорий. Самый востребованный сервер.
Node.js
server-puppeteer
@modelcontextprotocol/server-puppeteer
Headless Chromium через Puppeteer: навигация, скриншоты, клики, заполнение форм, извлечение текста. Агент как полноценный браузер.
Node.js
server-postgres
@modelcontextprotocol/server-postgres
PostgreSQL в режиме только для чтения: SQL-запросы, интроспекция схемы, описание таблиц. Агент видит базу данных как набор ресурсов.
Node.js
server-github
@modelcontextprotocol/server-github
GitHub API: репозитории, файлы, issues, pull requests, поиск. Нужен Personal Access Token с нужными scope.
Node.js
100%
колёсико — масштаб  ·  зажать и тянуть — перемещение
Claude Desktop (Host) LLM (Claude) MCP Client × 4 stdio stdio stdio stdio server-filesystem read_file · write_file · list_dir search_files · move_file · get_info server-puppeteer navigate · screenshot · click fill · evaluate · get_content server-postgres query · list_schemas resources: table schemas server-github create_issue · get_file_contents · search_code ··· Local Filesystem Chromium (headless) PostgreSQL DB GitHub REST API каждый сервер — отдельный процесс
Каждый сервер — отдельный процесс. Claude Desktop запускает npx @modelcontextprotocol/server-filesystem /path как отдельный дочерний процесс. Четыре сервера = четыре процесса. Это изоляция: падение одного сервера не влияет на остальные. Инструменты всех серверов объединяются в один список — агент видит их вместе.

Анатомия конфига Claude Desktop

Все готовые серверы подключаются через один конфиг-файл. Прежде чем разбирать конкретные серверы — поймём структуру конфига.

Путь к конфигу:
  macOS:   ~/Library/Application Support/Claude/claude_desktop_config.json
  Windows: %APPDATA%\Claude\claude_desktop_config.json
  Linux:   ~/.config/Claude/claude_desktop_config.json
Поля одного MCP-сервера в конфиге
command
Исполняемый файл: npx, node, python, uvx. Для Node.js-серверов обычно npx.
args
Аргументы командной строки. Первый аргумент для npx — имя пакета. Остальные — аргументы самого сервера (пути, URL, флаги).
env
Переменные окружения для процесса. Сюда кладут токены, DSN, ключи API. Так они не попадают в командную строку (ps aux).
disabled
Опционально. true — сервер не запускается, но остаётся в конфиге. Удобно для временного отключения.
npx -y означает «установить и запустить без подтверждения». При первом запуске npx скачает пакет в кэш. Это занимает 5–30 секунд. При последующих запусках — из кэша, почти мгновенно. Если нужна конкретная версия: "@modelcontextprotocol/server-filesystem@0.6.2".

server-filesystem: чтение и запись файлов

📁
@modelcontextprotocol/server-filesystem
npm · Node.js 18+ · Официальный
Official

Самый часто используемый сервер. Принимает список разрешённых директорий как аргументы командной строки. Все операции с файлами за пределами этих директорий отклоняются — реализован тот же sandbox через path.resolve(), что мы строили вручную в предыдущем уроке.

ИнструментЧто делает
read_fileЧитает файл целиком, возвращает текст + метаданные MIME-типа
read_multiple_filesЧитает несколько файлов одним запросом, не тратя tool-call токены
write_fileЗаписывает текст в файл, создаёт директории при необходимости
edit_fileПатч-редактирование: заменяет строки по точному совпадению (не regexp)
create_directoryСоздаёт директорию и все промежуточные
list_directoryСписок файлов и папок с типами и размерами
directory_treeРекурсивное дерево директорий в виде JSON
move_fileПереименование и перемещение файлов
search_filesРекурсивный glob-поиск по имени файла
get_file_infoРазмер, даты создания/изменения, права доступа
list_allowed_directoriesПоказывает список разрешённых директорий (sandbox)

Конфигурация — просто список разрешённых директорий как аргументы:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/ivan/projects",
        "/Users/ivan/Documents",
        "/tmp/agent-workspace"
      ]
    }
  }
}

После перезапуска Claude Desktop агент может работать с файлами. Примеры запросов:

«Покажи структуру директории /Users/ivan/projects/my-app»
«Прочитай файл src/main.py и найди все TODO-комментарии»
«Создай файл /tmp/agent-workspace/summary.md с отчётом о результатах»
«Переименуй все .txt файлы в /tmp/agent-workspace в .md»
edit_file требует точного совпадения. Инструмент ищет строку буквально. Если файл содержит Windows-переносы строк (\r\n), а поиск идёт с Unix (\n) — совпадения не будет и инструмент вернёт ошибку. Перед редактированием лучше прочитать файл через read_file.

server-puppeteer: агент в браузере

🌐
@modelcontextprotocol/server-puppeteer
npm · Node.js 18+ · Chromium автоматически скачивается
Official

Puppeteer управляет headless Chromium: загружает страницы, кликает элементы, заполняет формы, делает скриншоты. Сервер держит один экземпляр браузера на протяжении всей сессии — переходы между страницами сохраняют состояние (cookies, localStorage). Это критично для сайтов с авторизацией.

ИнструментЧто делает
puppeteer_navigateПереходит по URL, ждёт загрузки страницы
puppeteer_screenshotДелает скриншот страницы или элемента (base64 PNG)
puppeteer_clickКлик по CSS-селектору или координатам
puppeteer_fillВводит текст в поле ввода по CSS-селектору
puppeteer_selectВыбирает значение в <select>
puppeteer_hoverНаводит курсор (открывает tooltips, dropdown меню)
puppeteer_evaluateВыполняет произвольный JS в контексте страницы
puppeteer_get_contentВозвращает текстовое содержимое страницы (без HTML-тегов)
{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
    }
  }
}

При первом запуске Puppeteer скачает Chromium (~170 MB). Затем браузер стартует в headless-режиме и остаётся запущенным. Примеры задач:

«Зайди на https://news.ycombinator.com и верни заголовки топ-10 постов»
«Сделай скриншот главной страницы https://example.com»
«Заполни форму логина на сайте: логин admin@test.com, пароль не введи,
 просто проверь что поле существует»
«Найди на странице все ссылки с текстом "Download" и верни их href»
Puppeteer и корпоративные прокси. Headless Chromium запускается в среде сервера, а не твоего браузера. Настройки прокси, корпоративные сертификаты, VPN — ничего из этого не наследуется автоматически. Если сайт доступен через прокси, нужно передать аргументы Chromium через PUPPETEER_ARGS: "--proxy-server=http://proxy:8080".

server-postgres: PostgreSQL как набор ресурсов

🗄
@modelcontextprotocol/server-postgres
npm · Node.js 18+ · Только чтение по умолчанию
Official

Сервер реализует комбинацию инструментов и ресурсов. Схема каждой таблицы доступна как MCP Resource — клиент может подгрузить её в контекст при инициализации, не тратя токены на tool call. SQL-запросы — через инструмент. По умолчанию только SELECT.

ТипНазваниеЧто делает
tool query Выполняет произвольный SQL. По умолчанию обёрнут в READ ONLY транзакцию
resource postgres://<host>/<db>/<schema>/<table>/schema JSON-схема таблицы: колонки, типы, ключи, индексы
resource list postgres://…/schema Список всех таблиц во всех схемах базы данных

Connection string передаётся как аргумент командной строки. Из соображений безопасности лучше использовать env-переменную:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://user:password@localhost:5432/mydb"
      ]
    }
  }
}

Лучший способ — передать connection string через env и использовать переменную в args (Claude Desktop поддерживает подстановку):

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_URL": "postgresql://readonly_user:secret@localhost:5432/prod_db"
      }
    }
  }
}
Создай отдельного пользователя только для чтения. CREATE USER mcp_agent WITH PASSWORD 'secret';
GRANT CONNECT ON DATABASE prod_db TO mcp_agent;
GRANT USAGE ON SCHEMA public TO mcp_agent;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_agent;
Даже если сервер обходит READ ONLY транзакцию — пользователь без прав ничего не сломает.

Примеры запросов агенту с подключённым Postgres:

«Покажи структуру таблицы orders»
«Сколько заказов за последний месяц в статусе pending?»
«Найди топ-5 клиентов по сумме заказов за 2024 год»
«Есть ли индексы на колонку user_id в таблице events?»

server-github: работа с репозиториями

🐙
@modelcontextprotocol/server-github
npm · Node.js 18+ · Требует Personal Access Token
Official

Сервер оборачивает GitHub REST API. Для работы нужен Personal Access Token (PAT) с нужными scopes. Минимальный набор для чтения публичных репо — без scope вообще (просто токен). Для работы с issues и PR нужны repo scopes.

ИнструментЧто делает
create_or_update_fileСоздаёт или обновляет файл в репозитории через API
search_repositoriesПоиск репозиториев по запросу
create_repositoryСоздаёт новый репозиторий
get_file_contentsЧитает файл или список файлов в директории
push_filesКоммитит несколько файлов одним коммитом
create_issueСоздаёт issue с заголовком, телом, метками
create_pull_requestОткрывает Pull Request из ветки в ветку
fork_repositoryФоркает репозиторий в аккаунт пользователя
create_branchСоздаёт ветку из указанного SHA или другой ветки
list_commitsСписок коммитов в ветке с пагинацией
list_issuesСписок issues с фильтрами по статусу, метке, assignee
update_issueМеняет статус, метки, assignee у issue
add_issue_commentДобавляет комментарий к issue
search_codeПолнотекстовый поиск по коду в репозитории
search_issuesПоиск по issues и PR с расширенным синтаксисом
get_pull_requestДетали PR: файлы, диффы, reviewers, статус CI
list_pull_requestsСписок открытых/закрытых PR с фильтрами
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Создать PAT: GitHub Settings → Developer settings → Personal access tokens → Fine-grained tokens. Для типичных задач достаточно: Contents (read), Issues (read+write), Pull requests (read+write), Metadata (read).

«Покажи открытые issues в репозитории anthropics/claude-code с меткой bug»
«Найди в коде репозитория все использования функции parse_json»
«Создай issue в my-org/my-repo: заголовок "Fix memory leak in worker", метка bug»
«Прочитай файл README.md в ветке main репозитория my-org/my-repo»
Fine-grained tokens лучше классических. Classic PAT даёт доступ ко всем репозиториям аккаунта. Fine-grained token — только к выбранным. Для агента, который работает с одним проектом, ограничивай доступ именно этим репозиторием.

Несколько серверов одновременно

Claude Desktop запускает все серверы из конфига параллельно при старте. Инструменты всех серверов объединяются в один список. Агент видит их вместе и сам решает, какой использовать.

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/ivan/projects"
      ]
    },
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://agent:secret@localhost:5432/app"
      ]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

С таким конфигом агент может одновременно: читать код из файловой системы, смотреть данные в базе, создавать issues на GitHub. Реальный пример сессии:

Пользователь: «Найди все функции в src/, которые делают запросы к таблице orders.
               Для каждой создай GitHub issue с предложением добавить индекс,
               если его нет в БД»

Агент:
  1. list_directory("/Users/ivan/projects/src")        → список файлов
  2. search_files("/Users/ivan/projects/src", "*.py")  → Python файлы
  3. read_multiple_files([...])                        → код
  4. query("SELECT indexname FROM pg_indexes WHERE tablename='orders'")
     → существующие индексы
  5. create_issue("my-org/app", "Add index on orders.user_id", ...)
     → issue создан
Конфликт имён инструментов. Если два сервера регистрируют инструмент с одинаковым именем (например, оба объявляют read_file), Claude Desktop использует последний по порядку в конфиге. Избегай дублирования или переименовывай серверы так, чтобы имена были семантически разными.

Как найти нужный сервер

Экосистема MCP растёт быстро. Три основных источника:

📦
Официальный репозиторий
Эталонные реализации от Anthropic: filesystem, git, postgres, github, slack, google-maps, puppeteer, sqlite и другие.
github.com/modelcontextprotocol/servers
🌐
MCP.so
Каталог серверов сообщества с поиском по категориям: databases, code tools, productivity, communications.
mcp.so
Awesome MCP Servers
Курируемый список популярных серверов на GitHub с рейтингами и описаниями. Обновляется сообществом.
github.com/punkpeye/awesome-mcp-servers

Популярные серверы сообщества, которые стоит знать:

СерверЧто умеет
mcp-server-gitGit операции: log, diff, blame, commit, branch — через subprocess
server-sqliteSQLite (официальный) — аналог postgres для локальных БД
server-slackОтправка сообщений, чтение каналов, поиск (нужен Bot Token)
server-brave-searchВеб-поиск через Brave Search API (нужен ключ)
server-google-mapsГеокодирование, маршруты, поиск мест через Google Maps API
server-fetchПростой HTTP-клиент + конвертер HTML→Markdown
server-memoryKnowledge graph для постоянной памяти агента между сессиями
server-sequential-thinkingИнструмент для пошагового рассуждения (думает вслух)

Типичные ошибки

npx не найден или используется старая версия
Claude Desktop запускает процесс в чистом окружении, где PATH может не содержать /usr/local/bin или ~/.nvm. Сервер не запускается, в логах — «command not found».
Исправление: используй абсолютный путь: /usr/local/bin/npx или /opt/homebrew/bin/npx. Найди путь через which npx.
Connection string с паролем в args видна в ps aux
"args": ["...server-postgres", "postgresql://user:pass@host/db"] — пароль виден любому пользователю системы через ps aux. Особенно критично на shared серверах.
Исправление: передавай credentials через "env": {"POSTGRES_URL": "..."}. Большинство серверов читают конфиг из переменной окружения.
Puppeteer не видит нужный сайт
Если сайт за VPN или корпоративным прокси — Puppeteer не унаследует сетевые настройки системы автоматически. Headless Chromium запускается как отдельный процесс без системных прокси.
Исправление: добавь "env": {"PUPPETEER_ARGS": "--proxy-server=http://..."} или настрой системный прокси через переменную https_proxy.
GitHub PAT с избыточными правами
Classic Personal Access Token с полным scope repo даёт агенту доступ ко всем приватным репозиториям аккаунта, включая форки и архивированные. Утечка токена = компрометация всего.
Исправление: используй Fine-grained token с доступом только к нужным репозиториям. Выставляй минимальные permissions: Contents (read), Issues (write если нужно).
Сервер не перезапускается после изменения конфига
Claude Desktop читает claude_desktop_config.json только при запуске. Изменения в конфиге — добавление сервера, изменение env — не применяются в текущей сессии. Многие думают, что изменения подхватываются автоматически.
Исправление: полностью закрывай и перезапускай Claude Desktop после изменения конфига (не просто закрывай окно — именно завершай процесс).

Шпаргалка

Готовые MCP-серверы — краткая выжимка
  • Конфиг: ~/Library/Application Support/Claude/claude_desktop_config.json, поле mcpServers
  • Запуск: каждый сервер — отдельный процесс; Claude Desktop запускает все при старте
  • npx -y: скачивает пакет в кэш при первом запуске; следующие запуски — из кэша
  • filesystem: список разрешённых директорий как аргументы CLI; edit_file — точное совпадение строк
  • puppeteer: один браузер на сессию; сохраняет cookies и состояние между командами
  • postgres: READ ONLY по умолчанию; схемы таблиц — как MCP Resources; создай отдельного пользователя
  • github: нужен PAT; fine-grained token лучше classic; токен через env, не через args
  • Несколько серверов: инструменты объединяются; конфликт имён — побеждает последний в конфиге
  • Secrets: всегда через env, не через args (args видны в ps aux)
  • Перезапуск: изменения конфига применяются только после полного перезапуска Claude Desktop

Практика

Задание 1. Подключи server-filesystem с тремя директориями: домашняя директория, /tmp и директория с текущим проектом. Попроси агента: «Найди все Python-файлы в проекте, содержащие слово TODO в комментариях, и запиши список в /tmp/todos.md». Проверь, что файл создан корректно.
Задание 2. Подключи server-postgres к локальной базе данных (можно использовать тестовую с несколькими таблицами). Попроси агента: «Опиши схему базы данных, найди таблицы без первичных ключей и таблицы с колонкой created_at без индекса». Оцени, насколько точно агент читает схему через MCP Resources.
Задание 3 (продвинутый). Подключи одновременно server-filesystem, server-github и server-postgres. Дай агенту задачу, требующую всех трёх: «Прочитай CHANGELOG.md из репозитория на GitHub, найди все версии с типом "breaking change", запроси из БД таблицу deployments по датам этих версий и сохрани отчёт в /tmp/breaking_deploys.md». Проследи, сколько tool call сделал агент и в каком порядке.