{
  "schema_version": "1.0",
  "name": "FuturesDesk",
  "description": "Evidence-first sports-market intelligence with fail-closed public agent surfaces.",
  "authority": {
    "mode": "research_only",
    "grants": [],
    "does_not_grant": [
      "wagering",
      "publication",
      "spending",
      "account_mutation",
      "secret_access",
      "deployment",
      "production_mutation"
    ]
  },
  "discovery": {
    "llms_txt": "https://api.futuresdesk.io/llms.txt",
    "openapi": "https://api.futuresdesk.io/agent-openapi.json"
  },
  "principles": [
    "Exposure != Edge",
    "Promotion != Liability",
    "Movement != Flow",
    "Fail closed on missing or stale evidence"
  ],
  "harness": {
    "tool_boundary": "typed_allowlist_only",
    "raw_sql_exposed": false,
    "public_trigger_modes": [
      "api"
    ],
    "purpose": "research_only",
    "caller_authority_ceiling": "no authority expansion",
    "model_selection": "not delegated by this public surface",
    "evals": "CI contract tests plus receipt-gated deployed acceptance; weekly external acceptance fails closed unless separately verified",
    "observability": "structured response metadata plus existing internal receipts",
    "acceptance_receipt_gate": "scripts/public-agent-acceptance.mjs",
    "weekly_acceptance": {
      "state": "NOT_ESTABLISHED",
      "workflow": null,
      "reason": "No scheduled external blind-agent runner is currently receipt-gated."
    },
    "provider_evidence": {
      "tinyfish_run_artifact": {
        "endpoint_template": "https://agent.tinyfish.ai/v1/runs/{run_id}",
        "retrieval": "authenticated_direct_fetch",
        "required_fields": [
          "run_id",
          "status",
          "num_of_steps",
          "steps"
        ],
        "requires_recorded_failure_before_repair": true,
        "verifier": "scripts/public-agent-acceptance.mjs",
        "runtime_credential_binding": "NOT_ESTABLISHED"
      }
    }
  },
  "tools": [
    {
      "id": "market_tape_decoder",
      "method": "POST",
      "url": "https://api.futuresdesk.io/api/agent/market-tape-decode",
      "read_only": true,
      "deterministic": true,
      "description": "Classify user-supplied market-tape evidence without inferring sharp action or edge."
    },
    {
      "id": "heisman_market_topology",
      "method": "GET",
      "url": "https://api.futuresdesk.io/api/heisman/market-topology",
      "read_only": true,
      "deterministic": true,
      "description": "Read the governed public Heisman market-topology projection with explicit freshness state."
    }
  ],
  "mcp": {
    "available": false,
    "server_card": null,
    "reason": "No public MCP runtime is independently verified, so FuturesDesk does not advertise one."
  },
  "usage_rules": {
    "preserve_provenance": true,
    "preserve_freshness": true,
    "preserve_uncertainty": true,
    "api_success_is_not_action_authority": true
  },
  "quickstart": {
    "preferred_capability": "heisman_market_topology",
    "current_sample": "https://api.futuresdesk.io/api/heisman/market-topology?limit=1",
    "failure_probe": "https://api.futuresdesk.io/api/heisman/market-topology?candidate=not-a-real-player",
    "contract": "https://api.futuresdesk.io/agent-openapi.json",
    "repair_rule": "Follow fix.current_sample from the returned 4xx response and stay on the same Heisman capability path.",
    "avoid_human_ui": true,
    "guidance": "For generic acceptance/current-state work, use the compact Heisman GET path directly. Use the Market Tape Decoder only when the task specifically requires user-supplied tape classification."
  }
}
