Pular para o conteúdo

Servidor Python MCP

Filter this guidePick generator option values to hide sections that don't apply.

Gere um servidor Python do Model Context Protocol (MCP) para fornecer contexto a Large Language Models (LLMs), e opcionalmente implante-o no Amazon Bedrock AgentCore.

O Model Context Protocol (MCP) é um padrão aberto que permite assistentes de IA interagirem com ferramentas e recursos externos. Ele fornece uma maneira consistente para LLMs:

  • Executar ferramentas (funções) que realizam ações ou recuperam informações
  • Acessar recursos que fornecem contexto ou dados

Você pode gerar um servidor MCP Python de duas formas:

  1. Instale o Nx Console VSCode Plugin se ainda não o fez
  2. Abra o console Nx no VSCode
  3. Clique em Generate (UI) na seção "Common Nx Commands"
  4. Procure por @aws/nx-plugin - py#mcp-server
  5. Preencha os parâmetros obrigatórios
    • Clique em Generate
    ParâmetroTipoPadrãoDescrição
    project Obrigatóriostring-O projeto ao qual adicionar um servidor MCP
    name string-O nome do seu servidor MCP (padrão: mcp-server)
    auth iam | cognitoiamO método usado para autenticar com seu servidor MCP. Aplicável apenas quando infra está definido (ignorado quando infra é none).
    iac inherit | cdk | terraforminheritO provedor IaC preferido. Por padrão, isso é herdado da sua seleção inicial.
    infra agentcore | noneagentcoreO tipo de infraestrutura para hospedar seu servidor MCP. Selecione none para nenhuma hospedagem.
    preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

    O gerador adicionará os seguintes arquivos ao seu projeto Python existente:

    • Directoryyour-project/
      • Directoryyour_module/
        • Directorymcp_server/ (ou nome personalizado se especificado)
          • __init__.py Inicialização do pacote Python
          • server.py Definição principal do servidor com ferramentas e recursos de exemplo
          • stdio.py Ponto de entrada para transporte STDIO, útil para servidores MCP locais simples
          • http.py Ponto de entrada para transporte HTTP Streamable, útil para hospedar seu servidor MCP
          • Dockerfile Ponto de entrada para hospedar seu servidor MCP (excluído quando infra é None)
      • pyproject.toml Atualizado com dependências MCP
      • project.json Atualizado com alvos de serviço do servidor MCP
    infra = agentcore

    Como este gerador fornece infraestrutura como código com base no iacProvider escolhido, ele criará um projeto em packages/common que inclui os constructs CDK ou módulos Terraform relevantes.

    O projeto comum de infraestrutura como código está estruturado da seguinte forma:

    • Directorypackages/common/constructs
      • Directorysrc
        • Directoryapp/ Constructs para infraestrutura específica de um projeto/gerador
        • Directorycore/ Constructs genéricos reutilizados pelos constructs em app
        • index.ts Ponto de entrada exportando os constructs de app
      • project.json Metas de build e configuração do projeto

    Para implantar seu MCP Server, os seguintes arquivos são gerados:

    • Directorypackages/common/constructs/src
      • Directoryapp
        • Directorymcp-servers
          • Directory<project-name>
            • <project-name>.ts Construto CDK para implantar seu MCP Server
            • Dockerfile Arquivo Docker passthrough usado pelo construto CDK
    infra = none

    Se você selecionou None para infra, nenhum construto CDK ou módulo Terraform é gerado — o servidor MCP está configurado apenas para uso local STDIO / HTTP. A opção auth é ignorada neste modo, pois não há endpoint hospedado para autenticar.

    Quando implantado no Bedrock AgentCore Runtime, o servidor MCP é construído em uma imagem de contêiner, enviado para o Amazon ECR e executado no AgentCore Runtime. Assistentes de IA invocam o endpoint do plano de dados do AgentCore Runtime, que encaminha chamadas tools/* e resources/* para o seu servidor através do transporte HTTP streamable.

    AI AssistantECRMCP Server(AgentCore Runtime)CloudWatch(Logs, Metrics) StreamableHTTP Containerimage

    Ferramentas são funções que o assistente de IA pode chamar para executar ações. O servidor MCP Python usa a biblioteca MCP Python SDK (FastMCP), que fornece uma abordagem baseada em decoradores para definir ferramentas.

    Você pode adicionar novas ferramentas no arquivo server.py:

    @mcp.tool(description="Descrição da sua ferramenta")
    def your_tool_name(param1: str, param2: int) -> str:
    """Implementação da ferramenta com type hints"""
    # Sua lógica da ferramenta aqui
    return f"Resultado: {param1} com {param2}"

    A biblioteca FastMCP trata automaticamente:

    • Validação de tipos baseada nas type hints da função
    • Geração de schema JSON para o protocolo MCP
    • Tratamento de erros e formatação de respostas

    Recursos fornecem contexto ao assistente de IA. Você pode adicioná-los usando o decorador @mcp.resource:

    @mcp.resource("example://static-resource", description="Exemplo de recurso estático")
    def static_resource() -> str:
    """Retorna conteúdo estático"""
    return "Este é um conteúdo estático que fornece contexto para a IA"
    @mcp.resource("dynamic://resource/{item_id}", description="Exemplo de recurso dinâmico")
    def dynamic_resource(item_id: str) -> str:
    """Retorna conteúdo dinâmico baseado em parâmetros"""
    # Busca dados baseado no item_id
    data = fetch_data_for_item(item_id)
    return f"Conteúdo dinâmico para {item_id}: {data}"

    A maioria dos assistentes de IA que suportam MCP usa uma abordagem de configuração semelhante. Você precisará criar ou atualizar um arquivo de configuração com os detalhes do seu servidor MCP:

    {
    "mcpServers": {
    "your-mcp-server": {
    "command": "uv",
    "args": [
    "run",
    "python",
    "-m",
    "my_module.mcp_server.stdio"
    ],
    "env": {
    "VIRTUAL_ENV": "/path/to/your/project/.venv"
    }
    }
    }
    }

    Consulte a documentação a seguir para configurar o MCP com assistentes de IA específicos:

    Para executar seu servidor MCP (e tudo conectado a ele, como um banco de dados local) localmente, use o alvo dev do projeto:

    Terminal window
    pnpm nx dev your-project

    Se você adicionou múltiplos componentes ao seu projeto (servidores MCP, agentes, etc.), isso inicia todos eles. Para executar apenas este servidor MCP, use seu alvo <your-server-name>-dev:

    Terminal window
    pnpm nx your-server-name-dev your-project

    O gerador configura um alvo chamado <your-server-name>-inspect, que inicia seu servidor MCP localmente (via o alvo <your-server-name>-dev, incluindo quaisquer dependências conectadas, como um banco de dados local) e lança o MCP Inspector pré-configurado para conectar a ele através do transporte HTTP Streamable.

    Terminal window
    pnpm nx your-server-name-inspect your-project

    Isso iniciará o inspector em http://localhost:6274. Comece clicando no botão “Connect”.

    A maneira mais fácil de testar e usar um servidor MCP é através do inspector ou configurando com um assistente de IA (como acima).

    Você também pode executar seu servidor com transporte STDIO diretamente usando o alvo <your-server-name>-serve-stdio.

    Terminal window
    pnpm nx your-server-name-serve-stdio your-project

    Este comando usa uv run para executar seu servidor MCP com transporte STDIO.

    Se preferir executar seu servidor MCP localmente usando transporte HTTP Streamable, use o alvo <your-server-name>-serve.

    Terminal window
    pnpm nx your-server-name-serve your-project

    Este comando usa uv run uvicorn --reload para executar seu servidor MCP com transporte HTTP (normalmente na porta 8000), e reinicia automaticamente quando os arquivos são alterados.

    infra = agentcore

    Implantando Seu Servidor MCP no Bedrock AgentCore Runtime

    Seção intitulada “Implantando Seu Servidor MCP no Bedrock AgentCore Runtime”

    Se você selecionou agentcore para infra, a infraestrutura relevante do CDK ou Terraform será gerada para que você possa implantar seu servidor MCP no Amazon Bedrock AgentCore Runtime.

    Um construto CDK é gerado para seu Servidor MCP, nomeado com base no name escolhido ao executar o gerador, ou <ProjectName>McpServer por padrão.

    Você pode usar este construto CDK em uma aplicação CDK:

    import { MyProjectMcpServer } from ':my-scope/common-constructs';
    export class ExampleStack extends Stack {
    constructor(scope: Construct, id: string) {
    // Adicione o servidor MCP à sua stack
    new MyProjectMcpServer(this, 'MyProjectMcpServer');
    }
    }

    O gerador fornece uma opção auth para configurar a autenticação do seu servidor MCP. Você pode escolher entre autenticação IAM (padrão) ou Cognito ao gerar seu servidor MCP.

    Por padrão, seu servidor MCP será protegido usando autenticação IAM. Basta implantá-lo sem argumentos adicionais:

    import { MyProjectMcpServer } from ':my-scope/common-constructs';
    export class ExampleStack extends Stack {
    constructor(scope: Construct, id: string) {
    new MyProjectMcpServer(this, 'MyProjectMcpServer');
    }
    }

    Você pode conceder acesso para invocar seu servidor MCP no Bedrock AgentCore Runtime usando o método grantInvokeAccess. Por exemplo, você pode permitir que um agent gerado com o gerador py#agent chame seu servidor MCP:

    import { MyProjectAgent, MyProjectMcpServer } from ':my-scope/common-constructs';
    export class ExampleStack extends Stack {
    constructor(scope: Construct, id: string) {
    const agent = new MyProjectAgent(this, 'MyProjectAgent');
    const mcpServer = new MyProjectMcpServer(this, 'MyProjectMcpServer');
    mcpServer.grantInvokeAccess(agent);
    }
    }

    Quando você seleciona autenticação Cognito, o gerador configura o servidor MCP para usar Cognito para autenticação.

    O construto gerado aceita uma propriedade identity que configura a autenticação Cognito:

    import { MyProjectMcpServer, UserIdentity } from ':my-scope/common-constructs';
    export class ExampleStack extends Stack {
    constructor(scope: Construct, id: string) {
    const identity = new UserIdentity(this, 'Identity');
    new MyProjectMcpServer(this, 'MyProjectMcpServer', {
    identity,
    });
    }
    }

    O construto UserIdentity pode ser gerado usando o gerador ts#website#auth, ou você pode criar seu próprio CDK UserPool e UserPoolClient.

    Para construir seu servidor MCP para o Bedrock AgentCore Runtime, um alvo bundle é adicionado ao seu projeto, que:

    • Exporta suas dependências Python para um arquivo requirements.txt usando uv export
    • Instala dependências para a plataforma alvo (aarch64-manylinux_2_28) usando uv pip install

    Um alvo docker específico para seu servidor MCP também é adicionado, que copia o Dockerfile e os artefatos empacotados em um diretório de contexto docker. Isso coloca o Dockerfile junto à saída construída, permitindo que o CDK construa a imagem Docker diretamente usando AgentRuntimeArtifact.fromAsset.

    A imagem Docker construída para este projeto é verificada em busca de vulnerabilidades como parte da construção usando Trivy, executando a partir da imagem Trivy hospedada no ECR.

    Um target trivy é adicionado ao seu projeto que verifica a imagem construída e falha a construção se qualquer vulnerabilidade de severidade HIGH ou CRITICAL for encontrada. O Dockerfile gerado usa uma imagem base sem vulnerabilidades corrigíveis conhecidas dessas severidades no momento da geração, e atualiza ferramentas incluídas (como npm) para mantê-la assim.

    A verificação usa o mesmo mecanismo de contêiner que a construção da sua imagem (docker ou finch), portanto, nenhuma ferramenta adicional é necessária. Como a verificação só é executada novamente quando a imagem muda, uma imagem inalterada não é verificada novamente.

    Pode haver casos em que você deseja suprimir uma vulnerabilidade específica, por exemplo, quando nenhuma correção está disponível ainda e você avaliou o risco como aceitável.

    Adicione o ID da vulnerabilidade (um por linha) ao arquivo .trivyignore na raiz do seu projeto (ou seja, ao lado do seu project.json):

    .trivyignore
    # node-tar arbitrary file write - not exploitable in our usage
    CVE-2024-XXXXX

    Para mais detalhes sobre filtragem de descobertas, consulte a documentação de filtragem do Trivy.

    Seu servidor MCP é configurado automaticamente com observabilidade usando a AWS Distro for Open Telemetry (ADOT), através da configuração de instrumentação automática em seu Dockerfile.

    Você pode encontrar traces no Console AWS do CloudWatch, selecionando “GenAI Observability” no menu. Observe que para que os traces sejam populados, você precisará habilitar o Transaction Search.

    Para mais detalhes, consulte a documentação do AgentCore sobre observabilidade.

    Use o gerador connection para integrar este projeto com outros em seu workspace. As seguintes conexões envolvem este projeto:

    Strands AgentsTypeScriptModel Context Protocol
    TypeScript Agent para MCPConecte um TypeScript Agent a um servidor MCP
    Strands AgentsPythonModel Context Protocol
    Python Agent para MCPConecte um Python Agent a um servidor MCP
    Model Context ProtocolPythonAmazon DynamoDBPython
    Python MCP Server para Python DynamoDBConecte um Python MCP Server a uma tabela DynamoDB
    Amazon Bedrock AgentCore GatewayModel Context Protocol
    AgentCore Gateway para Servidor MCPAgregue um servidor MCP atrás de um AgentCore Gateway