Skip to content

PTRJRepository/db-knowledge-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

DB Knowledge MCP

Enterprise-grade MCP server untuk membaca metadata database dan menyimpan ke vector knowledge base dengan UI graph interaktif (Obsidian-like).

Version License Node

🎯 Overview

DB Knowledge MCP membaca metadata database (SQL Server, MySQL, PostgreSQL) dan menyimpannya sebagai vector knowledge base yang bisa dibaca cepat oleh AI agent. Dilengkapi dengan UI graph interaktif seperti Obsidian untuk visualisasi dan eksplorasi relationship antar tabel.

✨ Features

Core Features

  • Multi-Database Support: SQL Server, MySQL, PostgreSQL
  • Vector Knowledge Base: Simpan schema sebagai embedded vectors
  • 8 MCP Tools: list_databases, scan_database, search_knowledge, dll
  • Semantic Search: Query natural language ke knowledge base

UI Dashboard (Port 5005)

  • Interactive Graph: Vis Network visualization
  • Clickable Nodes: Klik node untuk melihat detail
  • Database Selector: Switch antar knowledge bases
  • Real-time Search: Filter nodes dengan search bar
  • Zoom & Pan: Navigasi graph dengan mouse
  • Drag Nodes: Atur posisi node sesuka hati
  • Auto-layout: Button untuk auto-arrange graph

πŸš€ Quick Start

Prerequisites

  • Node.js >= 18.0.0
  • Database credentials (SQL Server, MySQL, atau PostgreSQL)

Installation

git clone https://github.com/PTRJRepository/db-knowledge-mcp.git
cd db-knowledge-mcp
npm install
npm run build

Configuration

Edit config/databases.json:

{
  "databases": [
    {
      "id": "db_payroll",
      "name": "Payroll Database",
      "type": "sqlserver",
      "host": "localhost",
      "port": 1433,
      "database": "payroll_db",
      "username": "sa",
      "password": "your_password",
      "enabled": true,
      "description": "Production payroll system"
    },
    {
      "id": "db_hris",
      "name": "HRIS Database",
      "type": "mysql",
      "host": "localhost",
      "port": 3306,
      "database": "hris_db",
      "username": "root",
      "password": "your_password",
      "enabled": true
    }
  ],
  "embedder": {
    "provider": "openai",
    "model": "text-embedding-3-small",
    "dimensions": 1536
  },
  "storage": {
    "type": "json",
    "path": "knowledgebases"
  }
}

Running

Mode 1: Combined Server (REST API + UI Dashboard)

npm run start:combined

Mode 2: MCP Server Only (STDIO)

npm start

Berguna untuk integrate dengan AI tools lain (Zo Computer, Claude, dll)

Mode 3: Scan All Databases

npm run scan-all

πŸ“Š UI Dashboard Guide

Graph View

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  DB Knowledge Graph                              [Search...] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  [Dropdown: Select Database β–Ό]  [Scan]  [Refresh]  [Layout] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                             β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                   β”‚
β”‚         β”‚ db_payroll   β”‚ ← Database Node (Cyan)            β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                                   β”‚
β”‚                β”‚                                            β”‚
β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”                                   β”‚
β”‚         β”‚  employees   β”‚ ← Table Node (Green)              β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                                   β”‚
β”‚                β”‚                                            β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                               β”‚
β”‚    β”‚           β”‚           β”‚                               β”‚
β”‚ β”Œβ”€β”€β”΄β”€β”€β”   β”Œβ”€β”€β”€β”΄β”€β”€β”€β”   β”Œβ”€β”€β”€β”΄β”€β”€β”€β”                           β”‚
β”‚ β”‚ id  β”‚   β”‚name   β”‚   β”‚ dept  β”‚ ← Column Nodes (Yellow)   β”‚
β”‚ β””β”€β”€β”¬β”€β”€β”˜   β””β”€β”€β”€β”¬β”€β”€β”€β”˜   β””β”€β”€β”€β”¬β”€β”€β”€β”˜                           β”‚
β”‚    β”‚         β”‚           β”‚                                 β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                 β”‚
β”‚    β”‚                                           (Click node)  β”‚
β”‚    └────────────► Shows detail panel ◄────────────         β”‚
β”‚                                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Legend: ● Database  ● Table  ● Column  ● Relationship      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Node Colors

