Uses environment variable configuration for API credentials and settings management
Operates as a local MCP server providing pharmaceutical information management tools without requiring external service dependencies
Includes specific configuration instructions for integration with Claude Desktop on macOS systems
Built as a Python-based MCP server requiring Python 3.9+ for pharmaceutical data management operations
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pilldoc User MCPshow me accounts with ad blocking disabled"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pilldoc User MCP (Local MCP Server)
이 프로젝트는 MCP 호환 클라이언트에서 사용할 수 있는 로컬 MCP 서버를 제공합니다. 로그인 토큰 발급과 주성분 목록 조회 기능을 도구(tool)로 노출합니다.
요구 사항
Python 3.9+
설치
환경 변수 설정
.env.example를 참고해 .env.local을 생성하세요.
필수
EDB_BASE_URL(예: https://dev-adminapi.edbintra.co.kr)EDB_LOGIN_URL(예: https://dev-adminapi.edbintra.co.kr/v1/auth/login)
선택
EDB_USER_ID,EDB_PASSWORD(로그인 시 기본값)EDB_FORCE_LOGIN(true/false)
환경 변수 예시
개발 서버 예시
실서버 예시
서버 환경
개발 서버:
https://dev-adminapi.edbintra.co.kr실서버:
https://webconsole-api.edbintra.co.kr/
서버 실행
단독 실행
매니페스트 (MCP 클라이언트용)
MCP 호환 클라이언트(예: IDE/Agent)에서 이 디렉토리를 로컬 서버로 등록하세요.
제공 도구 (Tools)
login(userId?, password?, force?, loginUrl?, timeout?) -> token미지정 시 환경변수 사용:
EDB_USER_ID,EDB_PASSWORD,EDB_LOGIN_URL
pilldoc_accounts(token? | userId/password, baseUrl?, accept?, timeout?, pageSize?, page?, sortBy?, erpKind?, isAdDisplay?, adBlocked?, salesChannel?, pharmChain?, currentSearchType?, searchKeyword?, accountType?) -> JSONpilldoc_user(token, baseUrl, id, accept?, timeout?) -> JSONpilldoc_pharm(token, baseUrl, bizno, accept?, timeout?) -> JSONpilldoc_adps_rejects(bizNo, token? | userId/password, baseUrl?, accept?, timeout?) -> JSONpilldoc_adps_reject(bizNo, campaignId, comment, token? | userId/password, baseUrl?, accept?, timeout?) -> JSONpilldoc_user_from_accounts(accountField?, accountValue?, index?, token? | userId/password, baseUrl?, accept?, timeout?, pageSize?, page?, sortBy?, erpKind?, isAdDisplay?, adBlocked?, salesChannel?, pharmChain?, currentSearchType?, searchKeyword?, accountType?) -> JSONpilldoc_accounts_stats(token? | userId/password, baseUrl?, accept?, timeout?, pageSize?, maxPages?, sortBy?, erpKind?, isAdDisplay?, adBlocked?, salesChannel?, pharmChain?, currentSearchType?, searchKeyword?, accountType?) -> JSON계정 목록을 페이지네이션으로 수집하여 통계를 집계합니다.
반환:
totalCountReported,pagesFetched,period.from/to,stats.monthly/region/erpCode/adBlocked
pilldoc_update_account(id, body, token? | userId/password, baseUrl?, accept?, timeout?, contentType?) -> JSON/v1/pilldoc/account/{id}로 PATCH 호출하여 약국/계정 정보를 수정
pilldoc_update_account_by_search(body, pharmName?, bizNo?, exact?, index?, accountType?, currentSearchType?, maxPages?, pageSize?, salesChannel?, erpKind?, pharmChain?, token? | userId/password, baseUrl?, accept?, timeout?, contentType?) -> JSON/v1/pilldoc/accounts에서 약국명/사업자번호로 id를 찾은 뒤/v1/pilldoc/account/{id}PATCH 수행pharmChain배열 필터 지원: 지정 시 체인 소속으로 추가 필터링salesChannel/erpKind배열 필터 지원maxPages: 검색 페이지 수 제한(0이면 전체), 대량 데이터에서 유용contentType: PATCH 요청 Content-Type 지정(기본application/json)bizNo는 하이픈 포함 형태(317-87-01363)로 입력해도 자동 정규화되어 조회됩니다./v1/pilldoc/accounts에서 계정을 골라 ID를 얻은 뒤/v1/pilldoc/user/{id}상세를 반환
간단 호출 예 (개념)
토큰 발급:
login({ userId, password, force: true })pilldoc 계정:
pilldoc_accounts({ token, baseUrl })광고 차단된 약국만:
pilldoc_accounts({ adBlocked: true })// 내부적으로isAdDisplay: 0으로 매핑광고 차단되지 않은 약국만:
pilldoc_accounts({ adBlocked: false })// 내부적으로isAdDisplay: 1으로 매핑월별/지역별 등 통계:
pilldoc_accounts_stats({ pageSize: 200, maxPages: 0 })pilldoc 사용자:
pilldoc_user({ token, baseUrl, id: "USER_ID" })pilldoc 계정 검색:
pilldoc_accounts({ pageSize: 20, page: 1, erpKind: ["iT3000"], accountType: "일반" })pilldoc 사용자(계정에서 선택):
pilldoc_user_from_accounts({ searchKeyword: "홍길동", currentSearchType: ["s"], index: 0 })pilldoc 약국:
pilldoc_pharm({ token, baseUrl, bizno: "사업자번호" })차단 캠페인:
pilldoc_adps_rejects({ token, baseUrl, bizNo: "사업자번호" })차단 등록:
pilldoc_adps_reject({ token, baseUrl, bizNo: "사업자번호", campaignId: 123, comment: "사유" })
약국 정보 업데이트 예시
검색 후 약국 정보 업데이트 예시 (adpsRejects 포함)
참고: pilldoc_find_pharm 결과의 matches[*]에는 account, user, pharm에 더해 adpsRejects가 포함됩니다.
pharmChain 허용 값
온누리약국
옵티마케어
더블유스토어
휴베이스
리드팜
메디팜
데이팜
위드팜
참약사
salesChannel 코드
1: 약학정보원
2: 비트
3: 한미
0: 터울
4: 팜플
5: 이디비
erpKind 코드
IT3000: [약학정보원] PharmIT3000
BIZPHARM: [비트컴퓨터] BizPharm-C
DAYPHARM: [데이팜] DayPharm
WITHPHARM: [위드팜] WithPharmErp
EPHARM: [이디비] EPharm
EGHIS: [이지스헬스케어] 이지스팜
디렉토리
src/mcp_server.py: MCP 서버 엔트리src/auth.py: 로그인/토큰 유틸
Claude Desktop 설정
macOS(로컬)에서 Claude Desktop과 연동하려면 아래 설정 파일을 생성하세요.
가상환경과 의존성 준비
설정 파일 생성 (macOS)
경로:
~/Library/Application Support/Claude/claude_desktop_config.json예시 내용(경로를 사용자의 실제 경로로 변경하세요).
-c실행 방식:
실서버 예시
참고: Claude Desktop은 cwd를 무시할 수 있습니다. 위 예시처럼 sys.path.insert(0, PROJECT_PATH) 또는 env.PYTHONPATH에 프로젝트 경로를 추가해야 import src...가 정상 동작합니다. 로그에 ModuleNotFoundError: No module named 'src'가 보이면 이 설정을 확인하세요.
Claude Desktop 재시작 후 사용
Claude 대화 입력창에서 등록된 MCP 도구들을 사용할 수 있습니다.
환경변수는 프로젝트 루트의
.env.local를 활용하세요.