Skip to main content
Glama
meertrack

Meertrack MCP

Official
by meertrack

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MEERTRACK_API_KEYYesYour Meertrack API key (starts with mt_live_)

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoamiA

Wraps GET /me. Confirms which workspace the agent is authenticated as and returns the current subscription, competitor budget, and rate-limit snapshot. auth_type reports how you authenticated: api_key callers also get the key block; oauth callers have no API-key record, so key is null — use auth_type/subject to confirm identity.

Chaining: Call first in a session to verify auth and workspace identity before any other tool. Errors: unauthorized (key is invalid or revoked — mint a new one), rate_limited (retry after X-RateLimit-Reset).

list_competitorsA

Wraps GET /competitors. Lists every competitor in the authenticated workspace. Defaults to expand=full so the agent gets each competitor's social URLs (linkedin, twitter, …) and canonical page URLs (pricing, blog, …) in one call — no round-trip to get_competitor needed for that metadata.

Filters:

  • active: when true, only competitors still being tracked; when false, only archived ones.

  • ids: narrow to a specific subset (comma-joined upstream).

  • expand: full (default — profile + social + pages) or compact (id / name / website / category / active only).

Chaining: Discover competitor ids here, then pass them to get_competitor, list_activities (competitor_ids), or list_digests (competitor_id). Errors: unauthorized, rate_limited.

get_competitorA

Wraps GET /competitors/{id}. Returns a single competitor's full profile plus the most recent items from each tracked section. Sections returned (with per-section item caps):

  • blog-posts (up to 3), press-posts (3), case-studies (3)

  • job-listings (5), ads (5), pricing (1), messaging (5)

  • metrics-claimed (5), logos (5)

  • linkedin-posts (3), x-posts (3), reviews (3), youtube-videos (3), events (3)

These are overview caps — for the full list in any section call list_activities with competitor_ids=[id] and the relevant section and NO from/to, which returns the complete all-time roster (paginated).

Chaining: Use after list_competitors — pass the id from a result row. For an activity timeline across sections, call list_activities with competitor_ids=[id] instead. Errors: not_found (no such competitor in this workspace), competitor_inactive (archived — reactivate in dashboard), forbidden_competitor (different workspace), unauthorized, rate_limited.

list_activitiesA

Wraps GET /activity. Two modes, selected by whether you pass a date window:

  • Roster (no from/to): the complete all-time catalog across the tracked competitors — including items that already existed when tracking began (the initial backfill). Use this to pull a full list, e.g. every customer a competitor has published a case study about: { competitor_ids: [id], sections: ['case-studies'] }. For versioned sections (job-listings, ads, logos, messaging, pricing) this is the current live snapshot, not removed history, so change_type is mostly added and total is the all-time count.

  • Change feed (with from/to): detected adds/updates/removals in that window only (excludes backfill) — the 'what shipped recently' surface.

Filters:

  • sections: restrict to specific section types (enum of 15: blog-posts, press-posts, job-listings, ads, pricing, case-studies, linkedin-posts, x-posts, reviews, youtube-videos, events, messaging, metrics-claimed, logos, sitemap-urls).

  • change_types: restrict to added / updated / removed (added / updated / removed).

  • competitor_ids: narrow to specific competitors.

  • from / to: ISO 8601 date-time window (inclusive). Supplying EITHER switches off roster mode; e.g. from=2026-04-16T00:00:00Z for the last 7 days.

Matching tip: for case studies the customer/company name is usually in title and/or the url slug (e.g. .../case-studies/whop) — match on both.

Pagination: response carries pagination.next_cursor, pagination.has_more, and pagination.total (total rows matching the filters, not just this page). If has_more, call again with the cursor param set to next_cursor. Default limit is 50 to stay under Claude's tool-result size limit; max is 500. The roster can be large — keep paging until has_more is false.

Heavy fields (description, key_points, pricing_data, excerpt) are omitted from list rows to keep them lean; fetch the full payload for rows you care about with get_activity_items (pass their ids). Chaining: get_activity_items returns full rows by id (one call for many ids). Errors: invalid_parameter (bad section/change_type/date), invalid_cursor (stale or tampered), unauthorized, rate_limited.

get_activity_itemsA

Wraps GET /activity/items. Returns the full payload for one or more activity rows — the section-specific detail (full blog description, key points, pricing table, etc.) that the list_activities feed omits to stay lean.

Pass a list of row ids from a list_activities result (1–100). Resolving several at once is one call / one rate-limit hit — prefer it over many single lookups. Partial success is normal: ids that don't resolve (unknown, in another workspace, from an inactive period, or malformed) come back in not_found, not as an error. data order is not guaranteed — match results back by id. Digest ids are NOT activity rows: they land in not_found. Use get_digest for those. Errors: unauthorized, rate_limited, invalid_parameter (no ids / too many).

list_digestsA

Wraps GET /digests. Returns cursor-paginated weekly digests (one per competitor per batch day) — the LLM-synthesized summaries. Unlike list_activities, pagination here has no total; use has_more / next_cursor only.

Filters: competitor_id (narrow to one competitor), from / to (ISO 8601 date-time window on period_start).

Chaining: For 'what happened last week across all competitors', prefer list_latest_digests — it's a one-shot. Use this when paging backward through history, or filtering to one competitor. Errors: invalid_parameter, invalid_cursor, unauthorized, rate_limited.

list_latest_digestsA

Wraps GET /digests/latest. No parameters. Returns the most recent digest per active competitor from the same batch day — a one-shot 'what happened this week across my tracked competitors'.

Chaining: One-shot entry point — no prior call needed. If the user wants older weeks or a specific competitor's history, use list_digests instead. Errors: unauthorized, rate_limited.

get_digestA

Wraps GET /digests/{id}. Returns a single digest's full payload — executive summary, themes, and update count for one competitor in one period.

Chaining: Use after list_digests or list_latest_digests — pass the id from a result row. Errors: not_found (digest not in this workspace), forbidden_competitor, unauthorized, rate_limited.

Prompts

Interactive templates invoked by user choice

NameDescription
weekly_recapOne-shot 'what happened across my tracked competitors this week'. Fetches the latest digests and produces a per-competitor recap plus a cross-competitor highlights list.
competitor_deep_diveFull profile and recent-activity brief for one competitor. Resolves the competitor by name, pulls the full profile, and summarizes the last 30 days of detected changes.
whats_newCross-competitor 'what's new in the last N days' feed, grouped by competitor, with `added` changes highlighted.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/meertrack/meertrack-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server