Skip to main content
Glama

TestGraph

여러 AI 어시스턴트가 공유하고 검증할 수 있는 기억을 위한 실험적 AI 네이티브 경험 그래프입니다.

상태: 동작 중인 사전 릴리스(pre-release) 연구 시스템입니다. 아키텍처와 MCP 워크플로는 여러 AI 클라이언트로 테스트되었지만, 프로젝트는 아직 안정적인 프로덕션 서비스 또는 API로 제공되지는 않습니다.

TestGraph는 인간 리뷰와 AI가 도출한 구조를 영구적 그래프 지식으로 저장하면서, 증거, 출처(provenance), 서버 검증 가능한 실행 내역을 모델의 주장과 분리하여 유지합니다. 서로 다른 AI 시스템이 완전한 도메인 스키마를 사전에 요구하지 않고도 동일한 지식에 기여하고 재사용할 수 있도록 설계되었습니다.

프로젝트 목표

  1. 스키마 창발: 여러 AI에 익숙하지 않은 경험을 부여하고, 카테고리를 미리 설계하지 않고도 유용한 구조를 얻는다.

  2. 통제된 불일치: 상충하는 분류는 왔다 갔다 하는 대신 증거, 신뢰도, 서버 규칙을 통해 수렴한다.

  3. 정직한 실행: 서버가 검증할 수 없다면 모델은 발견(discovery), 강화(enrichment), 조정(reconciliation)이 발생했다고 주장할 수 없다.

  4. 호출 AI 역량: TestGraph는 의도적으로 호출하는 AI를 자체 의미(semantic) 및 발견(discovery) 엔진으로 사용합니다. AI는 익숙하지 않은 주제에 자신의 추론, 검색, 도구 역량을 적용하고, 유용한 구조와 관계를 도출하며, TestGraph가 도메인별 형식을 미리 정하기를 기다리지 않고 증거를 조정해야 합니다. TestGraph는 안정적인 그래프 프리미티브, 영속성, 서버 측 검증을 제공하고, 호출 AI가 개방형 지능을 제공합니다.

이 목표는 단순히 개별 AI 클라이언트를 위한 지침이 아니라, TestGraph 아키텍처와 테스트의 인수 기준입니다.

Related MCP server: Graph-Mem MCP

표준 어휘 모델

리뷰는 DNS 스타일의 개념 경로가 아닌 안정적인 subject_type_id 값에 저장됩니다. 유연한 입력은 정식(canonical) 주제 유형과 전역적으로 고유한 별칭을 통해 해석되며, 대소문자, 문장 부호, 소유격, 일반적인 복수형은 기계적으로 정규화됩니다. 알 수 없는 유형은 사전 조회 후 임시 항목으로 생성될 수 있습니다.

분류는 별도의 메타데이터입니다. 예를 들어 ferry belongs_to transportation은 광범위한 교통수단 검색을 개선하지만, 페리 리뷰가 저장되는 위치는 절대 변경하지 않습니다. review는 어휘 노드가 아니라 레코드 유형입니다. 재사용 가능한 구조화된 필드는 자체적으로 안정적인 ID와 별칭을 가지며 여러 주제 유형에 연결될 수 있습니다.

마이그레이션 0009_flat_standard_vocabulary는 사용자, OAuth state, 역량 자격 증명, 기타 인증 데이터를 보존하면서 기존 v2 개념/리뷰 데이터를 의도적으로 폐기합니다.

로컬 설정

  1. Python 3.11+ 가상 환경을 생성합니다.

  2. 의존성을 설치합니다.

pip install -r requirements.txt
  1. .env.example.env로 복사하고 모든 자리 표시자 비밀값을 고유한 값으로 교체합니다.

  2. 마이그레이션을 실행합니다.

alembic upgrade head
  1. 스키마와 데모 ID를 시드합니다.

python -m scripts.seed
  1. 애플리케이션을 시작합니다.

python run.py

http://127.0.0.1:8000http://127.0.0.1:8000/docs를 엽니다.

로컬 개발 환경 외부에서는 예제 또는 개발용 자격 증명을 재사용하지 마세요. 비밀값, API 키, OAuth 연결 코드, 소유자 식별자는 절대 커밋해서는 안 됩니다.

MCP와 OAuth