Type Color Description
Database Cyan (#00bcd4) Root node untuk setiap database
Table Green (#4caf50) Tabel dalam database
Column Yellow (#ffeb3b) Kolom dalam tabel
Relationship Red (#f44336) Foreign key relationship

Using the UI

  1. Select Database: Gunakan dropdown untuk memilih database
  2. Scan: Klik "Scan" untuk scan database dan update knowledge base
  3. Search: Ketik di search bar untuk filter nodes
  4. Click Node: Klik node untuk melihat detail di panel kanan
  5. Drag: Drag node untuk reposisi
  6. Zoom: Scroll mouse untuk zoom in/out
  7. Layout: Klik "Layout" untuk auto-arrange graph

Detail Panel

Ketika node diklik, panel kanan menampilkan:

Database Node:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ“Š db_payroll           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Type: SQL Server        β”‚
β”‚ Tables: 25              β”‚
β”‚ Columns: 156            β”‚
β”‚ Last Updated: 2026-03  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [Scan] [Delete]         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Table Node:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ“‹ employees           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Schema: dbo             β”‚
β”‚ Columns: 12             β”‚
β”‚ Row Count: 1,250        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Primary Keys:           β”‚
β”‚   β€’ employee_id         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Foreign Keys:            β”‚
β”‚   β€’ department_id β†’     β”‚
β”‚     departments(id)     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [View Details]          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Column Node:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ“Œ employee_id          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Type: int               β”‚
β”‚ Nullable: No             β”‚
β”‚ Primary Key: Yes        β”‚
β”‚ Foreign Key: No         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Part of: employees      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ MCP Tools

1. list_databases

List semua database yang dikonfigurasi.

{
  "name": "list_databases",
  "description": "List all configured databases"
}

2. scan_database

Scan database dan simpan ke knowledge base.

{
  "name": "scan_database",
  "arguments": {
    "databaseId": "db_payroll"
  }
}

3. search_knowledge

Search knowledge base dengan query.

{
  "name": "search_knowledge",
  "arguments": {
    "query": "employee salary",
    "databaseId": "db_payroll",
    "options": {
      "limit": 10,
      "minScore": 0.1
    }
  }
}

4. get_table_info

Get detail table.

{
  "name": "get_table_info",
  "arguments": {
    "databaseId": "db_payroll",
    "tableName": "employees",
    "schema": "dbo"
  }
}

5. get_column_info

Get detail column.

{
  "name": "get_column_info",
  "arguments": {
    "databaseId": "db_payroll",
    "tableName": "employees",
    "columnName": "salary"
  }
}

6. get_table_relationships

Get semua foreign key relationships untuk table.

{
  "name": "get_table_relationships",
  "arguments": {
    "databaseId": "db_payroll",
    "tableName": "employees"
  }
}

7. get_database_overview

Get overview database termasuk semua tables.

{
  "name": "get_database_overview",
  "arguments": {
    "databaseId": "db_payroll"
  }
}

8. delete_knowledge_base

Delete knowledge base untuk database.

{
  "name": "delete_knowledge_base",
  "arguments": {
    "databaseId": "db_payroll"
  }
}

🌐 REST API

Base URL

http://localhost:5005/api

Endpoints

GET /api/knowledge-bases

List semua knowledge bases.

curl http://localhost:5005/api/knowledge-bases

GET /api/knowledge-bases/:id

Get detail knowledge base.

curl http://localhost:5005/api/knowledge-bases/db_payroll

GET /api/knowledge-bases/:id/graph

Get graph data untuk visualization.

curl http://localhost:5005/api/knowledge-bases/db_payroll/graph

Response:

{
  "nodes": [
    { "id": "db_payroll", "label": "Payroll DB", "type": "database", "color": "#00bcd4" },
    { "id": "employees", "label": "employees", "type": "table", "color": "#4caf50" },
    { "id": "employee_id", "label": "employee_id", "type": "column", "color": "#ffeb3b" }
  ],
  "edges": [
    { "from": "employees", "to": "employee_id", "label": "pk" }
  ]
}

GET /api/knowledge-bases/:id/search?q=query

Search dalam knowledge base.

curl "http://localhost:5005/api/knowledge-bases/db_payroll/search?q=salary"

POST /api/scan/:databaseId

Scan database.

curl -X POST http://localhost:5005/api/scan/db_payroll

POST /api/scan-all

Scan semua database.

curl -X POST http://localhost:5005/api/scan-all

GET /api/databases

List database configs.

curl http://localhost:5005/api/databases

POST /api/test-connection/:databaseId

Test koneksi database.

curl -X POST http://localhost:5005/api/test-connection/db_payroll

GET /api/health

Health check.

curl http://localhost:5005/api/health

πŸ“ Project Structure

db-knowledge-mcp/
β”œβ”€β”€ config/
β”‚   └── databases.json       # Konfigurasi database
β”œβ”€β”€ public/
β”‚   └── index.html           # UI Dashboard
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ connectors/          # Database connectors
β”‚   β”‚   β”œβ”€β”€ base.ts          # Base connector class
β”‚   β”‚   β”œβ”€β”€ sqlserver.ts     # SQL Server connector
β”‚   β”‚   β”œβ”€β”€ mysql.ts         # MySQL connector
β”‚   β”‚   β”œβ”€β”€ postgresql.ts    # PostgreSQL connector
β”‚   β”‚   └── index.ts         # Factory function
β”‚   β”œβ”€β”€ embedder/
β”‚   β”‚   └── schema-embedder.ts  # Schema β†’ Embeddings
β”‚   β”œβ”€β”€ storage/
β”‚   β”‚   └── vector-store.ts  # JSON vector store
β”‚   β”œβ”€β”€ mcp-server.ts        # MCP stdio server
β”‚   └── server.ts            # Express + UI server
β”œβ”€β”€ knowledgebases/           # Generated KB storage
β”œβ”€β”€ dist/                     # Compiled output
β”œβ”€β”€ docs/
β”‚   └── API.md              # Detailed API docs
β”œβ”€β”€ CLAUDE.md               # Developer guide
β”œβ”€β”€ README.md               # This file
└── package.json

πŸ”Œ Database Support

SQL Server

{
  "id": "db_payroll",
  "name": "Payroll DB",
  "type": "sqlserver",
  "host": "localhost",
  "port": 1433,
  "database": "payroll",
  "username": "sa",
  "password": "***"
}

MySQL

{
  "id": "db_hris",
  "name": "HRIS DB",
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "database": "hris",
  "username": "root",
  "password": "***"
}

PostgreSQL

{
  "id": "db_analytics",
  "name": "Analytics DB",
  "type": "postgresql",
  "host": "localhost",
  "port": 5432,
  "database": "analytics",
  "username": "postgres",
  "password": "***"
}

πŸ” Security Notes

  • No credentials stored in code: Semua credentials di config/databases.json
  • Read-only access: Connector hanya baca metadata, tidak write
  • Local storage: Knowledge base disimpan lokal, tidak dikirim ke cloud
  • HTTPS-ready: Bisa taruh di reverse proxy (nginx, Caddy) untuk production

πŸ› οΈ Development

Build

npm run build

Run Tests

npm test

Lint

npm run lint

πŸ“ License

MIT License - lihat LICENSE

🀝 Contributing

  1. Fork repository
  2. Buat branch baru (git checkout -b feature/xxx)
  3. Commit changes (git commit -m 'Add feature xxx')
  4. Push ke branch (git push origin feature/xxx)
  5. Buat Pull Request

πŸ“§ Contact

About

Enterprise MCP server for database schema vector knowledge base - reads metadata from SQL Server, MySQL, PostgreSQL and stores as searchable knowledge for AI agents

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors