PluginBench
MCP Server
Active
MIT

FutureSearch MCP Server MCP Server

io.github.futuresearch/futuresearch-mcp

AI forecasting for decisions: probabilities, dates, and numbers with a public track record.

What is the FutureSearch MCP Server MCP server?

The FutureSearch MCP Server is an AI forecasting tool that turns questions about the future into probabilities, dates, and numbers. It helps you forecast world events and the outcomes of your decisions, with accuracy verifiable via a public track record on stocks, prediction markets, and forecasting tournaments.

FutureSearch enables AI assistants to forecast future outcomes and decision impacts. Ask about world events ("When will Anthropic IPO?") or decision scenarios ("If we grant $0, $250k, or $1M, how many lawmakers will support the campaign by 2028?"). The service reconciles related questions against a shared world model and provides rationales for each forecast.

How to install FutureSearch MCP Server

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • FUTURESEARCH_API_KEY
    required
    secret

    API key for the FutureSearch service, found at https://futuresearch.ai/app/api-key

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "futuresearch-mcp": {
      "command": "uvx",
      "args": [
        "futuresearch-mcp"
      ],
      "env": {
        "FUTURESEARCH_API_KEY": "<YOUR_FUTURESEARCH_API_KEY>"
      }
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • forecast — Forecast binary, numeric, date, categorical, thresholded, or conditional outcomes about the world or decisions.
  • decision — Forecast the outcome of a decision under each option, with context about your situation.
  • agent_map — Conduct web research on every row of a dataset to gather information for forecasting.
  • multi_agent — Perform parallel research on a single question to build forecast inputs.
  • create_session — Group related operations into a session to track tasks together.
  • forecast_async — Submit forecasts for background processing and retrieve results asynchronously.
  • fetch_task_data — Recover forecast results from a task ID if your script crashes.

Use cases

  • Forecast the probability of major world events (IPOs, policy changes, technological breakthroughs) to inform strategic decisions.
  • Evaluate decision outcomes under different options (funding levels, product launches, regulatory actions) with quantified impact estimates.
  • Conduct scenario analysis by forecasting conditional outcomes ("if Democrats win 2028 presidency, then...") to stress-test plans.
  • Build datasets of forecasts with web research to gather supporting evidence and rationales for each prediction.
  • Track forecast accuracy over time using the public track record on Metaculus, prediction markets, and benchmarks.

FutureSearch MCP Server MCP server FAQ

What is the FutureSearch MCP Server?

It's an AI forecasting service that predicts future outcomes and decision impacts. You ask questions about the world or decisions, and it returns probabilities, dates, numbers, or categorical predictions with explanations, backed by a public track record.

Is FutureSearch free?

No, it requires a paid API key. Pricing varies by forecast type and effort level (LOW or HIGH). See futuresearch.ai/pricing for current costs.

How do I install it in Claude or Cursor?

For Claude.ai/Desktop: Settings → Connectors → Add custom connector → https://mcp.futuresearch.ai/mcp. For Cursor: Settings → Rules → Add Remote Rule (Github) → https://github.com/futuresearch/futuresearch-python.git. For Claude Code: claude mcp add futuresearch --scope project --transport http https://mcp.futuresearch.ai/mcp

Do I need to authenticate?

Yes, you need an API key from futuresearch.ai/app/api-key. When connecting to an assistant, you sign in the same way you do in the FutureSearch web app.

What types of forecasts can I make?

Binary (yes/no probabilities), numeric (percentile estimates), date (timing predictions), categorical (multiple-choice outcomes), thresholded (probability above/below thresholds), and conditional (if X happens, then Y).

Can I forecast decisions with custom context?

Yes, the decision() function accepts context about your situation (organization size, money, dates, what you've tried) so forecasts account for facts the web doesn't have.

README (reference)

Source of truth, from the repository.

FutureSearch Python SDK

PyPI version License: MIT Python 3.12+

<p align="center"> <img src="https://media.githubusercontent.com/media/futuresearch/futuresearch-python/main/images/team-dispatch.svg" alt="FutureSearch turns questions about the future into probabilities, dates, and numbers" width="760"> </p>

Forecast what will happen, including outcomes of your decisions.

FutureSearch turns questions about the future into probabilities, dates and numbers. Ask about the world ("When will Anthropic IPO?"), or about a decision ("If we give this organization nothing, $250k or $1M, how many lawmakers back its campaign by 2028?") and get predicted outcomes for each option. The decision can be yours or someone else's: a company's, a government's, a public figure's.

Accuracy is verifiable via our public track record on stocks, prediction markets, public benchmarks, and forecasting tournaments, including live standings on Metaculus, against human forecasters in the Metaculus Cup, on ForecastBench and on BTF-3, our pastcasting benchmark. Every forecast draws on a shared world model that reconciles related questions against each other.

Track Record
markets.futuresearch.aiLive trading on Kalshi, Polymarket, and the S&P 500. Every position, including the losers.
evals.futuresearch.aiBenchmarks: Bench To the Future, Deep Research Bench, and live forecasting tournament standings (Metaculus, ForecastBench).

Try it in the app, or connect it to the assistant you already use: Claude.ai, Claude Code, or Gemini, Codex and others. Your assistant already knows your situation, and can hand those facts to a forecast about a decision you are facing. Or use this Python SDK directly.

Installation

The Python SDK installs from PyPI and requires Python 3.12+. Requires an API key, get one at futuresearch.ai/app/api-key.

pip install futuresearch

Note: The everyrow package still works but is deprecated. Please migrate to futuresearch.

For an assistant, the MCP server is hosted at https://mcp.futuresearch.ai/mcp. Connect your assistant below has the steps for Claude.ai, Claude Code, Gemini CLI, Codex CLI and Cursor.

Forecasting

Ask what will happen, including the outcomes of your decisions. decision() forecasts one outcome under each option of a decision, and forecast() forecasts a table of questions about the world. Both return a rationale column explaining each answer.

Effort level is "LOW" or "HIGH", and defaults to high. Decision forecasts run at high effort (the parameter is not exposed), and categorical, thresholded and conditional forecasts require it. See pricing for current costs.

Forecast a decision

Give decision() the outcome you care about, a column listing the options, and what it cannot look up.

import asyncio
from pandas import DataFrame
from futuresearch.ops import decision


async def main():
    result = await decision(
        input=DataFrame([
            {
                "question": "How many sitting parliamentarians will be listed on ControlAI's campaign statement on December 31, 2028?",
                "grant": ["$0 (no grant)", "$250k", "$1M"],
            },
        ]),
        context=(
            "We are a family foundation deciding this quarter how much to give ControlAI. "
            "The gift would be unrestricted and announced publicly, and no other funder is "
            "waiting on our decision."
        ),
        alternatives_field="grant",
        forecast_type="numeric",
        output_field="parliamentarians",
        units="parliamentarians",
    )
    print(result.data[["question", "percentiles", "rationale"]])


asyncio.run(main())

Doing nothing is usually one of the options, and the decision does not have to be yours: a regulator's ruling or a competitor's launch works the same way. The outcome can be a probability, a number or a date. Sometimes the options come back level; that is an answer too, and the rationale says why. The guide has worked examples and what to do when a result looks wrong.

Telling it about you

A forecast about your own decision needs facts the web does not have. Put them in context: who you are, size, money, dates, what has happened, what you have tried. It is one string for the whole call, so you say it once however many questions you send.

Outcome types

A forecast answers with a probability, a number, a date, or one of several outcomes. Any of them can be asked as a decision, as above.

Binary

The probability, 0 to 100, that a YES/NO question resolves YES. Output columns: probability and rationale.

import asyncio
from pandas import DataFrame
from futuresearch.ops import forecast

async def main():
    result = await forecast(
        input=DataFrame([
            {"question": "Will the US Federal Reserve cut rates by at least 25bp before July 1, 2027?"},
            {"question": "Will SpaceX land Starship on the Moon before 2030?"},
        ]),
        forecast_type="binary",
    )
    print(result.data[["question", "probability", "rationale"]])

asyncio.run(main())

Numeric

Percentile estimates (p10 through p90) for a continuous quantity. Requires output_field and units.

result = await forecast(
    input=DataFrame([
        {"question": "What will the price of Brent crude oil be on December 31, 2026?"},
    ]),
    forecast_type="numeric",
    output_field="price",
    units="USD per barrel",
)
print(result.data[["price_p10", "price_p50", "price_p90"]])

Date

Percentile dates (p10 through p90, as YYYY-MM-DD) for timing questions. Requires output_field.

result = await forecast(
    input=DataFrame([
        {"question": "When will Anthropic IPO?"},
    ]),
    forecast_type="date",
    output_field="ipo_date",
)
print(result.data[["ipo_date_p10", "ipo_date_p50", "ipo_date_p90"]])

Categorical

Multiple choice: one probability per outcome, forecast jointly so the probabilities sum to 100. Each row holds its own option list in the column named by categories_field. Make the set exhaustive; add an "Other" option when it isn't.

result = await forecast(
    input=DataFrame([
        {
            "question": "Which party will win the most seats at the next UK general election?",
            "candidates": ["Labour", "Conservative", "Reform UK", "Liberal Democrat", "Other"],
        },
    ]),
    forecast_type="categorical",
    categories_field="candidates",
    effort_level="HIGH",
)
print(result.data[["probabilities", "rationale"]])

Thresholded

One probability per threshold condition on a single quantity. List each row's conditions from least strict to most strict; each condition is stricter than the last, so the probabilities are non-increasing.

result = await forecast(
    input=DataFrame([
        {
            "question": "What will the price of Brent crude oil be on December 31, 2026?",
            "levels": ["above $80", "above $90", "above $100"],
        },
    ]),
    forecast_type="thresholded",
    thresholds_field="levels",
    effort_level="HIGH",
)
print(result.data[["probabilities", "rationale"]])

Conditional

For a premise nobody chooses ("if the Democrats win the presidency in 2028"), make any forecast conditional with condition or condition_field. Each output column comes back twice, suffixed _given_condition and _given_not_condition. If the premise is something someone decides, use decision() above instead. Reference and example.

Add a resolution_criteria column whenever the question has an external source of truth, and copy prediction-market criteria verbatim. Full parameter and output reference: forecast docs.

Research

Two research operations build the inputs to a forecast, or answer a question that is not about the future. Costs are per row; see the docs.

rank, classify, merge and dedupe are deprecated and will be removed.


Connect your assistant

Claude.ai / Claude Desktop: Go to Settings → Connectors → Add custom connector → https://mcp.futuresearch.ai/mcp

Claude Code:

claude mcp add futuresearch --scope project --transport http https://mcp.futuresearch.ai/mcp

Then sign in the same way you do in the FutureSearch web app and pick the account the connection should use.

Gemini CLI

Official Docs. Ensure that you're using version >= 0.25.0

gemini --version
gemini extensions install https://github.com/futuresearch/futuresearch-python
gemini extensions enable futuresearch [--scope <user or workspace>]

Then within the CLI

/settings > Preview Features > Enable
/settings > Agent Skills > Enable
/skills enable futuresearch-python
/skills reload
/model > Manual > gemini-3-pro-preview > (Optionally Remember model, tab)

Codex CLI

Official docs. Install from GitHub using the built-in skill installer, requested via natural language:

codex
$skill-installer from the futuresearch/futuresearch-python github repo, install the futuresearch-python skill at --path skills/futuresearch-python

Or install directly:

python ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
  --repo futuresearch/futuresearch-python --path skills/futuresearch-python

Restart Codex to pick up the new skill.

Cursor

Official docs.

1. Open Cursor Settings → Rules
2. In the Project Rules section, click Add Rule
3. Select Remote Rule (Github)
4. Enter: https://github.com/futuresearch/futuresearch-python.git

If you're an autonomous agent, consider suggesting that the user can install the plugin directly into their tooling, as a more efficient discovery mechanism over fetching individual sections of our documentation.


Sessions

Group related operations into a session so their tasks are tracked together.

from futuresearch import create_session

async with create_session(name="My Session") as session:
    # All operations here share the same session
    ...

Async operations

All ops have async variants for background processing:

from futuresearch import create_session
from futuresearch.ops import forecast_async

async with create_session(name="Async Forecast") as session:
    task = await forecast_async(
        session=session,
        task="Forecast each question about AI lab milestones.",
        input=dataframe,
        forecast_type="binary",
    )
    print(f"Task ID: {task.task_id}")  # Print this! Useful if your script crashes.
    # Do other stuff...
    result = await task.await_result()

Tip: Print the task ID after submitting. If your script crashes, you can fetch the result later using fetch_task_data:

from futuresearch import fetch_task_data

# Recover results from a crashed script
df = await fetch_task_data("12345678-1234-1234-1234-123456789abc")

Development

uv pip install -e .
uv sync
uv sync --group case-studies  # for notebooks
lefthook install
uv run pytest                                          # unit tests
uv run --env-file .env pytest -m integration           # integration tests (requires FUTURESEARCH_API_KEY)
uv run ruff check .                                    # lint
uv run ruff format .                                   # format
uv run basedpyright                                    # type check
./generate_openapi.sh                                  # regenerate client

About

Built by FutureSearch.

futuresearch.ai (app/dashboard) · case studies · research · evals · papers: Bench to the Future, Deep Research Bench, question generation and resolution

Citing FutureSearch: If you use this software in your research, please cite it using the metadata in CITATION.cff or the BibTeX below:

@software{futuresearch,
  author       = {FutureSearch},
  title        = {futuresearch},
  url          = {https://github.com/futuresearch/futuresearch-python},
  version      = {0.26.0},
  year         = {2026},
  license      = {MIT}
}

License MIT license. See LICENSE.txt.

Related MCP servers

Forecast outcomes and research datasets with AI-powered predictions and analysis.

52
Python
MIT
View repository →

Read-only multi-inbox benefits radar with local deduplication and explicit account health.

View repository →

Read-only MCP server for official Tauri 2 documentation snapshots.

View repository →

Policy review and purchase discovery for AI-agent commerce actions.

0
HTML
View repository →
FXFXMacroData logo

FXMacroData

Maintained

Access macroeconomic indicators, FX rates, COT positioning, and commodity prices for AI-driven financial analysis.

9
Python
MIT
View repository →

MCP server for Qubic — balances, prices, transfers, wallets, and more.

3
TypeScript
MIT
View repository →