Import Sourcing Advisor
Import Sourcing Advisor
Un agente de datos específico de dominio para el análisis de aprovisionamiento de importaciones a nivel macro para Ucrania. Pregúntale de qué países debería obtenerse un grupo de productos, y procesa la pregunta a través de datos comerciales abiertos: qué orígenes lo suministran realmente, cuán concentrada está esa oferta, cuánto costaría cada candidato puesto en destino y cómo se clasifican los candidatos entre sí.
El agente se amplía mediante dos conexiones MCP:
Server | Rol | |
Existente | Lee la cifra de facturación comercial del año en curso que las autoridades ucranianas publican solo como página web, para que el agente sepa cuán desactualizados están sus datos estadísticos | |
Personalizado |
| Cinco herramientas sobre UN Comtrade, la API de Indicadores del Banco Mundial y WITS TRAINS |
Todo se ejecuta con datos públicos sin entradas confidenciales, y el servidor personalizado no necesita credenciales de API de ningún tipo.
Lo que se ve primero
Una lista de trabajo, no una caja de chat. Seis líneas de importación rastreadas, una fila cada una, ordenadas por banda de riesgo y luego por importe: proveedor principal, su participación, cuánto vale esa participación, cuántos orígenes efectivos hay detrás y un estado de una palabra. Abrir una fila expande su detalle de orígenes en el mismo lugar; la ejecución del agente es una acción deliberada a partir de ahí.
Sobre la lista, una franja de agregados. En la ventana actual: 554 millones de USD importados, 346 millones de ellos concentrados en un único origen por línea (62 %), y Türkiye liderando 3 de las 6 líneas: 183 millones de la exposición. Esa última cifra es la que ningún informe por producto puede mostrar: líneas que fallarían a la vez.
La lista se calcula, no se razona. web/portfolio.py abre una sesión MCP stdio con el mismo servidor personalizado que usa el agente y llama a las herramientas directamente, sin ningún modelo en el bucle. La primera pantalla que carga un visitante no debería esperar a un agente ni costar nada.
Moneda. La serie comercial anual se retrasa unos dos años, por lo que la lista se basa en una ventana móvil de doce meses construida a partir de informes mensuales, que termina en el mes que la fuente haya publicado realmente: actualmente Oct 2024 to Sep 2025, aproximadamente once meses por delante del último año anual completo. Eso no es cosmético: con los datos anuales de 2024, los tomates frescos mostraban un 71,8 % de origen turco y llevaban la marca de origen único; con la ventana muestran un 64,6 % y no la llevan.
Related MCP server: supply-chain-mcp-server
Requisitos previos
Requisito | Versión probada | Por qué |
Python | 3.13.3 | Servidor MCP personalizado, agente, aplicación web |
Node.js | 22 LTS | Solo para Playwright MCP, que se distribuye vía npm |
Claude Code CLI o una clave de API de Anthropic | CLI 2.1.232 | El agente se ejecuta en el Claude Agent SDK |
git | 2.49 | — |
No se necesita ninguna clave, token ni cuenta para ninguna de las tres API de datos.
Instalación
git clone <repository-url> logistics_mcp
cd logistics_mcp
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
pip install -r requirements.txtInstala una vez el servidor de navegador y una compilación de Chromium (Node 18+ en el PATH):
npm install
npx -y playwright install chromiumnpm install fija @playwright/mcp, y el agente lo inicia después como node node_modules/@playwright/mcp/cli.js. No pasa por npx: no hay ningún ejecutable llamado npx en Windows, y Node se niega a lanzar npx.cmd sin un shell, por lo que iniciar el servidor con ese nombre fallaba silenciosamente: la ejecución continuaba y el modelo informaba de que no tenía herramienta de navegador. Sin npm install, el agente recurre a npx -y @playwright/mcp@latest, que funciona donde un shell POSIX lo resuelve.
Configuración
cp .env.example .env.env está ignorado por git. Nada de lo que contiene es necesario para el servidor MCP personalizado; los valores solo afectan al agente y al modo de transporte de datos.
Variable | Por defecto | Significado |
| sin definir | Credencial de modelo para el agente. Si no está definida, el Claude Agent SDK recurre al inicio de sesión local de Claude Code ( |
|
| Modelo para una ejecución completa de aprovisionamiento. Comparado con Opus en la misma ejecución: ambos superan la prueba, 595s frente a 620, $0.398 frente a $0.547, y Sonnet recorrió toda la cadena de respaldo de actualidad hasta llegar a una cifra utilizable, mientras que Opus se detuvo a mitad |
|
| Modelo para preguntas de seguimiento sobre un resultado ya calculado: sin navegador, tres herramientas de solo lectura |
|
|
|
|
| Segundos para conservar la caché de respuestas local ( |
Ejecutar las piezas de forma independiente
El servidor MCP personalizado es un proceso separado y se inicia por su cuenta. Nada de él depende del agente.
1. Servidor MCP personalizado
python -m mcp_server.serverSirve MCP a través de stdio e imprime su transporte y modo de datos en stderr al arrancar. Para inspeccionar los contratos que publica sin ningún agente:
python scripts/inspect_tools.py # summary of all five tool contracts
python scripts/inspect_tools.py --json # full input and output JSON schemasO condúcelo con el inspector oficial:
npx -y @modelcontextprotocol/inspector python -m mcp_server.server2. Servidor MCP de Playwright
El agente lo lanza él mismo; ejecútalo manualmente solo para inspeccionarlo.
node node_modules/@playwright/mcp/cli.js --headless --isolated3. Agente y aplicación web
python -m web.app # serves http://127.0.0.1:8000La aplicación web lanza ambas conexiones MCP como procesos hijo y muestra qué herramientas expuso cada una.
Verificar la instalación
python -m pytest tests -q # 47 unit tests, no network, ~2s
python scripts/smoke_tools.py # calls every tool end to end against the live APIs
REPLAY=1 python scripts/smoke_tools.py # the same run, offline, from fixtures
python scripts/run_e2e.py # the whole agent flow, both MCP servers, live
python scripts/run_failure_demo.py # the same flow with the browser server brokenrun_e2e.py es la comprobación en la que se apoya la demo. Hace fallar la ejecución a menos que ambos servidores se hayan conectado y que las cinco herramientas personalizadas se hayan llamado realmente: una ejecución en la que el servidor personalizado no llegó a arrancar sigue produciendo una respuesta fluida, porque el modelo simplemente informa de que no tiene herramientas. Cada evento se escribe en scripts/last_e2e_trace.jsonl para que la ejecución pueda inspeccionarse después en lugar de aceptarse sin más. Una ejecución completa dura aproximadamente 10 minutos, 20 turnos y unos $0.55. Un error de navegación en una URL de actualidad de respaldo se tolera una vez que otra página de la cadena ha cargado — la cadena está ordenada y el agente se detiene en la primera página que responde —, pero una cadena en la que no cargó nada, y cualquier error del servidor personalizado, siguen haciendo fallar la ejecución.
run_failure_demo.py es la otra mitad: apunta el navegador a un host irresoluble sin respaldos y solo pasa si la navegación se notifica como error, no falla nada más y aun así sale una recomendación con la comprobación fallida mencionada en ella. El requisito no es que nada falle, sino que un fallo sea distinguible de una respuesta vacía.
Modo sin conexión / reproducción
El servidor personalizado llama a tres API de red, por lo que las respuestas reales se registran en fixtures/ y pueden reproducirse sin acceso a la red:
# Offline
SOURCING_MODE=replay python -m mcp_server.server
# Re-record after changing a query
SOURCING_MODE=record python scripts/smoke_tools.pyLa sustitución ocurre en el límite de transporte (mcp_server/sources/http.py): la reproducción devuelve el mismo JSON bruto que devolvió la red, y todos los analizadores, pasos de deduplicación y cálculos posteriores se ejecutan sin cambios. Ninguna ruta de código devuelve una respuesta preparada.
Cada fixture es un sobre que registra la URL exacta, la marca de tiempo de recuperación y el cuerpo de respuesta literal.
Lo que cubre el modo sin conexión. La cartera, la clasificación de cada producto tal como la muestra la pantalla de inicio, y el flujo del agente. Verificado ejecutando la clasificación de un producto en vivo y en reproducción y comparando cada campo: idénticos hasta el último decimal. Esa comprobación merece la pena conservarla: así se encontró el error de arancel mencionado más abajo, y antes de que se registraran los fixtures de clasificación, así se encontraron también las puntuaciones fuera de línea colapsadas.
Lo que no cubre. Solo se registra una ventana de referencia (Oct 2024 – Sep 2025), por lo que una solicitud de cualquier otra ventana móvil falla sin conexión en lugar de recurrir a un respaldo. Dos productos tienen un candidato que no puede valorarse en ninguno de los dos modos: USA y NLD para las almendras, y AZE para el kiwi, no notifican peso, por lo que no existe un valor unitario del que derivar. Esas filas se marcan como incompletas en pantalla y se mencionan en una advertencia; son una laguna de la fuente, no del registro.
Fuentes de datos
Fuente | Endpoint | Autenticación | Qué proporciona |
UN Comtrade (preview) |
| ninguna | Comercio notificado por código HS, socio y año: peso, valor, valor unitario |
World Bank Indicators |
| ninguna | Índice de Rendimiento Logístico y subíndices, tráfico de contenedores portuarios |
WITS TRAINS |
| ninguna | Arancel de importación NMF aplicado por HS6 |
Comtrade reference files | incluidos en | ninguna | Nomenclatura HS2022, códigos de país: la API de vista previa devuelve solo códigos |
State Customs Service | página web, vía Playwright MCP | ninguna | Facturación del año en curso, publicada solo como HTML. Devuelve 403 a los clientes automatizados, por lo que se intenta primero y suele fallar |
National Bank of Ukraine | página web, vía Playwright MCP | ninguna | Índice de estadísticas del sector exterior: el respaldo accesible para la comprobación de actualidad |
El comportamiento verificado de los endpoints, los límites de tasa y las peculiaridades están documentados en docs/01-data-sources-verified.md.
Estructura del repositorio
mcp_server/ Custom MCP server (separate process)
server.py Five tool registrations, stdio entry point
models.py Pydantic input/output contracts
sources/ http (rate limit, cache, fixtures), comtrade, worldbank, wits, reference
domain/ costing and analysis calculations
agent/ Claude Agent SDK wiring, two model tiers, trace events
web/ FastAPI application, portfolio over MCP, single-page UI
app.py Endpoints: portfolio, commodity detail, agent run, chat
portfolio.py The tracked lines, queried over an MCP stdio session
index.html Portfolio screen, line detail, MCP trace, chat panel
data/reference/ Vendored HS2022 and country reference data
fixtures/ Recorded genuine API responses for replay mode
scripts/ inspect_tools, smoke_tools, run_e2e
tests/ Unit tests
docs/ Requirements digest, verified sources, contracts, rationale, demo scriptDocumentación
Documento | Contenido |
Lo que requiere la asignación, condensado | |
Cada fuente probada en vivo: endpoints, valores reales, límites, trampas | |
Contrato completo para cada herramienta personalizada y para la herramienta Playwright utilizada | |
Por qué estos servidores, por qué cada herramienta se sitúa en el límite de MCP, compensaciones, limitaciones | |
Guion de defensa |
Limitaciones conocidas
Declaradas de antemano en lugar de enterradas:
El costo de flete está modelado, no cotizado. Ninguna fuente abierta publica tarifas de flete. Cada cifra modelada está etiquetada como
estimateden la salida de la herramienta.El arancel es la tasa NMF. WITS devuelve HTTP 404 para tasas preferenciales, por lo que acuerdos como el DCFTA de la UE se marcan como posibles pero no se aplican.
La serie anual se retrasa unos dos años. En agosto de 2026, Ucrania había reportado 2024 pero no 2025. La serie mensual llega hasta septiembre de 2025, que es lo que utiliza la lista de trabajo. Las herramientas de costo aterrizado y clasificación aún se ejecutan sobre la base anual, y el arancel proviene nuevamente de una observación más antigua — cada resultado nombra la base que utilizó.
Los valores unitarios no son precios. Un valor unitario de Comtrade es el valor total sobre el peso total, no una cotización.
El Índice de Desempeño Logístico no es una serie anual. 2022 es la observación más reciente.
La página de aduanas bloquea a los clientes automatizados.
customs.gov.uaresponde HTTP 403 en su borde Akamai a cualquier cosa que no sea un navegador humano, mientras que se abre normalmente para una persona. Por lo tanto, el paso de actualidad recurre a la página del sector externo del Banco Nacional, y el agente nombra qué página leyó realmente. Eso confirma la versión de la publicación pero no una cifra de facturación, por lo que la verificación de actualidad es parcial por diseño y no por accidente.La cartera es de seis líneas, elegidas por señal. Las manzanas (HS 080810, $0.5M) y las nueces con cáscara (HS 080231, cerca de cero) se eliminaron: Ucrania cultiva y exporta ambas, por lo que sus líneas de importación son ruido.
Esta es una herramienta de selección. Reduce una lista de países que vale la pena investigar; no reemplaza una licitación.
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
- AlicenseNot gradedqualityCmaintenanceProvides access to UN Comtrade international bilateral trade data via an MCP server, enabling AI agents to query trade statistics through natural language.9MIT
- AlicenseAqualityDmaintenanceMCP server giving AI agents access to global supply chain and trade data from UN Comtrade, World Bank, and Open Supply Hub.5MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search and analyze Ukraine's national open-data portal (data.gov.ua) using natural language, with tools for finding datasets, inspecting metadata, and retrieving actual data.6MIT
- FlicenseAqualityBmaintenanceMCP server that exposes tools for monitoring supply chain disruptions, including vessel positions, port weather, congestion, and news. Includes an AI agent that synthesizes these sources to assess route risks.5
Related MCP Connectors
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Ukraine Open Data (data.gov.ua) CKAN MCP.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
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/annayastremska/logistics_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server