IT · Model Context Protocol

Створення локального MCP сервера (stdio)

Практика: uv, FastMCP, Inspector і підключення в Host

Урок 5

План заняття

  1. 01 Вступ
  2. 02 Налаштування середовища
  3. 03 Server і FastMCP
  4. 04 Створення простого stdio MCP сервера
  5. 05 Перший tool
  6. 06 Debugging and MCP Inspector
  7. 07 Підключення в Cursor і Claude Desktop

Урок 5

Що використовуємо на занятті

Live-демо з нуля: від проєкту до tool у чаті агента.

Python uv MCP Server FastMCP stdio MCP Inspector Cursor Claude Desktop

Блок 1

Вступ

Від готових серверів до власного

Вступ

Навіщо свій MCP сервер

Готові інтеграції (Notion, Figma, GitHub) закривають типові сценарії. Свій сервер потрібен, коли треба власна бізнес-логіка, контроль над tools і швидкий прототип без публікації в реєстр.

Блок 2

Server і FastMCP

Два рівні абстракції в MCP Python SDK

Server і FastMCP

Два підходи

У MCP Python SDK є два способи створити сервер: низькорівневий Server і високорівневий FastMCP.

Головна різниця — рівень абстракції: скільки ви контролюєте самі, а скільки SDK робить за вас.

Server і FastMCP

Server — низький рівень

Базовий клас офіційного SDK. Дає прямий доступ до протоколу — ви збираєте сервер вручну.

  • Handlers вручну: @server.list_tools(), @server.call_tool()
  • Повний контроль: схеми, помилки, lifecycle, трасування
  • Більше boilerplate — але немає «чорної скриньки»
  • Debug простіший: видно кожен крок протоколу

Server і FastMCP

FastMCP — високий рівень

Фреймворк поверх MCP: пишете Python-функцію — FastMCP сам будує схему, валідацію й документацію.

  • Декоратори @tool, @resource, @prompt замість handlers
  • Менше коду, швидший старт — де-факто стандарт спільноти
  • Менше прозорості: внутрішня механіка як «чорна скринька»

Server і FastMCP

У чому різниця

Server FastMCP
Код Більше boilerplate Мінімум, декоратори
Контроль Повний, ручний Обмежений «з коробки»
Debug Простіший — усе видно Складніший — менше видимості
Швидкість Повільніша розробка Швидший старт
Auth / composition Пишете самі Часто вже вбудовано

Server і FastMCP

Коли що обирати

  • FastMCP — сервер з нуля, stdio або Streamable HTTP, швидкий старт. На курсі — основний шлях.
  • Server — потрібен повний контроль над протоколом, кастомна логіка або debug на рівні специфікації.

Server і FastMCP

Приклад: MCP Server

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

Приклад: 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.