El Stack MCP
Una guía de campo de una competencia donde cada servidor se ejecutó en los mismos trabajos reales (una publicación social de 1080x1350 en estilo riso; preguntas espaciales reales verificadas por una consulta independiente). Solo niveles gratuitos.
Regla: solo gratuito. Nunca actualices, inicies un período de prueba o introduzcas una tarjeta en ninguno de estos sin que el propietario lo indique. Un muro de pago es un hallazgo, no una compra.
Regla: nada publica. Orshot tiene un parámetro publish que publica en redes sociales; Canva y Figma pueden compartir. Nunca los pases sin que te lo pidan. La salida es un archivo local que un humano revisa.
Diseño / arte / marca — elige según el trabajo
| Trabajo | Usa | Por qué / costo |
|---|---|---|
| Pieza de marketing terminada a partir de un briefing, con el mejor aspecto | canva create-design -> resize-design -> export-design | Mejor salida del conjunto. ~6 diseños IA/mes gratis (un diseño = ~15% de la cuota; se restablece mensualmente). Edita con edit-design en lugar de regenerar. |
| Publicación riso / tarjeta / póster, ilimitado, números exactos | inkscape MCP inkscape_vector construct_svg (params.header + params.body) -> inkscape_render export_preview | Renderiza patrones de semitono reales, grano feTurbulence, superposición multiplicativa, desregistro. ~5s, sin cabeza, ilimitado. Predeterminado para cualquier cosa repetible; mantén tu cuerpo SVG como archivo de plantilla. |
| Diseño vectorial preciso en un archivo de diseño | penpot execute_code -> export_shape | Gratuito, ilimitado. Una pestaña de Penpot con el archivo debe estar abierta (sin cabeza está bien) o cada llamada falla. |
| Lo mismo, pero en Figma para que alguien lo recoja | figma create_new_file + use_figma | Starter gratuito = ~20 llamadas contadas/mes, 3 archivos. Presupuesta. No tiene createImageAsync/setPluginData. |
| Plantilla reutilizable con variables (tarjeta OG, serie de publicaciones IG) | orshot | ~100 renderizaciones/mes gratis. El color de la forma va en style.fill (backgroundColor pinta de negro). Las URL de salida son públicas pero no adivinables. |
| Borrador de ilustración IA, gratuito | huggingface dynamic_space -> mcp-tools/Qwen-Image, aspect_ratio:"3:4" | Lo más cercano al riso de los modelos gratuitos. ~6 imágenes/día (cuota ZeroGPU). 1.6MP; pinta garabatos de firma falsos en las esquinas — recorta. Los finales van a un motor de pago (make-art). |
| Recorte PNG transparente | huggingface space_name: Upsampler/birefnet-background-removal, {"image":"<URL pública>"} | ~5s. Los Spaces aceptan solo URL públicas, nunca rutas locales. |
| Ráster color -> SVG (logotipos, marcas) | shapesoda vectorize {image_base64, image_type:"artwork", colors:8, format:["svg"]} | ~10/día gratis. El enlace de descarga caduca en 24h — descarga inmediatamente. Elimina las rutas #ff00ff sobrantes en los bordes del recorte. Renderiza el SVG a 4x = ampliación gratuita para arte plano. |
| SVG de una tinta (sello, estarcido, placa clave) | svg-tracer trace_bitmap_to_svg (rutas absolutas) | potrace local, ilimitado, 0.1s. |
| Gráfico a partir de números reales | antv-chart | Opción de textura dibujada a mano. Envía tus datos a un servicio de renderizado de terceros y devuelve una URL pública — solo números públicos. El título del eje x vacío imprime "category". |
| Maqueta 3D de tipo / producto | Blender MCP (necesita la aplicación abierta) | Inicia Blender con el complemento, luego agrega el servidor ad hoc (uvx mcp-for-blender@<pinned>) con DISABLE_TELEMETRY=true. La telemetría está ACTIVADA por defecto — desactívala siempre. |
| Acabado ráster (semitono de periódico, edición de fotos) | GIMP MCP (necesita gimp-console ejecutándose) | Para GIMP 3.2 sin cabeza: gimp-console -i --batch-interpreter=python-fu-eval -b "p=Gimp.get_pdb().lookup_procedure('plug-in-mcp-server'); c=p.create_config(); c.set_property('run-mode', Gimp.RunMode.NONINTERACTIVE); p.run(c)" &. El semitono de periódico predeterminado es líneas — configura circle. Solo colores hexadecimales. Mata gimp-console después. |
| HTML -> PNG tarjeta, nada sale de la máquina | Satori MCP, parcheado | La versión original sube cada imagen a un almacenamiento de blobs público; parchéala para guardar localmente. Instala con un archivo de bloqueo congelado. |
Cada número en una pieza proviene de la fuente en vivo (curl), nunca escrito. Verifica el contraste de los colores de acento en fondos claros (un rojo medio sobre crema puede ser ~3.8:1, lo que falla para texto pequeño; oscurécelo por debajo de ~24px).
Descartados (no vuelvas a probar): Pollinations (marca de agua, baja resolución), Stability (prueba única), fal/Replicate/Together (sin nivel gratuito sin tarjeta), Krita MCP (sin texto), aplicaciones tldraw y Excalidraw MCP (dibujan solo dentro de una interfaz de chat), Bannerbear/Placid (pruebas), Postiz (sin nube gratuita, necesita Docker), Remotion MCP (solo documentación), Buffer (CAPTCHA de registro).
Datos / espacial
| Trabajo | Usa | Trampas |
|---|---|---|
| SQL + espacial sobre parquet/csv/geojson/.duckdb | duckdb MCP (en memoria, con extensión espacial cargada) | ST_Transform(ST_Point(lon,lat),'EPSG:4326','EPSG:26915') devuelve POINT(inf inf) silenciosamente, por lo que los filtros de distancia cuentan 0. Pasa always_xy := true. Las columnas del tasador suelen ser VARCHAR (max ordena como texto); los precios de venta pueden tener un marcador de posición 999,999,999. Si el servidor se ejecuta en modo lectura/escritura puede COPY TO en cualquier lugar: adjunta tus archivos reales como READ_ONLY. |
| Capa ArcGIS FeatureServer en vivo | duckdb ST_Read('<FeatureServer>/0/query?where=...&outFields=...&orderByFields=OBJECTID&f=geojson&resultOffset=N') | Trunca silenciosamente en maxRecordCount del servidor (a menudo 2,000) sin advertencia. Verifica primero con returnCountOnly=true, pagina con resultOffset + orderByFields, y nombra las columnas en UNION ALL (una última página vacía no tiene ninguna). |
| OSM / Overpass (restaurantes en un vecindario...) | osm openstreetmap_search_places -> id de relación -> openstreetmap_query_bbox{within:"R..."} | Fugas de área por nombre: un nombre de vecindario puede extraer filas de un lugar con el mismo nombre en otro estado. Busca siempre dentro del id de relación. Los espejos de Overpass 500 a menudo; reintenta. |
| Datos del Censo ACS por dirección/código de tracto | census census_resolve_geography{name:"<dirección>"} -> census_query_data{dataset:"acs/acs5", ...} | Devuelve MOE (variables ...M) — infórmalo. Necesita una clave gratuita CENSUS_API_KEY. |
| Renderizar un mapa PNG para ver lo que construiste | maplibre render_style | Chrome sin cabeza, mapa base OpenFreeMap, sin clave. |
Descartados: gis-mcp (88 herramientas, DuckDB lo cubre), el MCP oficial del Censo (necesita Docker+Postgres), MCP ArcGIS estilo rastreador sin paginación, PostGIS (DuckDB lo cubre).
Investigación web / extracción
| Trabajo | Usa | Trampas |
|---|---|---|
| "Quién dirige operaciones en X", investigación de personas/empresas | exa web_search_exa | Sin clave. A menudo encuentra la página de equipo de una empresa donde una búsqueda web genérica no encuentra nada. |
| Lectura rápida de una página conocida | exa web_fetch_exa {urls:[...]} | Subsitio desde su índice — en caché y sin JS; es posible que esté desactualizado. |
| Búsqueda de frase exacta, extracción renderizada | firecrawl | ~1,000 créditos/mes gratis (extraer 1, buscar 2, JSON 5). La extracción JSON inventa campos — confía solo en lo que aparece en el markdown devuelto. |
| Rastreo renderizado, ilimitado, correos ocultos por Cloudflare | Crawl4AI CLI crwl <url> -o markdown | Decodifica data-cfemail que curl se salta. Lote: AsyncWebCrawler(...).arun_many. |
| Página JS sin nada instalado | curl https://r.jina.ai/<url> | ~20 req/min sin clave, 2-18s. |
- Algunos portales municipales están detrás de Cloudflare que nada atraviesa sin cabeza; su capa REST de ArcGIS suele tener los mismos datos.
- Correo electrónico: usa la dirección que la empresa publica en su propio sitio, luego verifica MX para ese dominio exacto. Los directorios alteran los dominios (una letra caída o añadida es común). La verificación a nivel de buzón generalmente no es posible desde una conexión doméstica; el puerto 25 está bloqueado.
- Descartados: Reddit MCP (403 anónimo — usa
reddit-mining), browser-use (necesita una clave LLM de pago), Browserbase (verificación telefónica). Tavily/Apify/Hunter/Brave se detienen en un CAPTCHA al registrarse — un clic humano cada uno si se desea.
Datos financieros / gubernamentales
| Trabajo | Usa | Trampas |
|---|---|---|
| Estados financieros informados, último trimestre | sec-edgar get_xbrl_concepts (por presentación) | EDGAR companyfacts (lo que leen muchas herramientas de get_key_metrics) puede estar un trimestre atrás — se detiene silenciosamente en el trimestre anterior. XBRL por presentación obtiene el último correctamente. Consulta sec-financials. |
| Precios, mejoras/revisiones de analistas, estimaciones | yfinance | Trátalo como inestable; verifica un cierre contra la propia página del exchange antes de usar un número. |
| Oportunidades SAM.gov, grants.gov, data.gov | un MCP de datos gov sin clave | La ruta gratuita de SAM (la API de SAM necesita MFA de login.gov). Los resultados de búsqueda omiten NAICS/reserva — obtén cada aviso. |
| Adjudicaciones de USAspending | usaspending | Filtra por lugar de desempeño, no por ubicación del destinatario — para "destinatarios en el estado X" llama a spending_by_award con recipient_locations. "Monto de la adjudicación" es de por vida, no del año fiscal. |
| Tesoro a 10 años, etc. | sin clave curl "https://fred.stlouisfed.org/graph/fredgraph.csv?id=DGS10&cosd=<YYYY-MM-DD>" | FRED se retrasa ~1 día con respecto a la propia curva del Tesoro. |
Marcos de trabajo
- Claude Agent SDK para agentes autónomos programados (por ejemplo, un script uv que llama al MCP sec-edgar y escribe JSON). Bajo macOS launchd no puede leer
~/Desktopo~/Documents— coloca los archivos en otro lugar. - promptfoo evaluaciones para un producto de chat: ejecuta el mensaje de sistema real a través de
claude -pcon aserciones deterministas (palabras prohibidas, límites de palabras). EstablecePROMPTFOO_DISABLE_TELEMETRY=1. Pasa el mensaje por stdin (--tools ""se traga un mensaje posicional). - Observable Framework para datos -> sitio estático (cargadores Python a través de
uv run). Una etiqueta literal<script>de analytics rompe la compilación; inyéctala en tiempo de ejecución. - uv scripts (dependencias inline PEP 723) para cada pipeline pequeño.
- Descartados: Evidence.dev (ahora un estudio con inicio de sesión), Pydantic AI/DSPy para trabajos pequeños (el SDK lo cubre), complementos pesados de proveedores que cuestan miles de tokens de contexto por sesión.
Operaciones
| Necesidad | Usa | Nota |
|---|---|---|
| Preguntas únicas de análisis de producto ("qué eventos existen", embudos) | posthog (herramienta única exec) | Mismos números que HogQL. Una clave API personal puede escribir indicadores/cohortes — mantenla de solo lectura. |
| Leer textos en un Mac | imessage MCP | Supera al SQL crudo de chat.db: decodifica attributedBody, descarta tapbacks, resuelve contactos. Sin herramienta de envío. Anclarlo — un solo mantenedor. |
| Documentación actual de bibliotecas | context7 | Nombra el proveedor en la consulta o resolverá la biblioteca incorrecta. |
Mantén una habilidad, no el MCP, donde el MCP es más lento y pesado para la misma respuesta: Vercel (su MCP tiene ~240 herramientas incl. buy_domain; consulta vercel-api), Stripe (su MCP redacta nombres de clientes; consulta stripe-dashboard), GitHub (gh), Notion (curl; el MCP alojado rechaza tokens de integración), Apple Notes (apple-notes; los MCP incluyen herramientas de eliminación). Nunca agregues un MCP de un proveedor de correo electrónico que incluya una herramienta de envío si tu regla es que un humano presiona enviar.
Estado de autenticación
- Servidores OAuth (canva, figma, orshot): si
claude mcp listdice "Necesita autenticación", ejecuta/mcpuna vez en una sesión interactiva. Mantén las contraseñas y tokens en el Llavero, nunca en un repositorio. - Revoca cualquier concesión OAuth en la configuración de ese sitio -> Aplicaciones conectadas.
Agregar un nuevo MCP
Prueba antes de registrar: npx -y @modelcontextprotocol/inspector --cli <cmd> --method tools/list (envuelve el servidor en un script de shell — el inspector se traga -e y las banderas del servidor). Luego: fija la versión ([email protected]; los servidores de referencia renumeran), lee la lista de herramientas en busca de herramientas de envío/eliminación/publicación, verifica los valores predeterminados de telemetría y agrega una fila arriba con su trampa. Elimínalo cuando deje de ganarse su lugar.