Skip to main content
Glama
HasData

Instagram MCP Server

Servidor MCP de Instagram

Un servidor alojado de Protocolo de Contexto de Modelo (MCP) que ofrece a Claude, Cursor, Windsurf y cualquier otro cliente MCP dos herramientas de solo lectura para Instagram. Consulta un perfil público por su nombre de usuario y recorre su feed de publicaciones público, como JSON estructurado.

Lee datos públicos de cuentas. No actúa como una cuenta. No hay nada que conectar y ninguna cuenta tuya interviene en el flujo.

https://mcp.hasdata.com/api/mcp?apis=instagram

Puntuación de Glama Contrato de herramienta MCP Herramientas npm PyPI Licencia

Contenido

Related MCP server: Google Search MCP Server

Qué 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 la prueba cubre 100 llamadas. Nada más. Este es un servidor remoto, así que el camino más sencillo 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/api/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 que cada cliente tiene 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 mcp add --transport http instagram "https://mcp.hasdata.com/api/mcp?apis=instagram" \
  --header "x-api-key: HASDATA_API_KEY"

Claude Desktop solo carga servidores locales (stdio) desde su archivo de configuración, por lo que llega a un servidor remoto mediante un lanzador stdio. El paquete @hasdata/instagram-mcp es ese lanzador, y lee la clave del 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? Sustituye 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 añadir en su lugar la URL como conector personalizado y omitir el lanzador.

.cursor/mcp.json:

