Skip to main content
Glama
bsahane

Memory MCP Server

by bsahane

Memory MCP Server

Python 3.12+ Tests License: Apache 2.0

AI 에이전트에 영구 메모리를 제공하는 Model Context Protocol (MCP) 서버입니다. 메모리는 로컬 SQLite 데이터베이스(자동 생성, 구성 불필요)에 저장되며, 도구 우선 아키텍처를 따르는 40개의 도구를 통해 노출됩니다. template-mcp-server 프로덕션 스캐폴드(FastMCP + FastAPI, 구조화된 로깅, 컨테이너, OpenShift 매니페스트, CI)를 기반으로 구축되었습니다.

기능

  • 4개 도메인에 걸친 40개 MCP 도구: 메모리, 작업, 시간(리마인더/알림), 대시보드

  • 7가지 메모리 도구: store, get, search, list, update, delete, projects

  • 7가지 할 일 도구: create/search/list/get/update/complete/delete, 우선순위 및 기한 지원

  • 8가지 칸반 도구: 구성 가능한 열이 있는 보드; card add/move/update/delete

  • 7가지 트래커 도구: 항목이 진행 지표로 집계되는 상태 트래커

  • SQLite 영속성 — aiosqlite 기반, 단일 파일, 튜닝된 WAL 기준, 자동 생성

  • 전문(full-text) 키워드 검색 — FTS5 인덱스에 대한 단어 단위, porter-stemmed 매칭, 관련성 순위(가장 일치하는 항목 우선)

  • 태그 및 메타데이터 — 메모리와 할 일에 적용

  • FastMCP + FastAPI — 다중 전송 지원(HTTP, SSE, streamable-HTTP)

  • Pydantic 구성 — 환경 변수 기반

  • 구조화된 JSON 로깅 — structlog 사용

  • OAuth 통합 (기본적으로 비활성화; docs/authentication.md 참조)

  • 컨테이너 지원 (Red Hat UBI 기본 이미지) 및 OpenShift 매니페스트 포함

검색 및 저장 동작

검색(memory_search, todo_search)은 porter-stemmed 전문(full-text) 인덱스에서 단어 단위 토큰을 매칭합니다. 부분 단어는 절대 일치하지 않으며(check로 검색해도 checklist는 일치하지 않음), 구두점과 연산자는 문자 그대로 처리되며, 결과는 bm25 관련성 순으로 정렬됩니다 — 가장 일치하는 항목이 먼저, 동률이면 최신 항목이 먼저입니다. unicode61 토큰화는 CJK 문장 전체를 단일 토큰으로 처리하므로, 단어 단위 매칭은 공백으로 구분된 스크립트를 가정합니다.

데이터베이스는 WAL 모드에서 synchronous=NORMAL로 실행됩니다. 최근 커밋된 트랜잭션은 OS 충돌이나 정전 시 손실될 수 있습니다(메모/작업용으로 허용되는 절충안 — 기록 시스템으로는 적합하지 않음). 정상 상태의 WAL 크기는 wal_autocheckpoint(약 1000페이지 ≈ 4MiB)로 제한됩니다. journal_size_limit(8MiB)은 체크포인트가 WAL 파일을 해제한 후에만 SQLite가 WAL 파일을 다시 잘라낼 수 있게 합니다. 유지보수(PRAGMA optimize + wal_checkpoint(TRUNCATE) 패스)는 리마인더 폴링 루프에서 10틱마다 인라인으로 실행되며 틱을 잠시 지연시킬 수 있습니다. 이는 후크별 타임아웃과 데이터베이스 busy 타임아웃에 의해 제한됩니다.

빠른 시작

git clone https://github.com/redhat-data-and-ai/memory-mcp-server
cd memory-mcp-server
make install        # creates venv, installs deps + pre-commit hooks
make local          # starts server on localhost:5001

다른 터미널에서 확인:

curl http://localhost:5001/health

수동 설정(Make 없이):

# Create venv and install
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"
pre-commit install

# Configure and run
cp .env.example .env
memory-mcp-server

# Verify
curl http://localhost:5001/health

도구

메모리

도구

용도

memory_store(content, tags?, metadata?)

새 메모리를 저장하고 해당 id를 반환합니다

memory_get(id)

id로 메모리 하나를 가져옵니다

memory_search(query, limit?, project?, output_format?)

콘텐츠에 대한 단어 단위 키워드 검색, 관련성 순으로 정렬

memory_list(limit?, offset?, tag?)

최신순으로 메모리 목록을 탐색합니다

memory_update(id, content?/tags?/metadata?)

