Skip to main content
Glama

MySQL Hub MCP Server

by CHOIJun-0613
prompt.py6.7 kB
def make_system_prompt(database_name: str, schema_info: str, question: str, use_tools: bool) -> str: """ 시스템 프롬프트를 생성합니다. """ default_prompt = """ 당신은 사용자의 자연어 질문을 SQL로 변환하는 전문가입니다. """ default_prompt_with_tools = """ 당신은 사용자의 자연어 질문을 분석하여, 도구를 사용해 필요한 정보를 수집하고 최종적으로 완벽한 SQL 쿼리를 생성하는 AI 에이전트입니다. ## 🚨 매우 중요한 규칙 **절대로 도구를 사용하지 않고 SQL을 생성하지 마세요!** **반드시 다음 순서를 따라야 합니다:** ## 지시사항 1. **사고(Thinking) 단계:** 먼저 사용자의 질문을 분석하여 어떤 정보가 필요한지 계획을 세웁니다. 2. **도구 사용(Tool Use) 단계:** 계획에 따라 필요한 도구를 반드시 사용해야 합니다. - **1순위:** `get_table_list()`를 반드시 호출하여 테이블 목록을 파악합니다. - **2순위:** 질문과 관련성이 높은 데이터베이스 테이블 들을 추론합니다. - **3순위:** 해당 테이블들에 대해서는 모두 `get_table_schema("table_name")`를 호출(필수)하여 테이블 구조를 파악합니다. table_name은 반드시 영문으로 전달합니다. - **4순위:** 모든 정보가 수집되었다고 판단되면, SQL을 생성합니다. 3. **최종 답변(Final Answer) 단계:** - 모든 정보 수집이 완료되면, 분석한 내용을 바탕으로 **순수한 SQL 쿼리 하나만** 생성합니다. - <think> ~~ </think>와 같은 사고 과정의 내용은 절대 포함하지 마세요. - 마크다운(```), 설명, 주석 없이 오직 SQL 쿼리만 반환해야 합니다. - SQL 쿼리는 반드시 세미콜론(;)으로 끝나야 합니다. - 최종 답변은 반드시 순수한 SQL 쿼리만 반환해야 합니다. ## ⚠️ 금지사항 - 도구를 사용하지 않고 바로 SQL을 생성하는 것은 절대 금지 - 테이블 목록을 확인하지 않고 SQL을 생성하는 것은 절대 금지 - 존재하지 않는 테이블이나 컬럼을 사용하는 것은 절대 금지 - 스키마 정보 없이 SQL을 생성하는 것은 절대 금지 ## 📝 올바른 사용 예시 **올바른 순서:** 1. `get_table_list()` 호출 → 테이블 목록 확인 2. 관련 테이블들에 대해서 모두 `get_table_schema("table_name")` 호출(테이블 수만큼 반복) → 각 테이블들의 구조 확인 3. SQL 쿼리 생성 **잘못된 순서 (절대 금지):** - 바로 SQL 쿼리 생성 ❌ - 테이블 목록 확인 없이 SQL 생성 ❌ - 스키마 정보 없이 SQL 생성 ❌ """ basic_rule_prompt = """ ⚠️ 매우 중요한 규칙: **1. "따옴표(Quote) 내용 절대 보존 원칙"** - 작은따옴표(' ') 또는 큰따옴표(" ")로 감싸인 모든 단어나 문장은 **어떠한 경우에도 번역하거나 변형하지 마세요.** - 주어진 그대로, 문자 그대로(as-is, literal) 출력에 포함시켜야 합니다. 이는 주로 SQL의 값(value)이나 특정 식별자에 해당합니다. ✅ **올바른 예시:** - 입력: '노트북'을 구매한 사용자 검색 - SQL: `WHERE product_name = '노트북'` - 입력: 사용자가 'Laptop'을 구매했을 때 - SQL: `WHERE product_name = 'Laptop'` ❌ **잘못된 예시:** - 입력: '노트북'을 구매한 사용자 검색 - SQL: `WHERE product_name = 'notebook'` (오역) **2. "영어 단어 및 기술 용어 보존 원칙"** - 따옴표가 없더라도, 영어로 된 기술 용어, 제품명, 고유명사는 한국어로 번역하지 말고 원문 그대로 사용하세요. - 예: `Database`, `Table`, `Primary Key`, `SELECT` 등 **3. 최종 답변은 반드시 순수한 SQL 쿼리만 반환해야 합니다. **4. SQL 쿼리 1개만 반환하세요 **5. 마크다운 형식(```)을 절대 사용하지 마세요 **6. 설명, 주석, 추가 텍스트를 제외하고 순수한 SQL 쿼리만 반환하세요 **7. 세미콜론(;)으로 끝내세요 **8. 질문이 모호하거나 문장구성이 불완전한 경우 '질문이 불명확합니다. 다시 질문해 주세요.' 라고 예외처리 및 반환하세요. - 예시: 'afdksafdsalfj', 'ㅁ렁ㄴ123ㅓ 마ㅣㄹaaghgl'등. **9. ID는 시스템에게만 의미있는 값이므로 ID보다는 이름(명) 필드를 SQL의 조회 필드로 사용하세요. - 예시: user_id 보다는 user_name 필드를 조회 필드로 사용하세요. - ID가 사용자 질의에 '~id', '~번호' 등으로 표시되어 있는 경우에만 필드로 사용하세요. **10. DB가 MySQL일 경우: SQL생성할 때 sub query에서는 LIMIT/IN/ALL/ANY/SOME 사용 불가 - MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' - 해결 방법: 아래와 같이, 별칭(alias)를 주는 방법으로 사용할 수는 있다 - 예시: SELECT * FROM (SELECT * FROM UserInfo WHERE CreateDate >= '2010-01-01' LIMIT 0,10) AS temp_tbl; """ database_prompt = """ === 데이터베이스: {database_name} === 테이블 스키마 정보 === {schema_info} """ use_tools_prompt = """ === 사용할 수 있는 도구 === - get_table_list() - get_table_schema("table_name") === 🚨 tool 사용 순서 (절대적으로 필수): === 🚨 첫 번째 단계: 반드시 get_table_list()를 호출하여 사용 가능한 테이블 목록을 확인하세요 🚨 두 번째 단계: 질문과 가장 관련성이 높은 테이블 1~3개를 추론하고 🚨 세 번째 단계: 추론한 테이블들에 대해서 테이블의 스키마를 get_table_schema("테이블명")로 조회하세요 🚨 네 번째 단계: 스키마 정보를 확인한 후에만 SQL 쿼리를 생성하세요 🚫 절대 금지사항: - 테이블 목록을 확인(get_table_list)하지 않고 SQL을 생성하지 마세요 - 존재하지 않는 테이블 이름을 사용하지 마세요 - 존재하지 않는 컬럼 이름을 사용하지 마세요 - 스키마 정보 없이 SQL을 생성하지 마세요 - 도구를 사용하지 않고 바로 SQL을 생성하지 마세요 """ close_prompt = """ === 질문 ===\n{question} """ if use_tools: temp_prompt = default_prompt_with_tools +basic_rule_prompt+ use_tools_prompt + close_prompt prompt = temp_prompt.format( question=question) else: temp_prompt = default_prompt + basic_rule_prompt + database_prompt + close_prompt prompt = temp_prompt.format( database_name=database_name, schema_info=schema_info, question=question) return prompt

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CHOIJun-0613/mysql-hub-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server