Skip to main content
Glama
README.md
# Encore(앙코르) MCP

> 콘텐츠를 즐기고 떠오르는 생각을 자유롭게 남겨주세요. 기록은 사용자가, 기억은 AI가 도와드립니다.

PlayMCP 공모전 및 실제 Remote MCP 등록을 목표로 하는 개인 콘텐츠 경험 메모리 서버입니다.

## 제품의 핵심

- **Capture:** 정리되지 않은 감상도 원문 그대로 저장합니다.
- **Connect:** 콘텐츠 정보와 링크는 선택적으로 연결합니다.
- **Recall:** 흐릿한 단서와 자연어로 과거 Experience를 찾습니다.
- **Preserve:** AI Index는 검색에만 쓰며 사용자 원문을 다시 쓰지 않습니다.

## 구현 원칙

1. `Experience`가 핵심 Aggregate입니다.
2. `ExperienceEntry.originalText`는 AI가 요약·교정·재작성하지 않습니다.
3. 콘텐츠를 찾지 못해도 Experience 저장은 성공해야 합니다.
4. 기존 데이터를 바꾸기 전 `Find → Confirm → Act`를 따릅니다.
5. 후보는 기본 3개, 최대 5개를 반환합니다.
6. `userId`는 Tool 입력으로 받지 않고 인증 컨텍스트에서 주입합니다.
7. Remote MCP + Streamable HTTP + Stateless 방식을 사용합니다.

## 권장 스택

- Node.js 22 LTS
- TypeScript 5.x
- `@modelcontextprotocol/sdk` v1.x (PlayMCP 지원 스펙 범위 대응)
- Fastify
- PostgreSQL 16 + pgvector + pg_trgm
- Drizzle ORM / drizzle-kit
- Zod
- Vitest
- Pino

## 시작 순서

```bash
cp .env.example .env
pnpm install
pnpm db:up
pnpm db:migrate
pnpm dev
```

MCP endpoint: `POST /mcp`  
Health endpoint: `GET /health`

## Codex 시작 지시

저장소 루트의 `AGENTS.md`와 `docs/10-codex-implementation-plan.md`를 먼저 읽고 Phase 0부터 순서대로 구현합니다. 각 Phase 완료 시 테스트와 타입체크를 통과시킨 후 다음 Phase로 넘어갑니다.

## 문서 인덱스

- `docs/01-product-brief.md`
- `docs/02-interaction-rules.md`
- `docs/03-domain-model.md`
- `docs/04-mcp-tools.md`
- `docs/05-application-contracts.md`
- `docs/06-database.md`
- `docs/07-auth-security-operations.md`
- `docs/08-test-scenarios.md`
- `docs/09-playmcp-checklist.md`
- `docs/10-codex-implementation-plan.md`
- `docs/11-definition-of-done.md`

## Phase 0 Runtime

```bash
cp .env.example .env
pnpm install
pnpm db:up
pnpm dev
```

- `GET /health` returns process liveness.
- `GET /ready` checks PostgreSQL with `select 1`.
- `pnpm lint`, `pnpm typecheck`, `pnpm test`, and `pnpm build` validate the scaffold.