Skip to main content

FutureSearch MCP Server

Most users don't need to run the MCP server locally. Use the hosted remote server at https://mcp.futuresearch.ai/mcp — it authenticates via OAuth, no API key needed. See the setup guide. The instructions below are for self-hosted or advanced use cases where an API key is required.

MCP (Model Context Protocol) server for FutureSearch: AI forecasting you can verify. FutureSearch turns questions about the future into probabilities, dates, and numbers, with accuracy verifiable via our public track record on stocks, prediction markets, public benchmarks, and forecasting tournaments (markets.futuresearch.ai, evals.futuresearch.ai).

This server exposes FutureSearch's core operations as MCP tools, allowing LLM applications to forecast, classify, rank, dedupe, merge, and run agents on CSV files.

All tools operate on local CSV files. Provide absolute file paths as input, and transformed results are written to new CSV files at your specified output path.

Installation

The server requires a FutureSearch API key. Get one at futuresearch.ai/app/api-key ($20 free credit).

Claude Desktop

Download the latest .mcpb bundle from the GitHub Releases page and double-click to install in Claude Desktop. You'll be prompted to enter your FutureSearch API key during setup. After installing the bundle, you can use FutureSearch from Chat, Cowork and Code within Claude Desktop.

Cursor

Set the environment variable in your terminal shell before opening cursor. You may need to re-open cursor from your shell after this. Alternatively, hardcode the api key within cursor settings instead of the hard-coded ${env:FUTURESEARCH_API_KEY}

export FUTURESEARCH_API_KEY=your_key_here

Manual Config

Either set the API key in your shell environment as mentioned above, or hardcode it directly in the config below. Environment variable interpolation may differ between MCP clients.

export FUTURESEARCH_API_KEY=your_key_here

Add this to your MCP config. If you have uv installed:

{
  "mcpServers": {
    "futuresearch": {
      "command": "uvx",
      "args": ["futuresearch-mcp"],
      "env": {
        "FUTURESEARCH_API_KEY": "${FUTURESEARCH_API_KEY}"
      }
    }
  }
}

Alternatively, install with pip (ideally in a venv) and use "command": "futuresearch-mcp" instead of uvx.

Workflow

All operations follow an async pattern:

  1. Start - Call an operation tool (e.g., futuresearch_agent) to start a task. Returns immediately with a task ID and session URL.
  2. Monitor - Call futuresearch_progress(task_id) repeatedly to check status. The tool blocks ~12s to limit the polling rate.
  3. Retrieve - Once complete, call futuresearch_results(task_id, output_path) to save results to CSV.

Available Tools

futuresearch_forecast

Forecast questions about the future. Five modes: binary probabilities, numeric percentiles, date percentiles, categorical (one probability per listed outcome), and thresholded (one probability per listed threshold condition).

Parameters:
- forecast_type: "binary", "numeric", "date", "categorical", or "thresholded"
- context: (optional) Batch-level context for all questions
- effort_level: (optional) "low" or "high" (default; required for categorical/thresholded)
- output_field: Name of the forecast quantity (required for numeric/date)
- units: Units of the forecast quantity (required for numeric)
- categories_field: Column with each row's outcomes as a JSON array of strings (required for categorical)
- thresholds_field: Column with each row's threshold conditions as a JSON array (required for thresholded)

Example: "Will the US Federal Reserve cut rates before July 2027?"

futuresearch_rank

Score and sort CSV rows based on qualitative criteria.

Parameters:
- task: Natural language instructions for scoring a single row
- input_csv: Absolute path to input CSV
- field_name: Name of the score field to add
- field_type: Type of the score field (float, int, str, bool)
- ascending_order: Sort direction (default: true)
- response_schema: (optional) JSON schema for custom response fields

Example: Rank leads by "likelihood to need data integration solutions"

futuresearch_dedupe

Remove duplicate rows using semantic equivalence.

Parameters:
- equivalence_relation: Natural language description of what makes rows duplicates
- input_csv: Absolute path to input CSV

