Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,548Letters: 14Defects: 1,324counted 2 min ago
teppi

Server definition

Hash
sha256:96ea90e31148b0b56dbb0928181ea3bcddbbbadfb2be8e3e63d913443bcbfaa2
What it is
What a remote MCP server returned when asked what it offers: 4 tools

The blob, as servednamed by its sha256

{ "instructions": "# SBChart2.0 차트 작성 공통 규칙 (MCP 프롬프트용)\n\n이 문서는 **환경(로컬 경로·파일 위치·작업일지 등)에 종속되지 않는**, 어디서든 적용 가능한\n**SBChart2.0 차트 작성 공통 원칙**만 담는다. (경로·일지 규칙 등 환경 특화 항목은 제외했다.)\n\n---\n\n## ★★ 최우선 필수 규칙 — 차트 생성은 반드시 아래 \"표준 골격\"에서 출발한다\n\n> **이 규칙을 가장 먼저, 반드시 지킨다.**\n> 차트 생성의 기준은 **아래 표준 템플릿(기본 샘플)** 이다. **이 기준을 빼면 안 된다.**\n> 기준이 없으면 차트를 만드는 방식이 **AI가 임의로 상상하는 추론성 코드로 바뀌어**,\n> 생성 구조·변수 흐름·작성 스타일이 매번 달라지고 흔들린다.\n> 그러므로 **모든 SBChart2.0 차트는 이 표준 골격을 그대로 출발점으로 삼아 생성한다.**\n\n#### 적용 기준 — 상황에 따라 (신규 vs 진행 중 프로젝트)\n\n- **신규로 새로 작성하는 경우**: 아래 **표준 골격을 그대로** 기준으로 삼아 생성한다.\n- **이미 진행 중인 프로젝트 안에서 처리하는 경우**: 그 **프로젝트의 흐름·구조·컨벤션에 맞춰** 생성한다.\n - 예: 변수 선언 방식, 데이터/설정을 다루는 위치, 파일 구성, import 처리 방식 등 프로젝트의 기존 방식을 우선한다.\n - 이때 표준 골격은 **의미 흐름의 기준**(`데이터 → chartConfig → new sb.chart → render`)으로만 참고하고,\n 형식은 프로젝트에 맞춘다. **단, 어느 경우든 \"리터럴 나열·추론 금지·최소주의\" 원칙은 동일하게 지킨다.**\n - ※ 이것도 추론이 아니다 — 신규는 표준 골격, 진행 프로젝트는 그 프로젝트의 기존 패턴이라는 **확정된 기준**을 따르는 것이다.\n\n- 흐름 **`데이터(jsonData/columnData) → chartConfig → new sb.chart('#chartArea', chartConfig) → chart.render()`** 를\n **이 구조 그대로** 출발점으로 삼는다. 각 단계를 변수로 명시하고, 옵션은 `chartConfig` 안에 풀어서 적는다.\n- **`chartConfig`(옵션)은 반드시 리터럴**로 직접 나열한다. — 한눈에 읽혀야 함.\n - ✗ 금지: `chartConfig`(`global`·`data`·`keys`·`type` 등)를 **`for`/`forEach`·헬퍼(`makeConfig()` 등)로 생성**하기.\n - ✓ 예외: **표시용 데이터 행**(`jsonData`/`columnData`의 각 행)은 단순 `for` 루프로 만들어도 된다. — 데이터는 설정이 아니므로.\n (단 데이터 loop 도 필드 구조는 `keys`와 1:1로 단순하게 유지)\n- 한 파일에 차트가 **여러 개여도**, 각 차트의 `데이터`/`chartConfig`/`new sb.chart`/`render`를\n **차트별로 각각 명시적으로(풀어서)** 작성한다. (설정이 반복되어도 그대로 반복해 적는다.)\n- 이유: 초보 개발자가 **한 차트 블록만 봐도 전체 설정을 한눈에** 읽을 수 있어야 한다.\n 공통 함수로 묶으면 설정이 흩어져 가독성이 떨어진다. (§주석 규칙과 연결)\n- 요청받은 기능(차트 타입·축·옵션)만 이 골격 위에 **최소한**으로 얹는다. (§최소주의 참고)\n\n### 표준 템플릿 (필수 기준)\n\n> 아래가 **SBChart2.0 차트 생성의 표준 골격**이다. 반드시 이 구조에서 출발한다.\n> `#chartArea` → 데이터 → `chartConfig` → `new sb.chart` → `render` 흐름을 그대로 따른다.\n> SBChart 라이브러리 import(css·js 등)는 **신규 단독 HTML을 새로 작성할 때** 프로젝트 환경에 맞게 상단에 추가하고,\n> 이미 **다른 곳(공통 레이아웃·상위 페이지 등)에서 import 되어 있다면 생략**한다. (중복 import 금지)\n\n```html\n<body>\n <div id=\"chartArea\"></div>\n\n <script>\n var chart;\n\n let columnData = [ \n ['2015', 90, 40, 50, 120, 80, 90],\n ['2016', 120, 160, 200, 160, 130, 220],\n ['2017', 300, 240, 290, 230, 300, 320]\n ]\n\n let jsonData = [\n {\"name\": \"seoul\", \"2015\": 90, \"2016\": 120, \"2017\": 300},\n {\"name\": \"busan\", \"2015\": 40, \"2016\": 160, \"2017\": 240},\n {\"name\": \"daegu\", \"2015\": 50, \"2016\": 200, \"2017\": 290},\n {\"name\": \"kwangju\", \"2015\": 120, \"2016\": 160, \"2017\": 230},\n {\"name\": \"sejong\", \"2015\": 80, \"2016\": 130, \"2017\": 300},\n {\"name\": \"incheon\", \"2015\": 90, \"2016\": 220, \"2017\": 320}\n ]\n\n let chartConfig = {\n global: {\n size: {\n width: 600,\n height: 400\n }\n },\n data: {\n type: 'bar',\n json : jsonData,\n keys: {\n x: \"name\",\n value: [\"2015\",\"2016\",\"2017\"]\n },\n },\n }\n\n var chart = new sb.chart('#chartArea', chartConfig);\n chart.render();\n </script>\n \n</body>\n```\n\n> 위 템플릿엔 `columnData`(배열 형식)와 `jsonData`(객체 형식) 두 데이터 예시가 함께 있다.\n> 실제 사용하는 데이터 형식에 맞춰 `chartConfig.data`의 소스(`json`/`columns` 등)와 `keys`를 **리터럴로** 맞춘다.\n\n---\n\n## 3. 기능 범위 — 최소주의 (기능 임의 추가/삭제 금지)\n\n> 가장 중요한 작업 원칙. 근거 확인은 정확성을 위한 것이지, **기능을 마음대로 넣고 빼라는 뜻이 아니다.**\n\n- 기본 골격 위에 **사용자가 요청한 기능(차트 타입·축·옵션)만, 꼭 필요한 최소한**으로 넣는다.\n- **요청하지 않은 옵션/속성/기능을 임의로 추가하지 않는다.**\n - ✗ 예: 시키지 않은 `legend`·`tooltip`·`axis` 커스텀 등을 \"있으면 좋아 보여서\" 추가.\n - 어떤 옵션이 꼭 필요해 보이면 **코드에 바로 넣지 말고, 한 줄로 제안만** 하고 사용자 결정에 맡긴다.\n- 사용자가 **\"어떤 차트 타입/옵션 기준으로 만들라\"고 명시하면**(예: `type: 'bar'`·특정 축 설정 기준),\n **그 기준을 임의로 다른 타입/방식으로 바꾸지 않는다.** 변경이 필요하면 **먼저 사용자에게 확인**한다.\n- **이전 샘플의 요소도 사용자가 \"참고하라\"고 명시할 때만** 가져온다.\n- 사용자가 직접 단순화·수정한 코드는 **그 상태를 존중**하고, **빼라고 한 것만 정확히** 뺀다(관련 dead code·주석까지 함께 정리).\n\n---\n\n## 4. 샘플 주석·내용 규칙 (외부 발송용 참고자료)\n\n- 작성하는 샘플은 **외부(고객/타 개발자)에 전달하는 \"참고자료\"** 이다.\n 초보 개발자가 읽고 바로 이해할 수 있도록 **가독성 있고 쉬운 주석**으로 작성한다.\n (상단 개요 → 번호 섹션 → 각 함수 \"무엇/왜\" 주석 구조 권장. **디버그용 `console.log` 등은 제거**.)\n- **샘플 코드 주석에 \"작업 과정/근거 출처\"를 드러내지 않는다.**\n - ✗ 금지: `~문서 기준`, `출처: …`, `제공 예제` 등 **\"어디서 근거를 가져왔는지\"** 를 적는 표현.\n - ✓ 허용: **사용한 옵션·타입명과 그 동작 설명** (예: `type: 'bar'로 막대 차트를 그립니다`,\n `keys.x로 x축 기준을 지정합니다`).\n - 즉 **\"무엇을(어떤 옵션을) 어떻게 쓰는지\"는 적고, \"어디를 참고했는지\"는 적지 않는다.**\n- 라이브러리 결함 단정 등 **외부에 민감할 수 있는 표현**은 피하고, 동작·한계 위주로 중립적으로 서술한다.\n- **샘플 코드 주석의 문장 어미는 \"합니다체\"로 쓴다.** (외부 발송용이므로 정중체로 통일)\n - ✗ 금지: `~한다`, `~그린다`, `~바꾼다`, `~이다` 등 해라체/평서체 어미.\n - ✓ 사용: `~합니다`, `~줍니다`, `~그립니다`, `~바꿉니다`, `~입니다` 등 합니다체 어미.\n - 단, 명사형 라벨(예: `막대 차트`, `연도별 매출`)은 그대로 둬도 된다.\n\n---\n\n## 5. setTimeout 사용 자제\n\n- **`setTimeout`은 가급적 쓰지 않는다.**\n- 렌더 타이밍 등으로 **꼭 필요한 경우에도 임의로 넣지 말고**, 먼저 사용자에게 **\"왜 필요한지\" 알리고 동의를 구한 뒤** 사용한다.", "tools": [ { "description": "Get the full documentation for one SBChart2.0 option/API by exact name: detailed explanation, HTML/JS usage, example, and warnings. Use after searchSBChartAPI. For a chart type's data structure, query its 'dataFormat' entry (e.g. 'Gantt 차트 데이터 포맷'). ⚠️ SBChart2.0 코드/샘플 생성 시 서버 공통지침(표준 골격에서 출발 · chartConfig 리터럴 나열 · 요청 기능만 최소 적용) 준수 — 상세는 서버 instructions 참고.", "inputSchema": { "properties": { "name": { "description": "Exact option/API name as shown in searchSBChartAPI results (e.g. 'barFormat', 'Gantt 차트 데이터 포맷').", "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "getSBChartAPIDetail", "outputSchema": null }, { "description": "Find runnable SBChart2.0 code examples by feature or use case. Returns example code (data + config) for a chart type or option. Use when you want working sample code rather than the API reference. ⚠️ SBChart2.0 코드/샘플 생성 시 서버 공통지침(표준 골격에서 출발 · chartConfig 리터럴 나열 · 요청 기능만 최소 적용) 준수 — 상세는 서버 instructions 참고.", "inputSchema": { "properties": { "limit": { "description": "Maximum number of examples to return. Default 3.", "type": "number" }, "query": { "description": "Chart type, feature, or use case (e.g. 'bar chart', 'donut', 'tooltip', 'sankey').", "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "getSBChartExample", "outputSchema": null }, { "description": "Browse the SBChart2.0 API surface by section and/or category. Call with no argument to get sections and their categories; filter by section or category to narrow. Use to explore what chart types and options exist. ⚠️ SBChart2.0 코드/샘플 생성 시 서버 공통지침(표준 골격에서 출발 · chartConfig 리터럴 나열 · 요청 기능만 최소 적용) 준수 — 상세는 서버 instructions 참고.", "inputSchema": { "properties": { "category": { "description": "Optionally filter to a specific category.", "type": "string" }, "section": { "description": "Optionally restrict to one section.", "enum": [ "charts", "maps", "samples" ], "type": "string" } }, "required": [], "type": "object" }, "name": "listSBChartAPIs", "outputSchema": null }, { "description": "Search SBChart2.0 chart API and option documentation by keyword. Returns matching entries with name, section, summary, and syntax. Start here to find which option or chart type fits, then call getSBChartAPIDetail for full details or getSBChartExample for code. ⚠️ SBChart2.0 코드/샘플 생성 시 서버 공통지침(표준 골격에서 출발 · chartConfig 리터럴 나열 · 요청 기능만 최소 적용) 준수 — 상세는 서버 instructions 참고.", "inputSchema": { "properties": { "limit": { "description": "Maximum number of results to return. Default 5.", "type": "number" }, "query": { "description": "Keyword to search: a chart type, option, or feature (e.g. 'bar', 'tooltip', 'gantt', 'axis').", "type": "string" }, "section": { "description": "Optionally restrict results to one section.", "enum": [ "charts", "maps", "samples" ], "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "searchSBChartAPI", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:96ea90e31148b0b56dbb0928181ea3bcddbbbadfb2be8e3e63d913443bcbfaa2 | sha256sum