메모리를 부분 업데이트합니다

memory_delete(id)

id로 메모리를 삭제합니다

할 일

도구

용도

todo_create(title, description?, priority?, status?, due_date?, tags?)

구조화된 작업을 추가합니다

todo_search(query, limit?, offset?)

제목/설명에 대한 단어 단위 키워드 검색, 관련성 순으로 정렬

todo_list(status?, tag?, limit?, offset?)

필터를 적용해 할 일 목록을 탐색합니다

todo_get(id) / todo_update(id, ...) / todo_complete(id) / todo_delete(id)

개별 할 일을 관리합니다

칸반

도구

용도

board_create(name, description?, columns?)

새 보드 생성; 기본값은 backlog/todo/in_progress/done

board_list() / board_delete(board_id)

보드 목록을 나열하거나 삭제합니다

board_view(board_id)

열별로 그룹화된 전체 보드 상태

card_add(board_id, title, ...) / card_move(card_id, column, position?)

작업을 배치하고 순서를 변경합니다

card_update(card_id, ...) / card_delete(card_id)

카드를 편집하거나 삭제합니다

리마인더 및 알림

도구

용도

reminder_create(title, due_at, notes?, repeat?)

향후 알림을 예약합니다 (없음/매시간/매일/매주 반복)

reminder_get(id) / reminder_update(id, ...)

일정을 확인하거나 편집합니다

reminder_list(status?, limit?, offset?)

마감이 임박한 순서대로

reminder_cancel(id) / reminder_snooze(id, minutes?) / reminder_delete(id)

일정을 관리합니다

alert_list(acknowledged?, limit?) / alert_ack(id) / alert_ack_all()

발생한 알림을 검토하고 지웁니다

백그라운드 스케줄러가 만료된 리마인더를 서버 측에서 알림으로 변환합니다. 세션 시작 시 alert_list(acknowledged=false)로 조회하세요.

대시보드

도구

용도

overview()

도메인 전반의 개수, 미확인 알림, 다음 예정 항목

트래커

도구

용도

tracker_create(name, description?) / tracker_list() / tracker_delete(id)

트래커를 관리합니다

entry_add(tracker_id, name, status?) / entry_update_status(entry_id, status) / entry_remove(entry_id)

항목을 추적합니다 (not_started/in_progress/blocked/done)

tracker_status(tracker_id)

진행률: 전체/완료/백분율 및 상태별 개수

모든 도구는 {status: "success" | "error", ...} 사전을 반환하며 도구 경계를 넘어 예외를 발생시키지 않습니다.

구성

변수

기본값

설명

MEMORY_DB_PATH

./data/memory.db

SQLite 데이터베이스 파일 (자동 생성, 상위 디렉터리 포함)

REMINDER_POLL_SECONDS

30

만료된 리마인더를 발생시키는 백그라운드 스케줄러 간격

MCP_HOST

localhost

서버 바인드 주소

MCP_PORT

5001

서버 포트 (1024-65535)

MCP_TRANSPORT_PROTOCOL

http

전송 프로토콜 (http, sse, streamable-http)

MCP_SSL_KEYFILE / MCP_SSL_CERTFILE

None

HTTPS용 SSL 키/인증서

ENABLE_AUTH

False*

OAuth 인증 (docs/authentication.md 참조)

PYTHON_LOG_LEVEL

INFO

로깅 수준

* ENABLE_AUTH.env.example에서 기본값이 False입니다. 항상 .env.example.env로 복사하여 인증을 비활성화한 상태로 시작하세요.

MCP 클라이언트 연결

MCP 클라이언트를 서버 엔드포인트로 지정하세요:

{
  "mcpServers": {
    "memory": {
      "url": "http://localhost:5001/mcp"
    }
  }
}

메모리를 저장하고 검색하는 작동 클라이언트는 examples/fastmcp_client.py를 참조하세요.

개발

make lint     # ruff + mypy
make test     # pytest with coverage
make pre-commit  # run all pre-commit hooks

문서

가이드

설명

아키텍처

시스템 다이어그램, 코드 구조, 핵심 구성 요소

개발

설정, 로컬 실행, 테스트, 코드 품질

배포

Podman, OpenShift, 컨테이너 구성

인증

OAuth 설정, 인증 모드, 문제 해결

라이선스

Apache 2.0 — redhat-data-and-ai/template-mcp-server에서 파생되었습니다.

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Persistent memory for AI agents. Search, store, and recall across sessions.

  • Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.

  • Universal memory for AI agents and tools. Save, organize and search context anywhere.

View all MCP Connectors

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/bsahane/memory-mcp-server'

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