Example: Dedupe contacts where "same person even with name abbreviations or career changes"

futuresearch_merge

Join two CSV files using intelligent entity matching (LEFT JOIN semantics).

Parameters:
- task: Natural language description of how to match rows
- left_csv: The table being enriched — all its rows are kept in the output
- right_csv: The lookup/reference table — its columns are appended to matches; unmatched left rows get nulls
- merge_on_left: (optional) Only set if you expect exact string matches on this column or want to draw agent attention to it. Fine to omit.
- merge_on_right: (optional) Only set if you expect exact string matches on this column or want to draw agent attention to it. Fine to omit.
- use_web_search: (optional) "auto" (default), "yes", or "no"
- relationship_type: (optional) "many_to_one" (default) if multiple left rows can match one right row, "one_to_one" matches must be unique, "one_to_many" one left row can match multiple right rows, "many_to_many" multiple left rows can match multiple right rows. For one_to_many and many_to_many, multiple matches are joined with " | " in each added column.

Example: Match software products (left, enriched) to parent companies (right, lookup): Photoshop -> Adobe

futuresearch_classify

Classify each row into one of the provided categories.

Parameters:
- task: Natural language classification instructions
- categories: Allowed categories (minimum 2)
- classification_field: (optional) Output column name (default: "classification")
- include_reasoning: (optional) Include reasoning column (default: false)

Example: Classify companies by GICS sector with categories ["Energy", "Financials", "Information Technology", ...]

futuresearch_agent

Run web research agents on each row of a CSV.

Parameters:
- task: Natural language description of research task
- input_csv: Absolute path to input CSV
- response_schema: (optional) JSON schema for custom response fields

Example: "Find this company's latest funding round and lead investors"

futuresearch_progress

Check progress of a running task.

Parameters:
- task_id: The task ID returned by an operation tool

Blocks ~12s before returning status. Call repeatedly until task completes.

futuresearch_results

Retrieve and save results from a completed task.

Parameters:
- task_id: The task ID of the completed task
- output_path: Full absolute path to output CSV file (must end in .csv)

Only call after futuresearch_progress reports status "completed".

Development

cd futuresearch-mcp
uv sync
uv run pytest

For MCP registry publishing:

mcp-name: io.github.futuresearch/futuresearch-mcp

License

MIT - See LICENSE.txt

Release files for futuresearch-mcp 0.25.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for futuresearch-mcp 0.25.0
File Size Uploaded
futuresearch_mcp-0.25.0.tar.gz 169.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for futuresearch-mcp 0.25.0
File Interpreter ABI Platform
futuresearch_mcp-0.25.0-py3-none-any.whl Python 3 none any Details

Total release size: 276.6 kB

Release files / futuresearch_mcp-0.25.0.tar.gz

Download URL futuresearch_mcp-0.25.0.tar.gz
Size 169.0 kB
Tags Source
SHA-256 checksum
How to use checksums
da8c3bdf0a04524158ac987f3af658488270c5e8cac7fda43d4b5ddb00ef166c
BLAKE2b-256 checksum
How to use checksums
882b8073b30ab7d845c70cf19154b8620badb9018a2618c651323cd2e60c8ae2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.

Transparency log

Release files / futuresearch_mcp-0.25.0-py3-none-any.whl

Download URL futuresearch_mcp-0.25.0-py3-none-any.whl
Size 107.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
68e9ec5b8fb3afcca35ffd23a39ed876ba1c06263d7b7c52105da9bc0967f04c
BLAKE2b-256 checksum
How to use checksums
065d5b22de4731fcb17ed6097a9d0a6832dc3235e9ba233ea5a6890d2457155f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 7, 2026.

Transparency log

Release history Release notifications | RSS feed

0.26.0

2 release files

This release

0.25.0 This release

2 release files

0.24.0

2 release files

0.23.0

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.17.0

2 release files

0.16.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.9.0

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page