Skip to main content
Glama

Story summary and sources

alphai_story
Read-onlyIdempotent

One story by story_id — the value every news item carries, or an id from alphai_stories. Returns the summary AlphAI wrote from the articles (title, lead, why_it_matters, up to six key_facts each with the publisher and the source_uid of the article it was read from, ticker_takes with a direction per ticker, uncertainties the sources leave open), the story's importance and publisher count, and the first page of its articles (materials: uid, publisher, time, URL, relevance) — open any of them with alphai_article. status tells you what the id is: found (a story), merged (folded into another story; call again with redirect_to), not_a_story (one publisher carried this event, so there is no summary; article names the row for alphai_article — the normal answer for most feed items). summary_state published / stale (new_materials articles joined since the summary; AlphAI rewrites it on its own schedule, this call changes nothing) / preparing (no summary yet; texts are the lead article's). Every figure in the summary appears in a source article; it is AI-generated financial information for research, not investment advice. Article bodies are never returned.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "story_id": "<story_id>"
    },
    "name": "alphai_story"
  }
}

Input Schema

NameRequiredDescriptionDefault
story_idYesstory_id of a news item or story.
materials_limitNoArticles to include, oldest first; default 20, 0 for none.

Output Schema

NameRequiredDescriptionDefault
storyNo
statusYes
articleNo
materialsNo
redirect_toNo
research_onlyNo
materials_next_cursorNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / story / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "based_on": {
      -        "type": "integer"
      -      },
      -      "category": {
      -        "type": "string"
      -      },
      -      "first_published_at": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "importance": {
      -        "type": "integer"
      -      },
      -      "indexable": {
      -        "type": "boolean"
      -      },
      -      "key_facts": {
      -        "items": {
      -          "properties": {
      -            "publisher": {
      -              "type": "string"
      -            },
      -            "source_uid": {
      -              "type": "string"
      -            },
      -            "text": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "text",
      -            "source_uid",
      -            "publisher"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "last_material_at": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "materials": {
      -        "type": "integer"
      -      },
      -      "materials_at_build": {
      -        "type": "integer"
      -      },
      -      "model": {
      -        "type": "string"
      -      },
      -      "new_materials": {
      -        "type": "integer"
      -      },
      -      "publishers": {
      -        "type": "integer"
      -      },
      -      "revision_generated_at": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "story_id": {
      -        "type": "string"
      -      },
      -      "summary": {
      -        "type": "string"
      -      },
      -      "summary_state": {
      -        "enum": [
      -          "published",
      -          "preparing",
      -          "stale"
      -        ],
      -        "type": "string"
      -      },
      -      "ticker_takes": {
      -        "items": {
      -          "properties": {
      -            "impact": {
      -              "enum": [
      -                "positive",
      -                "negative",
      -                "neutral"
      -              ],
      -              "type": "string"
      -            },
      -            "note": {
      -              "type": "string"
      -            },
      -            "ticker": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "ticker",
      -            "impact",
      -            "note"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "tickers": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "uncertainties": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "updated_at": {
      -        "anyOf": [
      -          {
      -            "format": "date-time",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "why_it_matters": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "story_id",
      -      "title",
      -      "summary",
      -      "importance",
      -      "category",
      -      "tickers",
      -      "publishers",
      -      "materials",
      -      "first_published_at",
      -      "last_material_at",
      -      "updated_at",
      -      "summary_state",
      -      "why_it_matters",
      -      "key_facts",
      -      "ticker_takes",
      -      "uncertainties",
      -      "based_on",
      -      "materials_at_build",
      -      "new_materials",
      -      "revision_generated_at",
      -      "model",
      -      "indexable"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "based_on": {
      +        "type": "integer"
      +      },
      +      "category": {
      +        "type": "string"
      +      },
      +      "first_published_at": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "importance": {
      +        "type": "integer"
      +      },
      +      "indexable": {
      +        "type": "boolean"
      +      },
      +      "key_facts": {
      +        "items": {
      +          "properties": {
      +            "publisher": {
      +              "type": "string"
      +            },
      +            "source_uid": {
      +              "type": "string"
      +            },
      +            "text": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "text",
      +            "source_uid",
      +            "publisher"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "last_material_at": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "materials": {
      +        "type": "integer"
      +      },
      +      "materials_at_build": {
      +        "type": "integer"
      +      },
      +      "new_materials": {
      +        "type": "integer"
      +      },
      +      "publishers": {
      +        "type": "integer"
      +      },
      +      "revision_generated_at": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "story_id": {
      +        "type": "string"
      +      },
      +      "summary": {
      +        "type": "string"
      +      },
      +      "summary_state": {
      +        "enum": [
      +          "published",
      +          "preparing",
      +          "stale"
      +        ],
      +        "type": "string"
      +      },
      +      "ticker_takes": {
      +        "items": {
      +          "properties": {
      +            "impact": {
      +              "enum": [
      +                "positive",
      +                "negative",
      +                "neutral"
      +              ],
      +              "type": "string"
      +            },
      +            "note": {
      +              "type": "string"
      +            },
      +            "ticker": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "ticker",
      +            "impact",
      +            "note"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "tickers": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "uncertainties": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "updated_at": {
      +        "anyOf": [
      +          {
      +            "format": "date-time",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "why_it_matters": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "story_id",
      +      "title",
      +      "summary",
      +      "importance",
      +      "category",
      +      "tickers",
      +      "publishers",
      +      "materials",
      +      "first_published_at",
      +      "last_material_at",
      +      "updated_at",
      +      "summary_state",
      +      "why_it_matters",
      +      "key_facts",
      +      "ticker_takes",
      +      "uncertainties",
      +      "based_on",
      +      "materials_at_build",
      +      "new_materials",
      +      "revision_generated_at",
      +      "indexable"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new behavioral context: summary_state semantics including that 'stale' means the call changes nothing, that 'preparing' texts come from the lead article, that every figure traces to a source article, and that 'Article bodies are never returned'. That last constraint is the kind of boundary an agent would otherwise waste a call discovering.

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?

Purpose is front-loaded in the first clause and nothing is padding, but the body is a single dense run-on with nested parentheticals and slashes ('summary_state published / stale (...) / preparing (...)') that force re-reading. The content earns its place; the structure could be broken into lines per status for faster scanning.

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-only lookup with a 2-param schema and an output schema, this is more than complete: it covers id provenance, all three status branches, all three summary_states, the recursive follow-up path, and the AI-generated-content disclaimer. Nothing an agent needs to invoke it correctly or interpret a non-obvious result is missing.

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 earns an extra point by explaining the provenance of story_id (any news item's value, or an id from alphai_stories) and by characterizing the materials return as 'the first page' of articles, which implies the default-limited window that materials_limit controls. It never names materials_limit or its 0-for-none option, leaving that 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?

Opens with a specific verb+resource pair ('One story by story_id') and immediately scopes what it returns: an AlphAI-written summary plus the first page of source articles. It distinguishes itself from siblings by pointing to alphai_stories for ids and alphai_article for full article bodies, so an agent can pick it without opening any 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 tells the agent exactly where story_id comes from ('the value every news item carries, or an id from alphai_stories'), what to do on each status ('merged ... call again with redirect_to'; 'not_a_story ... article names the row for alphai_article'), and names the follow-up sibling for opening materials. It even flags that not_a_story is 'the normal answer for most feed items', preventing the agent from treating it as an error.

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.