TestGraph에는 도구 전용 MCP 앱이 포함됩니다. 현재 다중 모델 통합은 /mcp-v2를 통해 테스트되었습니다. 프로덕션 연결은 OAuth 2.1 Authorization Code + PKCE를 사용합니다. 연결된 AI는 단기 유효 액세스 토큰을 받습니다. 연결 코드, API 키 또는 TestGraph 소유자 ID는 받지 않습니다.

MCP 인터페이스에는 리뷰 검색/조회/저장 작업과 다중 모델 실험에 사용되는 최신 그래프/정리(reconciliation) 기능이 포함됩니다. 이 실험적 인터페이스는 아직 진화 중이므로, 배포된 MCP 스키마를 권위 있는 기준으로 취급하세요.

배포 전에 긴 난수 OAUTH_CONNECTION_CODE를 구성하고, 적절한 OAUTH_OWNER_USER_ID를 설정하고, 프로덕션 비밀값이 배포 환경에만 존재하는지 확인하세요.

공개 UCI 레시피 리뷰 가져오기

마이그레이션과 python -m scripts.seed 실행 후 다음을 실행합니다:

python -m scripts.import_uci_recipe_reviews --representative-reviews 100 --load

이 명령은 CC BY 4.0 UCI 데이터셋을 다운로드하고, 100개 레시피 각각에서 증거가 풍부한 리뷰를 하나씩 선택합니다. 변환된 레코드를 data/uci_recipe_reviews_100.json에 기록하고 구성된 데이터베이스에 로드합니다. 소스 ID가 안정적이므로 재실행도 안전합니다. 중복이 발생하지 않습니다.

원본 리뷰 텍스트, 0-5점 별점, 타임스탬프, 투표 수, 소스 레코드 ID, 라이선스와 저작자 표시는 출처(provenance)에 보존됩니다. 가져오기 기능은 맛, 명확성, 요리 시간, 재료 확보 가능성, 난이도, 반복 가치, 수정 사항에 대한 명시적 진술을 해석합니다. 각 해석은 이를 뒷받침하는 원본 문장을 유지하며, 행이 없는 항목은 모두 null로 유지됩니다.

다운로드나 재생성 없이 번들 내 파일을 로드하려면.

python -m scripts.import_uci_recipe_reviews --load-bundle data/uci_recipe_reviews_100.json

개발 데이터 초기화

보호된 초기화(reset) 페이지는 /development/reset에서 사용할 수 있습니다. 기본적으로 숨겨져 있으며 명시적으로 활성화하기 전에는 404를 반환합니다:

ENABLE_DEVELOPMENT_RESET=true

이 페이지는 사용자, 스키마, OAuth 연결, 역량 자격 증명은 보존하면서 v1/v2 리뷰 및 지식 데이터를 영구적으로 제거합니다. 공개 프로덕션 배포에서는 반드시 비활성 상태를 유지해야 합니다.

테스트

pytest -q

전체 테스트 스위트가 릴리스 커밋에 대해 통과하고 배포 준비 확인이 성공하지 않는 한 공개 릴리스를 만들지 않아야 합니다. 자세한 내용은 RELEASE_CHECKLIST.md를 참조하세요.

Railway 배포

  1. 저장소를 GitHub에 푸시하세요.

  2. GitHub 저장소에서 Railway 프로젝트를 생성하세요.

  3. PostgreSQL을 추가하세요.

  4. Postgres 서비스의 DATABASE_URL을 참조하세요. 확인되지 않은 Railway 참조를 일반 텍스트로 무엇든 붙여 넣지 마세요.

  5. 배포 고유의 난수 비밀값을 사용하여 프로덕션 변수를 구성하세요:

ENVIRONMENT=production
APP_SECRET=<random secret>
DEVELOPMENT_API_KEY=<long random key; development/admin use only>
CLIENT_API_KEYS={}
OAUTH_OWNER_USER_ID=<owner UUID>
OAUTH_CONNECTION_CODE=<long random connection code>
PUBLIC_BASE_URL=https://<your-domain>
ALLOWED_HOSTS=["<your-domain>","<railway-domain>"]
CORS_ORIGINS=["https://<your-domain>"]
ENABLE_DEVELOPMENT_RESET=false

railway.json은 배포 전 마이그레이션, Railway의 $PORT를 사용한 Uvicorn 시작, /health/ready에서의 준비 상태를 구성합니다.

