IT · Model Context Protocol
Практика: uv, FastMCP, Inspector і підключення в Host
Урок 5
Урок 5
Live-демо з нуля: від проєкту до tool у чаті агента.
Блок 1
Від готових серверів до власного
Вступ
Готові інтеграції (Notion, Figma, GitHub) закривають типові сценарії. Свій сервер потрібен, коли треба власна бізнес-логіка, контроль над tools і швидкий прототип без публікації в реєстр.
Блок 2
Два рівні абстракції в MCP Python SDK
Server і FastMCP
У MCP Python SDK є два способи створити сервер: низькорівневий Server і високорівневий FastMCP.
Головна різниця — рівень абстракції: скільки ви контролюєте самі, а скільки SDK робить за вас.
Server і FastMCP
Базовий клас офіційного SDK. Дає прямий доступ до протоколу — ви збираєте сервер вручну.
@server.list_tools(), @server.call_tool()Server і FastMCP
Фреймворк поверх MCP: пишете Python-функцію — FastMCP сам будує схему, валідацію й документацію.
@tool, @resource, @prompt замість handlersServer і FastMCP
| Server | FastMCP | |
|---|---|---|
| Код | Більше boilerplate | Мінімум, декоратори |
| Контроль | Повний, ручний | Обмежений «з коробки» |
| Debug | Простіший — усе видно | Складніший — менше видимості |
| Швидкість | Повільніша розробка | Швидший старт |
| Auth / composition | Пишете самі | Часто вже вбудовано |
Server і FastMCP
Server і FastMCP
from mcp.server import Server
from mcp.server.stdio import stdio_server
import mcp.types as types
app = Server("my-server")
@app.list_tools()
async def list_tools() -> list[types.Tool]:
return [
types.Tool(
name="add",
description="Додати два числа",
inputSchema={
"type": "object",
"properties": {
"a": {"type": "integer"},
"b": {"type": "integer"},
},
"required": ["a", "b"],
},
)
]
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "add":
return [types.TextContent(type="text", text=str(arguments["a"] + arguments["b"]))]
raise ValueError(f"Unknown tool: {name}")
async def main():
async with stdio_server() as (read, write):
await app.run(read, write, app.create_initialization_options())
if __name__ == "__main__":
import asyncio
asyncio.run(main())
Server і FastMCP
from mcp.server.fastmcp import FastMCP
mcp = FastMCP()
@mcp.tool()
def add(a: int, b: int) -> int:
"""Додати два числа."""
return a + b
if __name__ == "__main__":
mcp.run(transport="stdio")
Той самий tool add — значно менше коду. На курсі далі працюємо з FastMCP.
Фінал заняття
На цій лекції ми розібрали різницю між Server і FastMCP — два рівні абстракції в MCP Python SDK.
Тепер ви розумієте: FastMCP — швидкий старт, Server — повний контроль і прозорість протоколу.
Далі — практика: stdio-сервер, tools, Inspector і підключення в Host.