MCP DB Wizard

공식

Oracle용 MCP 서버로, 해고당할 일이 없습니다. 이 MCP 서버는 SQL 프롬프트를 노출하지 않으며, Oracle에 로그인하는 방법을 알려주지 않습니다. 선택된 객체와 SQL 문만 사용할 수 있습니다.

DB Wizard MCP(으)로 무엇을 할 수 있나요?

  • 큐레이션된 PL/SQL 루틴 호출 — 어시스턴트에게 검증된 패키지 프로시저(예: synuser_js_admin_getadmintoolinfo)를 호출하도록 요청하여 레코드, 컬렉션 및 모든 OUT 매개변수를 반환받습니다.
  • 단일 테이블 행 가져오기synuser_activity_log_get_by_pk를 통해 기본 키로 행을 요청하고 JSON 객체로 반환받습니다.
  • 테이블 데이터 삽입, 업데이트 또는 삭제 — 생성된 synuser_activity_log_insert 도구(및 해당 _update_delete 변형)를 통해 어시스턴트가 행을 수정하도록 지시합니다.
  • 다음 시퀀스 값 가져오기 — 다른 시퀀스 작업을 노출하지 않고 synuser_job_id_nextval에서 다음 번호를 요청합니다.
  • 사전 승인된 SQL 문 실행 — 어시스턴트가 임시 쿼리 텍스트를 작성하지 않고, 명명되고 테스트된 SQL 파일을 유형화된 바인드 매개변수로 실행하도록 합니다.

문서

해고당하지 않을 Oracle용 MCP 서버

설정이 곧 전체 보안 모델입니다

에이전트가 접근 가능한 항목

  • synuser_activity_log_get_by_pk 테이블 — 기본 키 기준 한 행, JSON 객체로 반환
  • synuser_activity_log_insert 테이블 — 동일한 선택 항목에서 _update 및 _delete 지원
  • synuser_js_admin_getadmintoolinfo PL/SQL 루틴 — 레코드, 컬렉션 및 모든 OUT 파라미터
  • synuser_job_id_nextval 시퀀스 — 다음 값만 반환, 그 외에는 없음

구조적으로 접근 불가능한 항목

  • 호출자의 SQL 텍스트 — 인자는 바인드 값으로만 처리
  • DDL — create, alter, drop
  • 선택하지 않은 모든 객체
  • 설정에 명시되지 않은 모든 스키마
  • Oracle 비밀번호 — 환경 변수에만 존재

SQL을 작성할 수 있는 에이전트는 DROP TABLE을 작성할 수 있습니다. check_flight_availability이라는 도구를 가진 에이전트는 항공편 좌석 가능 여부를 확인할 수 있습니다. 그 앞에 있는 코드가 그게 전부이기 때문입니다.

큐레이션은 코드가 존재하기 전에 이루어집니다

최소 권한은 주장하기 쉽고 검증하기 어렵습니다. 여기서는 설정이 생성되는 항목을 결정합니다. 선택되지 않은 객체는 도구, 메서드, 클래스가 없습니다. 실행 중인 프로세스에 의해 보호되는 것이 아니라 바이너리 자체에 존재하지 않으므로 어떤 프롬프트도 도달할 수 없습니다.

비즈니스 규칙은 이미 PL/SQL에 있습니다

수십 년간의 검증, 참조 논리 및 감사 동작이 패키지 안에 있습니다. MCPDBWizard는 이러한 루틴을 그대로 호출합니다 — 레코드, 컬렉션, ref 커서 및 모든 OUT 파라미터를 반환 — 언어 모델이 SELECT 문에서 규칙을 재창조하도록 요청하는 대신 말입니다.

모든 호출은 쿼리가 아닌 명명된 도구입니다

요청은 엄격한 스키마에 대한 synuser_activity_log_get_by_pk(entry_id)로 도착합니다 — 철자가 틀린 인자는 데이터베이스에 접촉하기 전에 거부됩니다. 로깅, 속도 제한, 사후 검토 및 감사자에게 설명하기가 훨씬 쉽습니다.

