llm-analytics-mcp
MCP 통합을 갖춘 LLM 기반 분석 시스템
언어 모델에 테이블 형식 데이터 분석을 위한 도구 세트를 제공하는 MCP-서버: 로드, 정리, 그래프 작성, 보고서 조립. 자체 채팅 인터페이스는 개발하지 않음 — 기성 플랫폼의 웹 인터페이스를 사용함 (Claude를 기본 클라이언트로, ChatGPT를 대안으로).
동일한 도구 레지스트리가 두 프로토콜로 동시에 게시됩니다:
프로토콜 | 엔드포인트 | 클라이언트 |
MCP (Streamable HTTP) |
| Claude — 웹, 데스크톱, 모든 MCP-클라이언트 |
REST + OpenAPI |
| ChatGPT Custom GPT Action |
시스템이 할 수 있는 일
도구 12개, 스킬 5개. 전체 목록은 describe_system 호출 또는
ARCHITECTURE.md에서 확인할 수 있습니다.
도구 | 스킬 | 용도 |
| — | 사용 가능한 데이터 카탈로그 |
| DataLoadingSkill | 카탈로그, 경로 또는 URL에서 CSV/TSV/Excel/JSON/Parquet 로드 |
| DataLoadingSkill | 구조, 유형, 결측값, 중복값 |
| DataCleaningSkill | 중복값, 결측값, 정규화, 이상치 |
| InsightGenerationSkill | 데이터 구조에 따른 분석 계획 자동 추천 |
| VisualizationSkill | 시간에 따른 지표 동향 |
| VisualizationSkill | 히스토그램 또는 막대 차트 (유형은 자동 선택) |
| VisualizationSkill | 상관관계 히트맵 |
| VisualizationSkill | 카테고리별 지표 분석 |
| InsightGenerationSkill | 보고서 텍스트를 위한 검증 가능한 수치 |
| ReportingSkill | Markdown, HTML 및 PDF 보고서 |
| — | 인트로스펙션: 스킬 및 도구 구성 |
추가 기능:
분석 자동 추천 —
suggest_analysis가 어떤 컬럼이 시간 축이고, 어떤 것이 지표이고, 어떤 것이 분석 기준인지 판단하여 각 단계의 근거와 함께 완성된 호출 계획을 반환합니다.멀티-포맷 및 멀티-소스 — CSV, TSV, Excel, JSON, Parquet; 카탈로그, 로컬 경로 또는 HTTP(S) 링크. 마지막 항목은 웹 시나리오에서 핵심적입니다: 브라우저 채팅에 업로드된 파일은 서버에서 접근할 수 없습니다.
한 번의 명령으로 보고서 조립 —
build_report가 누락된 그래프를 자체적으로 보완하고 세 가지 형식의 문서를 출력합니다.
Related MCP server: Claude Data Buddy
설치
Python 3.10 이상이 필요합니다.
git clone <адрес-репозитория>
cd llm-analytics-mcp
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt1단계. 테스트 데이터
저장소의 데이터는 Superstore 스키마를 기반으로 합성 생성되었습니다. 요구사항이 이를 명시적으로 허용합니다: «데이터를 직접 생성하거나 알려진 데이터셋을 사용할 수 있습니다».
python scripts/prepare_dataset.py --synthetic --rows 4000완성된 파일은 이미 data/에 있습니다 — 명령이 필요한 경우는
데이터를 다시 생성하거나 볼륨을 변경하려는 때뿐입니다.
Kaggle이 아닌 합성 데이터를 사용하는 이유
생성기는 시스템이 정확히 무엇을 보여주는지 통제할 수 있게 합니다:
검증 가능한 패턴이 내장되어 있음 — 상승 추세, 연말 정점이 있는 연간 계절성, 그리고 «할인 30% 초과 → 마이너스 이익» 관계. 덕분에 분석 결론이 우연이 아니라 의미를 갖습니다.
결함이 의도적으로 주입됨. 실제 Superstore는 거의 완벽하게 깨끗합니다: 결측값과 중복값이 없으면
DataCleaningSkill은 «0행 삭제»라고 보고하게 되고, 정리를 시연할 수 없게 됩니다.재현성. 고정된
seed=42— 검증자는 예시와 정확히 동일한 데이터와 보고서의 동일한 수치를 받게 됩니다.저장소가 자족적임. 프로젝트를 실행하기 위해 Kaggle 계정이 필요하지 않습니다.
실제 Superstore 로드도 지원됩니다 — 컬럼 구조가 일치합니다:
python scripts/prepare_dataset.py --input ~/Downloads/Sample-Superstore.csv스크립트가 생성하는 것
파일 | 용도 |
| 요구사항의 컬럼에 맞춰진 데이터 |
| 결함이 주입된 동일한 테이블 |
컬럼: Date, Product, Region, Sales, Quantity, Profit (요구사항에서)
추가로 분석 기준 Category, Sub-Category, Segment, Discount, Ship Mode.
기간 — 2021–2024, 48개월.
결함 구성은 실행 시 출력되며 결정적입니다:
결함 | 규모 |
| ~3.5% / 4.5% / 2% |
완전한 중복 행 | ~0.8% |
| ~6% 행 |
| 12행 |
대체 날짜 형식 ( | ~10% 행 |
2단계. 서버 없이 검증
로드부터 PDF 보고서까지 전체 체인의 종단 간 실행:
PYTHONPATH=src python -m analytics_mcp.selfcheck스크립트는 LLM이 대화에서 수행하는 작업을 반복하지만 결정적으로 수행합니다. 데모 전 smoke-테스트로 유용합니다: 통과한다면 문제는 거의 확실히 분석이 아닌 통합에 있는 것입니다.
3단계. 서버 실행
PYTHONPATH=src uvicorn analytics_mcp.app:app --host 127.0.0.1 --port 8000확인:
curl http://127.0.0.1:8000/health유용한 주소:
주소 | 설명 |
| 상태 및 등록된 컴포넌트 수 |
| Swagger UI: 모든 도구를 직접 호출 가능 |
| Custom GPT Action용 스펙 |
| MCP-엔드포인트 |
포트가 사용 중인 경우. 이전에 시작된 프로세스가 계속해서 이전 코드로 응답할 수 있습니다 — 증상이 기만적입니다:
/health는 응답하지만 변경 사항이 적용되지 않습니다. 재시작 전에:pkill -f uvicorn.
4단계. ngrok을 통한 공개 주소
Claude는 외부에서 서버에 접근하므로 HTTPS 주소가 필요합니다.
# 1. Установка и регистрация: https://ngrok.com/download
ngrok config add-authtoken <ваш-токен>
# 2. В личном кабинете ngrok зарезервируйте бесплатный статический домен
# (Domains -> Create Domain). Без него адрес меняется при каждом
# перезапуске, и настройку коннектора придётся повторять.
# 3. Запуск туннеля
ngrok http 8000 --domain=ваш-домен.ngrok-free.app그런 다음 주소를 환경에 등록하고 서버를 재시작합니다:
cp .env.example .env
# в .env укажите:
# PUBLIC_BASE_URL=https://ваш-домен.ngrok-free.app
export PUBLIC_BASE_URL=https://ваш-домен.ngrok-free.app
export MCP_ALLOWED_HOSTS='127.0.0.1:*,localhost:*,*.ngrok-free.app'
PYTHONPATH=src uvicorn analytics_mcp.app:app --host 127.0.0.1 --port 8000«연결되지 않음»의 가장 흔한 원인. MCP SDK는 기본적으로 DNS 리바인딩 보호를 활성화하며
localhost형식의Host헤더만 수락합니다. 터널 뒤에서는Host에 ngrok 도메인이 포함되며 요청은 커넥터 연결 단계에서 명확한 오류 없이 거부됩니다.MCP_ALLOWED_HOSTS변수가 정확히 이 문제를 해결합니다.
5단계. Claude에 연결 (기본 시나리오)
Settings → Connectors → Add custom connector를 엽니다.
주소를 지정합니다:
https://your-domain.ngrok-free.app/mcp(/mcp접미사에 주의).저장하고 커넥터가 연결됨 상태로 전환되었는지 확인합니다.
새 대화에서 도구 메뉴를 통해
analytics_mcp커넥터를 활성화합니다.prompts/system_prompt.md의 내용을 프로젝트 설명(Project instructions)에 복사합니다 — 호출 순서를 지정합니다.
확인 요청: «사용 가능한 데이터셋은 무엇인가요?» — 모델은
list_datasets를 호출하고 카탈로그 내용을 표시해야 합니다.
6단계. ChatGPT에 연결 (대체 시나리오)
공개 주소로 스펙을 내려받습니다:
PUBLIC_BASE_URL=https://ваш-домен.ngrok-free.app \ PYTHONPATH=src python scripts/export_openapi.pyCustom GPT를 생성합니다: Explore GPTs → Create → Configure.
Create new action → Schema —
openapi.json내용을 붙여넣습니다.Authentication: None.
Instructions 필드에
prompts/system_prompt.md를 붙여넣습니다.
그래프 표시의 세부 사항 및 특징은
prompts/gpt_action_setup.md에 있습니다.
데모 시나리오
요청 순서는 스크린샷에서 하나의 요청이 아닌 호출 체인이 보이도록 선정되었습니다. 핵심 장면은 4단계입니다: 하드코드가 아니라 모델이 무엇을 계획하는지 보여줍니다.
# | 사용자 요청 | 예상 호출 |
1 | 사용 가능한 데이터셋은 무엇인가요? |
|
2 | superstore_raw를 로드하고 구조를 설명해줘 |
|
3 | 데이터를 정리해줘 |
|
4 | 여기서 무엇을 분석해야 할까? |
|
5 | 이 그래프들을 그려줘 |
|
6 | 결론과 권장사항이 있는 보고서를 만들어줘 |
|
결과 예시 — docs/report_example.md,
그래프 — docs/plots/.
작업 스크린샷
데모 자료는 docs/screenshots/에 있습니다:
파일 | 표시 내용 |
Claude가 | |
| |
«결측값 채움» 및 «채우지 않음» 데이터셋 버전 비교 | |
모델이 보고서의 가설을 새 도구 호출로 검증 | |
추가 분석 방향의 우선순위 목록 | |
그래프 작성; 모델이 도구가 하지 못하는 것을 명시적으로 언급 |
스크린샷은 시스템의 핵심 속성을 보여줍니다: 호출 체인을 LLM이 제어합니다. 모델이 어떤 도구를 호출할지 스스로 결정하고, 도구 세트의 한계(예: 행 필터링 부재)를 발견하며, 결과를 왜곡하는 대신 이를 보고합니다.
통합 확인
# Полный цикл по обоим транспортам: initialize, tools/list, tools/call,
# возврат изображения, обработка ошибочных аргументов
python scripts/integration_test.py저장소 구조
llm-analytics-mcp/
├── README.md инструкция (этот файл)
├── ARCHITECTURE.md архитектура и роль MCP/скиллов
├── openapi.json спецификация для Custom GPT Action
├── requirements.txt
├── .env.example
├── data/ тестовые данные
├── docs/
│ ├── report_example.md/html/pdf пример сгенерированного отчёта
│ ├── plots/ примеры графиков
│ └── screenshots/ скриншоты диалога
├── prompts/
│ ├── system_prompt.md инструкция для LLM
│ └── gpt_action_setup.md настройка Custom GPT Action
├── scripts/
│ ├── prepare_dataset.py подготовка данных
│ ├── export_openapi.py выгрузка спецификации
│ └── integration_test.py проверка обоих транспортов
└── src/analytics_mcp/
├── core/ реестр инструментов, хранилище, модели
├── skills/ бизнес-логика этапов анализа
├── tools/ инструменты, публикуемые наружу
├── transports/ адаптеры MCP и REST
├── rendering/ оформление графиков, артефакты
├── app.py сборка ASGI-приложения
└── selfcheck.py сквозная самопроверка나만의 도구 추가 방법
이때 핵심은 변경되지 않습니다. src/analytics_mcp/tools/my_tools.py 파일을 생성합니다:
from __future__ import annotations
from analytics_mcp.core.datasets import store
from analytics_mcp.core.registry import tool
@tool(tags=("stats",), skill="DataLoadingSkill", title="Топ значений")
def top_values(column: str, dataset_id: str | None = None, limit: int = 10) -> dict:
"""Возвращает самые частые значения колонки.
Args:
column: Имя колонки.
dataset_id: Датасет. По умолчанию — последний использованный.
limit: Сколько значений вернуть.
"""
record = store.get(dataset_id)
record.require_column(column)
counts = record.df[column].value_counts().head(limit)
return {str(k): int(v) for k, v in counts.items()}서버를 재시작합니다. 도구는 두 프로토콜 모두에 즉시 나타납니다:
MCP의 tools/list와 REST의 /openapi.json에. tools 패키지는
모듈을 자동으로 임포트하고, JSON 스키마는 시그니처에서, 설명은
독스트링에서 파생됩니다.
알려진 제한 사항
의도적으로 명시된 것들입니다 — 이는 프로토타입의 경계이지 미완성 작업이 아닙니다:
인메모리 데이터셋 저장소. 서버를 재시작하면 로드된 데이터는 손실된다. 프로토타입에는 허용 가능하지만, 프로덕션에서는 Redis 또는 디스크를 사용한다.
인증 없음. 데모 스탠드는 임시 터널 뒤에 있다. 프로덕션에서는 헤더의 API 키와 FastAPI 측 검증이 필요하다.
행 필터링 없음. 도구는 데이터셋 전체를 대상으로 동작한다. "2024년 West 지역만" 같은 슬라이스를 만들 수 없다. 이는 데모에서 분명히 드러나는데, 모델은 출력을 맞추는 대신 계산할 수 없는 것을 솔직하게 알려준다.
스킬은 다섯 개, 그 이상은 아님. 의식적인 선택이다. 형식적인 열 개보다 실제로 동작하는 다섯 개가 낫다.
유닛 테스트 없음 — 오직
selfcheck.py종단 간 자가 점검과 두 전송 방식에 대한 통합 테스트만 있다.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered business intelligence and data analysis using pandas and LLM code generation. Supports automated data processing, statistical analysis, and visualization creation through natural language interactions.15
- FlicenseNot gradedqualityDmaintenanceEnables conversational analysis of CSV and Parquet files through natural language, providing statistics, summaries, data type information, and comprehensive multi-step data analysis.
- AlicenseNot gradedqualityAmaintenanceGives LLM agents access to local and remote data via databases, files, graphs, and structured documents, along with a full data science toolkit for analysis and modeling.3Apache 2.0
- AlicenseBqualityCmaintenanceEnables LLMs to work with Excel and CSV files through structured tools for workbook operations, formatting, charts, ETL, analysis, and more.692MIT
Related MCP Connectors
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
The grounded data layer for any LLM: governed SQL, metrics, lineage and catalog over your data.
The statistical analyst in your AI chat — validated, citable, re-runnable analysis of your data.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Kirill-FD/llm-analytics-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server