SETUP-GUIDE-v3.mdβ’8.81 kB
# π Enhanced MCP-MAGMA-Handbook v3.0 μ€μ κ°μ΄λ
**LangConnect λ°©λ²λ‘ κΈ°λ° μ°¨μΈλ MAGMA MCP μλ² μλ²½ μ€μ λ²**
## π― μ€μ κ°μ
v3.0μ κΈ°μ‘΄ v2.xμ μμ ν λ€λ₯Έ μν€ν
μ²λ₯Ό μ¬μ©ν©λλ€:
- **Multi-query κ²μ μμ§** (GPT-4o-mini νμ©)
- **Hybrid κ²μ μμ€ν
** (Vector + Keyword)
- **Collection κ΄λ¦¬** (μ£Όμ λ³ λΆλ₯)
- **Conversation μ μ₯** (λν λ΄μ© μΆμ )
## π μ¬μ μ€λΉμ¬ν
### 1. **μμ€ν
μꡬμ¬ν**
- Node.js β₯ 18.0.0
- npm λλ yarn
- Supabase κ³μ
- OpenAI API ν€
### 2. **νμ κ³μ μ€μ **
#### **Supabase μ€μ **
1. [supabase.com](https://supabase.com) μ μ
2. μ νλ‘μ νΈ μμ±
3. **Project URL**κ³Ό **anon public key** κΈ°λ‘
4. SQL Editorμμ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§ μ€μ (μλ μ°Έμ‘°)
#### **OpenAI API ν€**
1. [platform.openai.com](https://platform.openai.com) μ μ
2. API Keys μΉμ
μμ μ ν€ μμ±
3. `sk-proj-...` ννμ ν€ μ μ₯
## ποΈ λ°μ΄ν°λ² μ΄μ€ μ€μ
### **Step 1: Supabase Extensions νμ±ν**
Supabase λμ보λ β SQL Editor β μ 쿼리:
```sql
-- νμ νμ₯ κΈ°λ₯ νμ±ν
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
```
### **Step 2: μ€ν€λ§ μμ±**
νλ‘μ νΈμ `database-schema.sql` νμΌ λ΄μ©μ Supabase SQL Editorμ 볡μ¬νμ¬ μ€ν:
```bash
# λ‘컬μμ νμΌ νμΈ
cat database-schema.sql
```
### **Step 3: μ€ν€λ§ κ²μ¦**
```sql
-- ν
μ΄λΈ μμ± νμΈ
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('collections', 'documents');
-- ν¨μ μμ± νμΈ
SELECT routine_name FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name IN ('match_documents', 'hybrid_search');
```
## π¦ ν¨ν€μ§ μ€μΉ λ° μ€μ
### **Method 1: Global μ€μΉ (κΆμ₯)**
```bash
# μ μ μ€μΉ
npm install -g mcp-magma-handbook@3.0.0
# μ€μΉ νμΈ
mcp-magma-handbook --version
```
### **Method 2: νλ‘μ νΈ ν΄λ‘ **
```bash
# μ μ₯μ ν΄λ‘
git clone https://github.com/LeGenAI/mcp-magma-handbook.git
cd mcp-magma-handbook
# μμ‘΄μ± μ€μΉ
npm install
# λΉλ
npm run build
```
## π§ νκ²½ λ³μ μ€μ
### **Option 1: .env νμΌ μμ±**
```bash
# νλ‘μ νΈ λ£¨νΈμ .env νμΌ μμ±
cat > .env << EOF
# Required
OPENAI_API_KEY=sk-proj-your-actual-key-here
SUPABASE_URL=https://your-project-id.supabase.co
SUPABASE_KEY=your-anon-public-key-here
# Optional (κΈ°λ³Έκ° μ¬μ© κΆμ₯)
EMBEDDING_MODEL=text-embedding-3-small
EMBEDDING_DIMENSIONS=1536
CHAT_MODEL=gpt-4o-mini
EOF
```
### **Option 2: Claude Desktop μ€μ μμ μ§μ **
νκ²½ λ³μλ₯Ό Claude Desktop μ€μ μμ μ§μ μ§μ (μλ μ°Έμ‘°)
## π₯οΈ Claude Desktop ν΅ν©
### **Step 1: Claude Desktop MCP μ€μ **
**macOS κ²½λ‘**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows κ²½λ‘**: `%APPDATA%/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"enhanced-magma-handbook": {
"command": "npx",
"args": ["mcp-magma-handbook@3.0.0"],
"env": {
"OPENAI_API_KEY": "sk-proj-your-actual-key-here",
"SUPABASE_URL": "https://your-project-id.supabase.co",
"SUPABASE_KEY": "your-anon-public-key-here"
}
}
}
}
```
### **Step 2: Claude Desktop μ¬μμ**
- Claude Desktop μμ μ’
λ£
- λ€μ μ€ν
- μ λνμμ MCP λꡬ νμΈ
## π λ¬Έμ μΈλ±μ±
### **MAGMA Handbook μ€λΉ**
1. MAGMA 곡μ λ¬Έμ PDF λ€μ΄λ‘λ
2. `data/pdfs/` ν΄λμ μ μ₯
3. νμΌλͺ
: `Handbook.pdf` (κΆμ₯)
### **μΈλ±μ± μ€ν**
```bash
# κ³ κΈ μΈλ±μ μ¬μ© (κΆμ₯)
npm run index-advanced
# κΈ°λ³Έ μΈλ±μ μ¬μ©
npm run index
# μΈλ±μ± μ§ν μν© λͺ¨λν°λ§
tail -f indexing.log
```
### **μΈλ±μ± κ²μ¦**
```sql
-- Supabaseμμ λ¬Έμ μ νμΈ
SELECT
c.name,
COUNT(d.id) as document_count,
AVG(LENGTH(d.content)) as avg_content_length
FROM collections c
LEFT JOIN documents d ON c.id = d.collection_id
GROUP BY c.id, c.name;
```
## π§ͺ μ€μ ν
μ€νΈ
### **Step 1: μλ² λ¨λ
ν
μ€νΈ**
```bash
# κ°λ° λͺ¨λλ‘ μλ² μ€ν
npm run dev
# λ€λ₯Έ ν°λ―Έλμμ ν
μ€νΈ μ€ν
npx tsx test-enhanced-mcp-complete.ts
```
### **Step 2: Claude Desktop ν
μ€νΈ**
Claude Desktopμμ λ€μ λͺ
λ Ήμ΄λ€μ ν
μ€νΈ:
```
1. λꡬ λͺ©λ‘ νμΈ
μ¬μ© κ°λ₯ν MCP λꡬλ₯Ό 보μ¬μ£ΌμΈμ.
2. μν νμΈ
get_health_status λꡬλ₯Ό μ¬μ©ν΄μ μλ² μνλ₯Ό νμΈν΄μ£ΌμΈμ.
3. 컬λ μ
μ‘°ν
list_collections λκ΅¬λ‘ μ¬μ© κ°λ₯ν 컬λ μ
μ 보μ¬μ£ΌμΈμ.
4. κ²μ ν
μ€νΈ
search_magma λꡬλ₯Ό μ¬μ©ν΄μ "polynomial ring" μ κ²μν΄μ£ΌμΈμ.
```
## π§ κ³ κΈ μ€μ
### **Multi-Query μ€μ μ΅μ ν**
```typescript
// enhanced-mcp-server.tsμμ μμ κ°λ₯
const multiQueryConfig = {
maxQueries: 5, // μ΅λ 쿼리 μ
temperature: 0, // GPT μ°½μμ± (0 = μ νλ μ°μ )
fallbackEnabled: true // multi-query μ€ν¨ μ λ¨μΌ μΏΌλ¦¬λ‘ μ ν
};
```
### **Hybrid Search κ°μ€μΉ μ‘°μ **
```typescript
// κ²μ λ°©μλ³ κ°μ€μΉ (ν©κ³ = 1.0)
const searchWeights = {
semantic: 0.7, // μλ―Έ κ²μ 70%
keyword: 0.3 // ν€μλ κ²μ 30%
};
```
### **Performance Tuning**
```sql
-- Supabaseμμ μΈλ±μ€ μ΅μ ν
REINDEX INDEX idx_documents_embedding;
VACUUM ANALYZE documents;
-- λ²‘ν° κ²μ μ΅μ ν (lists κ° μ‘°μ )
DROP INDEX IF EXISTS idx_documents_embedding;
CREATE INDEX idx_documents_embedding ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100); -- λ¬Έμ μμ λ°λΌ μ‘°μ
```
## π¨ λ¬Έμ ν΄κ²°
### **μΌλ°μ μΈ λ¬Έμ λ€**
#### **1. OpenAI API ν€ μ€λ₯**
```
Error: The OPENAI_API_KEY environment variable is missing
```
**ν΄κ²°**:
- API ν€ νμ νμΈ (`sk-proj-` μμ)
- νκ²½ λ³μ μ€μ μ¬νμΈ
- Claude Desktop μ¬μμ
#### **2. Supabase μ°κ²° μ€λ₯**
```
Error: Invalid Supabase URL or Key
```
**ν΄κ²°**:
- Project URL νμ: `https://project-id.supabase.co`
- anon public key μ¬μ© (service_role μλ)
- Supabase νλ‘μ νΈ νμ±ν μν νμΈ
#### **3. Vector κ²μ μ€ν¨**
```
Error: relation "documents" does not exist
```
**ν΄κ²°**:
- `database-schema.sql` μ¬μ€ν
- Extensions μ€μΉ νμΈ
- ν
μ΄λΈ κΆν νμΈ
#### **4. Multi-query μ€ν¨**
```
Error: Failed to generate queries
```
**ν΄κ²°**:
- OpenAI API ν¬λ λ§ νμΈ
- λ€νΈμν¬ μ°κ²° νμΈ
- Fallback λͺ¨λλ‘ μλ μ νλ¨
### **λλ²κΉ
λꡬ**
#### **λ‘κ·Έ λ 벨 μ€μ **
```bash
# μμΈ λ‘κ·Έ νμ±ν
DEBUG=* npm run dev
```
#### **λ°μ΄ν°λ² μ΄μ€ μν νμΈ**
```sql
-- 컬λ μ
ν΅κ³
SELECT * FROM collection_stats;
-- μ΅κ·Ό κ²μ μ±λ₯
EXPLAIN ANALYZE
SELECT * FROM match_documents(
array_to_vector(array_fill(0, array[1536])),
5
);
```
## π μ±λ₯ λͺ¨λν°λ§
### **κ²μ μ±λ₯ λ²€μΉλ§ν¬**
```bash
# νμ§ λ²€μΉλ§ν¬ μ€ν
npm run test-quality
# κ²°κ³Ό μμ:
# Average Relevance Score: 92.3%
# Multi-query Improvement: +7.8%
# Hybrid Search Accuracy: 94.1%
```
### **μμ€ν
리μμ€ λͺ¨λν°λ§**
```bash
# λ©λͺ¨λ¦¬ μ¬μ©λ
ps aux | grep node
# λ€νΈμν¬ μ¬μ©λ
netstat -i
# λμ€ν¬ I/O
iostat -x 1
```
## π μ
κ·Έλ μ΄λ κ°μ΄λ
### **v2.x β v3.0 λ§μ΄κ·Έλ μ΄μ
**
#### **1. λ°±μ
μμ±**
```sql
-- κΈ°μ‘΄ documents ν
μ΄λΈ λ°±μ
CREATE TABLE documents_backup AS SELECT * FROM documents;
```
#### **2. μ€ν€λ§ μ
κ·Έλ μ΄λ**
```bash
# μ μ€ν€λ§ μ μ©
psql -f database-schema.sql
```
#### **3. μ€μ νμΌ μ
λ°μ΄νΈ**
```bash
# κΈ°μ‘΄ μ€μ λ°±μ
cp ~/.config/claude/claude_desktop_config.json claude_config_backup.json
# μ μ€μ μ μ©
# (μμ Claude Desktop μ€μ μ°Έμ‘°)
```
#### **4. νΈνμ± νμΈ**
```bash
# ν
μ€νΈ μ€νμΌλ‘ λͺ¨λ κΈ°λ₯ κ²μ¦
npm run test-quality
```
## β
μ€μ μλ£ μ²΄ν¬λ¦¬μ€νΈ
- [ ] Node.js β₯ 18.0.0 μ€μΉλ¨
- [ ] Supabase νλ‘μ νΈ μμ± λ° μ€μ λ¨
- [ ] OpenAI API ν€ λ°κΈλ¨
- [ ] `database-schema.sql` μ€νλ¨
- [ ] ν¨ν€μ§ μ€μΉλ¨ (`npm install -g mcp-magma-handbook@3.0.0`)
- [ ] νκ²½ λ³μ μ€μ λ¨
- [ ] Claude Desktop μ€μ μ
λ°μ΄νΈλ¨
- [ ] MAGMA λ¬Έμ μΈλ±μ± μλ£λ¨
- [ ] ν
μ€νΈ ν΅κ³Όλ¨
- [ ] κΈ°λ³Έ κ²μ λμ νμΈλ¨
## π μΆκ° μ§μ
μ€μ μ€ λ¬Έμ κ° λ°μνλ©΄:
1. **GitHub Issues**: [λ¬Έμ μ κ³ ](https://github.com/LeGenAI/mcp-magma-handbook/issues)
2. **μ΄λ©μΌ**: baegjaehyeon@gmail.com
3. **λ¬Έμ**: [μμΈ κ°μ΄λ](https://github.com/LeGenAI/mcp-magma-handbook/blob/main/README-v3.md)
---
**π μ€μ μλ£! μ΄μ Enhanced MCP v3.0μ κ°λ ₯ν κΈ°λ₯λ€μ λ§μκ» νμ©νμΈμ!** π