HasData Instagram MCP Server
Perfiles públicos de Instagram y feeds de publicaciones por usuario, con hashtags y menciones analizados.
Documentación
Servidor MCP de Instagram
Un servidor de Model Context Protocol (MCP) alojado que ofrece a Claude, Cursor, Windsurf y cualquier otro cliente MCP dos herramientas de solo lectura para Instagram. Busca un perfil público por su nombre de usuario y recorre su feed de publicaciones públicas, todo como JSON estructurado.
Lee datos públicos de cuentas. No actúa como una cuenta. No hay nada que conectar y ninguna cuenta tuya está involucrada en el flujo.
1,000 créditos gratis cada mes, sin necesidad de tarjeta, lo que equivale a 100 llamadas a Instagram.
https://mcp.hasdata.com/mcp?apis=instagram
Contenido
- Lo que necesitas
- Inicio rápido
- Ejemplos de prompts
- Herramientas
- Errores y rutas de fallo
- Precios, plan gratuito y límites
- Selección de herramientas
- Cómo se compara
- Preguntas frecuentes
- Enlaces de HasData
- Desarrollo
- Contribuciones
- Licencia
Lo que necesitas
Un cliente MCP que hable HTTP transmisible con cabeceras personalizadas. Una clave de API de HasData desde el panel de control, gratuita de crear sin tarjeta, y el plan gratuito cubre 100 llamadas al mes. Nada más. Este es un servidor remoto, así que el camino más simple es una URL y una cabecera, sin contenedor que ejecutar. Un cliente que solo admita stdio puede usar el lanzador @hasdata/instagram-mcp (npm) o hasdata-instagram-mcp (PyPI) en su lugar.
Inicio rápido
| URL | https://mcp.hasdata.com/mcp?apis=instagram |
| Transporte | HTTP, transmisible |
| Cabecera de autenticación | x-api-key: HASDATA_API_KEY |
La URL del servidor es la misma para todos los clientes. Lo ejecutamos de forma práctica en Claude Code y Claude Desktop. Los demás bloques siguen el formato documentado de cada cliente para un servidor remoto.
Los clientes con soporte OAuth pueden añadir la misma URL como conector e iniciar sesión sin poner una clave en un archivo de configuración.
Claude Code
claude mcp add --transport http instagram "https://mcp.hasdata.com/mcp?apis=instagram" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Claude Desktop solo carga servidores locales (stdio) desde su archivo de configuración, por lo que llega a un servidor remoto a través de un lanzador stdio. El paquete @hasdata/instagram-mcp es ese lanzador, y lee la clave desde el entorno.
claude_desktop_config.json:
{
"mcpServers": {
"instagram": {
"command": "npx",
"args": ["-y", "@hasdata/instagram-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
¿Python en lugar de Node? Cambia el lanzador por el paquete de PyPI, que uvx ejecuta sin instalación manual:
{
"mcpServers": {
"instagram": {
"command": "uvx",
"args": ["hasdata-instagram-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Un cliente con soporte OAuth puede, en su lugar, añadir la URL como conector personalizado y omitir el lanzador.
Cursor
.cursor/mcp.json:
{
"mcpServers": {
"instagram": {
"url": "https://mcp.hasdata.com/mcp?apis=instagram",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"instagram": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=instagram",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cline
{
"mcpServers": {
"instagram": {
"url": "https://mcp.hasdata.com/mcp?apis=instagram",
"type": "streamableHttp",
"headers": { "x-api-key": "HASDATA_API_KEY" },
"disabled": false
}
}
}
VS Code
.vscode/mcp.json:
{
"servers": {
"instagram": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=instagram",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"instagram": {
"httpUrl": "https://mcp.hasdata.com/mcp?apis=instagram",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Ejemplos de prompts
Cada uno de estos es una llamada a una herramienta, salvo que el recuento indique lo contrario.
Obtén el perfil de
@nasay dime el número de seguidores, si está verificado y todos los enlaces de la biografía.
Una llamada, 10 créditos. Para una cuenta pública, la respuesta del perfil ya incluye las doce publicaciones más recientes, así que una pregunta de seguimiento sobre actividad reciente no necesita una segunda llamada.
Compara
@nasa,@natgeoy@bbcearthen seguidores, cuentas seguidas y si cada una está verificada.
Tres llamadas, 30 créditos. Una por nombre de usuario.
Recorre las últimas cincuenta publicaciones de
@nasay lista cada hashtag con la frecuencia con la que aparece.
Cinco llamadas, 50 créditos. Doce publicaciones llegan por llamada, y cincuenta requieren cinco páginas.
Para las últimas doce publicaciones de
@natgeo, lista las cuentas mencionadas en cada pie de foto y el tipo de cada publicación.
Una llamada, 10 créditos. Las menciones y los hashtags llegan ya extraídos del pie de foto en los objetos de publicación.
Dos cosas hacen que esto funcione. Los hashtags y las menciones llegan como arrays extraídos del pie de foto, y un agente los cuenta en lugar de ejecutar una expresión regular sobre el texto. Y una búsqueda de perfil devuelve el feed reciente en la misma respuesta. Por eso tantas preguntas de investigación se resuelven en una sola llamada.
Herramientas
| Herramienta | Qué devuelve |
|---|---|
hasdata_instagram_comments_getInstagramComments | Obtiene los comentarios de una publicación o reel público por su URL y devuelve la publicación en sí con su pie de foto, medios, likesCount, commentsCount y timestamp, y luego cada comentario con su texto, número de me gusta, marca de tiempo y autor. 10 créditos por llamada |
hasdata_instagram_posts_getInstagramPosts | Obtiene las publicaciones más recientes de una cuenta pública de Instagram por nombre de usuario (handle) y devuelve cada publicación con su id, shortcode, pie de foto, tipo, productType, enlace permanente, URLs de medios y tamaño en píxeles, recuentos de me gusta y comentarios, la hora de publicación, además de hashtags, menciones, usuarios etiquetados y miembros de carrusel. 10 créditos por llamada |
hasdata_instagram_profile_getInstagramProfile | Obtiene un perfil público de Instagram por nombre de usuario (handle) y devuelve id, nombre completo, biografía, enlaces de la biografía, URL de la foto de perfil, recuentos de seguidores y seguidos, el indicador de verificado y las doce publicaciones más recientes. 10 créditos por llamada |
Tres herramientas, todas de solo lectura. Dos se basan en el handle de una cuenta pública, la tercera en la URL de una publicación individual. Los ejemplos siguientes están recortados de llamadas reales, y los números en ellos cambian a medida que las cuentas publican. Léelos como formas. El nombre de cada herramienta enlaza a su referencia de endpoint.
Los ejemplos son el payload, no la respuesta completa. Un resultado de tools/call lleva un bloque de texto, y ese texto es en sí mismo JSON que contiene url, status, text y json, con los datos extraídos bajo json. Desde una respuesta JSON-RPC cruda, la ruta es result.content[0].text, parseado, y luego .json. Un cliente de chat lo desenvuelve por ti, y el código que habla directamente con el endpoint no lo hace.
Obtener un perfil de Instagram
hasdata_instagram_profile_getInstagramProfile
Un perfil público por handle.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
handle | string | sí | Nombre de usuario sin el @, tal como aparece en la URL del perfil |
Devuelve id, username, fullName, biography, verified, los contadores followersCount y followsCount, profilePicUrl, el fbid interno, el array bioLinks y latestPosts.
Lo que está garantizado y lo que no, medido en veinte cuentas: id, username, followersCount, followsCount, profilePicUrl y fbid llegaron siempre. fullName, biography, verified, bioLinks y latestPosts llegaron para todas las cuentas públicas y son los que se deben leer con un valor predeterminado.
Una cuenta privada responde con
private: truey poco más. Sin biografía, sin contadores más allá de los números de seguidores, sin publicaciones. Ramifica en ese indicador antes de tocar el resto del payload.
bioLinkses un array de objetos, no de cadenas. Cada entrada llevaurl,title, el envoltorioredirectUrlpropio de Instagram ylinkType. Lee.urlcuando quieras el destino.
{
"id": "528817151",
"username": "nasa",
"fullName": "NASA",
"biography": "Making the seemingly impossible, possible. ✨",
"verified": true,
"followersCount": 104345698,
"followsCount": 91,
"profilePicUrl": "https://scontent.cdninstagram.com/v/t51.2885-19/…",
"fbid": "17841401474538262",
"bioLinks": [
{
"url": "https://www.nasa.gov",
"title": "NASA.gov Homepage",
"redirectUrl": "https://l.instagram.com/?u=https%3A%2F%2Fwww.nasa.gov%2F&e=…",
"linkType": "external"
}
],
"latestPosts": [ "…the most recent posts, same shape as the posts tool…" ]
}
Obtener publicaciones de Instagram
hasdata_instagram_posts_getInstagramPosts
El feed de publicaciones públicas de un handle, página por página.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
handle | string | sí | Nombre de usuario sin el @ |
limit | number | Límite aproximado de publicaciones en una respuesta. Doce es el máximo real, y valores mayores no obtienen más | |
nextPageToken | string | El pagination.nextPageToken de la respuesta anterior |
limites un tope aproximado, no un recuento exacto. Doce publicaciones son una página de Instagram y el techo máximo para una sola llamada, ylimit: 50devuelve doce. Por debajo del techo, el recuento se acerca al número que pediste sin coincidir siempre, y qué tan cerca depende de la cuenta. Medido en@nasa, un límite de 2 devolvió 4 publicaciones, 6 devolvió 6, 11 devolvió 10 y 13 devolvió 12. Trátalo como "no más de aproximadamente esta cantidad" y lee la longitud del array en lugar de asumirlo.
La respuesta lleva posts y pagination, y nada más. Las versiones anteriores repetían los campos de identidad de la cuenta junto al feed, por lo que el código escrito para esa forma necesita una llamada de perfil para el nombre y el avatar.
Cada publicación lleva id, shortcode, caption, type, productType, url, ownerUsername, ownerId, displayUrl y images, el tamaño en píxeles como dimensionsWidth y dimensionsHeight, y hasdataLink, un enlace listo para usar al endpoint de comentarios de esa publicación. hashtags y mentions aparecen solo cuando el pie de foto los tiene. Un carrusel lleva sus miembros en childPosts, y taggedUsers lista las cuentas etiquetadas en el medio.
Los contadores de interacción llegan con el feed. Cada publicación lleva
likesCountycommentsCount, y la hora de publicación dos veces:timestampcomo instante ISO completo ypublishDatecomo día calendario. Clasificar un feed por popularidad o filtrarlo por fecha no necesita una segunda llamada. Esto cambió el 2026-10-07; las versiones anteriores del payload no llevaban ninguno de los cuatro.
{
"posts": [
{
"id": "3983374110243288826",
"shortcode": "DdHyaYAifb6",
"caption": "Cementing their names in history.\n\nThe Artemis III crew is leaving their mark […] @NASAKennedy",
"type": "Carousel",
"productType": "carousel_container",
"mentions": ["@NASAKennedy", "@EuropeanSpaceAgency", "@Astro_Luca"],
"url": "https://www.instagram.com/p/DdHyaYAifb6/",
"hasdataLink": "https://api.hasdata.com/scrape/instagram/comments?url=…",
"commentsCount": 1053,
"likesCount": 121490,
"dimensionsWidth": 1440,
"dimensionsHeight": 1800,
"displayUrl": "https://scontent.cdninstagram.com/v/t51.…",
"images": ["https://scontent.cdninstagram.com/v/t51.…"],
"timestamp": "2026-09-10T21:20:24.000Z",
"publishDate": "2026-09-10",
"ownerUsername": "nasa",
"ownerId": "528817151",
"taggedUsers": [{ "id": "549403870", "username": "nasakennedy", "fullName": "NASA's Kennedy Space Center" }],
"childPosts": [{ "id": "3983374043612570267", "type": "Image", "productType": "carousel_item" }]
}
],
"pagination": {
"morePostsAvailable": true,
"nextPageToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…",
"hasdataLink": "https://api.hasdata.com/scrape/instagram/posts?handle=nasa&nextPageToken=…"
}
}
Los hashtags y las menciones conservan sus prefijos # y @, lo que importa si los estás uniendo contra una lista que construiste tú mismo. morePostsAvailable es el indicador en el que ramificar al paginar, y hasdataLink es la misma página siguiente expresada como URL REST, útil cuando quieres reproducir la llamada de un agente a mano.
Obtener los comentarios de una publicación
hasdata_instagram_comments_getInstagramComments
El hilo de comentarios bajo una publicación o reel, y la publicación en sí.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
url | string | sí | Un enlace de /p/, /reel/ o /tv/, con o sin el segmento de nombre de usuario |
nextPageToken | string | Token de la respuesta anterior | |
includeMusic | boolean | Devuelve también el sonido de un reel en post.music, tanto para pistas con licencia como para audio original |
Usa esto cuando el hilo de comentarios en sí es el objetivo. El objeto post repite las cifras de interacción que el feed ya lleva, por lo que clasificar o fechar un feed no necesita esta llamada, y gastar una solicitud por publicación para recopilar números que llegaron con el feed es un desperdicio.
Devuelve post, comments y pagination. Un comentario lleva id, text, timestamp, likesCount y un owner con id, username y profilePicUrl. pagination informa moreCommentsAvailable junto a nextPageToken, por lo que un recorrido puede detenerse sin gastar una solicitud para descubrir el final.
{
"post": {
"shortcode": "DdHyaYAifb6",
"type": "Carousel",
"productType": "carousel_container",
"ownerUsername": "nasa",
"timestamp": "2026-09-10T21:20:24.000Z",
"likesCount": 120648,
"commentsCount": 1020
},
"comments": [
{
"id": "18188486875408374",
"text": "I like to become a astronomer",
"timestamp": "2026-10-05T07:38:17.000Z",
"likesCount": 0,
"owner": { "id": "40744210101", "username": "nisha_karippolil" }
}
],
"pagination": { "moreCommentsAvailable": true, "nextPageToken": "…" }
}
Prompts y recursos
El servidor incluye un prompt, un flujo de trabajo listo para usar que un cliente puede ofrecer en lugar de hacer que el usuario componga una llamada a una herramienta.
| Prompt | Qué hace |
|---|---|
instagram_profile | Busca un perfil público de Instagram. |
La lista se sirve sin clave de API, por lo que un cliente puede leerla antes de que un usuario se haya registrado.
Errores y rutas de fallo
Su cliente casi nunca ve un código de error HTTP de una llamada a una herramienta. La capa MCP responde con 200 y coloca el fallo dentro del resultado, con isError establecido en true y el motivo como texto. El agente lee un mensaje donde podría esperar una línea de estado.
Una clave incorrecta aparece como salida de herramienta, no como una conexión fallida. Listar herramientas acepta cualquier clave no vacía, y el cliente completa su handshake y muestra verde. La primera llamada a una herramienta regresa entonces con isError: true y el texto HasData API error: 401 Unauthorized. Preste atención a esa cadena, porque nada antes en el flujo reporta el problema.
Una clave faltante es el único error HTTP real. La autorización se ejecuta antes de cualquier herramienta, y la conexión misma falla con 401.
Un argumento que rompe el esquema se rechaza antes de convertirse en una solicitud. El servidor responde con isError: true y el texto MCP error -32602: Input validation error, nombrando el campo. No se obtiene nada y no se cobra nada.
Un identificador que no se resuelve es un error limpio, no datos vacíos. Devuelve isError: true con HasData API error: 400 Bad Request y requestMetadata.status establecidos en error. Este es el caso bueno, porque el fallo es inequívoco. Pruebe la bandera en lugar de la longitud del arreglo.
Una cuenta cuyos datos no son públicos no devuelve un feed de publicaciones. Las herramientas cubren cuentas públicas, y no hay nada que leer en una que no lo sea. Trate un latestPosts faltante como fuera de alcance y no como un feed vacío.
Los resultados que contienen datos también incluyen un requestMetadata.id que vale la pena citar en soporte, además de enlaces html y json al artefacto almacenado de esa llamada exacta.
Precios, nivel gratuito y límites
Cada herramienta de Instagram cuesta 10 créditos por llamada exitosa. El tamaño de la respuesta no cambia el precio. Un perfil con doce publicaciones adjuntas cuesta lo mismo que uno sin ninguna.
El nivel gratuito es de 1,000 créditos cada mes sin tarjeta, o 100 llamadas de Instagram. Se renueva con el ciclo de facturación, por lo que un agente de bajo volumen funciona en el nivel gratuito indefinidamente.
Los planes de pago comienzan en $59 al mes por 200,000 créditos, o 20,000 llamadas. El precio unitario baja con el volumen, desde $2.95 por 1,000 llamadas en el plan de entrada hasta $1.19 en Basic y $0.83 en los niveles Growth. Las cifras actuales están en la página de precios.
Su plan también establece la concurrencia. El nivel gratuito permite 1 solicitud a la vez, Startup 5, Basic 15, y los niveles Growth van de 50 a 500. Maneje el caso de desbordamiento de forma defensiva en cualquier cosa desatendida, porque un agente que se expande entre identificadores alcanzará el límite antes que usted.
Paginación cuesta una llamada cada vez. Un prompt que recorre cien publicaciones en dos cuentas son dieciocho llamadas y 180 créditos. El nivel gratuito rinde más en comparaciones de perfiles que en rastreos profundos de feeds.
Selección de herramientas
?apis=instagram expone exactamente estas dos herramientas. El parámetro toma una lista, y ?apis=instagram,tiktok,youtube le da a su agente tres plataformas sociales a la vez. Elimine el parámetro y obtiene todo lo que HasData expone, que actualmente son 57 herramientas.
Una lista reducida suele ser el mejor valor predeterminado. Un modelo que elige entre dos herramientas acierta más a menudo que uno que elige entre cincuenta y siete, y las descripciones de las herramientas cuestan contexto en cada turno.
La comparación entre plataformas es la razón habitual para ampliar la lista. Haga la misma pregunta a un identificador de Instagram y a uno de TikTok y es un solo prompt una vez que ambos están expuestos.
Cómo se compara
Casi todos los servidores MCP de Instagram hacen algo diferente a este, y eso hace que la elección sea inusualmente clara.
Los populares operan una cuenta. Algunos envuelven la API Graph de Instagram para publicar publicaciones, leer comentarios y gestionar las cuentas que usted administra. Otros manejan mensajes directos. Los servidores de análisis de engagement piden INSTAGRAM_USERNAME y INSTAGRAM_PASSWORD en un bloque de entorno, según sus propias instrucciones de configuración, porque inician sesión y navegan como usted. Todos esos son la herramienta adecuada cuando el trabajo es administrar una cuenta que usted controla.
Este servidor nunca inicia sesión como nadie, lo cual es un trabajo diferente. Cada pregunta que responde es sobre un identificador que usted no posee, y la llamada es idéntica sea cual sea ese identificador.
| Servidor que opera cuentas | Este servidor | |
|---|---|---|
| Cómo actúa | Su cuenta, mediante un token o una sesión | Nada, lee datos públicos |
| Qué configura | Credenciales o una app de Graph API, por cuenta | Una clave API, una vez |
| Qué identificadores cubre | Las cuentas que usted administra | Cualquier identificador público |
| Publicación y mensajería | Sí, ese es el punto | No se ofrece |
| Salida | Limitada a la cuenta que usted opera | JSON para cualquier identificador público, hashtags y menciones analizados |
| Qué ejecuta | Un proceso de Python o Node localmente | Una URL y un encabezado |
| Costo | Gratis | 10 créditos por llamada |
Dos filas lo deciden. Si necesita publicar, comentar o responder, este servidor no puede ayudarle en absoluto. Si necesita los mismos campos en cien identificadores con los que no tiene relación, un servidor construido alrededor de sus propias credenciales tampoco puede ayudarle.
El eje decisivo es el alcance, no el pulido. Un servidor construido alrededor de su propio inicio de sesión solo puede alcanzar las cuentas que usted administra, por muy buena que sea su salida. Este responde la misma pregunta para cualquier identificador público, y los campos regresan como arreglos analizados que no cuestan nada agregar.
Lo que este servidor no hace. Sin comentarios, sin historias, sin reels más allá de lo que reporta el feed, sin mensajes directos, sin búsqueda de hashtags o ubicaciones, y nada que escriba. Lee dos cosas bien.
Preguntas frecuentes
¿Qué es un servidor MCP de Instagram?
Un servidor que expone datos de Instagram como herramientas que un cliente de IA puede llamar. El cliente envía una llamada de herramienta a través del Protocolo de Contexto de Modelo, el servidor obtiene los datos y devuelve JSON estructurado, y el modelo trabaja con el resultado y nunca ve una página de HTML. Este expone dos herramientas de solo lectura y se ejecuta de forma remota. El cliente se conecta a una URL y no inicia ningún proceso local.
¿Existe un servidor MCP oficial de Instagram?
Meta no publica uno de propósito general. Hay un MCP oficial para publicidad de Meta, y cubre cuentas publicitarias y campañas, no datos de perfiles y publicaciones. Todo lo demás en este espacio está construido por otra persona.
¿Qué datos están en alcance?
Campos públicos de perfil y el feed público de publicaciones, para cuentas públicas, por identificador. Una cuenta privada aún devuelve su encabezado, los conteos de seguidores y seguidos, y una bandera private: true, pero sin biografía ni publicaciones, ya que no hay feed público que leer. Usted es responsable de cómo usa los resultados, incluido el cumplimiento de los términos de Instagram y de la ley que le aplica.
¿Necesito alojar o ejecutar algo?
No. Este es un servidor MCP remoto en HTTP transmisible. Nada que instalar, sin entorno de Python, sin proceso que reiniciar.
¿Los datos son en vivo o en caché?
En vivo. Cada llamada obtiene datos en el momento de la solicitud y lleva su propio requestMetadata.id. Dos llamadas idénticas son dos obtenciones separadas y no una reproducción de una copia almacenada. Contadores como seguidores y me gusta siguen a la cuenta y se mueven conforme ella se mueve.
¿Cuántas publicaciones puedo obtener?
Doce por llamada, una página de Instagram, y las páginas adicionales vienen de pagination.nextPageToken. Para una cuenta pública, la búsqueda de perfil incluye las mismas doce sin costo adicional, por lo que preguntas cortas sobre el feed a menudo no necesitan ninguna llamada de publicaciones.
¿Qué sucede cuando Instagram cambia su marcado?
Nada de su lado. Nosotros rastreamos los cambios y mantenemos estable el esquema de respuesta, y los nombres y tipos de campos permanecen igual. Un campo sin valor está ausente del elemento en lugar de presente y nulo, y por eso los campos opcionales deben leerse con un valor predeterminado.
¿Puedo usar un servidor para varias plataformas?
Sí. El parámetro apis toma una lista, y ?apis=instagram,tiktok,youtube le da a su agente tres plataformas a la vez.
¿Qué clientes funcionan?
Cualquier cliente MCP que admita HTTP transmisible con encabezados personalizados. Las configuraciones anteriores están probadas. Los clientes con soporte OAuth pueden agregar la URL como conector en su lugar.
Enlaces de HasData
| Páginas de producto y constructor de solicitudes | API de Perfil de Instagram y API de Publicaciones de Instagram |
| Documentación del servidor | Docs del servidor MCP |
| Las 57 herramientas en un solo servidor | HasData/hasdata-mcp |
| Tutoriales para clientes | Clientes MCP e integraciones |
| Las otras plataformas que analizamos | 53 APIs de scraping más |
| Planes y costos de créditos | Planes y costos de créditos |
| Claves y uso | Panel de HasData |
| Lanzador de Node en npm | @hasdata/instagram-mcp |
| Lanzador de Python en PyPI | hasdata-instagram-mcp |
Desarrollo
Este repositorio es configuración y documentación para un servidor remoto. No hay paso de compilación ni nada que contenerizar.
Sí incluye una prueba de contrato. El README promete dos herramientas con parámetros específicos, y la lista de herramientas ascendente puede cambiar sin una confirmación aquí, y eso dejaría este archivo mintiéndole silenciosamente. La prueba afirma la promesa y se ejecuta semanalmente en CI, así como en cada push.
HASDATA_API_KEY=your_key_here npm test
En PowerShell:
$env:HASDATA_API_KEY = "your_key_here"; npm test
La última verificación hace una llamada real y cuesta 10 créditos, que es el precio de un canario que puede fallar por la razón correcta. Listar herramientas tiene éxito con cualquier clave no vacía, y una prueba que solo lista herramientas permanece en verde con una revocada.
Contribuciones
Las correcciones a las tablas de herramientas y a los ejemplos de respuesta son la contribución más útil, porque esas son las partes que se desvían. Incluya la llamada que hizo y la respuesta que obtuvo. Las solicitudes de extracción de forks ejecutan la suite sin clave, y las verificaciones en vivo se omiten en lugar de ponerse en rojo.
Licencia
MIT. Consulte LICENCIA.