Skip to main content
Glama
andreykutsenko

mcp-shop-server

mcp-shop-server

AI 에이전트에게 온라인 쇼핑몰 SQLite 데이터베이스(customers, products, orders, order_items)에 대한 읽기 전용 액세스를 제공하는 MCP 서버입니다. 에이전트는 이를 통해 데이터에 대한 분석 질문(데이터베이스 구조, 고객, 상품, 카테고리, 매출별 집계)에 답변합니다. 전송 방식은 stdio입니다.

데이터베이스 쓰기는 설계상 불가능합니다. 독립적인 3중 보호 계층이 있습니다: mode=ro 연결, 실행 전 쿼리 검증(SELECT / WITH ... SELECT만 허용), sqlite3-authorizer.

측정값, 증거, 명세서와의 차이점은 REPORT.md에 있습니다.


사용 방법

1. 클론

git clone https://github.com/andreykutsenko/mcp-shop-server.git
cd mcp-shop-server

리포지토리에는 이미 shop.db가 포함되어 있습니다(고객 150명, 상품 50개, 주문 750건, 주문 항목 1900개).

2. 의존성 설치

uv venv .venv
uv pip install --python .venv/bin/python -r requirements.txt

uv 없이도 표준 도구로 동일하게 수행할 수 있습니다:

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Python 3.11+가 필요합니다. 의존성: mcp(공식 MCP SDK) 및 테스트용 pytest; 데이터베이스 작업은 표준 라이브러리의 sqlite3을 사용합니다.

3. 에이전트 구성에 등록

최소 구성 형식:

{
  "command": "python",
  "args": ["/absolute/path/to/mcp-shop-server/server.py"]
}

mcpServers 블록이 있는 클라이언트(Claude Desktop, Cursor 및 호환 클라이언트)용 실제 예시:

{
  "mcpServers": {
    "shop-db": {
      "command": "/absolute/path/to/mcp-shop-server/.venv/bin/python",
      "args": ["/absolute/path/to/mcp-shop-server/server.py"],
      "env": {
        "MCP_SHOP_DB": "/absolute/path/to/mcp-shop-server/shop.db"
      }
    }
  }
}

Claude Code의 경우 단일 명령으로 충분합니다:

claude mcp add shop-db -- /absolute/path/to/mcp-shop-server/.venv/bin/python /absolute/path/to/mcp-shop-server/server.py

MCP_SHOP_DB는 선택 사항입니다. 변수가 설정되지 않으면 서버는 server.py 옆에 있는 shop.db를 사용합니다. 데이터베이스가 다른 위치에 있으면 이 변수를 지정하세요. 인터프리터는 .venv에서 지정하는 것이 좋습니다. 그렇지 않으면 시스템 pythonmcp 패키지를 찾지 못할 수 있습니다.

4. 실행

서버는 에이전트가 시작하며, 수동으로 실행할 일은 거의 없습니다:

.venv/bin/python server.py

프로세스는 stdin에서 JSON-RPC를 조용히 기다립니다. 진단은 stderr로 출력되고, stdout은 MCP 프로토콜이 사용합니다.

5. 확인 및 에이전트 질문

.venv/bin/python -m pytest -q

연결 후 에이전트는 세 가지 도구를 볼 수 있습니다. 질문은 일반 언어로 합니다.

과제 텍스트의 8가지 작업 — 확인을 위해 이 작업들을 실행하는 것이 좋습니다:

1. Show me all available tables and explain what information each table contains.
2. How many customers are from Germany?
3. Which country has the most customers?
4. Who is the customer who spent the most money?
5. What are the top 5 best-selling products?
6. What are the top 3 product categories by revenue?
7. How much revenue did we generate in 2025?
8. Which customer placed the most orders?

⚠️ 제공된 데이터베이스에는 작업 2, 3, 7에 대한 해결책이 없으며, 이는 예상된 결과입니다. customers에는 국가 열이 없습니다. 모든 150명의 고객은 러시아 전화번호를 가지고 있습니다. 모든 750건의 주문은 2026년 날짜이며, 2025년 데이터는 없습니다.

이 경우 서버는 데이터를 지어내지 않습니다: 해당 필드가 스키마에 없다고 알리고 기존 열을 나열합니다. 코드에 하드코딩된 것은 없습니다. 스키마는 데이터베이스에서 읽히므로 country가 있는 다른 데이터베이스에서는 동일한 질문이 정상적으로 작동합니다.

추가로 데이터베이스가 완전히 커버하는 질문도 확인합니다: 주문 금액 기준 상위 5명의 고객, 카테고리별 매출, 주문 상태별 분포, 평균 주문 금액, 상품 재고.

쓰기 방지 확인. "Delete all cancelled orders"에 대해 에이전트는 오류가 아닌 명확한 거부를 받습니다: 서버는 읽기 전용으로만 작동하며, 102건의 취소된 주문은 그대로 유지됩니다.

도구

도구

용도

list_tables()

모든 테이블과 용도, 행 수, 열, 관계, 주문 상태 목록, 날짜 형식.

describe_table(table)

실제 열과 유형, 양방향 외래 키, 예시 행.

run_select_query(sql, limit=100, offset=0)

단일 SELECT(또는 WITH ... SELECT)를 실행하고 행을 페이지 단위로 반환.

출력은 제한됩니다: 기본 100행, 최대 1000행. 잘릴 때 응답은 반환된 행 수, 전체 발견된 행 수, 다음에 읽을 offset을 알려줍니다.

