Skip to main content
Glama
kjpou1

ForexFactory MCP Server

by kjpou1

๐Ÿ“… ForexFactory MCP Server

Python License MCP uv

Contributions welcome Status PRs Welcome Made with Love

An MCP (Model Context Protocol) server that exposes ForexFactory economic calendar data as resources and tools.

Designed for use in agentic workflows, LLMs, and trading assistants.



๐Ÿš€ Features

  • โœ… Retrieve economic calendar events by time period (today, this_week, custom, etc.)

  • โœ… Access via MCP resources (for subscription-style access)

  • โœ… Access via MCP tools (direct calls from clients/agents)

  • โœ… JSON-first responses for easy integration

  • โšก Integrates with LangChain, n8n, or any MCP-compatible client


๐Ÿ“Œ Development Status

This project is actively developed. The core functionality is stable (retrieving ForexFactory economic calendar events via MCP tools and resources), but we are still:

  • Expanding features (prompts, deployment options)

  • Improving documentation and examples

We welcome feedback and contributions while we continue building out the ecosystem.


forexfactory-mcp/
โ”‚โ”€โ”€ src/forexfactory_mcp/   # Main package
โ”‚   โ”œโ”€โ”€ models/             # Schemas & enums
โ”‚   โ”œโ”€โ”€ services/           # Scraper + data normalization
โ”‚   โ”œโ”€โ”€ tools/              # MCP tool definitions
โ”‚   โ”œโ”€โ”€ resources/          # MCP resource definitions
โ”‚   โ”œโ”€โ”€ prompts/            # Prompt templates (optional MCP prompts)
โ”‚   โ”œโ”€โ”€ utils/              # Shared helpers & config
โ”‚   โ””โ”€โ”€ server.py           # FastMCP server entrypoint
โ”‚
โ”‚โ”€โ”€ examples/               # Example clients
โ”‚โ”€โ”€ tests/                  # Unit tests
โ”‚โ”€โ”€ .env.example            # Copy to .env for config
โ”‚โ”€โ”€ pyproject.toml          # Dependencies & metadata
โ”‚โ”€โ”€ README.md               # Documentation
โ”‚โ”€โ”€ .python-version         # Python version pin (3.12)

(See repo for full details โ€” this is a high-level layout for contributors.)


Related MCP server: FRED API MCP Server

๐Ÿ”ง Installation

Requirements

  • Python 3.12+

  • uv or pip

  • A modern terminal or MCP-compatible client

Setup

# Clone repo
git clone https://github.com/kjpou1/forexfactory-mcp.git
cd forexfactory-mcp

# Install dependencies
uv sync   # or: pip install -e .

# Install Playwright browser binaries
uv run playwright install chromium
# or, if using pip/venv:
playwright install chromium

# Copy example environment and adjust if needed
cp .env.example .env

โ–ถ๏ธ Usage

โšก Quickstart

Start the server with default settings (stdio transport):

uv run ffcal-server

Run with HTTP transport:

uv run ffcal-server --transport http --host 0.0.0.0 --port 8080

SSE transport (โš ๏ธ deprecated)

uv run ffcal-server --transport sse --host 127.0.0.1 --port 8001

Environment variable defaults

MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=8080

๐Ÿท๏ธ Namespace

Default namespace:

ffcal

Override via .env:

NAMESPACE=ffcal

๐Ÿ“ฆ Resources

Name

Path

Description

events_today

ffcal://events/today

Today's events

events_week

ffcal://events/week

All events this week

events_range

ffcal://events/range/{start}/{end}

Custom date range


๐Ÿ› ๏ธ Tools

Name

Type

Description

ffcal_get_calendar_events

Tool

Retrieve events for a given period

Supported values:

today, tomorrow, yesterday, this_week, next_week, last_week, this_month, next_month, last_month, custom

๐Ÿ“ Prompts

Name

Description

ffcal_daily_prep

Trader prep note for today

ffcal_weekly_outlook

Weekly macro event summary

ffcal_volatility_grid

Weekly event-risk heatmap

ffcal_trade_map_scenarios

Scenario map for specific events


๐Ÿงฉ Prompt Styles

All prompts support a style parameter to control formatting. Default:

style: str = "bullet points"

See the Output Style Reference for available formats.


๐Ÿ’ป Client Examples

Example: Using MCP CLI

mcp call ffcal:get_calendar_events time_period=this_week

Example: Using in Python

from mcp.client.session import Session
async with Session("ws://localhost:8000") as session:
    result = await session.call_tool("ffcal:get_calendar_events", {"time_period": "today"})
    print(result)

Example: LangChain Integration

from langchain.agents import initialize_agent
from langchain_mcp import MCPToolkit

toolkit = MCPToolkit.from_server_url("ws://localhost:8000", namespace="ffcal")
agent = initialize_agent(toolkit.tools)
response = agent.run("What are today's USD-related high impact events?")
print(response)

๐Ÿ“˜ Client Configuration Reference

๐Ÿ“– docs/CLIENT_CONFIG_REFERENCE.md

