Skip to main content
Glama

ingest_event

Idempotent

Feed finance news into an event ledger: normalize, grade, and map to affected symbols for committee RAG recall. Agents use it to track holdings-relevant events and trigger committee re-runs.

Instructions

Feed a finance news item you (the host agent) found into the event ledger, graded and mapped to affected symbols, stored for committee RAG recall.

Preferred: normalize it yourself — pass one_line_claim, stance, severity (and ideally affected_symbols). The backend then only validates and stores it; no backend model is involved. Without those fields the backend model normalizes it, which fails when the backend runs keyless (agent mode) — you get an error telling you which fields to add.

You have far better search reach than the self-hosted crawler (including Chinese-language sources) — proactively feed news relevant to the user's holdings, especially A-share/regional coverage the crawler misses. Idempotent: re-sending the same url or claim does not double-insert. Requires a backend LLM key.

Args: title: Headline of the news item. url: Canonical source URL (also the dedup key). snippet: Short excerpt or summary of the article body. source: Publisher name (e.g. "Reuters") — the news outlet. published_at: ISO 8601 publication time, if known. ingested_by: Your own agent identity (e.g. "hermes") for provenance; distinct in meaning from source.

Returns: Ingestion result with the normalized event id(s), dedup status, and committee_task_id — set when a new holding-relevant event (severity ≥ mid, non-neutral) triggered a rate-limited committee re-run. In agent mode it is "queued:": the re-run waits for you in pending_committees. This tool is disabled in advisory mode.

Input Schema

NameRequiredDescriptionDefault
urlYesCanonical source URL (also the dedup key).
titleYesHeadline of the news item.
sourceNoPublisher name (e.g. 'Reuters') — the news outlet.
stanceNoFor the holdings: 'risk', 'opportunity' or 'neutral'. Required with one_line_claim.
snippetNoShort excerpt or summary of the article body.
entitiesNoKey entities (countries, companies, central banks), lowercase.
severityNo'low', 'mid' or 'high'. Required with one_line_claim.
event_typeNoe.g. 'macro', 'policy', 'earnings', 'geopolitics', 'commodity', 'other'.
ingested_byNoYour own agent identity (e.g. 'hermes') for provenance; distinct from source.host-agent
published_atNoISO 8601 publication time, if known.
one_line_claimNoYour one-sentence factual summary. Fill this (plus stance and severity) to ingest without any backend model — preferred.
affected_symbolsNoyfinance tickers the event materially affects, e.g. ['GC=F'].

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.45.1
    • addedInput schema / properties / affected_symbols
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "yfinance tickers the event materially affects, e.g. ['GC=F'].",
      +  "title": "Affected Symbols"
      +}
    • addedInput schema / properties / entities
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Key entities (countries, companies, central banks), lowercase.",
      +  "title": "Entities"
      +}
    • addedInput schema / properties / event_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "e.g. 'macro', 'policy', 'earnings', 'geopolitics', 'commodity', 'other'.",
      +  "title": "Event Type"
      +}
    • addedInput schema / properties / one_line_claim
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Your one-sentence factual summary. Fill this (plus stance and severity) to ingest without any backend model — preferred.",
      +  "title": "One Line Claim"
      +}
    • addedInput schema / properties / severity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "'low', 'mid' or 'high'. Required with one_line_claim.",
      +  "title": "Severity"
      +}
    • addedInput schema / properties / stance
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "For the holdings: 'risk', 'opportunity' or 'neutral'. Required with one_line_claim.",
      +  "title": "Stance"
      +}
  2. Addedv0.34.0
  3. Removedv0.31.7
  4. Changed6 schema fields changedv0.31.4
    • addedInput schema / properties / ingested_by / description
      Added value: +"Your own agent identity (e.g. 'hermes') for provenance; distinct from source."
    • addedInput schema / properties / published_at / description
      Added value: +"ISO 8601 publication time, if known."
    • addedInput schema / properties / snippet / description
      Added value: +"Short excerpt or summary of the article body."
    • addedInput schema / properties / source / description
      Added value: +"Publisher name (e.g. 'Reuters') — the news outlet."
    • addedInput schema / properties / title / description
      Added value: +"Headline of the news item."
    • addedInput schema / properties / url / description
      Added value: +"Canonical source URL (also the dedup key)."
  5. First observedv0.31.0

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it explains that the tool requires a backend LLM key, is disabled in advisory mode, is idempotent over url/claim, and that a new holding-relevant event can trigger a rate-limited committee re-run whose id is returned as 'queued:<id>' awaiting the agent in pending_committees. That is rich, decision-relevant behavioral context.

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 core action and the preferred invocation path, then organizes detail into Args and Returns sections. It is long, but for a 12-parameter ingestion tool with mode gating and an error path, nearly every sentence carries weight; a few clauses are mildly redundant with the schema.

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?

Complete for the tool's complexity: it covers the preferred vs. fallback normalization, key requirement, idempotency, mode gating, error behavior, and the committee-trigger return semantics, so an agent can call it correctly and anticipate outcomes without reading the output schema.

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 cross-parameter meaning the schema does not: the stance/severity/one_line_claim coupling and the preferred self-normalization bundle, plus the provenance distinction between ingested_by and source and the url-as-dedup-key role. It does not tie every parameter together, keeping it just below top marks.

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 (feed/ingest) plus resource (finance news item) and the full downstream effect: graded, mapped to affected symbols, stored for committee RAG recall. It is clearly distinguishable from siblings such as news_sources, pending_news, and the committee tools.

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?

Gives explicit when-to-use guidance (proactively feed news the self-hosted crawler misses, especially A-share/regional coverage) and names the alternative normalization path (self-normalize vs. rely on the backend model), including the failure mode when keyless. Exclusions are stated too: disabled in advisory mode.

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