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