Skip to main content
Glama

피카르드 MCP 서버

개요

Picard MCP는 모델 컨텍스트 프로토콜(MCP) 표준을 기반으로 구축된 완전한 메모리 관리 시스템입니다. 이 시스템은 두 가지 주요 구성 요소로 구성됩니다. 안전한 메모리 저장 및 검색 서비스를 제공하는 MCP 서버와 MCP 서버와의 통합 방법을 보여주는 Django 클라이언트 애플리케이션입니다. 이 시스템을 통해 사용자는 접근 권한을 제어하면서 메모리를 저장, 검색 및 관리할 수 있으며, 저장된 메모리를 기반으로 의미론적 검색 및 AI 기반 쿼리를 수행할 수 있습니다.

MCP 준수

이 구현은 LLM 애플리케이션이 표준화된 방식으로 서버와 상호 작용할 수 있도록 하는 모델 컨텍스트 프로토콜(MCP) 표준을 따릅니다. MCP 서버는 다음을 제공합니다.

  • 리소스 : LLM에 데이터를 제공하는 읽기 전용 엔드포인트(메모리 콘텐츠)

  • 도구 : 작업(메모리 생성, 업데이트, 쿼리)을 수행하는 기능적 엔드포인트

  • 인증 : 보호된 리소스에 대한 보안 액세스를 위한 OAuth 2.0 구현

주요 구성 요소

  1. MCP 서버 : 다음을 제공하는 모델 컨텍스트 프로토콜의 FastAPI 기반 구현:

    • PKCE 지원을 통한 OAuth 2.0 인증 및 권한 부여

    • 벡터 임베딩을 사용한 메모리 저장

    • 권한 기반 메모리 액세스 제어

    • 메모리 기반 쿼리를 위한 LLM 통합

  2. Django 클라이언트 : MCP 서버와의 통합을 보여주는 웹 애플리케이션입니다.

    • 사용자 등록 및 인증

    • OAuth 2.0 클라이언트 구현

    • 메모리 생성, 검색 및 관리 UI

    • 페르소나 기반 쿼리 인터페이스

Related MCP server: Memory Cache Server

시스템 아키텍처

전체 아키텍처

Picard MCP 시스템은 다음 구성 요소로 구성된 클라이언트-서버 아키텍처를 따릅니다.

  1. MCP 서버 : 메모리 저장, 검색 및 AI 작업을 처리하는 핵심 백엔드 서비스

    • 고성능 및 비동기 지원을 위해 FastAPI(FastMCP)로 구축됨

    • 벡터 저장 및 의미 검색을 위해 pgvector 확장 기능이 있는 PostgreSQL을 사용합니다.

    • 사용자, 메모리(벡터 임베딩 포함), OAuth 클라이언트 및 토큰에 대한 데이터 모델을 구현합니다.

    • 데이터베이스 관리를 위해 Alembic 마이그레이션과 함께 SQLAlchemy ORM을 사용합니다.

    • 안전한 인증 및 권한 부여를 위해 OAuth 2.0을 구현합니다.

    • 메모리 임베딩을 위한 OpenAI API와 통합(text-embedding-3-small)

    • 사용 가능한 경우 LLM 작업에 LangChain을 사용합니다.

    • 상태 저장 및 상태 비저장 운영 모드를 모두 제공합니다.

    • 더 나은 확장성을 위해 스트리밍 가능한 HTTP 전송을 지원합니다.

  2. Django 클라이언트 : MCP 서버와의 통합을 보여주는 웹 애플리케이션

    • 사용자 등록, 인증 및 프로필 관리를 제공합니다.

    • MCP 서버와의 보안 통신을 위해 OAuth 2.0 클라이언트를 구현합니다.

    • 메모리 관리 및 쿼리를 위한 사용자 친화적인 인터페이스를 제공합니다.

    • MCP 서버와 별도로 자체 PostgreSQL 데이터베이스를 사용합니다.

  3. Docker Infrastructure : 간편한 설정 및 확장을 위한 컨테이너화된 배포

    • MCP 서버(포트 8001), Django 클라이언트(포트 8000) 및 PostgreSQL 데이터베이스에 대한 별도의 컨테이너

    • 안전한 컨테이너 간 통신을 위한 네트워킹 구성

    • 영구 데이터 저장을 위한 볼륨 마운팅

    • 로컬 Docker 배포와 Render 클라우드 배포 모두와 호환 가능

