amnesic
amnesic — 레지스트리에서 가장 아이러니한 이름을 가진 MCP 서버
데이터베이스의 제도적 기억을 담은 MCP 서버. 이름은 아이러니합니다 — 모든 것을 기억합니다.
"레지스트리에서 가장 아이러니한 이름을 가진 MCP 서버. 전혀 기억상실증이 아닙니다 — 데이터베이스를 기억해서 AI가 그럴 필요가 없게 합니다."
대부분의 데이터베이스 MCP 서버는 쿼리 실행기입니다: 연결하고, 스키마를 조사하고, SQL을 실행하고, 잊어버립니다. amnesic은 의미론적 기억입니다 — 스키마가 의미하는 바(예: status = 3이 무엇인지, 어떤 열이 실제로 외래 키인지, 그 레거시 테이블이 무엇을 위한 것인지)를 축적하고, 모든 향후 세션에 자동으로 전달합니다. 데이터 카탈로그라고 생각하되, 플랫폼, 수집 파이프라인, 청구서는 없는 버전입니다. amnesic이 어디에 맞는지 ↓
호환 클라이언트 Claude Code · Claude Desktop · Cursor · VS Code · Cline · Windsurf — 모든 MCP 호환 클라이언트.
등록 위치 공식 MCP 레지스트리 · Claude Code 플러그인 마켓플레이스
👋 amnesic을 사용 중이신가요? adopters 스레드에서 인사해 주세요 — 다운로드 수는 실제 사용 현황을 알려주지 않으며, 이는 다음에 무엇을 만들지 직접적으로 결정합니다.
🔒 설계상 읽기 전용. amnesic은
INSERT,UPDATE,DELETE,DROP,TRUNCATE,ALTER,CREATE,EXEC,MERGE,GRANT,REVOKE— 그리고WITHCTE 안에 숨겨진 모든 쓰기 문을 거부합니다. 이중 방어: 정적 SQL 분석이 연결 전에 문을 거부하고, 또한 모든 쿼리는 즉시 롤백되는 트랜잭션 안에서 실행됩니다. 프로덕션에 연결해도 안전합니다. 자세히 ↓
문제
AI와의 모든 세션은 차갑게 시작됩니다. 처음 몇 분은 어떤 테이블이 있는지, status 열의 값 3이 무엇을 의미하는지, 어떤 FK가 orders를 users에 연결하는지 다시 설명하는 데 씁니다. 그런 다음 세션이 끝나고, 내일 다시 반복합니다.
amnesic이 이 문제를 해결합니다. AI에게 데이터베이스당 하나씩, 세션을 넘어 지속되는 영구 SQLite 지식 저장소를 제공합니다. 상태 열거형을 한 번 주석 처리하면, 이후 모든 세션에서 해당 레이블을 자동으로 볼 수 있습니다. FK 관계를 한 번 발견하면, 이후 모든 JOIN 쿼리가 그 그래프를 사용합니다.
지식은 또한 이식 가능하며 데이터베이스에 대한 접근 권한보다 오래 지속됩니다. 프로젝트에서 물러날 때, amnesic export는 다음 개발자에게 가르친 모든 것을 전달합니다 — 그렇지 않으면 당신과 함께 떠날 "아, 그 열은 사실..."이라는 수년간의 지식을 말입니다.
Related MCP server: engram-mcp
amnesic이 어디에 맞는지
데이터베이스 MCP 생태계는 두 진영으로 나뉘며, amnesic은 의도적으로 어느 쪽에도 속하지 않습니다.
쿼리 실행기 — DBHub, Postgres MCP Pro, Google의 MCP Toolbox, 그리고 벤더 서버(Supabase, Neon). 이들은 실시간으로 조사하고, SQL을 실행하며, 일부는 성능에 깊이 들어갑니다 — Postgres MCP Pro는 진정한 인덱스 튜닝과 PgHero 스타일의 상태 점검을 수행합니다. 이들은 이에 탁월합니다. 그러나 상태가 없습니다: 모든 세션이 스키마를 처음부터 다시 배우며, 반환하는 어떤 것도 열이 의미하는 바를 알려줄 수 없습니다. 데이터베이스도 모르기 때문입니다.
엔터프라이즈 카탈로그 — DataHub, Atlan, Cube, AtScale. 이들은 실제로 의미론적 컨텍스트를 보유합니다: 용어집, 열 설명, 소유권, 계보. 그러나 플랫폼 약속이기도 합니다 — 메타데이터 수집, 실행할 서비스, 일반적으로 유료 티어. 회사 규모에서는 가치가 있지만, 레거시 MSSQL 데이터베이스에서 여섯 개의 상태 코드가 무엇을 의미하는지 기억해야 하는 한 개발자에게는 지나치게 과합니다.
amnesic은 세 번째 것입니다: 쿼리 실행기 설정 비용으로 카탈로그급 의미론적 기억을 제공합니다. pipx install, 하나의 TOML 파일, 데이터베이스당 로컬 SQLite 파일. 플랫폼도, 수집도, 실행할 서버도 없습니다.
정직한 비교
amnesic | 쿼리 실행기 | 엔터프라이즈 카탈로그 | |
의미론적 컨텍스트 (값이 의미하는 바) | ✅ 영구적, 당신의 것 | ❌ 없음 | ✅ 플랫폼 관리 |
세션 간 지속 | ✅ | ❌ | ✅ |
이식 가능 / DB 접근보다 오래 지속 | ✅ | ❌ | ⚠️ 플랫폼에 묶임 |
설정 비용 | 명령 하나 | 명령 하나 | 수집 파이프라인 |
실시간 스키마 최신성 | ⚠️ 캐시됨, 수동 새로고침 | ✅ 항상 실시간 | ⚠️ 수집 지연 |
실행 계획 / 인덱스 튜닝 | ❌ | ✅ (Postgres MCP Pro) | ❌ |
계보 / 소유권 / 거버넌스 | ❌ | ❌ | ✅ |
FK 제약이 없는 레거시 스키마에서 작동 | ✅ 직접 주석 처리 | ❌ 조사할 것이 없음 | ⚠️ 수집 필요 |
amnesic 대신 쿼리 실행기를 사용하세요 실행 계획, 인덱스 권장 사항, 또는 데이터베이스 상태 진단이 필요하다면 — 그것은 amnesic의 역할이 아니며, 추가하면 이미 존재하는 도구의 더 나쁜 버전이 될 것입니다.
amnesic을 쿼리 실행기와 함께 사용하세요. 이들은 구성됩니다: 둘 다 실행하는 것을 막는 것은 없습니다. amnesic은 의미를 보유하고, 그들은 기계를 보유합니다.
위의 ⚠️ 표시된 행은 알려진 격차이며 공개 이슈가 있습니다 — 로드맵 ↓ 참조.
빠른 시작 (90초)
pipx install amnesic # install the core
amnesic init # interactive wizard⚡ 자격 증명 없이 시도하세요.
amnesic init --demo를 대신 실행하세요 — 자체 포함된 SQLite 샘플 DB(전자상거래 스키마: FK와 열거형 열이 있는 고객/제품/주문)를 추가하여 1분 안에 모든 도구를 사용해 볼 수 있습니다. 실제 데이터베이스에 amnesic을 연결하기 전에 먼저 살펴보기에 좋습니다.
마법사는 연결할 데이터베이스 유형을 묻고, 드라이버가 아직 설치되지 않은 경우 실행할 하나의 명령을 알려줍니다 — 미리 추가로 추측할 필요가 없습니다.
마법사:
데이터베이스 유형, 호스트, 자격 증명을 묻습니다
저장하기 전에 연결을 테스트합니다
비밀번호를
~/.config/amnesic/.env에 안전하게 저장합니다 (chmod 600)연결 블록을
~/.config/amnesic/connections.toml에 씁니다
그런 다음 amnesic을 AI 클라이언트에 추가하고 다시 시작하세요.
pipx 설치 (일회성):
brew install pipx # macOS
sudo apt install pipx # Linux (Debian/Ubuntu)
python -m pip install --user pipx # Windows / generic또는 uv 사용 (단일 바이너리 대안 — 빠르고, Python 불필요):
brew install uv # macOS
curl -LsSf https://astral.sh/uv/install.sh | sh # Linux / macOS
powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
uv tool install amnesic또는 일반 pip (활성 Python 환경에 설치):
pip install amnesic어떤 것을 선택하든,
amnesic init은 연결할 데이터베이스를 묻고 해당 드라이버를 설치하는 하나의 추가 명령을 출력합니다 — 미리 추가로 결정할 필요가 없습니다.
설치 후, amnesic --help는 모든 터미널에서 작동합니다.
amnesic이 저장하는 위치
파일 | macOS / Linux | Windows |
설정 |
|
|
비밀번호 |
|
|
지식 |
|
|
$AMNESIC_HOME (또는 Linux의 $XDG_CONFIG_HOME)을 설정하여 위치를 재정의할 수 있습니다.
나중에 연결 추가
amnesic add # add another connection to existing config
amnesic test # verify all connections
amnesic test orders.prod # verify one connection비밀번호 설정 및 교체
amnesic init 및 amnesic add는 비밀번호를 자동으로 저장합니다 — 일반적인 설정 흐름에서는 이 섹션을 생각할 필요가 없습니다.
저장된 비밀번호를 나중에 변경해야 할 때 set-secret을 사용하세요 — IT가 교체했거나, 설정 중에 잘못 입력했거나, 설정을 직접 편집하는 경우입니다.
$ amnesic set-secret ORDERS_PROD_PASSWORD
Value: **** ← hidden input (your typing is invisible)
Confirm: ****
✓ Set ORDERS_PROD_PASSWORD in ~/.config/amnesic/.env변수 이름은 무엇인가요? connections.toml이 해당 연결의 비밀번호에 대해 참조하는 환경 변수입니다. 마법사는 이를 <연결_이름_대문자_밑줄>_PASSWORD로 자동 생성합니다:
연결 이름 | 생성된 환경 변수 |
|
|
|
|
|
|
설정이 사용하는 정확한 이름을 보려면 ~/.config/amnesic/connections.toml을 확인하세요 — ${...} 안의 모든 것은 set-secret에 전달할 변수입니다.
내부 동작: ~/.config/amnesic/.env의 해당 줄을 쓰거나 교체하고, 파일 권한을 chmod 600으로 설정하며(사용자만 읽을 수 있음), 다른 모든 항목을 보존합니다.
연결 및 지식 관리
지식은 연결별로 로컬 SQLite 파일에 축적됩니다. 다음 명령으로 기계 간에 이동하거나 정리할 수 있습니다:
# Hand off everything you've taught amnesic about a database (annotations +
# relationships, not the re-derivable schema cache) as portable JSON:
amnesic export orders.prod -o orders-knowledge.json
amnesic export orders.prod # or print to stdout to pipe/redirect
# Load that knowledge into another connection (e.g. promote staging → prod,
# or onboard a teammate). Unconditional upsert — existing entries are overwritten:
amnesic import orders.prod orders-knowledge.json
# Wipe stored knowledge for a connection but keep the config entry:
amnesic clear orders.staging
# Drop a connection from connections.toml entirely (knowledge file kept
# unless you pass --delete-knowledge):
amnesic remove old.connection
amnesic remove old.connection --delete-knowledgeexport/import/clear/remove는 로컬 파일에만 작동합니다 — 데이터베이스에 연결하지 않으므로 연결의 자격 증명이 설정되지 않아도 작동합니다. remove는 connections.toml을 외과적 문자열 편집으로 수정하여 다른 모든 블록의 형식과 주석을 바이트 단위로 그대로 유지합니다.
AI 클라이언트에 추가
올바른 드라이버 확장과 함께 amnesic이 설치되면( 빠른 시작 참조), amnesic 명령이 PATH에 있습니다. 모든 MCP 클라이언트에서 동일한 스니펫을 사용하세요:
Claude Code
한 줄 설치 (권장 — JSON 편집 없음). Claude Code 내에서:
/plugin marketplace add https://github.com/SurajKGoyal/amnesic-marketplace
/plugin install amnesic@amnesic이렇게 하면 amnesic이 MCP 서버로 자동 연결됩니다. 출처: SurajKGoyal/amnesic-marketplace.
{
"mcpServers": {
"amnesic": {
"command": "amnesic"
}
}
}Claude Desktop
플랫폼의 Claude Desktop 설정에 추가:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"amnesic": {
"command": "amnesic"
}
}
}Cursor
한 번의 클릭 설치 — 아래 버튼을 클릭하면 Cursor가 자동으로 연결합니다:
프로젝트의 .cursor/mcp.json에 추가 (또는 전역적으로 ~/.cursor/mcp.json):
{
"mcpServers": {
"amnesic": {
"command": "amnesic"
}
}
}전역 설치 없이 (임시)
시스템에 amnesic을 설치하지 않으려면, MCP 클라이언트가 시작할 때마다 uvx 또는 pipx를 사용하여 가져오세요. 드라이버 확장을 명시적으로 전달해야 합니다:
// uvx — requires `uv` installed (see Install section for per-OS instructions)
{
"mcpServers": {
"amnesic": {
"command": "uvx",
"args": ["--from", "amnesic[mssql]", "amnesic"]
}
}
}
// pipx — usually pre-installed via Homebrew or system package manager
{
"mcpServers": {
"amnesic": {
"command": "pipx",
"args": ["run", "--spec", "amnesic[mssql]", "amnesic"]
}
}
}여러 드라이버의 경우 대괄호 안에 쉼표로 구분하세요 — 예: amnesic[postgres,mssql] 또는 모든 것을 위해 amnesic[all]을 사용하세요.
VS Code (MCP 확장 포함)
.vscode/mcp.json에 추가:
{
"servers": {
"amnesic": {
"type": "stdio",
"command": "amnesic"
}
}
}업데이트
amnesic은 자주 배포됩니다. 설치한 도구와 동일한 도구로 업그레이드하세요:
설치 방법 | 업그레이드 명령 |
|
|
|
|
|
|
| uvx는 빌드를 캐시합니다 — 최신 버전을 받으려면 |
그런 다음 MCP 클라이언트를 재시작하세요 (Claude Code, Cursor, …). 그러면 amnesic 서버가 다시 실행되며 새 도구를 인식합니다.
업그레이드는 안전합니다 — 주석(annotation)을 잃지 않습니다. 지식 파일은 첫 로드 시 새 스키마로 자동 마이그레이션됩니다. amnesic은 컬럼을 추가만 할 뿐, 데이터를 삭제하지 않습니다.
설치된 버전 확인: amnesic --version. 최신 릴리스: PyPI · Releases.
도구
도구 | 설명 |
| 설정된 모든 연결 목록 표시 (비밀 정보 노출 없음) |
| 설명과 컬럼 수를 포함한 모든 알려진 테이블 |
| 테이블/컬럼 설명과 별칭에 대한 BM25 검색 |
| 저장된 주석과 병합된 컬럼 스키마 |
| 읽기 전용 SELECT 쿼리 실행 |
| 테이블/컬럼에 대한 의미론적 주석 영구 저장 |
| 오래된 주석을 소프트 폐기 — 플래그(및 경고) 처리되지만 유지되며, 되돌릴 수 있음 |
| 주석과 실제 스키마 감사 — 고아 주석 + 문서화되지 않은 테이블 발견 |
| 주석 하드 삭제 (cascade 선택) — 영구 삭제 |
| 연결 간 주석 복사 (예: 스테이징 → 프로덕션) |
| 실제 DB에서 모든 외래 키(FK) 관계 발견 |
| JOIN 계획을 위한 FK 그래프 탐색 |
지식 기반 검색
스키마가 큰 경우 db_list_tables는 비현실적입니다 — 500개 이상의 행을 Claude의 컨텍스트에 덤프하게 됩니다. 대신 db_search를 사용하여 키워드로 관련 테이블/컬럼을 찾으세요:
"What table tracks customer payments?"
→ db_search("payments")
Top results:
- dbo.payments (table) "Customer payment records..."
- dbo.orders.payment_method (column) "Mode of payment..."db_search는 SQLite FTS5와 BM25 랭킹을 사용합니다 — 빠르고, 로컬에서 동작하며, 임베딩이나 외부 서비스가 필요 없습니다. 검색 구문은 다음을 지원합니다:
구문 | 효과 |
| 단어 일치 (어간 추출 포함 — "payments", "paying"도 일치) |
| 정확한 구문 |
| 접두사 일치 — "payment", "payable" 등 |
| 두 용어 모두 필요 |
| 둘 중 하나 |
결과는 설명과 하이라이트된 스니펫이 포함된 순위별 테이블/컬럼 행을 반환합니다.
지식 계층
핵심 차별화 요소입니다. 모든 주석은 재시작, 모델 업데이트, 새 세션을 거쳐도 유지됩니다.
세션 1 — 무언가를 발견합니다
You: What does status=3 mean in the orders table?
AI: Let me check. [runs db_query: SELECT DISTINCT status FROM dbo.orders]
I see values 1, 2, 3, 4. Let me look at some examples...
Based on the data, 3 appears to be "cancelled".
You: Save that. And status=1 is "pending", 2 is "confirmed", 4 is "delivered".
AI: [calls db_annotate]
db_annotate(
table="dbo.orders",
column="status",
column_description="Order lifecycle status",
enum_values={"1": "pending", "2": "confirmed", "3": "cancelled", "4": "delivered"}
)
Saved. Future sessions will see these labels automatically.세션 2 — 지식이 이미 있습니다
You: How many cancelled orders are there this month?
AI: [calls db_get_schema("dbo.orders")]
Schema response includes:
column: "status"
description: "Order lifecycle status"
enum_values: {"1": "pending", "2": "confirmed", "3": "cancelled", "4": "delivered"}
[writes correct SQL immediately]
SELECT COUNT(*) FROM dbo.orders WHERE status = 3 AND ...재발견 없음. 낭비되는 턴 없음. 주석이 유지되었습니다.
관계 그래프
스키마의 JOIN 구조를 한 번 이해하면 영원히 재사용합니다.
AI: [db_discover_relationships(connection="orders.prod")]
Discovered 47 foreign key relationships.
AI: [db_get_relationships(table="orders", depth=2)]
neighbors:
orders → users (via user_id → id)
orders → order_items (via id ← order_id)
paths:
orders -> users
orders -> order_items
order_items -> products이제 AI는 추측 없이 스키마 전체에서 정확히 JOIN하는 방법을 압니다.
환경 간 동기화
스테이징에서 주석을 구축한 다음 프로덕션으로 승격하세요:
db_sync_knowledge(from_connection="orders.staging", to_connection="orders.prod"){synced: [...], skipped: [{table, reason}], warnings: [{table, column, reason}]}를 반환합니다.
대상 스키마 캐시에 없는 테이블은 명확한 이유와 함께 건너뜁니다. 대상 스키마에 없는 컬럼은 경고가 표시되지만 나머지 동기화를 차단하지 않습니다.
고급: TOML 직접 편집
설정 파일을 직접 관리하고 싶다면 빈 템플릿을 생성하세요:
amnesic init --template이 명령은 ~/.config/amnesic/connections.toml에 주석이 포함된 예제를 작성하고 종료합니다 — 마법사 없음. 파일을 직접 편집하세요:
# ~/.config/amnesic/connections.toml
# Nested style: [connections.product.env]
[connections.orders.prod]
driver = "mssql"
server = "localhost"
port = 11433
database = "OrdersDB"
user = "${ORDERS_USER}"
password = "${ORDERS_PROD_PASSWORD}"
tunnel_script = "~/.scripts/mssql-tunnel.sh" # macOS / Linux (bash)
# tunnel_script = "C:/scripts/mssql-tunnel.ps1" # Windows (PowerShell)
[connections.orders.staging]
driver = "mssql"
server = "localhost"
port = 11434
database = "OrdersDB_Staging"
user = "${ORDERS_USER}"
password = "${ORDERS_STAGING_PASSWORD}"
# Flat style: [connections.name]
[connections.analytics]
driver = "postgres"
server = "analytics.company.com"
port = 5432
database = "warehouse"
user = "${ANALYTICS_DB_USER}"
password = "${ANALYTICS_DB_PASSWORD}"
# SQLite — no credentials needed
[connections.local]
driver = "sqlite"
database = "/absolute/path/to/local.db" # macOS / Linux
# database = "C:/path/to/local.db" # Windows (use forward slashes)자격 증명에는 ${ENV_VAR}를 사용하세요 — 비밀번호를 하드코딩하지 마세요.
비밀 정보는 ~/.config/amnesic/.env에서 자동으로 로드됩니다 (형식: KEY=VALUE, 한 줄에 하나, #는 주석). TOML에서 참조하는 각 ${VAR_NAME}에 대해 amnesic set-secret VAR_NAME으로 해당 .env 항목을 채우거나 (입력 숨김, chmod 600), 직접 .env를 작성하세요.
정식 연결 이름은 점 표기법을 사용합니다: orders.prod, orders.staging, analytics, local.
지원 데이터베이스
데이터베이스 | Python 드라이버 | 설치 방법 |
PostgreSQL |
| Postgres 선택 시 마법사 안내, 또는 |
MySQL / MariaDB |
| MySQL 선택 시 마법사 안내, 또는 |
Microsoft SQL Server |
| MSSQL 선택 시 마법사 안내, 또는 |
SQLite | 표준 라이브러리 | 항상 사용 가능 — 추가 설치 불필요 |
안전성 및 읽기 전용 강제
amnesic은 프로덕션 데이터베이스를 대상으로 해도 안전하게 설계되었습니다.
AI가 데이터를 손상시킬 수 없는 이유
모든 쿼리는 데이터베이스에 도달하기 전에 두 개의 독립적인 계층을 통과합니다:
정적 분석 (
amnesic/readonly.py내) — SQL이 토큰화되고 다음 중 하나라도 포함하면 거부됩니다:INSERT,UPDATE,DELETE,DROP,TRUNCATE,ALTER,CREATE,EXEC,EXECUTE,MERGE,BULK,GRANT,REVOKE,DENY. 여기에는 CTE 내부에 숨겨진 쓰기 문도 포함됩니다 (WITH x AS (SELECT ...) UPDATE ...는 감지되어 거부됨).트랜잭션 롤백 — 정적 검사를 통과한 쓰기 문이 있더라도 쿼리는
BEGIN TRANSACTION ... ROLLBACK내부에서 실행되므로 어떤 것도 커밋되지 않습니다. 이중 안전장치입니다.
SELECT와 WITH ... SELECT만 데이터베이스에 도달합니다. 분석 전에 주석이 제거되므로 /* DELETE FROM users */로 공격을 숨길 수 없습니다.
기타 안전 조치
응답에 자격 증명 없음:
db_list_connections는 출력에서 비밀번호와 사용자 이름을 제거합니다. AI는 어떤 연결이 존재하는지만 볼 수 있고, 인증 방법은 절대 볼 수 없습니다.환경 변수로만 자격 증명: 설정 로드 시
${ENV_VAR}확장 — 비밀번호가 디스크의connections.toml에 닿지 않습니다.안전한
.env저장: macOS/Linux에서chmod 0o600(소유자만 읽기/쓰기); Windows에서.env는 Windows ACL로 사용자 프로필에 제한된%APPDATA%에 저장됩니다.식별자 검증: 테이블/스키마/데이터베이스 이름은 SQL 문자열 보간 전에
[A-Za-z0-9_]+에 대해 검사됩니다.테스트됨:
tests/test_readonly.py의 40개 이상의 단위 테스트가 모든 쓰기 키워드, 주석 제거 엣지 케이스, CTE-포함-쓰기 시도, 세미콜론으로 구분된 다중 문, 식별자 주입 시도를 다룹니다.pytest tests/test_readonly.py로 직접 확인하세요.
내 데이터와 함께 사용해도 안전한가요?
amnesic은 로컬 전용이며 프로토콜 전용입니다. 새로운 외부 신뢰 경계를 도입하지 않습니다 — 신뢰 경계는 MCP 클라이언트가 데이터를 보내는 곳이지, amnesic 자체가 아닙니다. AI 클라이언트를 선택하는 것이 데이터 행에 적용되는 정책을 결정합니다.
your DB → amnesic (local) → MCP client → your AI deployment
↑ trust boundary lives here개인 개발자든 기업이든 물어봐야 할 정직한 질문:
내 AI 클라이언트를 이 데이터베이스의 데이터와 함께 신뢰하는가?
그렇다면 — 대부분의 설정에서 답은 그렇습니다 — 괜찮습니다. 여기에는 다음이 포함됩니다:
자체 프로젝트, 개발 DB 또는 테스트 데이터를 사용하는 Claude Pro / Cursor / Copilot의 개인 개발자
개인 SQLite 또는 자체 호스팅 Postgres를 쿼리하는 사이드 프로젝트
공개 스키마로 작업하는 오픈소스 유지관리자
명시적 격리가 있는 엔터프라이즈 AI를 사용하는 팀: AWS Bedrock (테넌트 + IAM), Azure OpenAI (지역 고정, 자체 구독), Anthropic Enterprise (데이터 보존 제로, 학습 거부 옵션), Vertex AI (자체 GCP 프로젝트), 자체 호스팅 (Ollama, vLLM, 온프레미스 Claude/GPT — 데이터가 네트워크를 벗어나지 않음)
제로 보존 보장과 사용 사례를 포괄하는 DPA가 있는 유료 AI 요금제 사용자
다음의 경우 더 자세히 살펴볼 가치가 있습니다
DB에 다른 사람의 데이터 (사용자, 고객, 환자)가 있고 AI 제공업체의 약관이 해당 처리를 포괄하는지 확인하지 않은 경우
소비자 등급 AI (무료 / 개인 Pro)를 사용하면서 규제 데이터 — PHI (HIPAA 적용 기관), 카드 소지자 데이터 (PCI-DSS), GDPR / 인도 DPDP 법에 따른 제한된 PII — 를 다루는 경우
고용주가 프로덕션 DB에 외부 AI 도구 사용을 명시적으로 제한하는 정책이 있는 경우
행이 특정 지역을 벗어날 수 없는 데이터 상주 규칙이 적용되는 경우
데이터 최소화가 내장되어 있습니다
사후 추가가 아닌 설계의 속성입니다: 주석 계층 덕분에 AI는 대부분의 스키마 질문을 로컬 SQLite 지식 파일에서 해결합니다 — db_query가 실행되지 않고, 행 데이터가 어디로도 전송되지 않습니다.
"status=3은 무슨 뜻인가요?" → 저장된 주석에서 해결
"orders는 users와 어떻게 JOIN되나요?" → FK 그래프에서 해결
"
created_at컬럼이 있는 테이블은?" → 스키마 캐시에서 해결
순수 구조적 탐색의 경우 6개의 도구는 데이터에 절대 접촉하지 않습니다: db_list_tables, db_get_schema, db_search, db_annotate, db_discover_relationships, db_get_relationships. 메타데이터만 반환합니다.
이는 AI가 열거형에 대해 혼란스러울 때마다 SELECT DISTINCT status FROM orders를 실행해야 하는 "벌거벗은" SQL MCP보다 측정 가능하게 적은 데이터 이동입니다. amnesic은 로컬 주석에서 한 번에 답합니다.
고지 사항: amnesic은 MIT 라이선스에 따라 있는 그대로 제공됩니다 (보증 없음, 책임 없음 — LICENSE 참조). 이 섹션은 법률 또는 규정 준수 조언이 아닙니다. amnesic 사용과 연결하는 AI 클라이언트는 사용자의 책임입니다. 규제 데이터를 다루는 경우 프로덕션에 연결하기 전에 보안/규정 준수 팀에 문의하세요.
로드맵
지금까지 출시된 기능: 지식 계층 (v0.1), BM25 검색 (v0.1.5), 수명주기 관리 — 폐기 / 드리프트 감지 / 삭제 (v0.2), 휴대용 지식 내보내기/가져오기 (v0.2.2).
다음 단계 (v0.3 — "기억을 획득하라"): 누군가 입력하지 않아도 축적되는 지식 — 열거형 자동 발견, 제약 조건이 없는 레거시 스키마를 위한 소프트 FK 추론, JOIN 패턴 학습. 그리고 기본적인 작업: 모든 응답의 토큰 예산, 스키마 가져오기의 인덱스와 기본 키, 캐시 오래됨 플래그, 더 작은 도구 표면.
전체적인 그림과 순서의 근거는 ROADMAP.md를 참조하세요.
🙌 기여 환영
v0.3의 모든 항목은 설계가 이미 고려된 GitHub 이슈로 등록되어 있습니다 — 문제, 제안된 형태, 수정할 파일, 테스트 방법까지. 여러 항목이 good first issue 태그가 붙어 있습니다.
하나를 골라 PR을 열어주세요 — 먼저 물어볼 필요 없습니다. 두 사람이 같은 것을 만들지 않도록 이슈에 댓글만 달아주세요.
새 드라이버인가요?
amnesic/drivers.py와amnesic/tools/schema.py의 구조를 따르세요.테스트는
tests/에 있습니다. 새 도구에는 단위 테스트가 필요합니다. PR을 열기 전에pytest tests/를 실행하세요.
목록에 없는 아이디어가 있나요? 이슈를 열어주세요. 사용 사례가 패치보다 낫습니다 — 재작업을 줄여줍니다.
사용량 추적
pypistats.org/packages/amnesic
라이선스
MIT — LICENSE 참조.
MCP 레지스트리
이 서버는 공식 MCP 레지스트리에 등록되어 있습니다.
mcp-name: io.github.SurajKGoyal/amnesicAvailable Tools
12 toolsdb_annotateA
Persist semantic annotations for a table or column — survives across sessions.
This is the core of amnesic's persistent memory. Every annotation saved here
is automatically merged into future db_get_schema() responses, so the AI
never has to rediscover what a status code means or what a table is for.
Call this after discovering: what an enum value means, what a column represents,
how a table relates to another, or what a table is used for.
Args:
table: Table name, optionally schema-qualified to match your
DB — e.g. "users", "public.users" (Postgres),
"dbo.Orders" (MSSQL), "mydb.orders" (MySQL).
connection: Connection name. Defaults to first defined.
table_description: Human-readable description of the table's purpose.
table_aliases: Alternative names the table is known by.
column: Column to annotate (required for column-level args below).
column_description: What this column represents in the business domain.
enum_values: Dict mapping stored values to labels {"1": "active", "2": "inactive"}.
foreign_key: FK reference as "other_table.column_name".
example_values: Representative sample values from this column.
Returns:
{table, connection, updated: {table_knowledge?, column_knowledge?}}
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| connection | No | ||
| table_description | No | ||
| table_aliases | No | ||
| column | No | ||
| column_description | No | ||
| enum_values | No | ||
| foreign_key | No | ||
| example_values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It states annotations survive sessions, are merged into future db_get_schema responses, and calls it the core of persistent memory. This effectively communicates the mutating and persistent nature. It doesn't discuss permissions or reversibility, but given the positive intent (annotating for better future queries), the transparency is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief summary, contextual motivation, usage guidance, parameter list, and return type. Every sentence adds value, and the length is appropriate for the tool's complexity. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 9 parameters and no annotations or output schema, the description covers the tool's purpose, when to use it, parameter semantics, and return format. It also explains how it integrates with db_get_schema, providing sufficient context for an AI agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage (no descriptions), so the description must compensate. The Args section provides clear semantic explanations for each parameter, including schema qualification for table, relationship between column and column-level fields, and the dict format for enum_values. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool persists semantic annotations for tables or columns, surviving across sessions. It distinguishes from siblings by positioning itself as the persistent memory mechanism that feeds into db_get_schema, a unique role not covered by other sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises calling this tool after discovering semantic knowledge (enum meanings, column purposes, relationships). While it doesn't list when to avoid it or name alternatives, the context and sibling list imply when to use versus when to use other tools like db_get_schema or db_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_deprecateA
Soft-retire a table or column annotation — flag it stale without deleting it.
Use when a table/column still exists but should no longer be relied on. The
deprecation flag is surfaced in db_get_schema so the AI is warned off it on
future calls. Reversible via undo=True. To remove an annotation entirely
(e.g. the column was dropped from the DB), use db_forget instead.
Args:
table: Table name, optionally schema-qualified (e.g. "users",
"public.users", "dbo.Orders", "mydb.orders").
connection: Connection name. Defaults to first defined.
column: Column to deprecate. Omit to deprecate the whole table.
reason: Why it's deprecated (e.g. "replaced by status_v2").
undo: Clear the deprecation flag instead of setting it.
Returns:
{table, connection, column, target, deprecated, reason}
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| connection | No | ||
| column | No | ||
| reason | No | ||
| undo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description explains the deprecation flag is surfaced in db_get_schema and that operation is reversible. Lacks details on permissions or side effects, but sufficient for a soft-retire tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with summary, usage guidelines, and argument list. Slightly wordy but each sentence adds value. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and no annotations, the description covers all inputs, explains return format, and mentions interaction with db_get_schema. Distinguishes from sibling db_forget.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description provides full argument list with detailed explanations, defaults, and usage nuances (e.g., connection defaults to first defined, column omitted means whole table).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool soft-retires a table or column annotation, distinguishing it from db_forget which removes entirely. Specific verb+resource combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (table/column still exists, should not be relied on) and when not (use db_forget instead). Also mentions reversibility via undo=True.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_detect_driftA
Audit saved annotations against the live database schema (read-only).
Surfaces drift after the schema evolves:
- orphaned annotations — a table or column you annotated that no longer
exists in the DB. Remove with db_forget, or db_deprecate if pending.
- undocumented tables — live tables with no annotation yet (coverage gaps).
Changes nothing — purely a report. Run after schema changes, or periodically.
Args:
connection: Connection name. Defaults to first defined.
Returns:
{connection, orphaned_tables, orphaned_columns, undocumented_tables,
undocumented_truncated, summary}
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the tool is read-only ('Changes nothing — purely a report.') and details what it surfaces (orphaned annotations, undocumented tables). It also outlines the return structure (connection, orphaned_tables, etc.), providing full transparency without relying on annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it opens with a clear verb-resource statement, uses bullet points for key outputs, and includes a separate Args/Returns section. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having only one optional parameter and no output schema, the description fully covers the tool's function, when to use it, what it detects, and the format of its return. No gaps remain for the intended use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only has one parameter (connection) with default null. The description adds meaning by stating 'Defaults to first defined,' which goes beyond the schema's default value. Given the parameter's simplicity, the description provides sufficient context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Audit saved annotations against the live database schema (read-only).' It specifies the verb (audit) and the resource (annotations vs live schema), and distinguishes itself from sibling tools like db_forget and db_deprecate by emphasizing it is a read-only report that detects drift.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Run after schema changes, or periodically.' It also advises on follow-up actions ('Remove with db_forget, or db_deprecate if pending.'), making the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_discover_relationshipsA
Discover all foreign key relationships in the database and save them to the graph.
Runs driver-specific FK introspection queries against the live database and
persists results to the local KnowledgeStore. Run once per database; re-run
after schema changes. After discovery, use db_get_relationships to navigate
the graph when planning complex JOIN queries.
Args:
connection: Connection name. Defaults to first defined.
Returns:
{connection, discovered: count, relationships: [{from_table, from_column, to_table, to_column}]}
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: runs driver-specific FK introspection queries, persists to KnowledgeStore, and implies potential impacts (live database query). Could mention performance implications or permissions, but still transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a short summary, usage guidelines, and listed args/returns. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers the tool's lifecycle, return format, and relationship to sibling tools. No gaps given the simple parameter set and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an Args section explaining the single parameter 'connection', its meaning, and default behavior ('Defaults to first defined'), adding value beyond the schema which only shows default null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool discovers all foreign key relationships and saves them to the graph. It uses specific verbs (discover, save) and resources (foreign key relationships, database, graph), and distinguishes from sibling tool db_get_relationships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('Run once per database; re-run after schema changes') and when not, by directing to use db_get_relationships for navigation after discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_forgetA
Permanently delete a table or column annotation. Safe by default — NOT reversible.
Use to remove a wrong annotation, or to clean up after a table/column was
dropped from the DB (pairs with db_detect_drift). Unlike db_deprecate, this
hard-deletes. Cascade is opt-in so you can't nuke a table by accident:
- db_forget(table) -> ONLY the table's own annotation
- db_forget(table, column="x") -> ONLY that column's annotation
- db_forget(table, cascade=True) -> the table + all its column annotations
+ all relationships touching it
Only the local knowledge store is changed — never the live database.
Args:
table: Table name, optionally schema-qualified (e.g. "users",
"public.users", "dbo.Orders", "mydb.orders").
connection: Connection name. Defaults to first defined.
column: Column annotation to delete. Omit to target the table.
cascade: When targeting a table, also delete its columns +
relationships. Ignored when column is given.
Returns:
{table, connection, column, removed_table, removed_columns, removed_relationships}
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| connection | No | ||
| column | No | ||
| cascade | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully discloses behavior. It states 'Safe by default — NOT reversible,' explains cascade behavior, and clarifies that only the local knowledge store is changed, never the live database.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and examples. Every sentence adds value, and critical information is front-loaded immediately after the first line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return object structure. It covers all necessary context: irreversibility, local-only modification, cascade behavior, and relation to siblings. Complete for a destructive knowledge store tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description provides detailed semantics for all 4 parameters: table examples, connection default, column omit behavior, cascade ignored when column given. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Permanently delete a table or column annotation.' It uses specific verbs and resources, and explicitly distinguishes from siblings like db_deprecate (soft-delete) and pairs with db_detect_drift.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use to remove a wrong annotation, or to clean up after a table/column was dropped from the DB.' Provides when-not guidance by contrasting with db_deprecate, and explains cascade opt-in to prevent accidents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_get_relationshipsA
Get the foreign key relationship graph for a table up to the given traversal depth.
Depth 1 returns direct neighbors (tables one JOIN away). Depth 2 returns
neighbors-of-neighbors. Returns both a flat neighbor list and formatted join
path strings to help plan multi-table queries. Requires db_discover_relationships
to have been run first.
Args:
table: Table name (e.g. "Orders").
connection: Connection name. Defaults to first defined.
depth: BFS traversal depth (default 1, recommended max 3).
Returns:
{table, connection, neighbors: [...], paths: ["TableA -> TableB -> TableC", ...]}
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| connection | No | ||
| depth | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the output format (neighbor list and join paths) and the prerequisite step. As no annotations are provided, the description carries full burden; it lacks explicit mention of side effects or idempotency but is sufficient for understanding behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for Args and Returns. It is concise without unnecessary words, front-loading the primary purpose and then detailing parameters and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is comprehensive: it explains the output structure, prerequisite, and each parameter fully. An agent can correctly invoke this tool based solely on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all three parameters, their purposes, defaults, and even a recommended maximum depth for depth. This provides complete semantic understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving the foreign key relationship graph for a table up to a given depth. It distinguishes itself from sibling tools by explicitly requiring db_discover_relationships to have been run first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it explains depth levels and that the prerequisite tool must be run first. However, it does not explicitly state when not to use this tool or mention alternatives beyond the prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_get_schemaA
Get column schema for a table, merged with any saved semantic annotations.
Checks the local cache first; fetches from the database on cache miss or
when force_refresh=True. Saves the result to cache for future calls.
Merges column descriptions, enum value mappings, and FK references from
previous db_annotate() calls into the response.
Args:
table: Table name, optionally schema-qualified. Use whatever your
DB uses — e.g. "users", "public.users" (Postgres),
"dbo.Orders" (MSSQL), "mydb.orders" (MySQL).
connection: Connection name. Defaults to first defined.
force_refresh: Bypass cache and fetch fresh schema from the database.
Returns:
{table, connection, columns (with annotations merged in), table_description, cached}
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| connection | No | ||
| force_refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description fully discloses caching behavior, force refresh mechanism, and annotation merging, providing complete behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the purpose, and every subsequent sentence adds necessary detail without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking output schema, the description covers all essential aspects: purpose, caching, param details, and return structure, making it complete for a 3-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description thoroughly explains each parameter: table with DB-specific examples, connection with default, and force_refresh with functionality, adding significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves column schema merged with semantic annotations, distinguishing it from sibling tools like db_annotate (which adds annotations) and db_list_tables (which lists tables).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use (to get annotated schema) and parameter usage, but lacks explicit guidance on when not to use or alternatives to sibling tools, which would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_list_connectionsA
List all configured database connections without exposing passwords or usernames.
Use this first to see what databases are available before calling other tools.
Returns connection names, drivers, databases, and server addresses.
Returns:
{connections: [{name, driver, database, server}]}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that passwords and usernames are not exposed, which is a key behavioral trait. However, does not explicitly state read-only nature or any side effects, though implied for a list operation. No annotations to contradict or supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus a returns block. Front-loaded with main purpose. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully explains what the tool does and what it returns (list of connections with name, driver, database, server). No missing info given the simplicity of the tool and absence of parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. Description does not need to add parameter info. Schema coverage is 100% by default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states listing all configured database connections without exposing sensitive info. Differentiates from siblings like db_list_tables by specifying the resource (connections). Uses specific verb 'list' and describes return fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this tool first before other tools to see available databases. Provides a clear usage context and sequential guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_list_tablesA
List all known tables for a connection, with descriptions and column counts.
Tables appear once they have been fetched via db_get_schema or annotated via
db_annotate. Descriptions come from the knowledge store — richer than raw
INFORMATION_SCHEMA.
Args:
connection: Connection name. Defaults to first defined.
Returns:
{connection, database, tables: [{table_fqn, description, aliases, column_count}]}
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses that descriptions come from the knowledge store (richer than raw schema) and that tables are only shown if known. No destructive behavior implied. Return format is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear purpose, behavioral notes, Args, and Returns. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description covers all essential aspects: purpose, prerequisites, return format, and parameter behavior. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single optional parameter 'connection' is documented with default behavior ('Defaults to first defined'), adding useful meaning beyond the schema type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists all known tables for a connection, including descriptions and column counts. It distinguishes itself from siblings like db_get_schema (which fetches schema) and db_annotate (which annotates) by noting that tables appear only after those actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context by explaining that tables appear only after being fetched or annotated, guiding the user on prerequisites. However, it does not explicitly state when to use or not use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_queryA
Execute a read-only SELECT query and return rows as a list of dicts.
All queries run inside an immediately-rolled-back transaction — write
statements are blocked both statically and at the transaction level.
Call db_get_schema first if you are unfamiliar with the table structure.
Args:
sql: SELECT query to execute. No INSERT/UPDATE/DELETE allowed.
connection: Connection name (e.g. "orders.prod"). Defaults to first defined.
max_rows: Maximum rows to return (default 500). Set lower for large tables.
Returns:
{rows, row_count, connection, database, truncated}
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| connection | No | ||
| max_rows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that queries run in an immediately-rolled-back transaction and that write statements are blocked both statically and at the transaction level. It also outlines the return structure (rows, row_count, connection, database, truncated). Since no annotations are provided, the description carries the full burden and does so well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single sentence stating the core purpose, followed by a brief note on transaction behavior and a recommendation to use a sibling tool, then a bullet-style summary of parameters and return value. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, no output schema), the description covers the main behavioral aspects (transaction, write blocking), parameter semantics, and return format. It could optionally mention error handling or performance implications, but overall it is sufficiently complete for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides comprehensive meaning for all three parameters: sql (SELECT-only), connection (defaults to first defined), and max_rows (default 500, lower for large tables). This goes far beyond the bare schema, which only supplies names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a read-only SELECT query and returns rows as a list of dicts. It specifies that write statements are blocked, making the purpose unambiguous. Although not explicitly compared to siblings, the verb-resource combination ('Execute a read-only SELECT query') is specific and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to call db_get_schema first if unfamiliar with the table structure, providing a clear alternative. It also implicitly limits usage to read-only queries (SELECT only) and mentions max_rows for large tables. However, it does not explicitly exclude other query types or describe when not to use the tool beyond the SELECT constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_searchA
Search the knowledge layer for tables/columns matching a query — BM25-ranked.
Use this BEFORE db_list_tables when you're looking for a specific concept
(e.g. "payments", "user email", "shipping address"). db_list_tables returns
every table; db_search returns just the relevant ones with descriptions and
highlighted snippets.
Searches across:
- Table names, descriptions, and aliases
- Column names, descriptions, and enum_values
Falls back gracefully to empty results if the query has invalid FTS5 syntax.
Args:
query: Search text. Supports FTS5 syntax: phrases ("foo bar"),
prefix matching (pay*), boolean operators (foo AND bar).
connection: Connection name. Defaults to first defined.
target: "tables", "columns", or "all" (default).
limit: Max results to return (default 10).
Returns:
{query, connection, target, result_count, results: [
{target_type, table_fqn, column_name, description, snippet, score}, ...
]}
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| connection | No | ||
| target | No | all | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but the description covers search behavior (BM25 ranking), fallback, and output structure. It doesn't explicitly state it's read-only, but the context implies it; still substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, minimal redundancy, front-loaded usage tip, and efficient use of bullet points. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description is comprehensive, covering input, output, and edge cases (invalid syntax). Could mention performance but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage, but the description fully explains each parameter: query syntax (FTS5), connection default, target options, and limit default, adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool searches for tables/columns using BM25 ranking, distinguishes it from db_list_tables, and lists the fields it searches across, providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this tool before db_list_tables when looking for specific concepts, contrasts it with db_list_tables' behavior, and mentions fallback for invalid FTS5 syntax.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
db_sync_knowledgeA
Copy annotations from one connection's knowledge store to another.
Typical use: after confirming that staging and prod share the same schema,
sync all the semantic knowledge you've built up in staging to prod.
Only syncs tables and columns that exist in the target schema cache —
tables missing from target are reported in 'skipped', columns in 'warnings'.
Args:
from_connection: Source connection (e.g. "orders.staging").
to_connection: Target connection (e.g. "orders.prod").
tables: Optional list of specific table FQNs to sync. Defaults to all.
Returns:
{synced: [...], skipped: [{table, reason}], warnings: [{table, column, reason}]}
| Name | Required | Description | Default |
|---|---|---|---|
| from_connection | Yes | ||
| to_connection | Yes | ||
| tables | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully bears the transparency burden. It discloses that only tables/columns existing in target are synced, with skipped and warnings reported. It also describes the return structure in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a typical use case, behavior explanation, and clear Args/Returns sections. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description is highly complete. It covers the sync process, edge cases (missing items), and return format, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning by explaining 'from_connection' and 'to_connection' as source/target with example values ('orders.staging', 'orders.prod'), and 'tables' as an optional list of FQNs defaulting to all. This provides clarity beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool copies annotations between knowledge stores. It uses a specific verb 'sync' and resource 'annotations from knowledge store', distinguishing it from sibling tools like db_annotate or db_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a typical use case: syncing from staging to prod after confirming schema match. It also explains behavior for missing tables/columns. However, it does not explicitly exclude other scenarios or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
12 tool updates
v0.2.2- First observed
db_annotate - First observed
db_deprecate - First observed
db_detect_drift - First observed
db_discover_relationships - First observed
db_forget - First observed
db_get_relationships - First observed
db_get_schema - First observed
db_list_connections - First observed
db_list_tables - First observed
db_query - First observed
db_search - First observed
db_sync_knowledge
TDQS
Each tool has a clear, distinct purpose. There is no overlap: annotation management (annotate, deprecate, forget), schema retrieval (get_schema, list_tables), querying (query), searching (search), relationship discovery (discover_relationships, get_relationships), drift detection (detect_drift), and knowledge sync (sync_knowledge) are all separate concerns.
All tools follow the consistent pattern `db_<verb>_<noun>` using snake_case. The verbs are descriptive and indicate the action (e.g., annotate, query, list_tables). No mixing of conventions or vague names.
With 12 tools, the server is well-scoped for a database knowledge management system. Each tool serves a necessary function in the lifecycle of schema understanding, annotation, querying, and maintenance. Not overloaded nor sparse.
The tool set covers the core workflow: connection listing, table discovery, schema retrieval, querying, annotation CRUD (annotate, deprecate, forget), relationship discovery, drift detection, and knowledge sync. Missing a direct tool to view all annotations in isolation, but schema retrieval and search provide access.
Maintenance
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
Universal persistent memory and knowledge retrieval layer for AI agents and LLMs.
Hosted persistent memory with semantic search, importance and TTL for AI agents.
Mem0-compatible persistent memory for AI agents: write facts once, recall them semantically.
Persistent memory for AI agents. Search and store durable facts, preferences and decisions.
Related MCP Servers
- AlicenseAqualityAmaintenancePersistent AI memory with SQLite hybrid search (FTS5 + semantic), built-in Qwen3 embedding, and rclone sync across machines.1510Apache 2.0
- AlicenseAqualityCmaintenancePersistent semantic memory for AI agents. SQLite-backed, local-first, zero config. Semantic search via Ollama embeddings with keyword fallback. Tools: remember, recall, history, forget, stats.17371MIT
- AlicenseNot gradedqualityAmaintenanceLocal-first semantic memory layer for MCP agents. Recall, remember, forget, stats over stdio. ChromaDB plus sentence-transformers, all on-machine.MIT
- AlicenseNot gradedqualityCmaintenanceProvides persistent long-term memory for LLMs via local SQLite storage and semantic search, enabling recall across sessions without external APIs.194MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/SurajKGoyal/amnesic'
If you have feedback or need assistance with the MCP directory API, please join our Discord server