Skip to main content
Glama
CoinRithm

CoinRithm/coinrithm-agent-trading

Official

Discover prediction markets

discover_pm_markets
Read-only

Find active, open, quote-ready prediction markets on Kalshi and Polymarket with liquidity, freshness, quotable outcome IDs, and eligibility flags. Call pm_quote before opening paper positions.

Instructions

Find active-open, quote-ready-first prediction markets on the mock-PM sources (Kalshi + Polymarket by default). Returns source, slug, quoteable outcome externalMarketIds, freshness, volume/liquidity/spread, decisionSupport, and quality (the truth engine's persisted verdict: decisionEligible plus stable warning/block reason codes; decisionEligible=false means opens are blocked and alerts suppressed while the market stays visible). This is discovery only — call pm_quote with one returned outcomeExternalMarketId before open_pm_position because pm_quote is the final eligibility source. Paper trading only (virtual mUSD). Fills follow paper_execution_v1 with a disclosed execution cost; see executionModel in quote/trade results.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoOptional search text (title, outcome, topic, or related coin).
sortNoPrediction-market sort (default best).
limitNoMax rows (1-50, default 20).
offsetNoPagination offset (default 0).
sourceNoSource filter (default all = Kalshi + Polymarket).
agentTraceNoOptional private trace metadata stored in the caller's ledger.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
bodyNo
httpStatusYes
ledgerStatusNo
ledgerEventIdNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.1.23
    • removedOutput schema / properties / body / description
      Removed value: -"Parsed CoinRithm response body, or raw text when the response is not JSON."
    • removedOutput schema / properties / httpStatus / description
      Removed value: -"HTTP status returned by CoinRithm, or 0 for network errors."
    • removedOutput schema / properties / ledgerEventId / description
      Removed value: -"Private AgentActionEvent id returned by /api/agent/*, when present."
    • removedOutput schema / properties / ledgerStatus / description
      Removed value: -"Ledger write status header returned by CoinRithm, when present."
    • removedOutput schema / properties / ok / description
      Removed value: -"True when CoinRithm returned a successful 2xx response."
  2. Changed3 schema fields changedv0.1.8
    • addedInput schema / properties / agentTrace
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Optional private trace metadata stored in the caller's ledger.",
      +  "properties": {
      +    "confidence": {
      +      "description": "Optional confidence score from 0 to 1.",
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "decisionId": {
      +      "description": "Agent decision id for quote/write attribution.",
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "rationaleSummary": {
      +      "description": "Optional concise rationale summary. Do not include chain-of-thought, secrets, or account identity.",
      +      "maxLength": 1200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "runId": {
      +      "description": "Agent run id for grouping.",
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "strategyLabel": {
      +      "description": "Short strategy label, self-reported by the caller.",
      +      "maxLength": 120,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / ledgerEventId
      Added value: +{
      +  "description": "Private AgentActionEvent id returned by /api/agent/*, when present.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / ledgerStatus
      Added value: +{
      +  "description": "Ledger write status header returned by CoinRithm, when present.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed1 schema field changedv0.1.5
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "body": {
      +      "description": "Parsed CoinRithm response body, or raw text when the response is not JSON."
      +    },
      +    "httpStatus": {
      +      "description": "HTTP status returned by CoinRithm, or 0 for network errors.",
      +      "type": "integer"
      +    },
      +    "ok": {
      +      "description": "True when CoinRithm returned a successful 2xx response.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "httpStatus",
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  4. First observedv0.1.4

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint=true, destructiveHint=false), but the description adds substantial context beyond them: decisionEligible=false blocks opens and suppresses alerts while the market stays visible, trading is paper-only with virtual mUSD, and fills follow paper_execution_v1 with a disclosed execution cost surfaced via executionModel.

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-loaded with purpose and scope before workflow and trading-model detail, and every sentence carries information. It is dense with nested parentheticals (quality/truth-engine verdict, execution cost model), so it reads a touch heavy, but nothing is wasted.

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?

Despite an output schema existing, the description still explains the most consequential return signal (quality/decisionEligible and its blocking behavior) and the paper-trading execution model. For a discovery tool feeding a quote-then-open pipeline, everything an agent needs to call it and interpret results is present.

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 coverage is 100%, so the schema already documents all six parameters with enums, ranges, and defaults. The description adds only the implicit 'quote-ready-first' default ordering and source defaults, which the schema's own descriptions already state. Baseline 3 is appropriate when the schema carries the parameter burden.

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+resource ('Find active-open, quote-ready-first prediction markets') with an explicit source scope (Kalshi + Polymarket). It even enumerates the returned fields, which lets an agent distinguish it from the many pm_data_* sibling readers and from the write path (open_pm_position).

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 an explicit workflow: 'This is discovery only — call pm_quote with one returned outcomeExternalMarketId before open_pm_position because pm_quote is the final eligibility source.' It names both the prerequisite and the alternative eligibility source, leaving no sequencing to inference.

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