MCP Server 에서 stateless 고려하기

MCP 가 역시 핫하군요.
몇일전 EKS에 MCP Server를 올리는데 고생했던 부분을 공유합니다.

MCP Server .net sdk 는 stateless 옵션을 제공하지만 Microsoft.AspNetCore.DataProtection에 의존하여 세션을 관리합니다. POD이 2개 이상일 경우 오류가 발생하는데요. 백본으로 redis나 db가 반드시 있어야 보안 세션 key ring을 공유할 수 있도록 되어 있어서 stateless란 명칭이 올바른지 논쟁적인 부분이 존재하는 걸로 보입니다.

https를 사용하고 간단하게 올려서 혼자 쓸거라 DataProtection을 끄는 방법을 GPT5에 물어보니 다음과 같은 유효한 방법을 알려 주었습니다.

...
builder.Services.AddSingleton<IDataProtectionProvider, NoOpDataProtectionProvider>();
...

public sealed class NoOpDataProtectionProvider : IDataProtectionProvider
{
    private static readonly NoOpDataProtector _protector = new();

    public IDataProtector CreateProtector(string purpose) => _protector;

    private sealed class NoOpDataProtector : IDataProtector
    {
        public IDataProtector CreateProtector(string purpose) => this;

        // 바이트 단위 Protect/Unprotect: 있는 그대로 반환
        public byte[] Protect(byte[] plaintext) => plaintext ?? [];
        public byte[] Unprotect(byte[] protectedData) => protectedData ?? [];
    }
}

5개의 좋아요