{
  "mcpServers": {
    "instagram": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "instagram": {
      "serverUrl": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
{
  "mcpServers": {
    "instagram": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "type": "streamableHttp",
      "headers": { "x-api-key": "HASDATA_API_KEY" },
      "disabled": false
    }
  }
}

.vscode/mcp.json:

{
  "servers": {
    "instagram": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

~/.gemini/settings.json:

{
  "mcpServers": {
    "instagram": {
      "httpUrl": "https://mcp.hasdata.com/api/mcp?apis=instagram",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Ejemplos de indicaciones

Cada una de estas es una llamada de herramienta salvo que el recuento indique lo contrario.

Obtén el perfil de @nasa y dime el número de seguidores, la categoría 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 consulta posterior sobre la actividad reciente no necesita una segunda llamada.

Compara @nasa, @natgeo y @bbcearth en cuanto a seguidores, publicaciones publicadas y si cada una es una cuenta de empresa.

Tres llamadas, 30 créditos. Una por nombre de usuario.

Recorre las últimas cincuenta publicaciones de @nasa y enumera cada hashtag con la frecuencia con la que aparece.

Cinco llamadas, 50 créditos. Llegan doce publicaciones por llamada, y cincuenta requieren cinco páginas.

Para las últimas doce publicaciones de @natgeo, dame los me gusta, los comentarios y las cuentas mencionadas en cada pie de foto.

Una llamada, 10 créditos. Los recuentos de interacción y las menciones vienen analizados en los objetos de publicación.

Dos cosas hacen que esto funcione. Los hashtags y las menciones llegan como matrices extraídas del pie de foto, y un agente los cuenta en lugar de ejecutar una expresión regular sobre el texto. Y una consulta de perfil devuelve el feed reciente en la misma respuesta. Por eso tantas preguntas de investigación se resuelven en una sola llamada.

Herramientas

Dos herramientas, ambas de solo lectura, ambas basadas en el nombre de usuario de una cuenta pública. Las muestras siguientes están recortadas de llamadas reales, y los números en ellas cambian a medida que las cuentas publican. Léelas como formas. Cada nombre de herramienta enlaza con su referencia de endpoint.

Las muestras son la carga útil, 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, analizada, y luego .json. Un cliente de chat lo desenvuelve por ti; 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 nombre de usuario.

Parámetro

Tipo

Obligatorio

Notas

handle

string

sí

Nombre de usuario sin la @, tal como aparece en la URL del perfil

Devuelve id, username, fullName, biography, businessCategory, verified, isBusinessAccount y isProfessionalAccount, los contadores followersCount, followsCount, postsCount, highlightsCount e igtvVideoCount, tanto profilePicUrl como profilePicUrlHD, y las matrices latestPosts, latestIgtvVideos y relatedProfiles.

Los campos básicos de identidad y los contadores de seguidores y seguidos llegan para toda cuenta pública. Los campos adicionales dependen de lo que la propia cuenta exponga, así que lee los opcionales con un valor predeterminado.

Los enlaces viven en dos campos que no son lo mismo. bioLinks es la matriz de todos los enlaces de la biografía. externalUrls es una sola cadena a pesar del nombre en plural, y contiene el enlace principal, a veces con una barra final que la versión en matriz no tiene. Lee bioLinks cuando los quieras todos.

latestPosts e latestIgtvVideos no llevan campos idénticos. Las entradas de vídeo añaden taggedUsers, y los objetos de publicación aquí omiten el productType que incluye la herramienta de publicaciones. El código que recorra ambas matrices con un solo analizador debe tratar las claves adicionales como opcionales.

{
  "id": "528817151",
  "username": "nasa",
  "fullName": "NASA",
  "biography": "Making the seemingly impossible, possible. ✨",
  "businessCategory": "Government Agencies",
  "bioLinks": [
    "https://www.nasa.gov",
    "https://science.nasa.gov/mission/roman-space-telescope/",
    "http://intern.nasa.gov"
  ],
  "externalUrls": "https://www.nasa.gov/",
  "followersCount": 104397669,
  "followsCount": 92,
  "postsCount": 4887,
  "verified": true,
  "isBusinessAccount": true,
  "latestPosts": [ "…twelve most recent posts, same shape as the posts tool…" ],
  "relatedProfiles": [
    { "id": "…", "username": "…", "fullName": "…", "profilePicUrl": "…" }
  ]
}

relatedProfiles es la propia lista de sugerencias de Instagram para la cuenta y llega a unas pocas docenas de entradas. Es una forma económica de ampliar un conjunto de competidores sin adivinar nombres de usuario.

Obtener publicaciones de Instagram

hasdata_instagram_posts_getInstagramPosts

El feed de publicaciones público de un nombre de usuario, página por página.

Parámetro

Tipo

Obligatorio

Notas

handle

string

sí

Nombre de usuario sin la @

limit

number

Tope aproximado de publicaciones en una respuesta. Doce es el máximo real, y los valores mayores no obtienen más

nextPageToken

string

El pagination.nextPageToken de la respuesta anterior

limit es un tope aproximado, no un recuento exacto. Doce publicaciones son una página de Instagram y el techo máximo para una sola llamada, y limit: 50 devuelve doce. Por debajo del techo, el recuento se acerca al número que pediste sin coincidir siempre, y cuánto se acerca 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 de la matriz en lugar de asumirla.

La respuesta repite los campos de identidad de la cuenta junto a las publicaciones. username, id, fullName, verified y ambas URL de avatar llegan en cada página. Útil para etiquetar filas, y conviene saberlo antes de hacer una llamada de perfil aparte para obtenerlos.

Cada publicación lleva id, shortcode, caption, type, productType, hashtags, mentions, likesCount, commentsCount, timestamp, url, displayUrl, images, dimensionsWidth, dimensionsHeight, ownerId y ownerUsername.

{
  "username": "nasa",
  "id": "528817151",
  "fullName": "NASA",
  "verified": true,
  "latestPosts": [
    {
      "id": "3967213292204992434",
      "shortcode": "DcOX3hWFiey",
      "caption": "With your powers combined…\n\nThis colorful picture of the cosmos is the product of teamwork between our @NASAHubble, @NASAWebb, and @NASAChandraXray telescopes. […] \n\n#NASA #Universe #Nebula",
      "type": "Image",
      "hashtags": ["#NASA", "#Universe", "#Nebula"],
      "mentions": ["@NASAHubble", "@NASAWebb", "@NASAChandraXray"],
      "likesCount": 78412,
      "commentsCount": 402,
      "timestamp": "2026-08-18T16:02:11.000Z",
      "url": "https://www.instagram.com/p/DcOX3hWFiey/"
    }
  ],
  "pagination": {
    "morePostsAvailable": true,
    "nextPageToken": "3968050822236429248_528817151",
    "hasdataLink": "https://api.hasdata.com/scrape/instagram/posts?handle=nasa&nextPageToken=3968050822236429248_528817151"
  }
}

Los hashtags y las menciones conservan sus prefijos # y @, lo cual importa si los vas a cruzar con una lista que hayas creado tú mismo. morePostsAvailable es el indicador sobre el que ramificar al paginar, y hasdataLink es la misma página siguiente expresada como URL REST, útil cuando quieres reproducir a mano la llamada de un agente.

Errores y casos de fallo

Tu cliente casi nunca ve un código de error HTTP de una llamada de herramienta. La capa MCP responde 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ías esperar una línea de estado.

Una clave incorrecta aparece como salida de herramienta, no como conexión fallida. Enumerar herramientas acepta cualquier clave no vacía, y el cliente completa su handshake y muestra verde. La primera llamada de herramienta vuelve entonces con isError: true y el texto HasData API error: 401 Unauthorized. Presta atención a esa cadena, porque nada antes en el flujo informa del problema.

Una clave ausente es el único error HTTP real. La autorización se ejecuta antes que cualquier herramienta, y la propia conexión falla con 401.

Un argumento que rompe el esquema se rechaza antes de convertirse en 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 nombre de usuario 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 establecido en error. Este es el caso bueno, porque el fallo es inequívoco. Comprueba el indicador en lugar de la longitud de la matriz.

Una cuenta cuyos datos no son públicos no devuelve feed de publicaciones. Las herramientas cubren cuentas públicas, y no hay nada que leer en una que no lo sea. Trata un latestPosts ausente como fuera de alcance y no como un feed vacío.

Los resultados que llevan datos también llevan 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, capa gratuita y límites

Cada herramienta de Instagram cuesta 10 créditos por llamada correcta. El tamaño de la respuesta no cambia el precio. Un perfil con doce publicaciones adjuntas cuesta lo mismo que uno sin ninguna.

La prueba gratuita incluye 1.000 créditos durante 30 días sin tarjeta, o 100 llamadas de Instagram. Después, una cuenta activa sigue recibiendo 100 créditos de recarga cada día siempre que su saldo baje de 100, de modo que un agente de bajo volumen funciona en el plan gratuito indefinidamente.

Los planes de pago empiezan en $49 al mes por 200.000 créditos, o 20.000 llamadas. El precio unitario baja con el volumen: de $2,45 por cada 1.000 llamadas en el plan inicial a $0,99 en Business, $0,83 en Growth y $0,75 en los planes de alto volumen.

Tu plan también fija la concurrencia. La prueba gratuita permite 1 solicitud a la vez, Startup 15, Business 30, Growth 50, y los planes de alto volumen van de 200 a 1.500. Gestiona el caso de desbordamiento de forma defensiva en cualquier proceso no supervisado, porque un agente que se despliegue por varias cuentas llegará al techo antes que tú.

Pasar de página cuesta una llamada cada vez. Un prompt que recorre cien publicaciones en dos cuentas equivale a dieciocho llamadas y 180 créditos. La prueba rinde más comparando perfiles que haciendo rastreos profundos del feed.

Tool selection

?apis=instagram expone exactamente estas dos herramientas. El parámetro admite una lista, y ?apis=instagram,tiktok,youtube le da a tu agente tres plataformas sociales a la vez. Si eliminas el parámetro, obtienes todo lo que HasData expone, que actualmente son 57 herramientas.

Una lista reducida suele ser la mejor opción por defecto. Un modelo que elige entre dos herramientas acierta con más frecuencia que uno que elige entre cincuenta y siete, y las propias descripciones de las herramientas consumen contexto en cada turno.

La comparación entre plataformas es el motivo habitual para ampliar la lista. Haz la misma pregunta a una cuenta de Instagram y a una de TikTok, y será un solo prompt una vez que ambas estén expuestas.

Cómo se compara

Casi todos los servidores MCP de Instagram hacen algo distinto de este, y eso hace que la elección sea inusualmente clara.

Los populares operan una cuenta. Algunos envuelven la Instagram Graph API para publicar posts, leer comentarios y gestionar las cuentas que administras. Otros se encargan de los mensajes directos. Los servidores de análisis de engagement piden INSTAGRAM_USERNAME e INSTAGRAM_PASSWORD en un bloque env, según sus propias instrucciones de configuración, porque inician sesión y navegan como tú. Todos ellos son la herramienta adecuada cuando la tarea es gestionar una cuenta que controlas.

Este servidor nunca inicia sesión como nadie, lo cual es un trabajo distinto. Cada pregunta que responde es sobre una cuenta que no te pertenece, y la llamada es idéntica sea cual sea esa cuenta.

Servidor que opera una cuenta

Este servidor

Actúa como

Tu cuenta, mediante un token o una sesión

Nada, lee datos públicos

Qué configuras

Credenciales o una app de Graph API, por cuenta

Una clave de API, una vez

Qué cuentas cubre

Las cuentas que administras

Cualquier cuenta pública

Publicación y mensajería

Sí, ese es el objetivo

No se ofrece

Salida

Limitada a la cuenta que gestionas

JSON para cualquier cuenta pública, con hashtags y menciones analizados

Qué ejecutas

Un proceso de Python o Node localmente

Una URL y una cabecera

Coste

Gratis

10 créditos por llamada

Dos filas lo deciden. Si necesitas publicar, comentar o responder, este servidor no puede ayudarte en absoluto. Si necesitas los mismos campos en cien cuentas con las que no tienes ninguna relación, un servidor construido alrededor de tus propias credenciales tampoco puede ayudarte.

El eje decisivo es el alcance, no el acabado. Un servidor construido en torno a tu propio inicio de sesión solo puede llegar a las cuentas que administras, por muy buena que sea su salida. Este responde la misma pregunta para cualquier cuenta pública, y los campos vuelven como arrays analizados que no cuestan nada de agregar.

Lo que este servidor no hace. Nada de comentarios, ni stories, ni reels más allá de lo que informa el feed, ni mensajes directos, ni búsqueda por hashtag o ubicación, y nada que escriba. Lee bien dos cosas.

Preguntas frecuentes

¿Qué es un servidor MCP de Instagram?

Un servidor que expone datos de Instagram como herramientas que un cliente de IA puede invocar. El cliente envía una llamada de herramienta a través del Model Context Protocol, el servidor obtiene los datos y devuelve JSON estructurado, y el modelo trabaja con el resultado sin ver nunca 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. Existe un MCP oficial para la publicidad de Meta, y cubre cuentas y campañas publicitarias, no datos de perfiles y publicaciones. Todo lo demás en este espacio lo ha construido otra persona.

¿Qué datos abarca?

Campos de perfil públicos y el feed público de publicaciones, para cuentas públicas, por nombre de usuario. Una cuenta privada sigue devolviendo su cabecera, los contadores de seguidores y seguidos y un indicador private: true, pero sin biografía ni publicaciones, porque no hay un feed público que leer. Eres responsable de cómo utilices los resultados, incluido el cumplimiento de los términos de Instagram y de la ley que te sea aplicable.

¿Necesito alojar o ejecutar algo?

No. Es un servidor MCP remoto sobre streamable HTTP. Nada que instalar, sin entorno de Python, sin procesos que reiniciar.

¿Los datos son en vivo o en caché?

En vivo. Cada llamada obtiene los 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 con ella.

¿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 consulta de perfil incluye esos mismos doce sin coste adicional, por lo que las preguntas cortas sobre el feed a menudo no necesitan ninguna llamada de publicaciones.

¿Qué ocurre cuando Instagram cambia su marcado?

Nada por tu parte. Nosotros seguimos los cambios y mantenemos estable el esquema de respuesta, y los nombres y tipos de los campos se quedan igual. Un campo sin valor está ausente del elemento en lugar de estar presente y nulo, y por eso los campos opcionales deben leerse con un valor por defecto.

¿Puedo usar un solo servidor para varias plataformas?

Sí. El parámetro apis admite una lista, y ?apis=instagram,tiktok,youtube le da a tu agente tres plataformas a la vez.

¿Qué clientes funcionan?

Cualquier cliente MCP que admita streamable HTTP con cabeceras personalizadas. Las configuraciones anteriores están probadas. Los clientes con soporte de OAuth pueden añadir la URL como conector en su lugar.

Enlaces de HasData

Páginas de producto y constructor de solicitudes

Instagram Profile API y Instagram Posts API

Documentación del servidor

Documentación del servidor MCP

Las 57 herramientas en un solo servidor

HasData/hasdata-mcp

Tutoriales para clientes

Clientes e integraciones MCP

Las otras plataformas que analizamos

53 API de scraping más

Planes y costes de créditos

Planes y costes de créditos

Claves y uso

HasData dashboard

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 upstream puede cambiar sin un commit aquí, lo que dejaría este archivo mintiéndote en silencio. La prueba verifica esa promesa y se ejecuta semanalmente en CI, además de en cada push.

HASDATA_API_KEY=your_key_here npm test

En PowerShell:

$env:HASDATA_API_KEY = "your_key_here"; npm test

La última comprobació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 funciona con cualquier clave no vacía, y una prueba que solo liste herramientas seguirá en verde con una clave revocada.

Contribuciones

Las correcciones de las tablas de herramientas y de los ejemplos de respuesta son la contribución más útil, porque son las partes que se desactualizan. Incluye la llamada que hiciste y la respuesta que obtuviste. Las pull requests desde forks ejecutan la suite sin clave, y las comprobaciones en vivo se omiten en lugar de ponerse en rojo.

Licencia

MIT. Consulta LICENSE.

Available Tools

2 tools
hasdata_instagram_posts_getInstagramPostsinstagram_posts: GET /AInspect

Get Instagram Posts

Fetches the latest posts of a public Instagram account by username (handle) and returns each post with caption, hashtags, mentions, likes/comments/plays counts, image and video URLs, dimensions, and timestamp, plus basic account info (full name, profile picture URL, verified/private flags). Supports token-based pagination via nextPageToken to walk older posts. Use to monitor competitor content, track engagement of creator posts, or build datasets of account content for vetting and analytics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoThe maximum number of posts to retrieve per request. Defaults to 12.
handleYesThe Instagram username of the account whose posts you want to scrape, without the `@` symbol.
nextPageTokenNoDefines the next page token. It is used for retrieving the next page results. Use the `nextPageToken` value returned by the previous response.

TDQS

A3.9/5.0
Behavior3/5

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 discloses token-based pagination via nextPageToken and limits to public accounts, which is helpful. However, it does not mention error handling, rate limits, authentication requirements, or what happens when an account is not found. For a GET operation, read-only nature is implied but not explicitly stated. This is adequate but leaves some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: it starts with a clear title line, then a detailed paragraph, and ends with use cases. It front-loads the core functionality and avoids unnecessary repetition. While slightly verbose with the list of return fields, each sentence adds value and the overall length is appropriate for the complexity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema) and lack of annotations, the description covers the essential aspects: what data is returned, pagination, and the public-account constraint. It does not mention potential errors, maximum limit values, or ordering guarantees, but these are not critical for a basic GET posts endpoint. The description is sufficiently complete for an agent to invoke the tool correctly in typical scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters (handle, limit, nextPageToken), so the schema already documents their semantics. The description adds no new information about parameters beyond what the schema provides—it merely reiterates the pagination concept. With high schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Fetches' and the resource 'latest posts of a public Instagram account by username (handle)', and enumerates the returned fields (caption, hashtags, mentions, counts, URLs, dimensions, timestamp, and account info). This specificity distinguishes it from the sibling tool getInstagramProfile, which targets profile data, so an agent can immediately tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete use cases: 'monitor competitor content, track engagement of creator posts, or build datasets of account content for vetting and analytics.' This gives clear context for when to use the tool, though it does not explicitly mention exclusions or direct comparisons to the sibling tool. Still, the use cases effectively communicate appropriate scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hasdata_instagram_profile_getInstagramProfileinstagram_profile: GET /AInspect

Get Instagram Profile

Fetches a public Instagram profile by username (handle) and returns full name, biography, external link, profile picture URL, followers count, following count, posts count, verified/private flags, and category. Use to enrich CRM/lead records, verify influencer reach before outreach, monitor competitor accounts, or build datasets of creator metadata for vetting and analytics.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleYesThe Instagram username of the profile you want to scrape, without the `@` symbol.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does state that the profile is public and lists the data returned, implying a read-only fetch. However, it does not disclose potential rate limits, response format, or behavior when a profile is private or nonexistent, which leaves notable gaps for a scraping tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and return fields, then provides a compact use-case sentence. The use-case list is slightly long with overlapping examples, but every sentence contributes orientation for an agent; it is concise without being terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-oriented public profile fetch with no output schema, the description covers the input, the returned data, and typical use cases. It lacks explicit notes on errors, rate limits, or private-account behavior, but these are minor for this simple tool and the description is otherwise complete enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the only parameter ('handle') with a clear description including the requirement to omit the '@' symbol, so schema description coverage is 100%. The description repeats the handle concept without adding new parameter semantics, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action ('Fetches a public Instagram profile by username (handle)') and names the resource, input, and a concrete list of returned fields (full name, biography, counts, flags, category). This clearly distinguishes it from sibling tools like hasdata_instagram_posts_getInstagramPosts, which targets posts rather than profile metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete application contexts: enriching CRM/lead records, verifying influencer reach, monitoring competitors, and building creator datasets. It does not explicitly state when not to use it or mention alternatives such as the Instagram Posts sibling, but the use-case list makes selection straightforward.

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.

  1. 2 tool updatesv1.0.0
    • First observedhasdata_instagram_posts_getInstagramPosts
    • First observedhasdata_instagram_profile_getInstagramProfile

TDQS

A3.8/5.0

Scored across 2 tools

Disambiguation5/5

The two tools are completely distinct: one fetches profile metadata, the other fetches posts. There is no overlap in purpose or data returned, making misselection unlikely.

Naming Consistency5/5

Both tool names follow the same pattern: 'hasdata_instagram_<resource>_get<Resource>'. The structure and verb usage are consistent, making them predictable and easy to understand.

Tool Count3/5

With only 2 tools, this is on the thin side for an Instagram server. While they cover the core profile and posts endpoints, the count barely meets the threshold for a reasonable server scope.

Completeness2/5

The server covers only profile and posts, leaving significant gaps such as comments, stories, search, or follower interactions. For a comprehensive Instagram API surface, many common operations are missing, which could cause agent failures when those capabilities are needed.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables MCP clients to perform live Google searches and retrieve structured SERP data including organic results, AI Overviews, People Also Ask, AI Mode answers, news, shopping, and short-video results via eight read-only tools.
    10
    50 npm
    77 PyPI
    17
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables MCP clients to access public TikTok profiles, videos, comments, and keyword search as structured JSON over streamable HTTP, without a TikTok developer account or OAuth.
    4
    22 npm
    95 PyPI
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to manage a Meta-linked Instagram professional account, including comments, replies, and messages, using Meta's official APIs with deterministic permissions and audit state.
    MIT