애플리케이션은 프로젝트가 Psycopg 3를 사용하므로 Railway의 postgresql:// URL을 SQLAlchemy의 postgresql+psycopg:// 형태로 변환합니다. 올바른 PostgreSQL을 확인할 수 없는 프로덕션 배포는 SQLite로 위험한 대체하는 대신 오류로 중지되어야 합니다.

구현된 아키텍처

  • 호출 AI 역량을 개방형 의미/탐색 엔진으로 사용하고, 서버를 검증/영속 계층으로 사용

  • 안정적인 평면 주제 유형 ID

  • 표준 용어와 별칭

  • 저장 주소가 아닌 검색으로 사용하는 편집 가능한 유형 관계

  • 버저닝된 스키마 레지스트리

  • JSON/JSONB로 저장되는 도메인별 Pydantic 검증

  • 명시적 승인/버전이 있는 초안 우선 게시

  • Scope 있는 클라이언트 자격 증명

  • 중앙 집중식 읽기 정책

  • 정규 주제 해석 및 버전 검사 초안 편집

  • OAuth 2.1 Authorization Code + PKCE, 동적 클라이언트 등록, 리프레시 토큰 롤링, 범위 있는 액세스 토큰

  • 인증 AI 접근을 위한 MCP 엔드포인트

  • 멱등성 키

  • 출처(provenance), 동의, 소유권, 공개 범위

  • 리뷰어와 읽어 문헌 추천 및 독자별 관련성

  • 감사 로그 및 소프트 삭제

  • 요청 ID, 일관된 JSON 오류, 요청 크기 제한, 페이지네이션 지원 엔드포인트

  • Alembic 마이그레이션

  • 로컬에서는 SQLite, 프로덕션에서는 PostgreSQL

  • 교차 모델 재조정 및 서버 기록 검토/평가 워크플로우

안전한 읽기 및 편집 규칙

  • 공개 목록에는 publishedpublic 상태의 경험만 반환됩니다.

  • 정확한 ID는 공개된 unlisted 경험도 가져올 수 있습니다.

  • 초안과 비공개 경험에는 적절한 읽기 자격 증명이 필요합니다.

  • aggregate_only 경험은 개별 리뷰로 반환되지 않습니다.

  • 편집하거나 구조화 된 지식을 연결하기 전에 주제를 확인(resolve)하세요.

  • 버전 검사는 동시 초안 편집을 보호합니다.

  • 선택적 클라이언트 자격 증명은 고유하며 폐기할 수 있는 비밀값과 필요한 최소한의 범위를 사용해야 합니다.

라이선스

TestGraph는 GNU Affero General Public License v3.0 (AGPL-3.0) 에 따라 라이선스가 부여됩니다. LICENSE를 참조하세요.

AGPL은 사용, 수정, 재배포를 허용하며, 네트워크 서비스 제공에 사용되는 수정 실행물에 대한 소스 코드 공개 의무 등을 포함합니다.

AGPL-3.0이 요구 사항에 맞지 않는 경우, 대안 상용 또는 독점 라이선스가 제공될 수 있습니다. 별도 라이선스 계약의 문의는 testgraph@21dle.co.uk로 연락하세요.

기여자는 CONTRIBUTING.md를 읽어야 합니다. 기여는 프로젝트가 대체 라이선스를 제공할 수 있는 능력을 보존하도록 하는 특정 조건에서만 대에 오인하게 됩니다.

저장소를 공개하기 전에

RELEASE_CHECKLIST.mdSECURITY.md를 읽으세요. 특히, 비밀값 이력 검토를 완료하고, 공개 데이터 기준선을 확인하고, 전체 테스트 스위트를 실행하고, 정확한 릴리스 커밋으로부터의 모든 배포를 검증하세요.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A graph-based MCP server that provides AI coding agents with persistent memory to store patterns, track complex relationships, and retrieve knowledge across sessions. It leverages graph structures to handle temporal queries and relational paths that traditional vector stores often miss.
    234
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A universal MCP server providing persistent, structured memory through a knowledge graph with graph storage, semantic vector search, and multi-hop traversal for AI agents and IDEs.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server providing persistent AI memory with four-tier retrieval (SQLite FTS5, graph, vector, LLM agent) to give AI assistants structured, long-term memory without RAG.
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    A self-hosted, temporal knowledge-graph memory for AI coding agents — shared across projects, queryable across time, written and read via MCP by any Claude Code session.

View all related MCP servers

Related MCP Connectors

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

  • AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).

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/BBCBasic/TestGraph'

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