요청한 필드가 데이터베이스에 없으면(예: 고객 국가) 서버는 정직하게 이를 알리고 기존 열을 나열합니다. 존재하지 않는 필드는 추측하지 않습니다.


Related MCP server: Shop Analytics MCP Server

구현 방법

프로젝트는 단일 프롬프트로 생성되었습니다. SPEC-mcp-shop.md 파일이 에이전트에 전체적으로 전송되었으며, 이후 수정은 없었습니다.

내부적으로 에이전트는 repo-task-proof-loop (Denis Shiryaev, Apache-2.0) 스킬의 루프로 작업했습니다: 스펙 동결 → 빌드 → 증거 패키징 → 새 세션으로 검증 → 최소 수정 → 재검증, PASS 판정까지.

실행 증거는 리포지토리의 .agent/tasks/mcp-shop-server/에 있습니다:

  • spec.mdAC1…AC17 수용 기준이 포함된 동결된 스펙;

  • evidence.md / evidence.json — 각 기준에 대한 판정 및 구체적 증거;

  • verdict.json — 새 세션의 독립 검증 결과;

  • problems.md — 검증자가 발견한 차이점;

  • raw/ — 실행의 원시 로그: 테스트, 실제 MCP 세션, stdout 청결 검사.

소스 코드가 아니라 실제 에이전트와 함께하는 서버 동작이 검증됩니다. harness raw/mcp_session_check.py는 실제 MCP 클라이언트로 stdio를 통해 server.py를 시작하고, 모든 도구를 호출하고, 8가지 분석 작업을 실행하고, 삭제 요청에 대한 거부를 받고, stdout에 JSON-RPC 프레임만 포함되어 있는지 확인합니다.

개발 스킬 자체는 로컬의 .claude/skills/에 있으며 리포지토리에는 커밋되지 않습니다. 이것은 타인의 코드입니다.


명세서 모호성에 대한 결정 사항

#

모호성

결정

1

"에이전트는 명세서의 8가지 작업 모두에 답변합니다" — 8가지 작업 목록 자체는 명세서에 없음.

8가지 분석 질문은 <objective> 섹션("데이터베이스 구조, 고객, 상품, 카테고리, 매출별 집계")에서 도출되었으며 위의 "확인 및 에이전트 질문" 섹션에 고정되었습니다. 각 질문은 .agent/tasks/mcp-shop-server/raw/test-integration.txt에서 서버 도구를 통해 실행됩니다.

2

MCP SDK 버전이 고정되지 않음.

최신 라인 mcp>=2.1,<3(API MCPServer)을 사용했습니다. mcp 1.x에서는 클래스 이름이 FastMCP였습니다. 상한선을 고정하여 설치를 재현 가능하게 했습니다.

3

"최대 1000행" — 오류인지 잘림인지 명시되지 않음.

limit이 1000을 초과하는 것은 오류로 간주하지 않습니다. 값은 1000으로 상한이 제한되며 notes 필드에 보고됩니다. 오류는 limit < 1 및 음수 offset뿐입니다.

4

무제한 선택 시 "전체 발견된 행 수".

커서 결과는 완전히 계산되지만 100,000행을 초과하지 않습니다. 쿼리가 더 많은 결과를 반환하면 total_is_exact=false이고 응답에는 "최소 N"이라고 표시됩니다. 이렇게 정직한 숫자가 멈춤 위험이 되지 않습니다.

5

Authorizer는 읽기 외의 모든 것을 금지하지만 describe_tablePRAGMA table_info가 필요함.

Authorizer는 세 가지 읽기 전용 pragma(table_info, foreign_key_list, index_list)만 허용합니다. 사용자 PRAGMA는 어떤 형태로든 실행 전에 두 번째 계층인 검증기에서 거부됩니다.

6

도구 응답 형식이 지정되지 않음.

모든 도구는 ok 필드가 있는 구조화된 객체를 반환합니다. 거부 및 오류는 MCP 예외가 아닌 ok=false와 텍스트 설명입니다. 에이전트는 이를 전송 오류가 아닌 응답으로 읽습니다.

7

도구 이름 및 구성("집합은 직접 설계").

권장 최소 3개 도구를 정확히 list_tables, describe_table, run_select_query 이름으로 유지했습니다. 그 외 모든 것(집계, 상위, 연도별 슬라이스)은 run_select_query로 표현되며, 별도의 좁은 도구는 컨텍스트만 부풀릴 뿐입니다.

8

쿼리 끝의 세미콜론.

끝의 ;는 허용됩니다. 단일 명령문입니다. ; 뒤의 두 번째 비어 있지 않은 명령문만 거부됩니다. 문자열 리터럴 내부의 세미콜론은 두 번째 명령문으로 간주되지 않습니다.

9

테스트 및 harness 위치.

테스트는 tests/test_server.py(명세서 <tests> 항목별로 번호 매김)에 있고, 실제 MCP 세션 harness는 .agent/tasks/mcp-shop-server/raw/에 증거와 함께 있어 검증 시 다시 실행할 수 있습니다.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to safely interact with a SQLite shop database through schema discovery, read-only SQL queries, and pre-built analytics reports like top customers, top products, and revenue summaries.
    6
    83
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to answer analytical questions about an online store's SQLite database through specialized read-only tools, without any risk of modifying the underlying data.
    8
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to read-only query an online store's SQLite database, listing tables, inspecting schemas, and running SELECT queries over customers, products, orders, and order items.
    3
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to read-only analyze a SQLite e-commerce database, exploring schema and running analytical SQL queries over stdio.

Latest Blog Posts

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/andreykutsenko/mcp-shop-server'

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