Home
Login

Framework de código aberto para construir servidores e clientes MCP de forma rápida e Pythonic

Apache-2.0Python 13.0kjlowin Last Updated: 2025-06-21

FastMCP - Framework Python para Construção Rápida de Servidores e Clientes MCP

Visão Geral do Projeto

FastMCP é um framework Python de alto nível para construir servidores e clientes Model Context Protocol (MCP), projetado para permitir que desenvolvedores criem ferramentas, exponham recursos, definam prompts e conectem componentes de forma rápida e concisa. Este projeto, desenvolvido e mantido pelo usuário do GitHub jlowin, tornou-se uma parte importante do ecossistema MCP.

Por que escolher FastMCP?

Embora o protocolo MCP seja poderoso, implementá-lo requer uma grande quantidade de código boilerplate - configuração do servidor, manipuladores de protocolo, tipos de conteúdo, gerenciamento de erros, etc. O FastMCP lida com todos os detalhes complexos do protocolo e gerenciamento do servidor, permitindo que você se concentre na construção de excelentes ferramentas.

Os objetivos de design do FastMCP:

  • 🚀 Rápido: Interfaces de alto nível significam menos código e desenvolvimento mais rápido
  • 🍀 Simples: Construa servidores MCP com o mínimo de código boilerplate
  • 🐍 Pythonic: Natural para desenvolvedores Python
  • 🔍 Completo: Fornece uma implementação completa da especificação central do MCP, suportando servidores e clientes

Principais Características e Funcionalidades

Funcionalidades Básicas

  • Crie servidores com decoradores intuitivos, com o mínimo de código boilerplate
  • Faça proxy de servidores existentes para modificar configurações ou métodos de transporte
  • Combine servidores em aplicações complexas
  • Gere servidores a partir de especificações OpenAPI ou objetos FastAPI
  • Interaja programaticamente com servidores MCP
  • Conecte-se a qualquer servidor MCP usando qualquer protocolo de transporte
  • Teste servidores sem intervenção manual
  • Utilize funcionalidades centrais do MCP, como amostragem LLM

Evolução da Versão

O FastMCP 1.0 tornou a construção de servidores MCP tão simples que agora faz parte do SDK Python oficial do Model Context Protocol!

O FastMCP 2.0 introduz várias novas funcionalidades:

  • Funcionalidades avançadas como proxy e combinação de servidores MCP
  • Geração automática de servidores a partir de especificações OpenAPI ou objetos FastAPI
  • Introdução de funcionalidades de cliente, como amostragem LLM

Instalação

Recomenda-se usar uv para instalar o FastMCP:

uv pip install fastmcp

Instalação para desenvolvimento:


git clone https://github.com/jlowin/fastmcp.git
cd fastmcp

uv sync

Exemplo de Início Rápido

Exemplo de Servidor Básico

# server.py
from fastmcp import FastMCP


mcp = FastMCP("Demo")


@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

if __name__ == "__main__":
    mcp.run()

Instale no Claude Desktop:

fastmcp install server.py

Explicação dos Conceitos Centrais

1. Instância FastMCP

Representa o objeto central da aplicação MCP, lidando com conexões, detalhes do protocolo e roteamento:

from fastmcp import FastMCP


mcp = FastMCP("My App")


mcp = FastMCP("My App", dependencies=["pandas", "numpy"])

2. Ferramentas (Tools)

Permitem que LLMs executem operações executando funções Python, adequadas para cálculos, chamadas de API externas ou efeitos colaterais:

import httpx
from pydantic import BaseModel

class UserInfo(BaseModel):
    user_id: int
    notify: bool = False

@mcp.tool()
async def send_notification(user: UserInfo, message: str) -> dict:
    """Sends a notification to a user if requested."""
    if user.notify:

        print(f"Notifying user {user.user_id}: {message}")
        return {"status": "sent", "user_id": user.user_id}
    return {"status": "skipped", "user_id": user.user_id}

@mcp.tool()
def get_stock_price(ticker: str) -> float:
    """Gets the current price for a stock ticker."""

    prices = {"AAPL": 180.50, "GOOG": 140.20}
    return prices.get(ticker.upper(), 0.0)

3. Recursos (Resources)

Expõem dados para LLMs, fornecendo principalmente informações sem realizar cálculos significativos ou efeitos colaterais:


@mcp.resource("config://app-version")
def get_app_version() -> str:
    """Returns the application version."""
    return "v2.1.0"