두 가지 대상, 두 가지 기록

프록시는 누가 어떤 도구를 호출했는지와 허용 여부를 기록합니다. 각 서버는 도구가 무엇을 했는지와 어떻게 끝났는지를 기록합니다. 인자 이름은 항상 기록됩니다. 값은 해당 기능을 켠 경우에만 기록됩니다. 모델이 값을 선택했기 때문입니다.

Oracle 12c부터 26ai까지

이후 추가된 유형 포함: 네이티브 JSON, BOOLEAN, VECTOR, 그리고 JSON-관계형 이중성 뷰를 통한 문서 CRUD. JSON으로 정직하게 전달할 수 없는 모든 것 — SDO_GEOMETRY, BFILE — 은 전체가 건너뛰어지며, 로그에 어떤 항목과 이유가 기록됩니다.

계정, 토큰 및 권한 부여 매트릭스

많은 계정, 많은 설정, 권한당 한 번의 체크. 동일한 스키마에 대해 서로 다른 도구가 필요한 두 팀은 하나의 설정과 규칙이 아니라 두 개의 설정입니다 — 이는 첫 번째 패널의 보장을 그대로 유지합니다.

  1. 01

    객체 선택

    Design 페이지를 Oracle에 연결하고 노출할 PL/SQL 패키지, 직접 작성하고 테스트한 SQL 문, 직접 접근 가능하게 하려는 테이블과 시퀀스를 체크합니다. 해당 선택은 설정 파일로 저장됩니다 — properties 또는 JSON, 버전 관리 가능, 비밀번호 미포함. The Design Procedures tab listing PL/SQL packages and procedures with tick boxes PL/SQL이 핵심이므로 먼저 처리합니다: 노출할 패키지와 프로시저를 체크하면 각각이 타입이 지정된 파라미터를 가진 하나의 도구가 됩니다. The Design SQL Statements tab, editing a named .sql file with typed bind parameters 그 다음 직접 작성한 SQL — 직접 작성하고 테스트한 문으로, 바인드 파라미터가 인라인으로 타입 지정됩니다. 에이전트는 이를 실행할 뿐, 자체적으로 작성하지 않습니다. The Design Tables tab, with each table ticked and separate MCP read, create, update and delete boxes 마지막으로 테이블 — 테이블별이 아닌 작업별로 큐레이션됩니다. 새로 선택된 테이블은 읽기 전용이며, create, update, delete는 직접 체크할 수 있습니다.
  2. 02

    생성, 컴파일, 실행

    Runtime 페이지는 정확히 해당 객체에 대한 Java를 생성하고, 컴파일하며, 루프백에서 자체 서버로 실행합니다. 선택하지 않은 모든 것은 도구, 메서드, 클래스가 없습니다 — 단순히 거부되는 것이 아니라 바이너리에서 존재하지 않습니다.
    docker run -d --name mcpdbwizard \
      -p 8080:8080 \
      -e MCPDBWIZARD_ORACLE_HOST=db.example.com \
      -e MCPDBWIZARD_ORACLE_PORT=1521 \
      -e MCPDBWIZARD_ORACLE_SID=/PDB1 \
      -e MCPDBWIZARD_ORACLE_USER=appuser \
      -e DB_PASS_FILE=/run/secrets/oracle \
      -v mcpdbwizard-demo:/data \
      ghcr.io/srmadscience/mcpdbwizard:2.0.4
    
  3. 03

    MCP 클라이언트를 프록시에 연결

    에이전트는 계정에 발급된 토큰으로 Streamable HTTP를 통해 8080 포트에 연결합니다. 프록시는 호출자가 누구인지 아는 유일한 구성 요소입니다 — 계정, 권한 및 속도 제한을 확인한 후 전달합니다.
    {
      "mcpServers": {
        "payroll": {
          "url": "http://localhost:8080/mcp/alice/payroll",
          "headers": {
            "Authorization": "Bearer <id>.<secret>"
          }
        }
      }
    }
    

빠른 시작에는 토큰 발급 및 설정 권한 부여를 포함한 전체 경로가 있습니다.