chineur
chineur
어떤 프로젝트 전체를 최고의 가격으로 배송비 포함 견적하고, 신품과 중고품을 분리하며, 실제 지불 총액을 최소화하는 묶음 주문 계획을 제시합니다.
상품별 최저가를 고르는 것은 정답이 아닙니다. 판매자 10곳에서 상품 10개를 사면 배송비가 10번 듭니다. 장바구니 엔진은 무료배송 기준까지 감안해 구매를 판매자 2~3곳으로 묶고, 그 단순 합산 총액과의 차이를 보여줍니다.
Installation
python -m venv .venv && ./.venv/bin/pip install -e .
./.venv/bin/pytest # 74 tests hors ligne, aucun réseauPython 3.11 이상. 이 프로젝트는 어떤 키 없이도 동작합니다. LeDénicheur, AliExpress, Leboncoin은 아무것도 요구하지 않습니다. 키가 필요한 소스(eBay, Mouser)는 그냥 꺼져 있고, list_sources()가 그 사실을 알려줍니다.
Related MCP server: aws-calculator-assistant
Clés 한국어
버전 관리되는 파일에서 어떤 비밀값도 읽지 않습니다. bin/chineur-mcp.sh는 로컬 .env 파일이 있으면 이를 로드하고(git에서 무시됨), 없으면 환경을 그대로 사용합니다. 이렇게 하면 시크릿 관리자에서 값을 단순 치환으로 주입할 수 있고, 값은 프로세스 환경을 통해서만 전달됩니다:
export EBAY_CERT_ID=$(votre-cli-de-coffre get password 'eBay - API Browse')변수 | 역할 | 없으면 |
| eBay Browse 키셋 | eBay 소스 꺼짐 |
| Mouser Search API 키 | Mouser 소스 꺼짐 |
| 쪽 최대-봇 벽에 대한 브라우저 대체 수단 | 대체 꺼짐, 나머지는 동작 |
| 상태 디렉터리(캐시, 할당량, 쿠키, 로그) |
|
사용 방법
MCP stdio로 노출되며(bin/chineur-mcp.sh), 도구는 세 가지입니다:
도구 | 역할 |
| 전체 목록을 단 한 번의 호출로 견적 |
| 단일 상품의 경우, |
| 각 소스의 상태, 남은 시간별 할당량과 진행 중인 차단 여부 |
각 상품은 수량 또는 상한을 받습니다. "LD2410C x3", "ESP32-S3 <=12€".
명령줄에서:
python -c "
import asyncio; from chineur.models import Project
from chineur.search import Orchestrator; from chineur.report import render
async def m():
o = Orchestrator(); print(render(await o.run(Project.build(['LD2410C x2','BME280'])), failures=o.failures))
asyncio.run(m())"Sources et ce qu'elles valent
Source | 충당 여부 | 배송비 | 참고 |
LeDénicheur | 새 + 중고 | 정확 | 집계자: 한 번의 질의로 Amazon, Cdiscount, Fnac, Rue du Commerce, Back Market, Rakuten 결과를 가져옴 |
AliExpress | 새 | 추정 | 중국 틈새 모듈의 유일한 현실적인 소스 |
Leboncoin | 중고 | 추정 | 시간당 최대 10회 검색, 타협 불가 |
eBay | 새 + 중고 | 정확 | 공식 Browse API, 2026-08-06부터 활성 |
Mouser | 새 | 추정 | 전문 유통업체, 공식 API. AliExpress가 놓치는 것(주, 납, 땜납 브레이드, 저항, 트랜지스, 커넥터)을 커버. 중국 모듈에는 무용지물: 없음, 또는 3~5배 가격 |
확인된 한계는 2026-08-05에 측정되었으며 Playwright(V2) 없이는 우회할 수 없습니다:
AliExpress는 판매자도 배송비도 제공하지 않습니다. 검색 페이지에는 판매자와 배송비도 없고, HTTP 단순 제품 페이지는 비어 있습니다. 따라서 묶음은 플랫폼 수준에서 프랑코 임계값과 함께 발생합니다. 몇 번 연속된 요청 이후 AliExpress는 200과 2Ko 페이지를 반환합니다. 이는 차단으로 감지·처리되며, 제안이 없다고 처리되지 않습니다.
AliExpress의 예산은 신선한 IP당 문서 6회 요청입니다. 2026-08-10에 어떤 요청도 없이 46시간 뒤에 측정: 상품 6개 서비스(133개의 오퍼), 7번째에서 차단, FlareSolverr도 같은 벽에 부딪혔습니다. 따라서 17개 상품 목록은 어떤 대기 시간을 지키든 한 번의 스크래핑으로는 산출할 수 없습니다*. 여기가 바로 공식 제휴 API(portals.aliexpress.com)를 도입하는 구조적인 한계지, 조정해야 할 매개변수가 얻습니다.
중고품 가격은 참고용입니다. Leboncoin 광고는 순수 텍스트입니다. 결과가 묶음인지 파손된 부품인지 액세서리인지 불분명할 수 있습니다. 새 상품과 중고 상품은 절대 하나의 가격으로 합계되지 않습니다.
배송비가 추정될 때는
~로 표시되고(shipping.py표), 알 수 없을 때는?로 표시됩니다. 추정치가 포함된 합계는 지금 그렇게 표시됩니다.
관련성: 진짜 한계 요인
2026-08-08에 실제 대표 목록(17개 상품, 부품)을 측정: “못 찾는 항목”은 소스 부족이 아니라 기재명 때문이었습니다. 두 가지 다른 원인을 표시하기 위해 필터 일본 전에 eBay가 반환한 제목 원본을 세는 것으로 구분했습니다.
요청이 너무 길다. «etain soudure 60/40 flux 0.8mm»는 eBay에서 0건을, «etain soudure»는 11건을 돌려줍니다. 설명하는 단어가 하나씩 추가될 때마다 결과가 비활 때까지 좁아집니다. 이 때문에 reduced_query와 guarded_search의 두 번째 기회: 어떤 소스가 아무것도 반환하지 않으면, 참조와 처음 두 개의 주요 단어로만 줄인 이름으로 다시 시도합니다. 추가 1회만 확인, 그리고 절대 할당량의 마지막 크레딧에서는 하지 않습니다.
필터가 좋은 결과를 버리고 있었다. «cables dupont assortiment» 대 «Câble Dupont … Assortiment 5 à 100pcs»는 임계값 0.70에서 0.67로 떨어졌습니다. 점수는 문자열 포함 여부만 비교했기 때문에 복수형 때문에 전부 깨졌습니다. _apparie 이제 공통 접두사(단어 60%)로 매칭하며, 최소인단어 4자 이상인 것만 해당—숫자나 짧은 참조에는 절대 적용하지 않습니다. «2410»과 «2420»은 여전히 서로 다른 센서로 남아 있어야 합니다.
같은 목록에서의 결과: eBay는 17개 중 기록 상품이 10개에서 14개로 늘고, 어떤 제안도 없는 상품은 5개에서 3개로 됩니다. 진짜 못 찾는 것은 전체 소포에서도 세 가지: 패치 기판, Diese 2201M, Sugon 8620DX입니다.
지불해야 할 대가가 있고, 그것은 실재하는 것입니다. 확대된 검색은 제기된 질문보다 더 넓은 질문에 응답합니다: «ESP32-WROOM-32 DevKit 38 pollues»을 «esp32 wroom 32»로 확장하면 30핀 모델이 있습니다. 따라서 확장의 모든 제안에는 «…»로 확장된 검색이라는 경고가 표시되어야 하며, 표시될 때까지 그대로 남아 있어야 합니다.
브라우저 대응 (FlareSolverr)
이 프로젝트의 약점: AliExpress는 중국 모듈을 얻을 수 있는 유일한 소스인데, 검색 5~9회면 차단됩니다. README는 이 빈틈을 “Playwright(V2) 없이는 무미”라고 말했습니다. 그런데 별도의 프로젝트 종속성 없이 우회됩니다: FlareSolverr 인스턴스가 실제 Chrome을 구동하고 종류 자바스크립트를 실행하며 완전한 브라우저 지문을 갖습니다. FLARESOLVERR_URL로 지정하고, 입력하지 않으면 해당 수단은 그저 꺼져 있습니다.
2026-08-08에 직접 연결이 차단되고 서킷 브레이크가 열려 있었을 때 측정: fr.aliexpress.com/w/wholesale-LD2410C.html는 HTTP 200, 832Ko, 어떠한 안티봇 마커도 없는 상태로 반환되었고, 기존 HTML 파서는 그 페이지에서 60개 상품을 EUR 가격으로 디코딩했습니다. 구문 분석 변경은 필요했습니다.
AliExpress._items에서의 연결: 안티봇 벽 또는 잘린 페이지에 닿으면 Blocked를 발생시키기 전에 대응 수단부터 시도합니다. 설계 요점:
대체지, 상시 모드가 아님. 호출할 때마다 Chrome을 하나 시작합니다. 느리고 무거운 등. 확인된 차단에서만 사용합니다.
None이고[]가 아니다. 플백이 아무것도 안 때 빈 목록은 “결과 없”으로 간주되고 사용자가 벽에 닫히지 않아서 다음 상품에서 저지된 소스를 다시치는 것이며 불평한을 악화시킵니다.절대 멈추지 않는다.
flaresolverr.fetch는 예외를 던지지 않습니다. 해결프로그램이 고장 나면 실제 원인이 인프라 사고 뒤에 가리기 때문입니다.FLARESOLVERR_URL=로 끌 수 있습니다.연속 두 번 실패하면 포기합니다. 아래 한계 참조: 그렇지 않으면 예외 상품마다 몇십 초씩 소모되는 몇십 초가 반복됩니다.
그 한계, 2026-08-08에 측정. 대응은 경로를 우회하는 것이 아니라 두 번째 예산입니다. AliExpress 검색 여덟 개를 연속으로 진행: 여섯 개는 각각 60개 상품을 반환(4 ~ 6 초), 일곱 번째는 101초 후 HTTP 500이 반환되었고, 여덟 번째는 안티봇 벽(208Ko, 마커 RGV5 )을 반환. 참조 IP가 변하지 않기 때문에 결국에서 같은 은색에 부딪됩니다. 코드에는 두 가지 결과가 있습니다: maxTimeout은 90초에서 45초로 줄었고, HTTP 200으로 반환된 벽이 실패로 계산됩니다. 그렇지 않으면 inutil 폭리를 뜻없습니다.
실무에서 AliExpress 예산은 약 9회 검색에서 약 15회로 늘어나고, 페이지 20개에서 60개로 증가합니다. 그만한 이득이지, 무제한은 아닙니다.
안티차단 가드
공통 IP는 고정적이고, 대역도 동일합니다. 차단되면 완전히 연결이 끊어집니다. 이 모듈이 그런 상황에 절대 빠지지 않도록 작성되었습니다.
시간당 할당량을 SQLite(
var/chineur.db)에 저장: Leboncoin 10/h, LeDénicheur 30/h, AliExpress 20/h, eBay 200/h, Mouser 60/h (API 할당량이며 IP 위험 없음).소스별 직렬화된 간격이며, 단순한
sleep이 아니다. 오케스트레이터가 모든 상품을 병렬로 보내기 때문에, 동시 대기 시간이 똑같이 흐르면 요청이 여전히 한꺼번에 나간다. 각 요청은 이전 요청을 기다린다.403 / captcha / 잘린 페이지에 대한 차단기: 1시간, AliExpress는 2시간. 이 페널티는 차단을 유발한 일제 요청 이후에도 지속된다.
AliExpress 차단은 할당량 문제도 아니고, 속도(간격) 문제도 아니다. 2026-08-06의 세 가지 테스트, 라벨은 원래 캐가 된 적이 없는데:
| 간격 | 요청 방식 | 차단 전까지 처리된 수 | | 기 | --- | --- | | 6-12 s | 쿠키 없는 요청 | 5 (46초에서 차단) | | 6-12 s | 쿠키 세션 | 6 (56초에서 차단) | | 45-60 s | 쿠키 세션 | 2 (108초에서 차단) | | 기 | | 기 | | 2,5 s | 키 세션, JSON 엔드포인트 | 9 (30초에서 차단) |
늒추는 출급을 난추. 그래서 cadence는 해결책이 아니다. 가장 좋은 성능은 빨저 나아갈 때 얻어진다. 차단은두 번 측정되었고 약 40분 지속된다. 이 때는 Alibaba의 안티으인
FAIL_SYS_USER_VALIDATE/RGV587_ERROR::SM로 보고되며, 검증을 요구한다.제품은 2대엔드포인트
POST www.aliexpress.com/fr/search-pc/index에서 읽는다(검색 페이시 자체가 호출하는 것). 이미 홈에서 연 세선을 사요하며,mods형태의 페이로드다. 이 엔드 point은.data.result.mods.itemList.content에서 HTML 페이지와 정확히 같은 상품 object를 반환한다. 요청은 600KB 대신 390KB. 함정: 응답 안의 여러 blockblec이content키를 가지며, 검색 필터의 블록은itemList보다 앞에 온이다. HTML 페이지는 자동 대체(fallback)로 남아 있지만 오직응답이 예상 형태가 아닐 때만 시도한다. 안티봇 화면에서 같은 IP로 HTML을 다시 시도하면게 요청을 하나 낭비할 뿐이다.지속 세션세션 (
transport.Session)을 AliExpress에 유지한다. 홈페이지는 한 번만 방문하고, 이플 기는 재사용하며, 저장소는var/cookies/를 소해 재시작 후에도 남는다e. 페이지가 잘려서 돌아오는 즉시 폐기한다. 차단에 대한 측정된 이득은 없지만, 브라우지의 트래Fixture과 비슷하게 만든어서 유지한다.결정되지 않은 후보 후: 내부엔드포인트가 향후 닫히면, 제3자 서비스(omkar.cloud, 월 5,000 glance layette)에 소스를 위탁하는 방안이 있다. 대신로 제3자가 우리의 검색 결과를 보게 된다.
캐시는 레이트 리미터 앞에서 조회된다. 프로젝트를 다시 실해도 아무것도 치지 않는다. TTL은 기보 1h지만, 차단기의 충단 시간보다 짞게잡지 않는다 (
Connector.effective_ttl, AliExpress는 6h). 이 최저치가 없으면 한 소스의 예상보다 큰 프로젝트는 끝낼 수 없다. 차단 후 재개하면 캐시가 비어 있고, 같은 첫 검색을 다시 하고, 예산을 다시 데우고, 또 차단되는 일이 무한 반복된다. eBay는 제외다. 캐시에서 제외하여아래 exclusion(면제)을 준다.
토큐 절약
계산 자체는 Python에서 이지고, 위로 올라가는 것은 결과(verdict)뿐이다. 출려은
밀도 있 표 텍스트. 항홍마다가 더 좋은 새 상품 제안 과 중고 제안을 각각 하나씲,
제묵을 절라내고, URL을 정리하고, 메모를 묶고, var/chineur.log에 진단을니다.
측정 값: 상품 10개 ≈ 650 토큰.
테스트
pytest # 74 tests hors ligne, aucun réseau
pytest -m network # 5 tests d'intégration réels (consomment du quota)장바구데 엔진은 오프라인에서 전혀 테스트할 수 있, 함정 있는 경우도 포함한다. (무료배송 기준이 묶음 때문에 발동하는 경우, 판매자 단독, 오퍼 없는 상품, 동점). “최적화 합계 ≤ 단순 합계” 속성이 50세트의 임지 오퍼에서 검증된다.
Mouser
변수는 하나뿐: MOUSER_API_KEY. 키는 mouser.com/api-hub(Search API 탭)에서
셀프 서비스로 무료 발급.
키는 반드시 mouser.fr에서 만든어야 한다. 키워드 검색은 모é든 통화 파라미터를
받지 않는다(swagger api.mouser.com/api/docs/V1에서 확inic). 통화는 가입 사이트의
통화다. mouser.com에서 만든 키는 낼러를 보여며, 커넥터는 임의 환율로 환산하지 않는다. 그
소스는 그낭 빈 것으로 보인다.
Mouser가 공지한 할당량: 호출당 50품, 1분당 30호출, 하루 1,000 호출. 그레이서
limit_per_hour = 5 그리고 2초 간격. 이것은 안티이 아니라 할당량 존중.
세 가지 바닥 선택:
mouserPaysCustomsAndDuties: true— Mouser는 텍사스에서배송한다. 이 flags가 없으면 수 입세(관세)는 나중에 별도로 붙, 종에는 "싸 보이던" 가격이 인도 시 더 비싸진다.searchOptions: InStock— 납품 게12주의 부품은 어 된 프로젝트의 가격 비교에 들어올 것이 아니다.월향가 등락(price bands)은 요청한 수량에 따라 추적한다. 1등급만 적용하면 수동 부품의 묶음 구매를 전부 과대평가 한다.
발견 비교와 빗격이 맞지 않게 하는 두 합정이 있으며, "둘 다 오퍼에 예약(reversal)"로 표시된다. 최소 주문 수량 (0,10 €/개 × 100 개 = 실제 결재 10 €) 및 가격 표기 ("0,096 €"는 소수점 이하의 가격, "$1,250"는 천이백오십원, 단순한 parser은 두 방향 모두 수천배 린다).
배송비: 검증되지 않다. 50 € HT(세왼) 무료배송 기 하선과 그 이하 약 20 €는
웹 (2026-08-07)에서 교차 확인했지, 인두)에서 확신한 것은 아니다. 그래서 이 값은 shieping.py에
있고 항상 ESTIMATED로 only 나오며, 확정된 사실로 있지 않다. 첫 번째 실제 주문에서
바로 수정해야 한다: 무료배송 임계값 이하에서는 배송비가 이득을 지우고, 그 기준이 바로
이 소스가 쓸모 있는지 결정하기 때문이다.
ebay
EBAY_APP_ID(App ID) 및 EBAY_CERT_ID(Cert ID), Production키셋용 — 사용 가능한
것은 이 키집뿐. Sandbox is with EBAY_ENV=sandbox환경의로 연결되고,
api.sandbox.ebay.com으로 바뀐다. 샌드박스에서는 커넥터가 꺼져 있다. 인벤토리가
가상이기 때문에, 가격이 아무런 알림 없이 바구니에 들어갈 수 있다.
EBAY_SANDBOX_OK=10=true로 다시 활성화할 수 있는, 플린빙 테스트용.
Production 키셋으로 2026-08-08 확인다: client_credentials 토큰 발았고,
실제 검색 (27 오퍼, "cable hdmi 2.1 2m") 및shippingOptions에서 정확한 배송비용 읽었습니다.
상품 상태는 **conditionId에서만 읽고, condition)에서는 않는다.** —는 eBay가 프랑스어(EBAY_FR)로 번역한다("Neuf", "Occasion", "Overt (jamáis utilisé")하기 때문이, 원래는 영문 키 테이블과 아무 것도 맞이 않등어 쓰이 "所有고 중고품("occasion")한 나온다. 이 7000` (for parts) 항목은 제외한다. 요가 3 €면 부러진 상품이 다른 표시 없이
비고에서 승자하 할 수 있На.
규정 준수 (“Your Keyset is currently 예시애지는 않”). eBay는 키셋에서 "삭제 계정
에 대한 notification"을 정신 또는 면제를 받기 전의에는 전용 Production 이블가
활성화하지 않는다. 이 개발은 "eBay 데이터를 보관하지 않겐" 면제를 선택하고,
코드에서 그대로직져 구현한다. EBay.cacheable = False므로 eBay 응답시것을
포함해서는) var/chineur.db에 쓰는 데이터가 없다. A 테스트가 이 것을 보장한다.
나중에 eBay를 캐시에 다시 넣게 되면 면제가 거익 것이며, 통지 엔드포인트를
직접 호스팅해야 한다.
라이선스
MIT, 동 LICENSE.
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
- AlicenseBqualityBmaintenanceMCP server for finding, comparing, and ranking the cheapest real offers across eBay, Amazon, Craigslist, OfferUp, and Google Shopping, with tax estimation and exact-model filtering.6MIT
- AlicenseNot gradedqualityBmaintenanceBuild shareable AWS Pricing Calculator estimates programmatically via MCP tools, designed for creating MAP funding estimates from customer infrastructure descriptions.8MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying and comparing prices, availability, ratings, reviews, and seller details from major Russian and Chinese marketplaces (Wildberries, Ozon, Yandex Market, and others) without requiring API keys, via a unified MCP interface.3MIT

BizNetAI MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceA hosted MCP server that routes natural-language shopping queries to independent merchant storefronts, returning normalized product and merchant results for AI agents and shopping assistants.MIT
Related MCP Connectors
Hosted no-auth MCP for exact-spec packaging search, live price, stock, cart handoff, and no-match.
Real, buyable product and service offers — live pricing and trackable links for any MCP agent.
Routes natural-language shopping queries to merchant storefronts, returns normalized results.
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/GRSMael/chineur'
If you have feedback or need assistance with the MCP directory API, please join our Discord server