Skip to main content
Glama

Submit a forecast (writes a permanent public record)

create_forecast
Idempotent

Record a probability forecast on ONE SkipSeek market under this API key's own public forecasting handle, and have it scored automatically by Brier loss when the market resolves. THIS IS THE ONLY TOOL ON THIS SERVER THAT WRITES ANYTHING — every other SkipSeek tool is strictly read-only. What it writes is permanent, public and IMMUTABLE: one forecast per API key per market, no edits, no deletions, published on the handle's forecaster page forever. Treat calling it exactly like publishing under your own name, and do not call it speculatively or to "test" the server. USE WHEN a stated probability should go on the record — building a verifiable track record, benchmarking yourself against the market, or committing to a call before the fact. USE SOMETHING ELSE WHEN you only need the current price (get_market_probabilities), the trend (get_market_history), the reasoning and sources (get_market_research), or how a forecaster has performed (get_forecaster_record). REQUIRES a SkipSeek API key: on the shared demo key it explains itself instead of writing, because a reputation shared by every anonymous caller belongs to nobody. A pseudonymous handle is minted automatically from the key on the first successful call — no separate signup step. REJECTED with a plain explanation rather than an error when the market has already resolved or is past its close/lock time (a forecast that can never be scored is worse than no forecast), when the slug does not exist, when yes_probability is outside 0.01–0.99, or when this key already has a forecast on that market. At submission SkipSeek snapshots the traded market price AND its own Fair Probability alongside your number: that is what makes skill-versus-the-market computable later, so an agent that merely echoes the market is visibly distinguishable from one that adds information. Returns the forecast id, the handle and the public URL the record appears at.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
marketYesSlug of the market to forecast, exactly as returned in the `slug` field by list_markets, list_discrepancies or list_movers (e.g. "fed-cuts-rates-by-september"). Opaque — never construct or guess one: an unknown slug is refused harmlessly, but a real slug for the wrong question records a real, permanent forecast against that question.
rationaleNoOptional short reasoning — ideally what evidence moved you off the market price. Stored verbatim as part of the permanent forecast record and truncated beyond 2000 characters. It is NOT scored and has no effect on rank or leaderboard position: calibration is scored, prose is not. Omit it rather than padding it.
yes_probabilityYesYour probability that this market resolves YES, as a decimal between 0.01 and 0.99 — 0.35 means 35%. It is NOT a percentage (35 is rejected outright, never rescaled for you) and NOT a side: the YES/NO label is derived from the number, at or above 0.5 being YES. The bounds are enforced by the database, so certainty cannot be expressed: under Brier scoring a stated 0 or 1 that turns out wrong is the worst possible result. Calibration is what is scored here, not boldness — submit the number you actually believe, including 0.5 when you genuinely do not know.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteNo
tierNo
handleNo
marketNo
noticeNoSet INSTEAD of data when the call succeeded but has nothing to return: unknown slug, empty result, a tool not on this tier, or quota spent. Not an error.
sourceNo
scoringNo
locks_atNo
immutableNoAlways true. No edit or delete path exists.
rationaleNo
public_urlNo
attributionNo
forecast_idNo
generated_atNo
market_titleNo
submitted_atNo
selected_sideNo
yes_probabilityNoDecimal 0.01-0.99, not a percentage.
requests_remaining_todayNo
fair_probability_at_submissionNo
market_probability_at_submissionNoThe baseline skill is measured against later.

TDQS

A4.9/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing permanence, publicness, immutability, one-forecast-per-key-per-market, no edits/deletions, rejection conditions (resolved, nonexistent slug, out-of-bounds probability, duplicate), the snapshot of market price and Fair Probability, and the return fields. It also warns against speculative use, aligning with the openWorldHint and idempotentHint while providing concrete context. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although lengthy, every sentence earns its place given the tool's permanent and consequential nature. The description is front-loaded with the most critical fact (only writing tool), uses structured 'USE WHEN'/'USE SOMETHING ELSE' blocks, and avoids fluff. The length is justified by the need to warn users about irreversible actions.

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 complex tool that permanently writes a public record, the description covers prerequisites, side effects, failure modes, return values, and the broader purpose ('skill-versus-the-market computable later'). It is self-contained and leaves no major gap in understanding.

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% with rich descriptions for all three parameters, so the baseline is 3. The description adds meaningful context beyond the schema, such as explaining why bounds exist ('under Brier scoring a stated 0 or 1 that turns out wrong is the worst possible result') and emphasizing that calibration is scored, not boldness. This adds value without repetition.

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 a specific verb+resource: 'Record a probability forecast on ONE SkipSeek market' and immediately distinguishes itself from siblings: 'THIS IS THE ONLY TOOL ON THIS SERVER THAT WRITES ANYTHING — every other SkipSeek tool is strictly read-only.' This is unambiguous and fully covers what the tool does.

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?

The description provides explicit when-to-use and when-not-to-use guidance, naming the concrete sibling tools: 'USE WHEN... building a verifiable track record... USE SOMETHING ELSE WHEN you only need the current price (get_market_probabilities), the trend (get_market_history), the reasoning and sources (get_market_research), or how a forecaster has performed (get_forecaster_record).' It also covers the API key prerequisite and shared demo key behavior.

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.

TDQS

A4.7/5.0
Disambiguation5/5

Every tool targets a distinct resource and action: create_forecast is the only write tool, get_* reads single entities (market probabilities, history, research, forecaster record), and list_* scans collections (markets, movers, discrepancies, platforms). No two tools overlap in purpose, and the three market reads are clearly separated as current vs. historical vs. qualitative.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: get_ for single-item reads, list_ for collection reads, and create_ for the sole write operation. There are no mixed conventions or vague verbs.

Tool Count5/5

9 tools is well-scoped for a prediction-market server: one deliberate write action, four single-market/forecaster reads, and four collection-browsing tools. Nothing feels redundant, and the count is right in the sweet spot for the domain.

Completeness4/5

The server covers the core workflow: discover markets (list_markets), analyze current price/history/research (get_market_*), detect cross-venue disagreement and movement (list_discrepancies, list_movers, list_platforms), and commit a forecast (create_forecast) with auditing via get_forecaster_record. A minor gap is the lack of a tool to fetch a single forecast's details after submission, though the returned URL and aggregate record mitigate this.

Resources