인증 접근 방식

이 시스템은 두 가지 주요 인증 방법을 제공합니다.

1. 사용자 컨텍스트 토큰 흐름을 통한 직접 연결(권장)

이 간소화된 접근 방식을 사용하면 사용자는 Django 클라이언트에서 한 번만 인증하면 되므로 별도의 MCP 서버 인증이 필요하지 않습니다.

  1. 고객 등록 :

    • Django 클라이언트는 /api/admin/clients/register 엔드포인트를 사용하여 MCP 서버에 등록합니다.

    • 등록에는 관리자 인증이 필요하며 클라이언트 이름, 리디렉션 URI 및 요청 범위가 포함됩니다.

    • MCP 서버는 UUID 기반 클라이언트 ID와 암호학적으로 안전한 클라이언트 비밀번호를 발급합니다.

    • 클라이언트 자격 증명은 안전하게 저장되어야 하며 클라이언트 측 코드에 노출되어서는 안 됩니다.

  2. 사용자 인증 흐름 :

    • 사용자는 Django 클라이언트로만 인증합니다.

    • 사용자가 MCP 서버에 연결을 시작하면 Django 클라이언트는 MCP의 /api/user-tokens/user-token 엔드포인트에 서버 측 요청을 합니다.

    • 요청에는 다음이 포함됩니다.

      • 클라이언트 자격 증명(client_id 및 client_secret)

      • 사용자 정보(사용자 이름 및 이메일)

      • 존재하지 않는 경우 사용자를 생성하는 옵션

    • MCP 서버는 클라이언트 자격 증명을 확인하고 해당 사용자를 찾거나 생성합니다.

    • MCP 서버는 사용자에게 액세스 토큰과 새로 고침 토큰을 발급합니다.

    • Django 클라이언트는 이러한 토큰을 안전하게 저장하고 API 요청에 사용합니다.

  3. API 접근 :

    • 클라이언트는 모든 API 요청에 대해 Authorization 헤더( Authorization: Bearer {token} )에 액세스 토큰을 포함합니다.

    • MCP 서버는 토큰 서명, 만료 및 대상자 클레임을 검증합니다.

    • MCP 서버는 각 엔드포인트에 대해 범위 기반 권한을 적용합니다.

    • 액세스 토큰이 만료되면 클라이언트는 새로 고침 토큰을 사용하여 새 토큰을 얻습니다.

  4. 보안 기능 :

    • 이 방법은 기밀 클라이언트만 사용할 수 있으므로 서버 간 보안이 제공됩니다.

    • 각 토큰 요청에 대해 클라이언트 자격 증명이 검증됩니다.

    • 재생 공격을 방지하기 위해 토큰은 사용 후 블랙리스트에 등록됩니다.

    • 새로 고침 토큰은 회전을 사용합니다. 사용할 때마다 새 새로 고침 토큰이 생성되고 이전 토큰은 무효화됩니다.

2. PKCE를 사용한 표준 OAuth 2.0 인증 코드 흐름(레거시)

이 시스템은 또한 RFC 6749 및 RFC 7636 표준을 준수하여 보안 강화를 위해 PKCE를 포함한 표준 OAuth 2.0 인증 코드 흐름을 지원합니다. 이 접근 방식을 사용하려면 사용자가 클라이언트와 MCP 서버 모두에서 인증해야 합니다.

  1. 승인 흐름 :

    • 사용자는 Django 클라이언트를 통해 로그인을 시작합니다.

    • 클라이언트는 CSRF 보호를 위해 암호화된 난수 state 매개변수를 생성합니다.

    • 클라이언트는 임의의 PKCE code_verifier 생성하고 SHA-256을 사용하여 code_challenge 도출합니다.

    • 클라이언트는 다음을 사용하여 MCP 서버의 /authorize 엔드포인트로 리디렉션합니다.

      • response_type=code

      • client_id (UUID 형식)

      • redirect_uri

      • scope (공백으로 구분된 목록, 예: memories:read memories:write )

      • state (CSRF 보호용)

      • PKCE 매개변수( code_challengecode_challenge_method=S256 )

    • MCP 서버는 사용자를 인증합니다(아직 인증되지 않은 경우)

    • MCP 서버는 모든 매개변수를 검증하고 단기 승인 코드와 함께 클라이언트로 다시 리디렉션합니다.

  2. 토큰 교환 :

    • 클라이언트는 반환된 state 매개변수가 권한 부여 요청에서 전송된 매개변수와 일치하는지 확인합니다.

    • 클라이언트는 /token 엔드포인트를 통해 액세스 및 새로 고침 토큰에 대한 승인 코드를 교환합니다.

    • MCP 서버는 JWT 액세스 토큰, 새로 고침 토큰, 만료 시간 및 부여된 범위를 발급합니다.

  3. API 접근 :

    • Direct Connect 접근 방식과 동일

데이터베이스 모델

MCP 서버는 다음과 같은 주요 모델을 갖춘 SQLAlchemy ORM을 사용합니다.

  1. 사용자 모델 :

    • 이메일, 사용자 이름 및 해시된 비밀번호와 함께 사용자 정보를 저장합니다.

    • 계정 상태에 대한 부울 플래그(is_active, is_superuser)가 포함됩니다.

    • 일대다 관계를 통해 기억과 연결됨

  2. 벡터 저장을 통한 메모리 모델 :

    • pgvector 확장을 사용하여 벡터 임베딩(1536차원)을 저장하고 쿼리합니다.

    • 선택적 암호화를 통해 텍스트 콘텐츠를 지원합니다.

    • 권한 제어(비공개/공개) 포함

    • 시간 제한이 있는 메모리의 만료 날짜를 지원합니다.

    • 외래 키 관계를 통해 사용자와 연결됨

  3. OAuth 모델 :

    • OAuthClient : client_id, client_secret, 리디렉션 URI, 권한 범위를 포함한 클라이언트 애플리케이션 세부 정보를 저장합니다.

    • AuthorizationCode : PKCE 지원을 통해 임시 승인 코드를 관리합니다.

    • 토큰 : 만료 추적 기능이 있는 액세스 및 새로 고침 토큰을 저장합니다.

이 시스템은 Alembic을 사용하여 데이터베이스 마이그레이션을 수행하고 스키마 버전 관리와 손쉬운 업데이트를 보장합니다.

메모리 관리 시스템

Picard MCP의 핵심 기능은 다음 구성 요소를 사용한 메모리 관리를 중심으로 이루어집니다.

  1. 메모리 저장 :

    • 메모리는 연관된 메타데이터와 함께 텍스트로 저장됩니다.

    • 벡터 임베딩(텍스트 임베딩 3-소형 모델 사용)을 통해 의미 검색 기능이 활성화됩니다.

    • 권한은 각 메모리에 누가 액세스할 수 있는지 제어합니다.

    • 타임스탬프는 생성, 수정 및 만료를 추적합니다.

    • 메모리 텍스트는 저장 시 암호화되지만 메타데이터는 검색 가능합니다.

    • 모든 식별자는 확장성을 위해 순차적 정수 대신 UUID 형식을 사용합니다.

    • 각 메모리는 OpenAI의 임베딩 모델을 사용하여 벡터 임베딩으로 변환됩니다.

    • 임베딩을 사용하면 의미 검색 및 유사성 일치가 가능합니다.

    • pgvector 확장 기능을 갖춘 PostgreSQL은 효율적인 벡터 저장 및 검색을 제공합니다.

  2. 권한 관리 :

    • 각 메모리에는 권한 수준(비공개 또는 공개)이 있습니다.

    • 개인 기억은 소유자만이 접근할 수 있습니다.

    • 공개 메모리는 다른 사용자가 페르소나 쿼리를 위해 액세스할 수 있습니다.

    • 시스템은 향후 권한 유형(예: 통계/집계 사용)에 대해 확장 가능하도록 설계되었습니다.

    • 공유 메모리는 특정 사용자 또는 그룹이 액세스할 수 있습니다.

    • 메모리 소유자는 언제든지 권한을 수정할 수 있습니다.

  3. 기억 회복 :

    • 사용자는 필터링 및 정렬 옵션을 사용하여 자신의 메모리를 검색할 수 있습니다.

    • 의미 검색을 통해 키워드뿐만 아니라 의미에 기반한 기억을 찾을 수 있습니다.

    • 벡터 유사성(코사인)을 통해 데이터베이스 전체에서 관련 메모리를 찾을 수 있습니다.

    • 쿼리 관련성에 따라 가장 유사한 상위 N개의 메모리가 반환됩니다.

    • 권한 검사를 통해 사용자는 승인된 메모리에만 액세스할 수 있습니다.

  4. LLM 통합 :

    • 메모리는 LLM 쿼리의 컨텍스트로 사용될 수 있습니다.

    • 사용자는 공개 기억을 기반으로 페르소나를 생성할 수 있습니다.

    • 다른 사용자는 이러한 페르소나를 쿼리하여 기억을 통해 응답을 얻을 수 있습니다.

    • 시스템은 컨텍스트 관리 및 신속한 엔지니어링을 자동으로 처리합니다.

