Skip to main content
Glama

report_outcome

Report what a bought hook actually did once posted. FREE (WP-H). Caller-supplied, unverified, and not used by generation/scoring/retrieval today. Retained for possible future calibration; no view prediction. Args: hook_id, platform (tiktok|instagram|youtube|x|linkedin|other), posted_at, views/likes (0..1e11), retention_pct?, url?, api_key, idempotency_key. Caps 20/hook, 500/day; an exact duplicate is a conflict. Returns outcome + aggregate + reward. Errors: unauthorized, not_found, invalid_request, conflict, rate_limited.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoPublic http(s) URL of the post, for your own audit trail. Must carry a host; omit entirely rather than passing a placeholder.
likesNoLikes at report time, >=0. Omit if you cannot read it.
viewsYesViews the post had accrued at report time, >=0. Required: caller-supplied and not independently verified; retained as the primary measure for possible future calibration. Generation, scoring, and retrieval do not consume outcomes today. Report again later (up to 20 reports per hook) to record how it matured.
api_keyNoAPI key for this call. Omit to fall back to the Authorization: Bearer / X-API-Key request header (streamable-HTTP only), then the VHGENGINE_API_KEY env var (the stdio default). No key resolvable -> unauthorized.
hook_idYesWhich bought hook this result belongs to: the hook_id from a generate/batch/remix response or list_hooks. Must be a hook you own.
platformYesWhere the hook was actually posted. Required.
posted_atYesWhen it went live, ISO-8601 UTC ('YYYY-MM-DDTHH:MM:SSZ'). May be in the past; more than 48h in the FUTURE is invalid_request.
retention_pctNoAverage view-through as a PERCENT, 0-100 (not a 0-1 fraction). Omit if the platform does not expose it.
idempotency_keyNoCaller-chosen replay key (any string, unique per intended effect). A repeat call with the SAME key returns the stored result and is NEVER charged twice; the same key with different arguments is an idempotency_conflict. Omit and every call is a fresh, separately charged operation.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
outcomeNoThe stored row, as recorded.
replayedNotrue when an idempotency_key replayed a stored report.
aggregateNoRolled-up totals for this hook across every report you have made.
reward_creditsNoCredits granted for this report. Only a hook's FIRST report earns one, so later reports return 0.
credits_remainingNoYour balance after the reward. Present only when one was granted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / platform / enum
      Previous value: -[
      -  "tiktok",
      -  "instagram",
      -  "youtube",
      -  "x",
      -  "other"
      -]New value: +[
      +  "tiktok",
      +  "instagram",
      +  "youtube",
      +  "x",
      +  "linkedin",
      +  "other"
      +]
    • changedInput schema / properties / views / description
      Previous value: -"Views the post had accrued at report time, >=0. Required: it is the only field the corpus calibrates against. Report again later (up to 20 reports per hook) to record how it matured."New value: +"Views the post had accrued at report time, >=0. Required: caller-supplied and not independently verified; retained as the primary measure for possible future calibration. Generation, scoring, and retrieval do not consume outcomes today. Report again later (up to 20 reports per hook) to record how it matured."
  2. Changed15 schema fields changed
    • addedInput schema / properties / api_key / description
      Added value: +"API key for this call. Omit to fall back to the Authorization: Bearer / X-API-Key request header (streamable-HTTP only), then the VHGENGINE_API_KEY env var (the stdio default). No key resolvable -> unauthorized."
    • addedInput schema / properties / hook_id / description
      Added value: +"Which bought hook this result belongs to: the hook_id from a generate/batch/remix response or list_hooks. Must be a hook you own."
    • addedInput schema / properties / idempotency_key / description
      Added value: +"Caller-chosen replay key (any string, unique per intended effect). A repeat call with the SAME key returns the stored result and is NEVER charged twice; the same key with different arguments is an idempotency_conflict. Omit and every call is a fresh, separately charged operation."
    • addedInput schema / properties / likes / description
      Added value: +"Likes at report time, >=0. Omit if you cannot read it."
    • addedInput schema / properties / likes / minimum
      Added value: +0
    • addedInput schema / properties / platform / description
      Added value: +"Where the hook was actually posted. Required."
    • addedInput schema / properties / posted_at / description
      Added value: +"When it went live, ISO-8601 UTC ('YYYY-MM-DDTHH:MM:SSZ'). May be in the past; more than 48h in the FUTURE is invalid_request."
    • addedInput schema / properties / retention_pct / description
      Added value: +"Average view-through as a PERCENT, 0-100 (not a 0-1 fraction). Omit if the platform does not expose it."
    • addedInput schema / properties / retention_pct / maximum
      Added value: +100
    • addedInput schema / properties / retention_pct / minimum
      Added value: +0
    • addedInput schema / properties / url / description
      Added value: +"Public http(s) URL of the post, for your own audit trail. Must carry a host; omit entirely rather than passing a placeholder."
    • addedInput schema / properties / views / description
      Added value: +"Views the post had accrued at report time, >=0. Required: it is the only field the corpus calibrates against. Report again later (up to 20 reports per hook) to record how it matured."
    • addedOutput schema / description
      Added value: +"Acknowledgement that your telemetry landed, plus any reward. Free to call."
    • addedOutput schema / properties
      Added value: +{
      +  "aggregate": {
      +    "description": "Rolled-up totals for this hook across every report you have made.",
      +    "type": [
      +      "object",
      +      "null"
      +    ]
      +  },
      +  "credits_remaining": {
      +    "description": "Your balance after the reward. Present only when one was granted.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "outcome": {
      +    "description": "The stored row, as recorded.",
      +    "type": [
      +      "object",
      +      "null"
      +    ]
      +  },
      +  "replayed": {
      +    "description": "true when an idempotency_key replayed a stored report.",
      +    "type": [
      +      "boolean",
      +      "null"
      +    ]
      +  },
      +  "reward_credits": {
      +    "description": "Credits granted for this report. Only a hook's FIRST report earns one, so later reports return 0.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  }
      +}
    • removedOutput schema / title
      Removed value: -"report_outcomeDictOutput"
  3. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  4. First observed

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does well: it discloses that data is unverified, not consumed by other functions, retained for calibration, and has no prediction power. It also states rate limits (20/hook, 500/day), duplicate conflict behavior, and a concise list of possible errors, giving clear expectations about the tool's behavior.

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?

The description is a dense paragraph but well-organized, opening with the primary purpose, then the data caveat, a compact parameter list, limits, and return/error summary. Every sentence provides necessary context, though formatting could be improved with line breaks for easier scanning. Appropriately sized for a 9-parameter tool with no annotations.

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?

Given the tool's complexity (9 parameters, no annotations) and that an output schema exists, the description covers all critical non-schema context: the post-posting use case, data trustworthiness, lack of immediate consumption, rate and conflict rules, and expected return payload. It is thorough enough for an agent to decide when and how to invoke it.

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

Parameters3/5

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

The input schema already describes every parameter with detailed explanations (100% coverage), so the description adds little beyond listing the parameter names and a few inline comments like '(tiktok|instagram|youtube|x|linkedin|other)'. The high schema coverage sets the baseline at 3; the description doesn't meaningfully augment the schema's semantics.

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 with 'Report what a bought hook actually did once posted,' which clearly states the action (report) and the resource (outcome of a bought hook). It distinguishes itself from siblings like score_hook and generate_hooks by emphasizing it reports actual results rather than predicting or generating.

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?

The description explains that data is 'caller-supplied, unverified, and not used by generation/scoring/retrieval today,' clarifying it is for future calibration, not immediate use. This implies when to use it, though no explicit alternatives are named. It could be stronger with a direct 'use list_outcomes to view reported outcomes,' but it provides enough context to guide selection.

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