Pular para o conteúdo principal

Configurar MCP Auth no servidor MCP

Para conectar seu servidor MCP a um provedor OAuth 2.1 ou OpenID Connect, você precisa configurar a instância do MCP Auth. Isso envolve inicializar a instância com os metadados do servidor de autorização do seu provedor e configurar os fluxos de autorização necessários.

Inicializar MCP Auth

Busca automática de metadados

A maneira mais fácil de inicializar a instância do MCP Auth é usando as funções integradas que buscam os metadados a partir de uma URL well-known. Se o 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 import MCPAuth
from mcpauth.config import AuthServerType, fetch_server_config

mcp_auth = MCPAuth(
    server=fetch_server_config(
        '<auth-server-url>',
        type=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 well-known é anexada ao domínio do issuer. Por exemplo, se seu issuer for https://my-project.logto.app/oauth, a URL well-known será https://auth.logto.io/.well-known/oauth-authorization-server/oauth.
  • OpenID Connect: A URL well-known é anexada diretamente ao issuer. Por exemplo, se seu issuer for https://my-project.logto.app/oidc, a URL well-known será https://auth.logto.io/oidc/.well-known/openid-configuration.

Outras formas de inicializar o MCP Auth

Transpilação personalizada de dados

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 import MCPAuth
from mcpauth.config import AuthServerType
from mcpauth.utils import fetch_server_config

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

Isso permite que você modifique o objeto de metadados antes que ele seja 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 o seu provedor possui uma URL de metadados específica em vez das padrões, você pode usá-la de forma semelhante:

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

mcp_auth = MCPAuth(
    server=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 personalizada de dados

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 import MCPAuth
from mcpauth.config import AuthServerType, fetch_server_config_by_well_known_url

mcp_auth = MCPAuth(
    server=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 o seu provedor não suporta busca de metadados, você pode fornecer manualmente o objeto de metadados:

from mcpauth import MCPAuth
from mcpauth.config import AuthServerConfig, AuthServerType, AuthorizationServerMetadata

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