주요 특징

MCP 서버 기능

  • OAuth 2.0 인증 :

    • 보안 강화를 위한 PKCE를 사용한 승인 코드 흐름

    • 범위 기반 권한 시스템( memories:read , memories:write , memories:admin )

    • 새로고침 토큰 지원을 통한 토큰 관리

    • 클라이언트 등록 및 관리

  • 메모리 관리 :

    • 추억을 만들고, 읽고, 업데이트하고, 삭제하세요

    • 의미 검색을 위한 벡터 임베딩

    • 권한 기반 액세스 제어

    • 효율적인 메모리 관리를 위한 일괄 작업

  • 사용자 관리 :

    • 사용자 등록 및 인증

    • 프로필 관리 및 설정

    • 활동 추적 및 분석

    • 시스템 관리를 위한 관리자 제어

  • AI 통합 :

    • 임베딩 및 LLM 쿼리를 위한 OpenAI API 통합

    • 사용자 기억 기반 페르소나 생성

    • 컨텍스트 인식 쿼리 처리

    • 사용자 정의 가능한 AI 매개변수 및 설정

Django 클라이언트 기능

  • 사용자 인터페이스 :

    • 데스크톱과 모바일에 적합한 깔끔하고 반응성 있는 디자인

    • 직관적인 메모리 관리 인터페이스

    • 고급 검색 및 필터링 옵션

    • 페르소나 생성 및 쿼리 인터페이스

  • OAuth 클라이언트 구현 :

    • 안전한 토큰 저장 및 관리

    • 자동 토큰 새로 고침

    • 범위 기반 기능 가용성

    • 오류 처리 및 복구

  • 메모리 도구 :

    • 리치 텍스트 지원을 통한 메모리 생성

    • 일괄 가져오기 및 내보내기

    • 권한 관리 인터페이스

    • 태그 지정 및 분류

MCP 인터페이스

MCP 리소스

  • 메모리 리소스 : memories://{memory_id}

    • 권한 검사를 통해 특정 메모리의 내용을 반환합니다.

    • 매개변수: memory_id(UUID)

    • 응답: 메타데이터가 포함된 메모리 콘텐츠

  • 사용자 메모리 리소스 : users://{user_id}/memories

    • 권한 검사를 통해 특정 사용자에 대한 메모리 목록을 반환합니다.

    • 매개변수: user_id(UUID), 선택적 필터

    • 응답: 기억 요약 목록

