Pular para o conteúdo principal
Versão: 0.2.0-beta.1

Configurar MCP Auth no servidor MCP

Com a última Especificação MCP (2025-06-18), seu servidor MCP atua como um Servidor de Recursos que valida tokens de acesso emitidos por servidores de autorização externos.

Para configurar o MCP Auth, você precisa de dois passos principais:

  1. Configurar os metadados do servidor de autorização - Defina quais servidores de autorização podem emitir tokens válidos para seu servidor MCP e oriente os clientes MCP sobre onde obter tokens de acesso
  2. Configurar os metadados do recurso protegido - Defina seu servidor MCP como um recurso protegido com escopos suportados

Passo 1: Configurar os metadados do servidor de autorização

Busca automática de metadados

A maneira mais fácil de configurar os metadados do servidor de autorização é usando as funções integradas que buscam os metadados a partir de URLs bem conhecidas. Se seu provedor estiver em conformidade com um dos seguintes padrões:

Você pode usar o fetchServerConfig para recuperar automaticamente os metadados fornecendo a URL do issuer:

from mcpauth.config import AuthServerType
from mcpauth.utils import fetch_server_config

# Buscar metadados do servidor de autorização
auth_server_config = fetch_server_config(
    "https://auth.logto.io/oidc",
    AuthServerType.OIDC  # ou AuthServerType.OAUTH
)

Se o seu issuer incluir um caminho, o comportamento difere um pouco entre OAuth 2.0 e OpenID Connect:

  • OAuth 2.0: A URL bem conhecida é anexada ao domínio do issuer. Por exemplo, se seu issuer for https://my-project.logto.app/oauth, a URL bem conhecida será https://auth.logto.io/.well-known/oauth-authorization-server/oauth.
  • OpenID Connect: A URL bem conhecida é anexada diretamente ao issuer. Por exemplo, se seu issuer for https://my-project.logto.app/oidc, a URL bem conhecida será https://auth.logto.io/oidc/.well-known/openid-configuration.

Outras formas de configurar os metadados do servidor de autorização

Transpilação de dados personalizada

Em alguns casos, os metadados retornados pelo provedor podem não estar no formato esperado. Se você tiver certeza de que o provedor está em conformidade, pode usar a opção transpile_data para modificar os metadados antes de serem utilizados:

from mcpauth.config import AuthServerType
from mcpauth.utils import fetch_server_config

auth_server_config = fetch_server_config(
    '<auth-server-url>',
    type=AuthServerType.OIDC,
    transpile_data=lambda data: {**data, 'response_types_supported': ['code']} 
)

Isso permite modificar o objeto de metadados antes de ser utilizado pelo MCP Auth. Por exemplo, você pode adicionar ou remover campos, alterar seus valores ou convertê-los para um formato diferente.

Buscar metadados de uma URL específica

Se seu provedor possui uma URL de metadados específica em vez das padrões, você pode usá-la de forma semelhante:

from mcpauth.config import AuthServerType
from mcpauth.utils import fetch_server_config_by_well_known_url

auth_server_config = fetch_server_config_by_well_known_url(
    '<metadata-url>',
    type=AuthServerType.OIDC # ou AuthServerType.OAUTH
)

Buscar metadados de uma URL específica com transpilação de dados personalizada

Em alguns casos, a resposta do provedor pode estar malformada ou não estar em conformidade com o formato de metadados esperado. Se você tiver certeza de que o provedor está em conformidade, pode transpilar os metadados via opção de configuração:

from mcpauth.config import AuthServerType, fetch_server_config_by_well_known_url

auth_server_config = fetch_server_config_by_well_known_url(
    '<metadata-url>',
    type=AuthServerType.OIDC,
    transpile_data=lambda data: {**data, 'response_types_supported': ['code']} 
)

Fornecer metadados manualmente

Se seu provedor não suporta busca de metadados, você pode fornecer manualmente o objeto de metadados:

from mcpauth.config import AuthServerConfig, AuthServerType, AuthorizationServerMetadata

auth_server_config = AuthServerConfig(
    type=AuthServerType.OIDC,  # ou AuthServerType.OAUTH
    metadata=AuthorizationServerMetadata(
        issuer='<issuer-url>',
        authorization_endpoint='<authorization-endpoint-url>',
        # ... outros campos de metadados
    ),
)

Passo 2: Configurar os metadados do recurso protegido

Após configurar os metadados do servidor de autorização, você precisa inicializar o MCPAuth como um Servidor de Recursos definindo os metadados dos seus recursos protegidos.

Este passo segue a especificação RFC 9728 (OAuth 2.0 Protected Resource Metadata) para descrever seu servidor MCP como um recurso protegido:

from mcpauth import MCPAuth
from mcpauth.config import ResourceServerConfig, ResourceServerMetadata

# Defina seu identificador de recurso
resource_id = "https://api.example.com/notes"

# Inicialize o MCPAuth no modo servidor de recursos
mcp_auth = MCPAuth(
    protected_resources=ResourceServerConfig(
        metadata=ResourceServerMetadata(
            resource=resource_id,
            authorization_servers=[auth_server_config],  # Usando a configuração do Passo 1
            scopes_supported=[
                "read:notes",
                "write:notes",
            ],
        )
    )
)

Para múltiplos recursos, você pode fornecer um array de recursos protegidos, cada um com sua própria configuração de metadados.

A configuração mostrada acima cobre a configuração básica. Para parâmetros de metadados mais avançados, consulte RFC 9728.

Passo 3: Montar o endpoint de metadados do recurso protegido

Monte o roteador para servir o endpoint de metadados do recurso protegido. O caminho do endpoint é determinado automaticamente pelo componente de caminho do seu identificador de recurso:

  • Sem caminho: https://api.example.com/.well-known/oauth-protected-resource
  • Com caminho: https://api.example.com/notes/.well-known/oauth-protected-resource/notes
from starlette.applications import Starlette
from mcpauth import MCPAuth

mcp_auth = MCPAuth({/* ... */})

app = Starlette(routes=[
    *mcp_auth.resource_metadata_router().routes,
])