Skip to main content
Glama

Compare with competitors

get_competitor_snapshots
Read-only

Public figures of the other Instagram Business and Creator accounts the organization tracks, next to the organization's own Instagram account measured the same way. Read once a day through Instagram Business Discovery over each account's last 25 posts, so the two sides are comparable; competitors are added, refreshed and removed in the PostRite app by an Editor, not here. Without competitorId it returns every tracked competitor: its latest reading (followersCount, avgLikes, avgComments, avgViews, postsPerWeek, engagementPerFollower, followersChange30d over followersChangeDays days, lastPostAt), its status, up to 5 top posts (permalink, mediaType, timestamp and counts only; captions are never stored) and ourAccount, our reading to compare with, plus max (the ceiling on tracked competitors) and discovery {available, reason, connections}: when available is false nothing can be added or refreshed, and reason says who can act (NO_CONNECTION: connect Instagram through Facebook; MISSING_PERMISSION: reconnect that account so it grants the permission; NOT_OFFERED: PostRite does not request the permission right now, so reconnecting changes nothing). With competitorId (from this tool's list) it returns that competitor's stored days over days (default 30), oldest first, to show a trend. A null figure was not returned, never zero: an account that hides its like counts has null avgLikes and engagementPerFollower, and followersChange30d is null until two days are stored. postsLast30d counts the posts in the last 30 days, and when postsWindowDays is under 30 the sample of 25 posts ended before reaching that far back, so postsLast30d is a lower bound; postsPerWeek is already divided by postsWindowDays, so it is the rate over the days that were covered and not a lower bound. A competitor whose status is not ACTIVE (ACTIVE, NOT_FOUND, NOT_BUSINESS, UNAVAILABLE, NO_CONNECTION, RATE_LIMITED, ERROR) was not read on its last attempt: lastError carries Instagram's code, and the stored figures are from its last good read (capturedDate). NOT_FOUND cannot tell a handle that does not exist from a personal account, which Business Discovery cannot read; NO_CONNECTION is fixed by reconnecting Instagram in PostRite, and a competitor left at it for 90 days is removed with its stored days; RATE_LIMITED and ERROR retry with the next daily read.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "get_competitor_snapshots"
  }
}

Input Schema

NameRequiredDescriptionDefault
daysNoPeriod in days (7, 30, 90; default 30)
competitorIdNoA competitor's id from this tool's list. Omit it to list every tracked competitor with its latest reading; pass it to get that competitor's daily history
organizationIdNoOrganization to act in — an id from list_organizations. Required when this connection was authorized for more than one organization; omit it when there is only one.

Output Schema

NameRequiredDescriptionDefault
maxNoThe organization's ceiling on tracked competitors
daysNoPeriod length in days
discoveryNo{available, reason, connections[]}: whether competitors can be added or refreshed, and why not
snapshotsNoWith competitorId: one reading per stored day, oldest first; a null figure was not returned
competitorNoWith competitorId: {id, username, name, status}
competitorsNoWithout competitorId: every tracked competitor with its latest reading, status, top posts and our own account's reading
samplePostsNoRecent posts every average is computed over

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint true, destructiveHint false), and the description adds substantial non-obvious behavior: a once-per-day read cadence via Business Discovery over the last 25 posts, null-vs-zero semantics, non-ACTIVE status handling with lastError and capturedDate, and a 90-day removal rule. Nothing here contradicts the read-only annotation.

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

Conciseness3/5

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

The content is information-dense and mostly ordered (list mode, history mode, then null semantics, then status semantics), but it runs to several hundred words in long compound sentences and opens with a dense noun phrase rather than a clear lead verb. Redundancy exists where it restates return fields the output schema already covers.

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

Completeness5/5

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

For a read tool with zero required parameters, an output schema, and full annotation coverage, this is more than complete: it explains metric definitions (postsLast30d as a lower bound when postsWindowDays < 30, postsPerWeek as a rate), null behavior, and what each status code means for the agent's next action.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: competitorId refers to an id taken from this tool's own list, and the days window produces an oldest-first trend series with a default of 30. It also implies organizationId is only conditionally needed, matching the schema's own note.

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 by naming the exact resource (public figures for other Instagram Business/Creator accounts the organization tracks) and its comparative scope against the organization's own account, which cleanly separates it from sibling analytics tools like get_account_insights. An agent can identify the verb (read stored competitor snapshots) and the resource without opening the schema.

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

Usage Guidelines5/5

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

It explicitly splits the two modes: omit competitorId to list every tracked competitor with its latest reading, pass competitorId to get stored daily history oldest-first. It also states exclusions the agent must not attempt (adding/refreshing/removing competitors happens in the PostRite app by an Editor, not here) and gives per-discovery-reason remediation guidance (NO_CONNECTION, MISSING_PERMISSION, NOT_OFFERED).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources