🔌 MCP-серверы
Model Context Protocol: что это, архитектура, сервер на Python и TypeScript, подключение к клиентам.
Шпаргалки · ИИ · #mcp #ai #agents #tools
Что это
MCP (Model Context Protocol) открытый протокол, по которому ИИ-приложение (клиент) подключается к внешним инструментам и данным через серверы. Один стандарт вместо отдельной интеграции под каждую систему.
Архитектура
| Роль | Описание |
|---|---|
| Host (хост) | приложение с моделью: Claude Desktop, Claude Code, IDE, свой агент |
| Client | часть хоста, держит соединение с одним сервером |
| Server | программа, предоставляющая возможности |
Сообщения JSON-RPC 2.0. Транспорты: stdio (локальный процесс) и Streamable HTTP (удалённый сервер; прежнее SSE устарело).
Что даёт сервер
| Примитив | Кто управляет | Смысл |
|---|---|---|
| Tools | модель | функции для вызова (поиск, запись, запрос к API) |
| Resources | приложение | данные для чтения: файлы, записи, схемы |
| Prompts | пользователь | шаблоны запросов и сценарии |
| Sampling, Roots, Elicitation | клиент | запрос генерации у клиента, границы файлов, уточнение у пользователя |
Сервер на Python (FastMCP)
pip install "mcp[cli]"
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Погода")
@mcp.tool()
def get_forecast(city: str) -> str:
"""Прогноз погоды для города."""
return f"{city}: +12°C, облачно"
@mcp.resource("notes://{name}")
def note(name: str) -> str:
return f"Содержимое заметки {name}"
if __name__ == "__main__":
mcp.run() # stdio по умолчанию
Отладка: mcp dev server.py (MCP Inspector).
Сервер на TypeScript
npm i @modelcontextprotocol/sdk zod
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "weather", version: "1.0.0" });
server.tool("get_forecast", { city: z.string() }, async ({ city }) => ({
content: [{ type: "text", text: `${city}: +12°C` }],
}));
await server.connect(new StdioServerTransport());
Подключение (Claude Desktop, claude_desktop_config.json)
{
"mcpServers": {
"weather": { "command": "python", "args": ["/path/server.py"] },
"files": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/docs"] },
"remote": { "url": "https://mcp.example.com/mcp" }
}
}
Claude Code: claude mcp add weather -- python /path/server.py, claude mcp list.
Известные серверы
Файловая система, Git и GitHub, PostgreSQL и SQLite, Slack, Google Drive, Puppeteer и Playwright (браузер), Fetch (веб-страницы), Memory, Sentry, Notion, Jira, Docker и Kubernetes.
Безопасность
- Принцип наименьших прав: давайте серверу только нужные папки, токены с минимальным набором прав.
- Подтверждение пользователя для действий с последствиями (запись, удаление, отправка).
- Недоверенные данные (страницы, письма) могут содержать инструкции для модели (prompt injection): не передавайте им чувствительные инструменты без проверки.
- Устанавливайте серверы только из доверенных источников и просматривайте код.
- Логируйте вызовы инструментов.
Практика
Описание инструмента влияет на его выбор моделью: делайте имена и описания точными, параметры типизированными, ответы краткими и структурированными.