Первый MCP-сервер для Claude Code: «безопасные руки» вместо копипаста

Соло-разработчик с агентом в терминале упирается не в формулировку промпта, а в мост между чатом и продакшеном: SSH, вывод в буфер, ответ обратно в Claude Code. Четвёртая часть серии Beyond the Prompt показывает, как read-only MCP-tool снимает этот цикл — и почему для ру-соло без SRE границы доступа нужно зашивать в код инструмента, а не в инструкцию модели; тот же MCP-стек переносится на другой агентный CLI или IDE, если поднимаете сервер инструментов под свои системы.
Copy-paste как узкое горлышко агентного workflow
Автор серии ведёт live automated trading system на Claude Code и описывает типичный production-triage без MCP: подключиться по SSH, выполнить команду, скопировать вывод, вставить в чат — и повторять, пока агент не соберёт картину. Такой relay медленный, теряет контекст и не оставляет аудируемого следа вызовов.
Model Context Protocol (MCP) в материале — способ дать Claude именованные tools с типизированными входами: модель вызывает функцию напрямую, сервер возвращает структурированные данные, а не простыню из терминала. Для agentic workflow это смена роли: из «чата в терминале» — в операционный интерфейс к инфраструктуре, где сам интерфейс задаёт правила.
В серии Part 4 назван «самым большим скачком возможностей» — не из-за магии промпта, а из-за смены способа доступа агента к вашим системам.
«Safe hands»: границы в коде MCP-tool, не в промпте
Формулировка «Give Claude Safe Hands on Your Own Tools» в заголовке — про ограничения, встроенные в реализацию tools. Автор явно противопоставляет это доверию к модели («я попросил Claude не делать X») и схеме ssh root@server с надеждой на здравый смысл.
| Механизм | Смысл в материале |
|---|---|
| Read-only по умолчанию | Большинство tools — наблюдение: запросы, чтение, статус, хвост логов; write и deploy добавляются позже, по одному |
| Физический запрет | SELECT-only на уровне БД и транзакции; запись отклоняется самой Postgres |
| Узкий blast radius | db_query_ro с лимитом строк лучше, чем shell-tool; каждая неэкспонированная capability — инцидент, которого не будет |
| Логирование | Каждый tool call проходит через код сервера и может логироваться |
| Малый structured output | Лимит строк, усечение логов — tools как бюджет токенов |
| Path traversal | В read-file tool пути за пределы разрешённого дерева блокируются |
| Deploy (write) | Только для намеренно ужесточённых tools: backup, checksum, restart, health-check |
Принцип для любого агентного стека с MCP — тот же: промпт не заменяет политику доступа.
Минимальный сервер: read-only SQL и регистрация в Claude Code
Практический минимум в Part 4 — Python-сервер на FastMCP с одним tool db_query_ro: read-only SQL к PostgreSQL через psycopg 3, роль с GRANT только SELECT, conn.read_only = True, statement_timeout пять секунд, fetchmany(500) как жёсткий потолок строк.
from mcp.server.fastmcp import FastMCP
import psycopg
mcp = FastMCP("ops-tools")
@mcp.tool()
def db_query_ro(sql: str) -> str:
with psycopg.connect(DSN) as conn:
conn.read_only = True
with conn.cursor() as cur:
cur.execute("SET statement_timeout = '5s'")
cur.execute(sql)
rows = cur.fetchmany(500)
return str(rows)
if __name__ == "__main__":
mcp.run()
После запуска сервер регистрируют в Claude Code командой claude mcp add или через settings file — полный конфиг в публикации не приведён. С этого момента агент видит tool и может, например, ответить на «сколько пользователей зарегистрировалось вчера?» без psql и ручного копирования.
Рекомендация автора жёсткая и применима соло-разработчику: один read-only tool, который убирает самый раздражающий copy-paste loop, — уже полноценный первый MCP-сервер. Сначала его, без over-build.
От одного tool к тридцати: итерация под реальные задачи
Масштабирование в кейсе шло от реальных задач, а не от заранее нарисованной карты. Порядок эволюции примерно такой: read-only запросы к БД → хвост логов сервиса → проверка, что сервис жив → поиск по коду → чтение файла с блокировкой path traversal → GitHub issues → deploy файла с backup и health-check. В сумме автор дошёл примерно до тридцати tools.
Параллельно он не изобретает велосипед для generic-задач: готовые MCP-серверы экосистемы (администрирование Postgres, GitHub, файловые системы и др.) стоят рядом с кастомным сервером под deploy recipe и конвенции конкретной системы. Паттерн — compose готовых серверов плюс свой узкий слой под то, что уникально для вашего стека.
Следующая часть серии обещает semantic code search и RAG вместо grep — в тексте Part 4 URL на неё нет.
Что вынести соло-разработчику: MCP как операционный интерфейс
Пять правил из материала — чеклист для проектирования tools под агента:
- Read-only по умолчанию.
- Правила enforced tool-ом, не промптом.
- Узкий инструмент лучше универсального shell.
- Логировать всё.
- Возвращать мало структурированных данных.
В первоисточнике фокус на Claude Code и claude mcp add; Cursor и другие IDE там не упоминаются. Но для ру-соло, который уже крутит агента в IDE или терминале, перенос той же логики — не перевод статьи, а инженерная привычка: сначала один безопасный read-only bridge к самой частой боли (БД, логи, статус сервиса), потом итерации. Так агент перестаёт быть «дорогим копипаст-буфером» и начинает работать через интерфейс, где blast radius ограничен вашим кодом.
Материал вышел 11 июля 2026; оценка времени чтения на площадке — около пяти минут.
Источники
- Claude Code, Beyond the Prompt — Part 4: Your First MCP Server (Give Claude Safe Hands on Your Own Tools) — @gde03, Dev.to, доступ 2026-07-11