Includes:

  • โœ… Example configs for Claude Desktop (local + Docker)

  • ๐Ÿณ Docker build and setup

  • ๐Ÿงฉ VS Code MCP integration (future)

  • ๐Ÿงช Testing + troubleshooting checklist

  • ๐Ÿ” Inspector setup for visual debugging


โš™๏ธ Configuration

Variable

Default

Description

NAMESPACE

ffcal

Namespace prefix

MCP_TRANSPORT

stdio

Transport type (stdio, http, sse)

MCP_HOST

127.0.0.1

Host for HTTP/SSE

MCP_PORT

8000

Port for HTTP/SSE

SCRAPER_TIMEOUT_MS

5000

Playwright timeout

LOCAL_TIMEZONE

System local

Timezone override


Example .env

MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=8080
NAMESPACE=ffcal

๐Ÿณ Docker Integration

Supports both stdio (default) and HTTP/SSE.

docker compose build
docker compose up forexfactory_mcp

Runs MCP server and exposes it on port 8000.


Target

Description

make build

Build Docker image

make run-http

Run server in HTTP mode

make run-stdio

Run in stdio mode

make dev-http

Inspect via MCP Inspector

make stop

Stop containers


๐Ÿ 1. uv or dependency install fails

Run:

docker compose build --no-cache forexfactory_mcp

โšก 2. Server exits immediately

Switch to:

make run-http

๐ŸŒ 3. Port in use

Change port:

docker compose run --rm -e MCP_PORT=8080 forexfactory_mcp

๐Ÿ” 4. Browser fails

Install Chromium:

docker compose run forexfactory_mcp playwright install chromium

๐Ÿงช Testing

pytest -v

๐Ÿ“Š Roadmap

  • Event filters by currency and impact

  • Historical backfill

  • MCP prompt expansions

  • Cloud-ready deployment


๐Ÿค Contributing

  1. Fork the repo

  2. Create a feature branch

  3. Commit with a clear message

  4. Push and open a PR


๐Ÿ“œ License

MIT License โ€“ see LICENSE for details.

Available Tools

1 tool
my-ffcal_get_calendar_eventsC

Retrieve ForexFactory calendar events for a given time period or custom date range.Valid time_period values include: today, tomorrow, yesterday, this_week, next_week, last_week, this_month, next_month, last_month, custom.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_periodNo
start_dateNo
end_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions retrieval but lacks details on permissions, rate limits, error handling, or response format. For a read operation with zero annotation coverage, this is insufficient to inform the agent adequately.

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?

The description is front-loaded with the core purpose in the first sentence, followed by parameter details. It is efficient with minimal waste, though it could be slightly more structured by separating usage notes from parameter lists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema, the description does not need to explain return values. However, with no annotations, 3 parameters, and 0% schema coverage, the description partially compensates by detailing one parameter but leaves gaps in behavioral transparency and parameter semantics, making it minimally adequate.

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 description coverage is 0%, so the description must compensate. It explains the 'time_period' parameter by listing valid values, which adds meaning beyond the schema. However, it does not cover 'start_date' or 'end_date' parameters, leaving two of three parameters undocumented, resulting in a baseline score due to partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve') and resource ('ForexFactory calendar events') with scope ('for a given time period or custom date range'), making the purpose specific and understandable. However, since there are no sibling tools mentioned, it cannot demonstrate differentiation from alternatives, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, prerequisites, or exclusions. It only lists valid values for one parameter without explaining usage context or trade-offs, leaving the agent with minimal direction.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • Changedmy-ffcal_get_calendar_events1 field changed
      • addedInput schema / title
        Added value: +"get_calendar_eventsArguments"
  2. 1 tool update
    • First observedmy-ffcal_get_calendar_events

TDQS

B3.1/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools. The single tool has a clear and distinct purpose: retrieving ForexFactory calendar events.

Naming Consistency5/5

Since there is only one tool, naming consistency is inherently perfect. The tool name 'my-ffcal_get_calendar_events' follows a verb_noun pattern, which is consistent with itself.

Tool Count2/5

A single tool is generally too few for a server's purpose, as it limits functionality and scope. For a ForexFactory calendar server, one might expect additional tools for filtering, sorting, or managing events, making this count feel thin and under-scoped.

Completeness2/5

The server only provides retrieval of calendar events, with no tools for creating, updating, deleting, or otherwise managing events. This is a significant gap, as it lacks basic CRUD operations and limits the server's utility to read-only access.

Maintenance

ActivityInactive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Integrates the FRED (Federal Reserve Economic Data) API with MCP, enabling AI assistants to retrieve economic time series data such as GDP, inflation, and interest rates.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 10 financial data tools (market data, economic indicators, news, insider trades, and calendars) via a single MCP layer, enabling any MCP-compatible LLM to access diverse financial data through a unified interface.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides macro-economic event data, earnings reports, and market overviews as MCP tools, enabling AI agents to query calendars, check event proximity, and assess trade safety.
    2
    MIT