MCP 도구

  • 메모리 도구 제출 : 새로운 메모리를 만듭니다

    • 매개변수: 텍스트(문자열), 권한(문자열)

    • 반환: UUID로 생성된 메모리 세부 정보

  • 메모리 업데이트 도구 : 기존 메모리를 업데이트합니다.

    • 매개변수: memory_id(UUID), text(문자열)

    • 반환: 업데이트된 메모리 세부 정보

  • 메모리 삭제 도구 : 메모리를 삭제합니다

    • 매개변수: memory_id(UUID)

    • 반환: 성공 확인

  • 쿼리 메모리 도구 : 메모리에 대한 의미 검색을 수행합니다.

    • 매개변수: 쿼리(문자열), 제한(정수)

    • 반환: 관련 메모리 목록

  • 사용자 쿼리 : 메모리를 기반으로 사용자의 페르소나를 쿼리합니다.

    • 매개변수: user_id(UUID), query(문자열)

    • 반환: 사용자의 기억에 기반한 응답

API 엔드포인트

OAuth 엔드포인트

  • 클라이언트 등록 : /register

    • 방법: POST

    • 설명: 새로운 OAuth 클라이언트 등록

    • 요청: 클라이언트 세부 정보(ID, 비밀번호, 리디렉션 URI, 범위)

    • 응답: 클라이언트 자격 증명 및 등록 정보

  • 권한 부여 : /authorize

    • 방법: GET

    • 설명: OAuth 권한 부여 흐름 시작

    • 매개변수: response_type, client_id, redirect_uri, scope, state, code_challenge, code_challenge_method

    • 응답: 승인 코드를 사용하여 클라이언트로 리디렉션합니다.

  • 토큰 교환 : /token

    • 방법: POST

    • 설명: 토큰에 대한 승인 코드 교환

    • 요청: grant_type, code, redirect_uri, client_id, client_secret, code_verifier

    • 응답: 액세스 토큰, 새로 고침 토큰, 만료 및 범위 정보

메모리 엔드포인트

  • 메모리 가져오기 : /api/tools (도구: get_memories )

    • 방법: POST

    • 설명: 선택적 필터링을 사용하여 메모리 검색

    • 인증: 베어러 토큰

    • 요청: 선택적 필터 매개변수(user_id, 권한, 만료 상태)

    • 응답: 사용자가 접근 가능한 메모리 목록

    • 요청 예시:

      지엑스피1

  • 메모리 제출 : /api/tools (도구: submit_memory )

    • 방법: POST

    • 설명: 새로운 추억을 만들어 보세요

    • 인증: 베어러 토큰

    • 요청: 메모리 텍스트, 권한 수준 및 만료 날짜(ISO 8601 형식, 예: "2025-12-31T23:59:59Z")

    • 응답: UUID 식별자를 포함한 메모리 세부 정보가 생성되었습니다.

    • 요청 예시:

      { "tool": "submit_memory", "data": { "text": "This is my memory content", "permission": "private" } }
  • 기억 검색 : /api/tools (도구: retrieve_memories )

    • 방법: POST

    • 설명: 인증된 사용자에 대한 모든 메모리를 가져옵니다.

    • 인증: 베어러 토큰

    • 응답: UUID 식별자가 있는 메모리 객체 목록

    • 요청 예시:

      { "tool": "retrieve_memories", "data": {} }
  • 메모리 업데이트 : /api/tools (도구: update_memory )

    • 방법: POST

    • 설명: 기존 메모리 업데이트

    • 인증: 베어러 토큰

    • 요청: 메모리 ID, 업데이트된 콘텐츠 및 선택적으로 업데이트된 만료 날짜(ISO 8601 형식)

    • 응답: 메모리 세부 정보가 업데이트되었습니다.

    • 요청 예시:

      { "tool": "update_memory", "data": { "memory_id": "550e8400-e29b-41d4-a716-446655440000", "text": "Updated memory content", "expiration_date": "2026-01-01T00:00:00Z" } }
  • 권한 수정 : /api/tools (도구: modify_permissions )

    • 방법: POST

    • 설명: 메모리 권한 수준 업데이트

    • 인증: 베어러 토큰

    • 요청: 메모리 UUID 및 새로운 권한 수준

    • 응답: 메모리 세부 정보가 업데이트되었습니다.

    • 요청 예시:

      { "tool": "modify_permissions", "data": { "memory_id": "550e8400-e29b-41d4-a716-446655440000", "permission": "public" } }
  • 쿼리 사용자 : /api/tools (도구: query_user )

    • 방법: POST

    • 설명: 메모리를 기반으로 사용자의 페르소나를 쿼리합니다(다른 사용자의 경우 공개, 자신의 경우 공개+비공개)

    • 인증: 베어러 토큰

    • 요청: 사용자 UUID 및 쿼리 프롬프트

    • 응답: 만료되지 않은 메모리를 포함하는 JSON(모든 유효한 메모리 또는 쿼리와 가장 유사한 상위 N개 메모리)

    • 응답: 사용자의 기억을 기반으로 AI가 생성하는 응답

    • 요청 예시:

      { "tool": "query_user", "data": { "user_id": "550e8400-e29b-41d4-a716-446655440000", "prompt": "What are your thoughts on artificial intelligence?" } }

