ForexFactory MCP Server
The ForexFactory MCP Server provides programmatic access to economic calendar data from ForexFactory for trading assistants, LLMs, and agentic workflows.
Tools: Retrieve economic calendar events using ffcal_get_calendar_events for predefined periods (today, tomorrow, yesterday, this_week, next_week, last_week, this_month, next_month, last_month) or custom date ranges, returning JSON-formatted data.
Resources: Subscribe to calendar events via MCP endpoints for today (ffcal://events/today), the current week (ffcal://events/week), or custom date ranges (ffcal://events/range/{start}/{end}).
Prompts: Generate AI-ready trading intelligence including daily prep notes, weekly outlooks, volatility grids, and trade scenario maps. Output format is customizable via a style parameter (bullet points, tables, etc.).
Integration: Compatible with MCP clients including LangChain, n8n, Python applications, and MCP CLI. Supports multiple transport modes (stdio, HTTP, SSE) and Docker-ready deployment for flexible integration scenarios.
Integrates with LangChain agents through MCPToolkit, enabling AI agents to access ForexFactory economic calendar data for trading and financial analysis workflows
Provides MCP-compatible access to ForexFactory economic calendar events for automation workflows and trading pipelines
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ForexFactory MCP Servershow me today's economic events"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ ForexFactory MCP Server
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-serverRun with HTTP transport:
uv run ffcal-server --transport http --host 0.0.0.0 --port 8080SSE transport (โ ๏ธ deprecated)
uv run ffcal-server --transport sse --host 127.0.0.1 --port 8001Environment variable defaults
MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=8080๐ท๏ธ Namespace
Default namespace:
ffcalOverride via .env:
NAMESPACE=ffcal๐ฆ Resources
Name | Path | Description |
|
| Today's events |
|
| All events this week |
|
| Custom date range |
๐ ๏ธ Tools
Name | Type | Description |
| 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 |
| Trader prep note for today |
| Weekly macro event summary |
| Weekly event-risk heatmap |
| 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_weekExample: 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
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 prefix |
|
| Transport type ( |
|
| Host for HTTP/SSE |
|
| Port for HTTP/SSE |
|
| Playwright timeout |
| 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_mcpRuns MCP server and exposes it on port 8000.
Target | Description |
| Build Docker image |
| Run server in HTTP mode |
| Run in stdio mode |
| Inspect via MCP Inspector |
| 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
Fork the repo
Create a feature branch
Commit with a clear message
Push and open a PR
๐ License
MIT License โ see LICENSE for details.
Available Tools
1 toolmy-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.
| Name | Required | Description | Default |
|---|---|---|---|
| time_period | No | ||
| start_date | No | ||
| end_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 tool update
v1.0.0- Changed
my-ffcal_get_calendar_events1 field changed- added
Input schema / titleAdded value: +"get_calendar_eventsArguments"
1 tool update
- First observed
my-ffcal_get_calendar_events
TDQS
Scored across 1 tool
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.
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.
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.
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
Related MCP Connectors
Macroeconomic and FX time-series data for AI agents: indicators, calendars, COT, forex, commodities.
Real-time market events, sentiment, and technical analysis as MCP tools, backed by real data.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides access to macroeconomic indicators, FX rates, COT data, commodities, and release calendars through the FXMacroData API for AI agents.8MIT
- AlicenseBqualityCmaintenanceIntegrates 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.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides 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
- AlicenseNot gradedqualityCmaintenanceProvides 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.2MIT