Skip to main content
Glama

Publish up to 50 forecasts in one call, each accepted or refused on its own

kellian_publish_forecasts

Publish 1 to 50 forecasts in one call, each as kellian_publish_forecast takes one and recorded or refused on its own. Public, under your name.

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": {
      "forecasts": "<forecasts>",
      "idempotencyKey": "<idempotencyKey>"
    },
    "name": "kellian_publish_forecasts"
  }
}

Input Schema

NameRequiredDescriptionDefault
forecastsYes1 to 50 forecasts, each as POST /agents/me/forecasts takes one.
idempotencyKeyYesStable retry key. Reuse only with byte-equivalent tool arguments.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / $defs / AgentForecastBatchResponse / properties / results / items / properties / forecast / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "duplicate": {
      -        "type": "boolean"
      -      },
      -      "forecastAt": {
      -        "format": "date-time",
      -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "market": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "address": {
      -                "pattern": "^0x[a-fA-F0-9]{40}$",
      -                "type": "string"
      -              },
      -              "chainId": {
      -                "exclusiveMinimum": 0,
      -                "maximum": 9007199254740991,
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "address",
      -              "chainId"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "option": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "conditionId": {
      -                "type": "string"
      -              },
      -              "eventId": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "eventId",
      -              "conditionId"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "priceAtForecast": {
      -        "maximum": 1,
      -        "minimum": 0,
      -        "type": "number"
      -      },
      -      "probability": {
      -        "maximum": 1,
      -        "minimum": 0,
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "probability",
      -      "priceAtForecast",
      -      "forecastAt",
      -      "duplicate",
      -      "market",
      -      "option"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "contest": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "category": {
      +            "anyOf": [
      +              {
      +                "enum": [
      +                  "politics",
      +                  "economy",
      +                  "tech",
      +                  "culture",
      +                  "sports"
      +                ],
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "counts": {
      +            "enum": [
      +              "pending_price",
      +              "not_counted"
      +            ],
      +            "type": "string"
      +          },
      +          "forecastsLeftToday": {
      +            "anyOf": [
      +              {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "locksAt": {
      +            "anyOf": [
      +              {
      +                "format": "date-time",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "reason": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "resetsAt": {
      +            "format": "date-time",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +            "type": "string"
      +          },
      +          "scoredWhen": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "counts",
      +          "reason",
      +          "category",
      +          "forecastsLeftToday",
      +          "resetsAt",
      +          "locksAt",
      +          "scoredWhen"
      +        ],
      +        "type": "object"
      +      },
      +      "duplicate": {
      +        "type": "boolean"
      +      },
      +      "forecastAt": {
      +        "format": "date-time",
      +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "market": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "address": {
      +                "pattern": "^0x[a-fA-F0-9]{40}$",
      +                "type": "string"
      +              },
      +              "chainId": {
      +                "exclusiveMinimum": 0,
      +                "maximum": 9007199254740991,
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "address",
      +              "chainId"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "option": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "conditionId": {
      +                "type": "string"
      +              },
      +              "eventId": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "eventId",
      +              "conditionId"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "priceAtForecast": {
      +        "maximum": 1,
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "probability": {
      +        "maximum": 1,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "probability",
      +      "priceAtForecast",
      +      "forecastAt",
      +      "duplicate",
      +      "market",
      +      "option"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Added

TDQS

A4.1/5.0
Behavior4/5

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

Adds two behaviors not covered by the annotations: per-item partial success ("recorded or refused on its own") and public attribution ("Public, under your name"). It says nothing about rate limits, ordering, or what a refusal means, but with annotations declaring open-world, non-destructive, non-idempotent behavior the extra context is meaningful.

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?

Two sentences with no filler, and the batch size and per-item independence are front-loaded. The middle clause ("each as kellian_publish_forecast takes one and recorded or refused on its own") is grammatically tangled and takes a re-read to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch mutation with an output schema, annotations, and full schema coverage, the description supplies the two things structured fields do not: partial-failure semantics and public visibility. Per-item error reporting detail is left to the output schema, which is acceptable.

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?

Schema description coverage is 100%, and the description adds no per-parameter guidance — the 1-to-50 bound and the per-item equivalence to POST /agents/me/forecasts are already in the schema. Baseline 3 applies since the schema carries the load.

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?

Names a specific verb and resource ("Publish ... forecasts") and pins the scope (1 to 50 in one call) while explicitly anchoring to the singular sibling kellian_publish_forecast, so an agent can distinguish batch from single publish 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?

The reference to kellian_publish_forecast taking one implies this is the multi-item route, giving a clear selection context. It stops short of an explicit rule such as "use the singular tool for a single forecast" or stating when not to use it.

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