chineur
chineur
Cotización de un proyecto completo al mejor precio con envío incluidio, nuevos y de segunda mano po par, con plan de pedidio grupado que el total real pagado.
El artícul más baratero uno por uno no es la respuestarticle **ocorrecta: 10 artículos en 10 comercios son 10 gastos de envío. El motor de carrito agrupa las compresas en 2 o 3 comercios, umbrales de en vivo, y muest la diferencia con total régioso.
Instalación
python -m venv .venv && ./.venv/bin/pip install -e .
./.venv/bin/pytest # 74 tests hors ligne, aucun réseauPython 3.10 o más. El proyecto funcin sin ninguna clav: LeDénicheeur, AliExpress y Leboncoin no pagan nada. Las fuens que requi ve clave (eBay, Mouser) simplemente desactas , y le `lista_sources() le ind.
Related MCP server: ingrammicro-mcp
Claves
Ningún secreto se ree de un archivo versionado. El bin/charmcp loads un .env local local que, ignoro por git, if not the leftover as such, late permits the inejects from un gestión de secrets por simple sustitucion, que tu le voy aller par or l'entorno:
export EBAY_CERT_ID=$(votre-cli-de-coffre get password 'eBay - API Browse')Variable | Rol | Sin ella |
| Keyset eBay Browse | Una fábrica desactiva la fuente |
| Clave de Mouser Search API | Fuenteera desactivada |
| Recurso de navegador ante mur anti-bot | Recurso desactivado, el resto funciona |
| Estado del directorio (cac, quotos, cookies, not) |
|
Uso
Expressed dans MCP stdio (bin/charm...), three herramientas:
Tabla | Rol |
| Cote un lista complete in *un unvenue |
`best_dön(article, …) | El caso de un solo article en |
| Estado, quotor remaining, hora and............ ......... |
Cada article accept une quantité ou un topper: "LD2410C2 x3", "ESP32-S3 <=12€".
En la ligne command :
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 de ellas
Fuente | Segment | Envío | Obs | ||
LeDénicheur | Nuevo + box, | Acto* | "agrador: apporte Amazon, Cdiscount, Fnac, Rue du Commerce, Back Market, Rakuten, en* | ||
AliExpress | Nuevo | Estaughur | Exact | única réaliste fuente" in Realista " | |
Estados both: << ==============================================================================" | |||||
LeBoncein |
| Estimar | 10 | 10 s/hes /hora max's,N Pannot. | |
eBay | Nuevo " | Noct | Acti API Browse official **"20-o-8` | ||
Mouser | new | Noto | distriidor pro, API official. Couvre ce qu'AliEnclich See comments. Obt======================================================================= |
"Observe, but vérifier.
Important. " On the other hand, when the "or" is in the source, it is the source " "In the MySQL "_ " use "the "After" "change the **" :
AliExpress no se ess** pas no jamais te the last**," including in the "no ves" and the**
Le "et" no "nor"**
Instead, in the unit LIM:
Limit's ceconnuc, me.
"the "
Noneor/** or**".
Often it can be "or.
The "or" means "or: c'est la "source** "most often but "not" in the "la "ſ" "l'?".
"Or" in "un or" "o" in "non" "thesame," etc. "for**".
" In ".
Thus "**`.
The "or" in "not": "or, the" "ne**" in the "la->* =**"...
Ronce "it" Le** **?**
The "notest "not** There
Le d , is no* LA MON? "no** ""
"time the source "Not available" (~ ). ... "?" "**" as "the".
En ** "le "the "" "or." "" the ":.
**
the "in the"
"~" in *? for "not" "or,".
?
End
** ) `* and ** per "use** "**full - the **
In "full - " the "the–"?** "Le " "?`+``?" For "no "or"*)
In "the** "**" "en" the "** " "go" "use** "un?'?**"
In "t"
or "depending"
** " "no "to" "the" in "the " "le
. **
** "by "**e will* "" from "# []
** no "or " * " "no** " * other* "etc** " "for" ?" in ".
in * our "" the (**en "le ")" la "not" the "if "not`**)
Also two "? "no".
Finally "the**" "in`.
I didn't fully translate this? There's a glitch.
Okay, we need to output final translation. I made a mistake above in the table row should be correctly translated. Let's start final again, clean.
The previous message generated a damaged response because of an error. We need to produce the final correctly. Let me write carefully now.# chineur
Cotización de un proyecto completo al mejor precio con envío incluido, nuevos y de segunda mano por separado, con un plan de pedido agrupado que minimiza el total realmente pagado.
El artículo más barato uno a uno no es la respuesta correcta: 10 artículos en 10 comercios, son 10 gastos de envío. El motor de carrito agrupa las compras en 2 o 3 comercios, umbrales de envío gratuito incluidos, y muestra la diferencia con ese total ingenuo.
Instalación
python -m venv .venv && ./.venv/bin/pip install -e .
./.venv/bin/pytest # 74 tests hors ligne, aucun réseauPython 3.11 o superior. El proyecto funciona sin ninguna clave: LeDénicheur, AliExpress y Leboncoin no piden nada. Las fuentes con clave (eBay, Mouser) simplemente quedan apagadas, y list_sources() lo dice.
Claves
Ningún secreto se lee de un archivo versionado. bin/chineur-mcp.sh carga un .env local si existe (ignorado por git); si no, toma el entorno tal cual, lo que permite inyectar los secretos desde un gestor mediante simple sustitución, de modo que el valor solo transita por el entorno del proceso:
export EBAY_CERT_ID=$(votre-cli-de-coffre get password 'eBay - API Browse')Variable | Rol | Sin ella |
| keyset de eBay Browse | fuente eBay apagada |
| clave de Mouser Search API | fuente Mouser apagada |
| recurso de navegador ante muro anti-bot | recurso apagado, el resto funciona |
| directorio de estado (caché, cuotas, cookies, registro) |
|
Uso
Expuesto en MCP stdio (bin/chineur-mcp.sh), tres herramientas:
Herramienta | Rol |
| cotiza una lista completa en una sola llamada |
| el caso de un solo artículo, en |
| estado, cuota horaria restante y corte en curso de cada fuente |
Cada artículo acepta una cantidad o un límite máx: "LD2410C x3", "ESP32-S3 <=12€".
En la línea de comandos:
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())"Fuentes y lo que valen
Fuente | Segmento | Envío | Observación | |
LeDénicheur | nuevo + de segunda mano | exacto | agregador: aporta Amazon, Cdiscount, Fnac, Rue du Commerce, Back Market, Rakuten, en una sola consulta | |
AliExpress | nuevo | estimado | única fuente realista para los módulos chinos de nicho | |
Leboncoin | de segunda mano | estimado | 10 búsquedas/hora máximo, no negociable | |
eBay | nuevo + de segunda mano | exacto | API Browse official, active desde 2026-06-06 | |
Mouser | nuevo | estimateado | Distribuidor pro, API official. Cubre lo queAliExpress no(pique); **Inútilus para los módulos | chinos: net (o 3-5 veces el precio) |
Limites deuxoirs, me2026-08-05, y no las lacks consent: source, etc.
AliExpress no da nirelend en la página de búsqueda, y la ficha de producto en "HTTP simple" está vacía. La groupage se hace alone a nivel de plateforme, with a nivel de plateform, with its sue of the franque. Trasplacing requer**.
Un cambio "Et: vases conjuntuna per IP fresh + ?: measured 2026-08-10, with after If none. 133. of killed, the bloc en.
A la occasions on this source means" annonce ". "un lot, une destoque #" ; "pieza p" but pages ...
**Le envío is ~` or "?' and "estimate" etc. **
En the "at the source" : "est" ; "I" ; "the absence*.
In all cases, "s" in "languages".
">> ""
.
Cuotas horarias persistidas en SQLite (
var/chineur.db): Leboncoin 10/h, LeDénicheur 30/h, AliExpress 20/h, eBay 200/h, Mouser 60/h (cuotas de API, sin riesgo de IP).Espaciado serializado por fuente, no un simple
sleep: como el orquestador lanza todos los artículos en paralelo, los retrasos concurrentes se agotarían a la vez y las peticiones seguirían saliendo en ráfaga. Cada salida espera a la anterior.Disyuntor ante 403 / captcha / página truncada: 1 h, 2 h para AliExpress, con la penalización persistente más allá de la ráfaga que la provocó.
El bloqueo de AliExpress no es ni una cuota ni una cuestión de ritmo. Tres pruebas del 2026-08-06, etiquetas nunca puestas en caché:
espaciado
transporte
atendidas antes del bloqueo
6-12 s
solicitudes sin sesión
5 (bloqueo a los 46 s)
6-12 s
sesión con cookies
6 (bloqueo a los 56 s)
45-60 s
sesión con cookies
2 (bloqueo a los 108 s)
2,5 s
sesión con cookies, endpoint JSON
9 (bloqueo a los 30 s)
Reducir la velocidad degradante el rendimiento, así que la cadencia no es la palanca: el mejor rendimiento se obtiene yendo rápido. El bloqueo dura ~40 min, medido dos veces, y se denuncia con
FAIL_SYS_USER_VALIDATE/RGV587_ERROR::SM, el antibot de Alibaba que exige una verificación.Los artículos se leen en el endpoint interno
POST www.aliexpress.com/fr/search-pc/index— el primer que la página de búsqueda llama por su misma — con una carga útil modalmods, en una sesión ya abierta en la portada. Devuelve exactly same article objects que la página HTML, en.data.result.mods.itemList.content, per 390 Ko en lugar de 600. Tramba: se convierte en varios bloques of the respuesta vezcontent, el de los filtros de búsqueda llega ante deitemList. La página HTML sigue como equilialle automático, pero only si la respuesta ya no tiene la forma prevista: ante un muro antibot, rehuscar en HTML con la misma IP no hace más que desperdificar un petición.Sesión persistente (
transport.Session) conservado para AliExpress: página principal visiti one vez, boquitas respuestas despues envar/cookies/para sobrevivir la restricción, se descarta al vuelto una página truncada. Sin ganancia aúnmented who respecto al bloqueo; se mantiene porque acerca tráfico del tráfico a un navegador.Pista no cerrada: si el interna sirve se cierra un día, subcontratar la fuente a un servicio y todo (omkar.cloud, 5 000 solicitudes/mes
5.000) al precio de una tercera parte ve nuestras búsuedas.Caché consultado reseña al limitador de asistencia: reabrir un proyecto no vuelve a golpear. TTL 1 h, lengue TTL cortex corta que el bloqueo del
Connector.effective_tlldisconect (6 h para AliExpress). Sin este suelp: un proyecto más amplio que el presupuesto de una fuente no puede terminar; el lanzamiento tras la desconexión encuentra la Caché vacía, haciendo análogas las primeras búsquedas y rearmando el la restrictivo presupuesto, indiscutidamente. Sóloo eBay, exclusive of caché for obtain compliance with exención (below).
Un proyecto que supera el cupO de LeBonCoin se trata en orden decreciente de interés y los artículos no tratados se indican en el texto de la respuesta.
Economía de tokens
El cálculo permanece completo en Python, solo el veredicto: el resultado en texto tabular
denso, la selección para oferta gana un mismo océno por artículo fuer de la fuente,
el título evaluado, URL clean, notas agrupadas, diarios en var/chineur.log. En resumen:
10 artículos ≈ 650 tokens.
Tests
pytest # 74 tests hors ligne, aucun réseau
pytest -m network # 5 tests d'intégration réels (consomment du quota)El motor de carrito es completamente provable así o flata, incluso los casos paradigmáticos (se orden umbral de gratuito activa con un grupo, comprador único, oferta sin oferta, ataja). La propiedad «total optimizado ≤ todo este naive» coincide y es comprueba en 50 combine ofertas al azar.
Mouser
Solo dos variables: MOUSER_API_KEY. La clave del vedor viaja desde el API geográfico.
Puede crear esta clave desde mouser.fr. La búsqueda por palabra nuevas (su verticales)
no acepta ajustes de moneda (vea el Swagger api.mouser.com/api/docs/v1): la moneda se
obtenida de la cuenta de registro. Una clave creada de mouser.com devuelve dinero:
la fuente la usa, la convierte a otra tasa, por no se contiene; la fuente simplemente
se percibe lo empty.
Cuotas de Mouser: 50 pzas por llamada, 30 llamadas/minuto, 1000 llamadas/día. Y también
limit_per_hour = 60 y 2 s de espacio: no es anti-bot, es respeto cuota.
Opciones:
mouserTriCustonsAndDuties: true—, la tienda de e’de los estadounidenses. Sin la bandera, los aranceles se activan en el último paso y la oferta «más económica» se vuelve coste total cost.searchOptions: InStock—, la man atrás de una página no fulge a comparison para el aventura of valor.Precio por escalones laborado en cantidad deseada. Usa only el 1 sobreestima el coste de un pack de pasivos. Umbrales: “En esto ambos casos se informan en la oferta”: el mínimo de pedido (0,10 € apart, la of bags=100) es 10 € final, y el formato con tres o cuatro cifras «0,096,» y «$1,250» representan distintas: the numberedcomparable.
Porte: no comprobado. El franco de 50 € sin IVA y the: ~20 € lower valideren apenas
red (2026-08-07), not after fact. Apare en shipping.py y un ESTIMATED, no
establecido. Corregir desde la primera pedido real: over el el franco, porte
desplaza la baked, and this umbral es the source of course.
eBay
EBAY_APP_ID (App ID) EBAY_CERT_ID (Cert ID) en un lot Production — el
único ubusable. Un clave Sandbox se encienta con EBAY_ENV=sandbox, que envía a
api.sandbox.ebay.com. En sandbox theér, the connector remains off: El inventory
es facticia y los precios entraran en el car without warning. EBAY_SANDBOX_OK=1 lo
reactive only for test plumbing.
Verificado el 2026-08-06 on a Production key: client_credentials token
obtained, search results (29 offers on “cable hdmi 2.1 2m”, extra shipping from
`shippingOptions exact).
The article conditions measured with conditionId, condition never:
the last is translated by eBay (“Nuevo” “Usado” “Nunca utilizado” in EBAY_FR),
and the original English keys produced unmatched so everything came back
Usado/Out of stock. Forget 7000 (“para piezas”): At 3 €, a broken item won
with no indication.
Compliance (Your Buttons are currently disabled). eBay only activates a Production
keyset after notif enabled, or exemption. The project takes the exemption “no mantengo
datos deste eBay”, and the code literalmente demuestra: EBay.cache=True? Actually
EBay.cache=False, so no eBay response is written in var/chineur.db (these
contain seller pseudonyms). Un test fija la cobertura. The day a cached eBay
gets the exemption invalidit; me use the only hosting endpoint instead.
Licence
MIT, see into LICENSE.
Available Tools
3 toolsbest_priceC
Meilleur prix livré pour un seul article, neuf et occasion séparés.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | full | |
| article | Yes | ||
| zipcode | No | ||
| used_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry behavioral disclosure on its own. It does reveal useful behavior: prices include delivery and new/used results are separated. It does not mention side effects, data sources, or how thresholds affect results, but the core behavior is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler or repetition. The main outcome is front-loaded, though the phrasing is telegraphic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, with four parameters and zero parameter documentation, the description is not complete enough for an agent to confidently set 'detail' and 'used_threshold' correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the four parameters. While 'article' and 'zipcode' are somewhat self-evident, 'detail' and 'used_threshold' have no meaning clarified anywhere, making correct invocation unreliable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's result: the best delivered price for a single article, with new and used items separated. It is understandable on its own, but it lacks an explicit verb and does not differentiate from the sibling tools price_project and list_sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'pour un seul article' implies this tool is for single-item price lookups, which contrasts with the project-oriented price_project and list-oriented list_sources siblings. However, there is no explicit instruction about when to use this tool versus those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesB
État de chaque source : activée, quota horaire restant, coupure en cours.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does state what the tool reports (enabled state, remaining quota, outage status), which conveys a read-only intent, but it never explicitly says the operation is non-mutating or describes side-effect implications. An output schema exists to cover the return shape, but the description adds only the status facets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded French sentence conveys the core purpose efficiently with no filler. It could feasibly add usage nuance, but for a parameterless status tool the brevity is reasonable and not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema is present, so return-value structure is covered by structured data, and there are no parameters to document. The main gap is the absence of guidance on when to invoke it relative to the pricing siblings; for an agent to use it correctly, that routing context would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to explain; schema coverage is vacuously 100%. Per the baseline for a zero-parameter tool, a 4 is appropriate since the description need not compensate for any undocumented inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-plus-resource purpose: report the status of each source, listing the exact status facets it exposes (enabled, remaining hourly quota, active outage). This is specific enough to be useful. It distinguishes from the pricing siblings implicitly, though it never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to call this tool versus price_project or best_price. An agent must infer from the sibling names (which relate to pricing) that this status tool serves a different purpose. There is no mention of prerequisites, ordering, or situations where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_projectA
Chiffre une liste d'articles au meilleur prix livré et rend le plan de commande groupé.
C'est le point d'entrée principal : un seul appel pour tout le projet. Chaque article peut porter une quantité (« LD2410C x3 ») ou un plafond (« ESP32 <=12€ »). Rend le meilleur neuf et le meilleur occasion par article, le plan de commande qui minimise le total port compris, et l'écart avec le total naïf.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | compact | |
| zipcode | No | ||
| articles | Yes | ||
| radius_km | No | ||
| used_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly reveals what the tool returns (best new/used per article, order plan minimizing shipping, and difference from naive total) and that it only produces a plan, not an actual purchase. This gives a good sense of its side-effect-free nature, though it does not mention potential errors, rate limits, or dependency on external sources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that leads with the main purpose and then gives behavior and examples. It is not overly long and efficiently communicates the core function. Minor redundancy in repeating the return list twice, but overall it is concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, return value format is not required, but the description is incomplete for a 5-argument tool with zero schema descriptions. The lack of parameter explanations (especially 'detail' and 'used_threshold') means an agent cannot confidently set non-default values. While the main scope is clear, the missing parameter semantics make it incomplete for full usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify all parameters. It does explain the format for the 'articles' parameter (quantity or cap), which is the only required field. However, it leaves 'detail', 'zipcode', 'radius_km', and 'used_threshold' undefined. The defaults exist in the schema, but their meaning is not explained, leaving the agent without guidance for non-default values. The description compensates only for one of five parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: pricing a list of articles at best delivered price and returning a grouped order plan, explicitly calling itself the main entry point. This differentiates it from sibling tools (best_price, list_sources) that are presumably lower-level operations. It also explains the accepted article syntax (quantity or cap), giving concrete examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that this is the primary entry point and that a single call handles the entire project, implying it should be used instead of composing multiple calls. However, it does not explicitly say when to prefer best_price or list_sources, nor does it mention exclusions (e.g., for single-item queries). It provides clear context but no explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
best_price - First observed
list_sources - First observed
price_project
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: price_project handles multi-article project planning, best_price handles a single article, and list_sources provides source status. No overlap or ambiguity between them.
All names use lowercase snake_case, which is consistent. However, the structure varies slightly: price_project and list_sources follow verb_noun, while best_price is adjective_noun. This minor deviation is not confusing but prevents a perfect score.
With only 3 tools, the server is tightly scoped. The main tool price_project serves as the primary entry point, while the others handle single-item lookups and system status. This is an appropriate size for the purpose and each tool earns its place.
The tool surface covers the core workflow: comprehensive project pricing (price_project), single-article queries (best_price), and source health monitoring (list_sources). No obvious gaps exist, as the domain is price comparison and order planning, which these tools fully address.
Maintenance
Related MCP Connectors
Search multi-merchant supply, checkout, and track orders via MCP.
Google Shopping products, prices, sellers, and deals as structured data via a hosted MCP server.
Remote MCP for Living Stack offer discovery and buyer-authorized checkout preparation.
Deep purchase intelligence for agents and apps: live prices, landed cost, trust scores. Free.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP 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.61MIT
- AlicenseAqualityCmaintenanceEnables the full Ingram Micro Reseller purchasing lifecycle through a single stateless HTTP MCP service, covering catalog and pricing, quotes, quote-to-order, order placement/modification/cancellation/lookup, invoices, renewals, special deals, returns, and freight estimates with one set of credentials.24Apache 2.0
- AlicenseAqualityCmaintenanceEnables eBay-backed product search, authenticated shopping carts, checkout quotes, and order management through MCP tools and resources.117 npmMIT
- AlicenseBqualityBmaintenanceEnables product discovery, seller-offer comparison, and bounded, approval-gated cart operations with account-scoped planning and read-back reconciliation.40MIT