Соберите и подключите свой первый MCP-сервер
Давайте предоставим Claude собственный инструмент, собрав крошечный MCP-сервер и подключив его. Мы сделаем его минимальным, чтобы подключение было понятным — а затем вы подставите свою реальную логику.
Что мы создаём
stdio-сервер с одним инструментом, word_count, который Claude может вызывать. Тот же шаблон масштабируется до «выполни запрос к моей БД», «открой тикет» и т. д.
Шаг 1 — Сервер
server.py (Python; версия на TypeScript есть в каркасах MCP):
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("text-tools")
@mcp.tool()
def word_count(text: str) -> int:
"""Count the words in a piece of text."""
return len(text.split())
if __name__ == "__main__":
mcp.run() # stdio transport
Шаг 2 — Объявите его
Добавьте в .mcp.json в корне репозитория:
{ "mcpServers": {
"text-tools": { "command": "python", "args": ["server.py"] }
} }
Шаг 3 — Подключите и протестируйте
Запустите Claude Code в репозитории. Спросите: «Используй сервер text-tools, чтобы посчитать слова в строке: ''the quick brown fox''.» Claude должен вызвать word_count и сообщить 4. Если он не видит инструмент, проверьте, что сервер чисто запускается сам по себе и что путь в .mcp.json указан верно.
Шаг 4 — Сделайте его настоящим
Замените word_count на свою реальную возможность — запрос к БД, вызов внутреннего API, операцию с файлами. Добавьте валидацию входных данных и возвращайте ошибки как результаты.
Чек-лист безопасности
:::warning Сервер — это код и доступ
- Минимум привилегий — только те данные/действия, которые ему нужны (Защита агентов).
- Проверяйте входные данные, которые отправляет модель.
- Недоверенные данные, которые он возвращает, могут нести инъекцию промпта.
- Проверяйте любой сторонний сервер перед подключением. :::