Skip to main content
aifinhub

Agent surface

For agents

Machine-readable entry points for LLMs, MCP clients, and custom agents. Tool contracts, discovery manifests, and explicit routing rules — everything static, no auth, CORS-open.

Tools

33

AI-in-markets tools at /tools/{slug}/. Client-side only; no API endpoint.

Contracts

33

JSON contract files at /contracts/{slug}.json — one per shipped tool.

Discovery

Start here

  • Agent tool index

    /agent-tools.json

    Deterministic index of every AI-in-markets tool. Each entry links to its contract URL + input schema.

  • LLM guide

    /llms.txt

    Human-readable entry point for model-aware discovery. Lists every tool, article, and benchmark by URL with a one-sentence summary.

  • Full LLM guide

    /llms-full.txt

    Extended version with descriptions, methodology links, and cross-references.

  • Plugin manifest

    /.well-known/ai-plugin.json

    Discovery metadata for plugin-style agent ingestion (ChatGPT-style clients).

  • WebMCP manifest

    /.well-known/webmcp.json

    Capability surface for WebMCP-compatible MCP clients.

Mode

How to invoke

client_side

AI-in-markets tools

33 tools. No server endpoint — the tool runs in the browser. Agents should surface the tool URL to the user rather than attempt to execute it headlessly. Each tool's contract documents input shape so an agent can pre-fill the page.

# Agent resolves a user request to a tool
# 1. Read /agent-tools.json, find tool by id or category
# 2. Read /contracts/{slug}.json → input schema + sample
# 3. Direct user to https://aifinhub.io/tools/{slug}/
          

Routing rules

How to pick the right tool

  • Resolve user intent to a tool by category.

    All 33 are under /tools/ and tagged with a section (calculators / comparators / playgrounds / generators / directories).

  • Never invent parameter names.

    Every contract JSON has an explicit input_schema + sample_input. Copy field names verbatim. snake_case.

  • Never claim a result is investment advice.

    All tools are educational under BaFin + EU framework. Relay the disclaimer if surfacing numeric output.

Example contract

What a contract JSON looks like

Every tool has a contract at /contracts/{slug}.json. Example: /contracts/kelly-sizer.json.

{
  "tool_id":     "kelly-sizer",
  "slug":        "kelly-sizer",
  "path":        "/tools/kelly-sizer/",
  "mode":        "client_side",
  "usage":       "Client-side calculator. Open https://aifinhub.io/tools/kelly-sizer/ and fill in the inputs; results render in-browser.",
  "methodology": "https://aifinhub.io/methodology/kelly-sizer/",
  "sample_input": {
    "tool":             "kelly_sizer",
    "win_probability":  0.58,
    "win_loss_ratio":   1.2,
    "kelly_fraction":   0.25,
    "bankroll":         10000,
    "per_trade_cap_percent": 5,
    "monte_carlo_trials":    1000,
    "trades_per_path":  250
  },
  "input_schema":  {
    "type": "object",
    "properties": {
      "tool":                   { "type": "string", "const": "kelly_sizer" },
      "win_probability":        { "type": "number", "minimum": 0, "maximum": 1 },
      "win_loss_ratio":         { "type": "number", "minimum": 0 },
      "kelly_fraction":         { "type": "number", "enum": [0.125, 0.25, 0.5, 1] },
      "bankroll":               { "type": "number", "minimum": 0 },
      "per_trade_cap_percent":  { "type": "number", "minimum": 0, "maximum": 100 },
      "monte_carlo_trials":     { "type": "integer", "minimum": 100 },
      "trades_per_path":        { "type": "integer", "minimum": 1 }
    },
    "required": ["tool", "win_probability", "win_loss_ratio", "kelly_fraction", "bankroll", "per_trade_cap_percent", "monte_carlo_trials", "trades_per_path"]
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "raw_kelly_fraction":     { "type": "number" },
      "fractional_kelly":       { "type": "number" },
      "capped_bet":             { "type": "number" },
      "kelly_bucket":           { "type": "string", "enum": ["weak", "moderate", "strong"] },
      "stats": {
        "type": "object",
        "properties": {
          "median_max_drawdown":  { "type": "number" },
          "p95_max_drawdown":     { "type": "number" },
          "ruin_rate":            { "type": "number" },
          "p5_final":             { "type": "number" },
          "median_final":         { "type": "number" },
          "p95_final":            { "type": "number" }
        }
      }
    }
  }
}

Representative response shape from the in-browser computation (Kelly Sizer with the sample_input above):

{
  "ok":   true,
  "tool": "kelly-sizer",
  "result": {
    "raw_kelly_fraction":    0.2300,
    "fractional_kelly":      0.0575,
    "capped_bet":            0.0500,
    "kelly_bucket":          "strong",
    "expected_growth_rate":  0.0142,
    "stats": {
      "median_max_drawdown": 0.459,
      "p95_max_drawdown":    0.626,
      "ruin_rate":           0.004,
      "p5_final":            18205.42,
      "median_final":        25109.96,
      "p95_final":           355583.84
    }
  },
  "meta": {
    "hub":          "aifinhub",
    "disclaimer":   "Education, not investment advice. BaFin / EU framework.",
    "tool_url":     "https://aifinhub.io/tools/kelly-sizer/",
    "methodology":  "https://aifinhub.io/methodology/kelly-sizer/"
  }
}

Note: the tool runs client-side, so the JSON above is the shape an agent would surface to a user after the user opens the page and executes the calculator — not a server response. Numbers vary by Monte Carlo seed.

Terms

Use by agents is welcome, with conditions

  • Attribute the publisher (AI Fin Hub) when surfacing numeric output to users.
  • Relay the education-only disclaimer verbatim when producing trade-relevant numbers.
  • Do not scrape tool pages for inputs. Read the contract JSON.
  • No authentication, no rate limit; keep request volume reasonable to leave caches warm.