ForexFactory MCP Server
📅 ForexFactory MCP 서버
ForexFactory 경제 캘린더 데이터를 리소스와 도구로 노출하는 MCP(Model Context Protocol) 서버입니다.
에이전트 워크플로우, LLM 및 트레이딩 어시스턴트에서 사용하도록 설계되었습니다.
🚀 기능
✅ 기간별(
today,this_week,custom등) 경제 캘린더 이벤트 검색✅ MCP 리소스를 통한 액세스 (구독형 액세스)
✅ MCP 도구를 통한 액세스 (클라이언트/에이전트에서 직접 호출)
✅ 쉬운 통합을 위한 JSON 우선 응답
⚡ LangChain, n8n 또는 모든 MCP 호환 클라이언트와 통합
📌 개발 상태
이 프로젝트는 활발히 개발 중입니다. 핵심 기능은 안정적이지만(MCP 도구 및 리소스를 통해 ForexFactory 경제 캘린더 이벤트 검색), 여전히 다음을 진행 중입니다:
기능 확장 (프롬프트, 배포 옵션)
문서 및 예제 개선
생태계를 구축하는 동안 피드백과 기여를 환영합니다.
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)(전체 세부 정보는 저장소를 참조하세요 — 기여자를 위한 상위 수준 레이아웃입니다.)
Related MCP server: MCP Financial Data Gateway
🔧 설치
요구 사항
Python 3.12+
uv 또는 pip
최신 터미널 또는 MCP 호환 클라이언트
설정
# 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▶️ 사용법
⚡ 퀵스타트
기본 설정(stdio 전송)으로 서버 시작:
uv run ffcal-serverHTTP 전송으로 실행:
uv run ffcal-server --transport http --host 0.0.0.0 --port 8080SSE 전송 (⚠️ 지원 중단 예정)
uv run ffcal-server --transport sse --host 127.0.0.1 --port 8001환경 변수 기본값
MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=8080🏷️ 네임스페이스
기본 네임스페이스:
ffcal.env를 통해 재정의:
NAMESPACE=ffcal📦 리소스
이름 | 경로 | 설명 |
|
| 오늘의 이벤트 |
|
| 이번 주 모든 이벤트 |
|
| 사용자 지정 날짜 범위 |
🛠️ 도구
이름 | 유형 | 설명 |
| 도구 | 특정 기간의 이벤트 검색 |
지원되는 값:
today, tomorrow, yesterday, this_week, next_week, last_week, this_month, next_month, last_month, custom📝 프롬프트
이름 | 설명 |
| 오늘의 트레이더 준비 노트 |
| 주간 거시 경제 이벤트 요약 |
| 주간 이벤트 리스크 히트맵 |
| 특정 이벤트에 대한 시나리오 맵 |
🧩 프롬프트 스타일
모든 프롬프트는 서식을 제어하기 위한 style 매개변수를 지원합니다.
기본값:
style: str = "bullet points"사용 가능한 형식은 출력 스타일 참조를 확인하세요.
💻 클라이언트 예제
예제: MCP CLI 사용
mcp call ffcal:get_calendar_events time_period=this_week예제: 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)예제: LangChain 통합
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)📘 클라이언트 구성 참조
포함 내용:
✅ **Claude Desktop (로컬 + Docker)**용 예제 구성
🐳 Docker 빌드 및 설정
🧩 VS Code MCP 통합 (향후)
🧪 테스트 + 문제 해결 체크리스트
🔍 시각적 디버깅을 위한 인스펙터 설정
⚙️ 구성
변수 | 기본값 | 설명 |
|
| 네임스페이스 접두사 |
|
| 전송 유형 ( |
|
| HTTP/SSE용 호스트 |
|
| HTTP/SSE용 포트 |
|
| Playwright 타임아웃 |
| 시스템 로컬 | 시간대 재정의 |
예제 .env
MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=8080
NAMESPACE=ffcal🐳 Docker 통합
stdio(기본값) 및 HTTP/SSE를 모두 지원합니다.
docker compose build
docker compose up forexfactory_mcpMCP 서버를 실행하고 포트 8000에서 노출합니다.
타겟 | 설명 |
| Docker 이미지 빌드 |
| HTTP 모드로 서버 실행 |
| stdio 모드로 실행 |
| MCP 인스펙터를 통해 검사 |
| 컨테이너 중지 |
🐍 1. uv 또는 의존성 설치 실패
실행:
docker compose build --no-cache forexfactory_mcp⚡ 2. 서버가 즉시 종료됨
다음으로 전환:
make run-http🌐 3. 포트 사용 중
포트 변경:
docker compose run --rm -e MCP_PORT=8080 forexfactory_mcp🔐 4. 브라우저 실패
Chromium 설치:
docker compose run forexfactory_mcp playwright install chromium🧪 테스트
pytest -v📊 로드맵
[ ] 통화 및 영향도별 이벤트 필터
[ ] 과거 데이터 백필
[ ] MCP 프롬프트 확장
[ ] 클라우드 준비 배포
🤝 기여
저장소 포크
기능 브랜치 생성
명확한 메시지로 커밋
푸시 후 PR 열기
📜 라이선스
MIT 라이선스 – 자세한 내용은 LICENSE를 참조하세요.
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.
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.
75 MCP tools: SEC financials, FRED economics, IRS 990, FDA, FX, UK Companies House.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides access to macroeconomic indicators, FX rates, COT data, commodities, and release calendars through the FXMacroData API for AI agents.8MIT
- 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.1MIT
- AlicenseNot gradedqualityFmaintenanceProvides 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.31 PyPI2MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to access and analyze Forex Factory economic calendar data, including enriched event details and summary statistics, through MCP tools and resources.-