설정 및 배포

필수 조건

  • Docker와 Docker Compose

  • 파이썬 3.10+

  • OpenAI API 키

전체 설정 가이드

  1. 저장소를 복제합니다.

    git clone https://github.com/yourusername/picard_mcp.git cd picard_mcp
  2. 두 구성 요소에 대한 환경 파일을 만듭니다.

    # For MCP server cp mcp_server/.env.example mcp_server/.env # For Django client cp django_client/.env.example django_client/.env
  3. 구성을 설정하려면 환경 파일을 편집하세요.

    • mcp_server/.env 에서: 데이터베이스 자격 증명, OpenAI API 키 및 관리자 자격 증명을 설정합니다.

    • django_client/.env 에서: 데이터베이스 자격 증명과 OAuth 설정을 설정합니다.

  4. Docker Compose를 사용하여 서비스를 시작합니다.

    docker-compose up -d

    그러면 다음 서비스가 시작됩니다.

    • db-mcp : MCP 서버용 PostgreSQL 데이터베이스

    • db-django : Django 클라이언트용 PostgreSQL 데이터베이스

    • mcp_server : http://localhost:8001 에서 실행되는 MCP 서버

    • django_client : http://localhost:8000 에서 실행되는 Django 클라이언트

  5. MCP 서버에 대한 관리자 사용자를 만듭니다.

    docker-compose exec mcp_server python scripts/create_admin_user.py

    이렇게 하면 환경 변수에 지정된 자격 증명을 사용하는 관리자 사용자가 생성됩니다.

  6. Django 클라이언트를 MCP 서버에 등록합니다.

    docker-compose exec django_client python register_oauth_client.py

    이렇게 하면 Django 클라이언트가 MCP 서버에 등록되고 Django 클라이언트의 .env 파일이 클라이언트 자격 증명으로 업데이트됩니다.

  7. 애플리케이션에 접속하세요:

  8. Django 클라이언트에서 사용자 계정을 만들고 애플리케이션 사용을 시작하세요.

초기 테스트

설정이 올바르게 작동하는지 확인하려면 다음 테스트를 실행하세요.

  1. MCP 서버 테스트 :

    docker-compose exec mcp_server python -m pytest

    이렇게 하면 OAuth 엔드포인트, 관리 기능, 메모리 관리를 포함하여 MCP 서버에 대한 모든 단위 테스트가 실행됩니다.

  2. Django 클라이언트 테스트 :

    docker-compose exec django_client python manage.py test

    이는 Django 클라이언트와 MCP 서버의 통합을 테스트합니다.

  3. 수동 테스트 :

    • http://localhost:8000/register 에서 Django 클라이언트에 사용자 계정을 만듭니다.

    • OAuth를 통해 MCP 서버에 로그인하고 연결합니다.

    • 추억을 만들고, 검색하고, 관리하세요

    • 의미 검색 기능을 테스트하세요

보안 고려 사항

데이터 보호

  • 메모리 텍스트 콘텐츠는 PKCS7 패딩이 있는 CBC 모드에서 AES-128을 사용하여 Python의 Fernet 대칭 암호화를 사용하여 암호화되며 메타데이터는 검색 가능한 상태로 유지됩니다.

  • 개인 식별 정보(PII)는 텍스트 필드 암호화를 통해 보호됩니다.

  • 액세스 토큰은 노출을 제한하기 위해 1시간의 만료 시간을 갖습니다.

  • 새로 고침 토큰은 수명이 길지만 회전을 사용합니다. 사용할 때마다 새 새로 고침 토큰이 생성되고 이전 토큰은 무효화됩니다.

  • OAuth 토큰은 Django 클라이언트의 PostgreSQL 데이터베이스에 안전하게 저장됩니다.

UUID 사용

시스템의 모든 식별자는 여러 가지 이유로 순차적인 정수 대신 UUID v4 형식을 사용합니다.

  1. 보안 : UUID는 시스템 정보나 레코드 수를 노출하지 않습니다.

  2. 확장성 : 데이터베이스 조정 없이 UUID를 생성할 수 있으므로 분산 시스템이 가능합니다.

  3. 추측 불가능 : UUID는 사실상 추측이 불가능하므로 열거형 공격이 방지됩니다.

  4. 일관성 : 시스템 전체에서 UUID를 사용하면 다른 서비스와의 통합이 간소화됩니다.

API의 모든 ID(user_id, memory_id, client_id 등)는 UUID 형식이어야 합니다.

OAuth 모범 사례

  • 모든 OAuth 통신은 프로덕션 환경에서 HTTPS를 사용해야 합니다.

  • 승인 코드는 한 번만 사용 가능하며 유효 기간이 짧습니다(최대 5분).

  • PKCE는 심층 방어를 위해 기밀 클라이언트를 포함한 모든 클라이언트에게 필요합니다.

  • 새로 고침 토큰은 장기적으로 유효하지만 사용자 또는 관리자가 취소할 수 있습니다.

  • 시스템은 취소된 토큰에 대한 토큰 블랙리스트를 유지합니다.

선적 서류 비치

API 문서

MCP 서버에는 모든 엔드포인트에 대한 Swagger/OpenAPI 문서가 포함되어 있습니다.

  • 서버가 실행 중일 때 /docs 에서 Swagger UI에 액세스합니다.

  • OpenAPI 사양은 /openapi.json 에서 확인할 수 있습니다.

  • 모든 API 엔드포인트는 요청/응답 스키마와 예제를 통해 완전히 문서화됩니다.

추가 문서 파일

  • TESTING.md : 애플리케이션 테스트를 위한 포괄적인 가이드

    • 구현된 모든 테스트와 그 목적을 설명합니다.

    • 로컬 및 CI/CD에서 테스트를 실행하기 위한 지침

    • 문서 테스트 범위를 확인하고 추가 테스트가 필요한 영역을 식별합니다.

  • DEBUGGING.md : 문제와 해결 방법을 추적합니다.

    • 아직 수정되지 않은 알려진 버그를 기록합니다.

    • 이전에 해결된 버그와 그 해결책을 문서화합니다.

    • 일반적인 문제에 대한 문제 해결 지침을 제공합니다.

  • PLANNING.md : 사이트 구현에 필요한 작업의 세부 내용을 추적합니다.

    • 사이트를 구현하는 데 필요한 작업 및 하위 작업을 나열합니다.

    • 체크박스로 작업이 완료되었는지 문서화합니다.

전개

이 프로젝트에는 로컬 개발을 위한 docker-compose.yml 과 Render에 배포하기 위한 render.yaml 청사진이 포함되어 있습니다. 동일한 코드베이스가 Docker 컨테이너에서 로컬로 실행되며 Render 클라우드 서비스에 배포될 때도 작동합니다.

MCP 서버 배포

  1. Docker 배포 (프로덕션에 권장):

    docker-compose up -d

    Docker Compose 구성에는 다음이 포함됩니다.

    • 컨테이너 간 통신을 위한 네트워크 구성

    • 영구 데이터 저장을 위한 볼륨 마운트

    • .env 파일에서 환경 변수 구성

    • 포트 매핑(Django 클라이언트의 경우 8000, MCP 서버의 경우 8001)

    • 서비스 종속성에 대한 상태 점검

  2. Render Cloud 배포 : 포함된 render.yaml 블루프린트를 사용하여 Render에 배포합니다.

특허

MIT

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hburgoyne/picard_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server