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
:
- Python
- Node.js
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
)
)
import { MCPAuth, fetchServerConfig } from 'mcp-auth';
const mcpAuth = new MCPAuth({
server: await fetchServerConfig('<auth-server-issuer>', { type: 'oidc' }), // ou '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:
- Python
- Node.js
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']}
)
)
import { MCPAuth, fetchServerConfig } from 'mcp-auth';
const mcpAuth = new MCPAuth({
server: await fetchServerConfig('<auth-server-issuer>', {
type: 'oidc',
transpileData: (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:
- Python
- Node.js
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
)
)
import { MCPAuth, fetchServerConfigByWellKnownUrl } from 'mcp-auth';
const mcpAuth = new MCPAuth({
server: await fetchServerConfigByWellKnownUrl('<metadata-url>', { type: 'oidc' }), // ou '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:
- Python
- Node.js
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']}
)
)
const mcpAuth = new MCPAuth({
server: await fetchServerConfigByWellKnownUrl('<metadata-url>', {
type: 'oidc',
transpileData: (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:
- Python
- Node.js
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
),
)
)
const mcpAuth = new MCPAuth({
server: {
metadata: {
issuer: '<issuer-url>',
// Os campos de metadados devem estar em camelCase
authorizationEndpoint: '<authorization-endpoint-url>',
// ... outros campos de metadados
},
type: 'oidc', // ou 'oauth'
},
});