@mcp.resource("db://users/{user_id}/email")
async def get_user_email(user_id: str) -> str:
    """Retrieves the email address for a given user ID."""

    emails = {"123": "alice@example.com", "456": "bob@example.com"}
    return emails.get(user_id, "not_found@example.com")

4. Prompts

Definem templates reutilizáveis ou padrões de interação:

from fastmcp.prompts.base import UserMessage, AssistantMessage

@mcp.prompt()
def ask_review(code_snippet: str) -> str:
    """Generates a standard code review request."""
    return f"Please review the following code snippet for potential bugs and style issues:\n```python\n{code_snippet}\n```"

@mcp.prompt()
def debug_session_start(error_message: str) -> list[Message]:
    """Initiates a debugging help session."""
    return [
        UserMessage(f"I encountered an error:\n{error_message}"),
        AssistantMessage("Okay, I can help with that. Can you provide the full traceback and tell me what you were trying to do?")
    ]

Funcionalidades Avançadas

1. Servidores Proxy

Crie servidores FastMCP que atuam como intermediários, fazendo proxy de solicitações para outro endpoint MCP:

import asyncio
from fastmcp import FastMCP, Client
from fastmcp.client.transports import PythonStdioTransport


proxy_client = Client(
    transport=PythonStdioTransport('path/to/original_stdio_server.py'),
)


proxy = FastMCP.from_client(proxy_client, name="Stdio-to-SSE Proxy")

if __name__ == "__main__":
    proxy.run(transport='sse')

2. Composição de Servidores

Construa grandes aplicações MCP criando servidores FastMCP modulares e "montando-os" em um servidor pai:

from fastmcp import FastMCP


weather_mcp = FastMCP("Weather Service")

@weather_mcp.tool()
def get_forecast(city: str):
    return f"Sunny in {city}"


news_mcp = FastMCP("News Service")

@news_mcp.tool()
def fetch_headlines():
    return ["Big news!", "Other news"]


mcp = FastMCP("Composite")
mcp.mount("weather", weather_mcp) 
mcp.mount("news", news_mcp)        

3. Geração de Servidores a partir de APIs

Gere automaticamente servidores FastMCP a partir de APIs Web existentes:

from fastapi import FastAPI
from fastmcp import FastMCP


fastapi_app = FastAPI(title="My Existing API")

@fastapi_app.get("/status")
def get_status():
    return {"status": "running"}


mcp_server = FastMCP.from_fastapi(fastapi_app)

4. Funcionalidades de Cliente

Interaja com qualquer servidor MCP:

from fastmcp import Client

async with Client("path/to/server") as client:

    result = await client.call_tool("weather", {"location": "San Francisco"})
    print(result)
    

    res = await client.read_resource("db://users/123/profile")
    print(res)

Executando o Servidor

Modo de Desenvolvimento

fastmcp dev your_server_file.py

Instalação em Produção

fastmcp install your_server_file.py

Execução Direta

if __name__ == "__main__":
    mcp.run()

Projetos de Exemplo

O projeto contém vários arquivos de exemplo:

  • simple_echo.py: Ferramentas, recursos e prompts básicos
  • complex_inputs.py: Usando modelos Pydantic como entrada de ferramentas
  • mount_example.py: Montando vários servidores FastMCP
  • sampling.py: Usando conclusão LLM em um servidor MCP
  • screenshot.py: Ferramenta que retorna um objeto Image
  • text_me.py: Ferramenta que interage com uma API externa
  • memory.py: Exemplo complexo com interação com banco de dados

Guia de Contribuição

FastMCP recebe contribuições da comunidade:

Requisitos de Ambiente

  • Python 3.10+
  • Gerenciador de pacotes uv

Configuração de Desenvolvimento

git clone https://github.com/jlowin/fastmcp.git && cd fastmcp
uv venv && uv sync

Testes

uv run pytest -vv

Qualidade do Código

Use ruff e pre-commit:

pre-commit install
pre-commit run --all-files

Significado do Projeto

FastMCP preenche a lacuna entre a implementação do protocolo MCP e o desenvolvimento de aplicações reais, permitindo que os desenvolvedores:

  1. Prototipem e implantem rapidamente servidores MCP
  2. Integrem facilmente APIs e fontes de dados existentes
  3. Construam arquiteturas de aplicações de IA modulares e escaláveis
  4. Concentrem-se na lógica de negócios em vez dos detalhes de implementação do protocolo