Skip to main content
Glama
facebook-mcp

facebook-mcp

by IvanBBaev

List Stories

facebook_list_stories
Read-onlyIdempotent

Retrieve a Facebook Page's stories page by page, filtered by creation date and PUBLISHED or ARCHIVED status, using cursors to continue through results.

Instructions

List a Page's Stories via the /stories edge, one cursor page at a time: each item has postId, status (PUBLISHED / ARCHIVED), createdTime (ISO 8601), mediaType (photo / video), mediaId and url. since / until bound the creation time (Unix seconds or ISO 8601). status is filtered AFTER the fetch, so a page can come back short: filteredOut counts the dropped rows — keep following nextCursor while it is present. Stories expire after 24 hours, and ARCHIVED stories are listed only while the Page's story archive is enabled, so an empty result is not proof the Page never posted one. Stories never appear in facebook_list_posts.

Input Schema

NameRequiredDescriptionDefault
afterNoOpaque forward cursor from a previous call's `nextCursor`. Omitted ⇒ start from the first page. Cursors expire; on an expiry note, restart the listing without this argument.
limitNoMaximum items to return in this page (1–100). Defaults to 25. Large values risk truncation by the result budget.
sinceNoLower bound on the story's creation time: Unix seconds (e.g. 1768471200) or an ISO 8601 date / date-time (e.g. "2026-01-15" or "2026-01-15T10:00:00Z").
untilNoUpper bound on the story's creation time: Unix seconds (e.g. 1768471200) or an ISO 8601 date / date-time (e.g. "2026-01-15" or "2026-01-15T10:00:00Z").
statusNoKeep only stories in this state. Filtered after the fetch (Graph has no status parameter), so a page can come back short — `filteredOut` says how many rows were dropped; keep following `nextCursor`.
profileNoPage profile key (e.g. "brand-a") or a raw Page ID. Omitted ⇒ the default Page (FB_PAGE_ID).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.8.0

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent profile, yet the description adds genuinely new behavior: post-fetch status filtering that can shorten a page, the filteredOut drop count, the 24-hour expiry, and the archive-enabled prerequisite for ARCHIVED rows. These are the exact surprises that would otherwise cause an agent to stop paginating early or misread an empty page.

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?

Front-loads the resource and edge, then layers pagination, filtering, and expiry in a single dense block with zero filler. It is packed into long compound sentences, which slightly hurts scannability but nothing is wasted.

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?

There is no output schema, and the description compensates by enumerating the returned item fields (postId, status, createdTime, mediaType, mediaId, url) and the pagination envelope (nextCursor, filteredOut). For a six-parameter, zero-required listing tool, an agent has everything it needs to call and interpret it correctly.

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; the description still adds value by tying `status` to post-fetch filtering and `filteredOut`, and by framing `since`/`until` as creation-time bounds rather than restating formats. The remaining parameters (`after`, `limit`, `profile`) are left entirely to the schema.

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?

States a specific verb (list) and resource (a Page's Stories via the /stories edge), and explicitly rules out the obvious confusion: 'Stories never appear in facebook_list_posts.' An agent can route between this and the sibling post/reel listers 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 Guidelines4/5

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

Gives concrete operational guidance: follow nextCursor while present, and the anti-clue that an empty result is not proof the Page never posted. It doesn't name the closest alternative listers (facebook_list_reels, facebook_list_posts) as positive choices, only as an exclusion, so it falls short of full when-to-use/when-not coverage.

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