Skip to main content
Glama
yeuidowanter

fn_ora_mcp

by yeuidowanter
README.md
# Oracle MCP 서버

Claude Code 안에서 Oracle DB 패키지 코드를 자연어로 조회하는 MCP 서버입니다.

---

## 사전 조건

- Python 3.10 이상 (권장: 3.12)
- Oracle DB 접속 가능한 읽기 전용 계정
  - `ALL_SOURCE`, `ALL_OBJECTS`, `ALL_PROCEDURES` 뷰 SELECT 권한 필요
- Claude Code 설치

---

## 설치

### 1. 저장소 복사

```powershell
git clone <저장소 URL>
cd oracle_mcp
```

### 2. Python 가상환경 생성 및 패키지 설치

```powershell
# Python 3.12로 가상환경 생성
py -3.12 -m venv .venv

# 패키지 설치
.\.venv\Scripts\pip install fastmcp oracledb python-dotenv
```

### 3. 환경 변수 설정

`.env.example`을 복사해 `.env`를 만들고 실제 접속 정보를 입력합니다.

```powershell
copy .env.example .env
```

`.env` 파일 편집:

```
ORACLE_HOST=192.168.0.1        # Oracle DB 서버 IP
ORACLE_PORT=1521               # 포트 (기본 1521)
ORACLE_SERVICE=ORCL            # 서비스명 또는 SID
ORACLE_USER=readonly_user      # DB 계정
ORACLE_PASSWORD=your_password  # DB 비밀번호
ORACLE_SCHEMA=TARGET_SCHEMA    # 조회 대상 스키마 (비워두면 ORACLE_USER 스키마 사용)
```

### 4. DB 연결 확인

```powershell
.\.venv\Scripts\python verify_connection.py
```

아래와 같이 출력되면 성공:

```
[1/3] DB 연결 시도 중...
      연결 성공
[2/3] ALL_SOURCE 조회 권한 확인 ...
      ALL_SOURCE SELECT 가능
[3/3] ALL_OBJECTS 조회 권한 확인 ...
      ALL_OBJECTS SELECT 가능

[OK] Phase 1 검증 완료 - DB 연결 및 권한 정상
```

---

## Claude Code 연동

### 프로젝트 루트에 `.mcp.json` 생성

```json
{
  "mcpServers": {
    "oracle-mcp": {
      "command": "C:\\절대경로\\oracle_mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\절대경로\\oracle_mcp\\server.py"]
    }
  }
}
```

> `C:\\절대경로\\oracle_mcp` 부분을 실제 프로젝트 경로로 변경하세요.
> 예: `C:\\Users\\홍길동\\source\\oracle_mcp`

### Claude Code 재시작

Claude Code를 완전히 종료 후 재시작하면 `oracle-mcp` 서버가 자동으로 연결됩니다.

---

## 사용법

Claude Code 채팅에서 자연어로 질문하면 됩니다.

### 패키지 검색

```
PKG_USER 로 시작하는 패키지 찾아줘
```

```
APPL 이 들어간 패키지 목록 알려줘
```

### 패키지 내 함수/프로시저 목록 조회

```
PKG_0000 패키지 안에 어떤 함수들이 있어?
```

### 패키지 전체 소스 조회

```
PKG_0000 패키지 소스 코드 보여줘
```

### 특정 함수/프로시저 코드 조회

```
PKG_0000 패키지의 FN_LOGIN 함수 코드 보여줘
```

```
PKG_MEMBER 의 PROC_UPDATE 프로시저 내용이 뭐야?
```

---

## 제공 툴 (MCP Tools)

| 툴 이름 | 파라미터 | 설명 |
|--------|---------|------|
| `get_package_source` | `package_name`, `object_name`(선택) | 패키지 전체 소스 또는 특정 함수/프로시저 코드 반환 |
| `list_package_objects` | `package_name` | 패키지 내 함수/프로시저 이름 목록 반환 |
| `search_packages` | `pattern` | 패키지명 패턴 검색 (`%` 없으면 자동으로 `%pattern%` 적용) |

> 모든 파라미터는 대소문자 구분 없이 동작합니다.

---

## 주의사항

- **조회 전용입니다.** 패키지 코드 수정, 컴파일, 데이터 변경은 지원하지 않습니다.
- `.env` 파일에는 DB 자격증명이 포함되므로 **절대 Git에 커밋하지 마세요.** (`.gitignore`에 등록되어 있음)
- `.mcp.json` 도 경로 정보가 포함되므로 Git에 올리지 않는 것을 권장합니다.
- 운영 DB 연동 시 반드시 **읽기 전용 전용 계정**을 사용하세요.

TDQS

B3.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct aspect: package search, listing contents, and source retrieval. No overlap exists.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using snake_case: get_package_source, list_package_objects, search_packages.

Tool Count4/5

Three tools is lean but sufficient for a read-only Oracle package exploration server. No unnecessary tools.

Completeness4/5

Covers core read operations: search, list objects, get source. Minor gap in distinguishing package header vs body, but adequate for typical use.

Maintenance

ActivityInactive
ResponsivenessNo issues