图表mcp(alpha)
chart-mcp 组装非后端FastAPI、非服务MCP(模型上下文协议), 基于模板的Next.js前端 Vercel人工智能聊天机器人 和一个实例 SearxNG 自动托管以生成加密分析副驾驶。项目 通过SSE传播技术分析步骤,并提出两个工件 具体的。所有测试(后端和前端)都分组在 /tests 为了便于导航和交叉覆盖:
finance-实时管道(OHLCV、指标、水平、模式和
标记化摘要)。
search-SearXNG发布的新闻稿和文件的汇总。
⚠️ 阿尔法:返回的分析是教育性的。没有建议 不提供投资。
建筑
| 组件 | 主要角色 |
|---|---|
| 快速API(src/chart_mcp) | 由令牌保护的REST路由(/api/v1/*上海证券交易所 /stream/analysis,展览MCP标准。 |
| Python服务 | CCXT连接器、指示器计算、介质/电阻器检测、图表模式、标记LLM摘要、SearXNG客户端。 |
| SSE 工具 | chart_mcp/utils/sse.py 管理财务事件的标题、心跳、取消和序列化。 |
| SearxNG(docker/SearxNG) | 路由器使用的Dockerisé服务 /api/v1/search 等工具MCP web_search. |
前端(frontend/ai-chatbot) | 严格复制带有工件的扩展Vercel AI聊天机器人模板 finance 和 search,重用内部图表组件。 |
| CI GitHub操作 | 顺序管道 lint → typecheck → tests → build → e2e 涵盖Python和Node。 |
快速启动
- 后端FastAPI+MCP
make setup && make dev
# → API accessible sur http://localhost:8000> 备选方案: docker compose -f docker/docker-compose.yml up api 用于集装箱化运行。
- SearxNG (聚合搜索引擎)
docker compose -f docker/docker-compose.yml up searxng
# → Interface sur http://localhost:8080- 前端Next.js/Vercel人工智能聊天机器人
cd frontend/ai-chatbot
pnpm install
pnpm dev
# → UI sur http://localhost:3000 (consomme l’API locale)- 变量公社
复制 .env.example (根)和 frontend/ai-chatbot/.env.example 朝向 本地文件(.env, .env.local)然后调整MCP/SEARXNG代币。
发展环境
先决条件
- Python 3.11或3.12
- Node.js 20+
pnpm - Docker/Docker Compose(用于SearXng和容器化执行)
环境变量
复制文件 .env.example (根和 frontend/ai-chatbot/)然后 调整值。后端的关键变量:
| 变量 | 描述 |
|---|---|
API_TOKEN | 所有受保护路由和SSE流都需要承载令牌。 |
ALLOWED_ORIGINS | 授权CORS来源(分离器 ,)的。在生产中是强制性的。 |
MCP_API_BASE | 后端的基本URL(例如。 http://localhost:8000). |
MCP_API_TOKEN | MCP CLI和前端用于查询API的令牌。 |
MCP_SESSION_USER | 用于在后端记录当前用户的标识。 |
EXCHANGE 用于OHLCV的Exchange CCXT(binance 默认情况下)。 | |
OHLC_CACHE_TTL_SECONDS / OHLC_CACHE_MAX_ENTRIES | 内存中OHLCV缓存的设置。 |
FEATURE_FINANCE | 启用/禁用可选的财务路线。 |
SEARXNG_BASE_URL | SearXng实例的内部URL(例如。 http://searxng:8080). |
SEARXNG_TIMEOUT | searxng请求的超时(秒)。 |
RATE_LIMIT_PER_MINUTE | 速率限制中间件应用的配额。 |
前端侧(frontend/ai-chatbot/.env.example)同一对夫妇 MCP_* 是 需要从浏览器联系MCP API。还添加您的 关键分析/可观察性(如有)。变量 PLAYWRIGHT 和 PLAYWRIGHT_TEST_BASE_URL 继续评论以加速E2E运行: 以前导出它们 pnpm exec playwright test 而离开 OPENAI_API_KEY 未定义以使用提供者模型。
有用的API调用
REST路由通过Swagger记录(/docs).索降 curl :
# OHLCV
curl -H "Authorization: Bearer $API_TOKEN" \
-H "X-Session-User: regular" \
"http://localhost:8000/api/v1/market/ohlcv?symbol=BTCUSDT&timeframe=1h&limit=500"
# Indicateurs
curl -X POST -H "Authorization: Bearer $API_TOKEN" \
-H "X-Session-User: regular" \
-H "Content-Type: application/json" \
-d '{"symbol":"BTCUSDT","timeframe":"1h","indicator":{"name":"ema","params":{"window":21}},"limit":200}' \
http://localhost:8000/api/v1/indicators/compute
# Supports/Résistances
curl -H "Authorization: Bearer $API_TOKEN" \
-H "X-Session-User: regular" \
"http://localhost:8000/api/v1/levels?symbol=BTCUSDT&timeframe=4h&limit=500&max=5"
# Patterns chartistes
curl -H "Authorization: Bearer $API_TOKEN" \
-H "X-Session-User: regular" \
"http://localhost:8000/api/v1/patterns?symbol=BTC/USDT&timeframe=1h&limit=500"
# Synthèse agrégée
curl -X POST -H "Authorization: Bearer $API_TOKEN" \
-H "X-Session-User: regular" \
-H "Content-Type: application/json" \
-d '{"symbol":"BTCUSDT","timeframe":"1h","include_levels":true,"include_patterns":true}' \
http://localhost:8000/api/v1/analysis/summary
# Recherche SearxNG
curl -H "Authorization: Bearer $API_TOKEN" \
-H "X-Session-User: regular" \
"http://localhost:8000/api/v1/search?q=bitcoin%20etf&categories=news,science"
# Metrics Prometheus
curl http://localhost:8000/metrics消费SSE金融流
import { fetchEventSource } from "@microsoft/fetch-event-source";
/** Exemple Node.js/TypeScript pour analyser le flux SSE finance. */
async function streamFinanceAnalysis() {
const controller = new AbortController();
await fetchEventSource(
"http://localhost:8000/stream/analysis?symbol=BTCUSDT&timeframe=1h",
{
headers: {
Authorization: `Bearer ${process.env.MCP_API_TOKEN}`,
"X-Session-User": process.env.MCP_SESSION_USER ?? "regular",
},
signal: controller.signal,
async onmessage(message) {
if (!message.event || !message.data) {
return;
}
const payload = JSON.parse(message.data);
switch (message.event) {
case "token":
console.log("Résumé partiel:", payload.payload?.text ?? payload.text);
break;
case "metric":
console.log("Métrique:", payload.payload);
break;
case "done":
controller.abort();
break;
default:
console.log(`[${message.event}]`, payload.payload ?? payload);
}
},
},
);
}
streamFinanceAnalysis().catch((error) => {
console.error("Stream interrompu", error);
});后端发送的报头保证没有缓冲:
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alive
X-Accel-Buffering: no测试和CI
所有工作都在中声明 .github/workflows/ci.yml 并在 管道严格。
| 步骤 | 本地命令 |
|---|---|
| Lint Python | ruff check ., black --check src tests, isort --check-only src tests |
| Python类型 | mypy src |
| 测试后端 | pytest -q (覆盖范围生成于 coverage.xml) |
| 构建Docker | docker build -f docker/Dockerfile . (集成HealthCheck) |
| 前部类型检查 | cd frontend/ai-chatbot && pnpm exec tsc --noEmit |
| 测试前端 | pnpm --filter ai-chatbot exec vitest run + pnpm exec playwright test |
JUnit/Couverture工件由IC发布,以便于跟踪。
剧作家/E2E
在运行Playwright之前,请导出:
export PLAYWRIGHT=1
export PLAYWRIGHT_TEST_BASE_URL=http://127.0.0.1:3000
export MCP_API_BASE=http://127.0.0.1:8000
export MCP_API_TOKEN=playwright-token
export MCP_SESSION_USER=regular莱赛斯 OPENAI_API_KEY 未为这些测试定义,以强制使用 提供者模拟(不需要向OpenAI发出实际请求)。为了跑步 生产,定义环境秘密中的关键。
安全和最佳实践
- 永远不要提交
.env或秘密-仅文件.env.example
它们被版本化。
- 配置器
ALLOWED_ORIGINS明确在生产中;应用程序
如果列表在PlayWright模式下为空,则拒绝启动。
- 莱斯路线批评迫在眉睫
Authorization: Bearer和
X-Session-User.
- MCP服务器(
python -m chart_mcp.mcp_main)保存工具
create_finance_artifact, create_search_artifact, web_search, market 等,用于与前端对称集成。
- 服务记录度量和结构化日志(
/metrics).
包装和部署
docker compose -f docker/docker-compose.yml up --build
# -> lance l’API FastAPI (port 8000) et SearxNG (port 8080)Dockerfile包括 HEALTHCHECK 呼叫者 docker/healthcheck.py,ce qui 允许Kubernetes、Docker Compose或CI验证 API。要部署Next.js前端,请按照Vercel(或 在标准Node.js模式下部署应用程序) MCP_API_BASE 到你的 安全API。
配置 NEXT_PUBLIC_API_BASE_URL 和 NEXT_PUBLIC_API_TOKEN 指向FastAPI实例(默认情况下:与本地令牌来源相同)。VITEST测试包括: components/chart 当Playwright检查时 /chart 通过模拟道路。
ℹ️ Playwright配置将自动启动 pnpm dev 并在每次测试活动之前生成会话状态(Cookie)。无需手动启动前端。前端有用的附加脚本:
# Analyse statique Next.js (ESLint)
pnpm lint
# Vérifie les types TypeScript sans émettre de fichiers
pnpm typecheck
# Lance les tests Vitest en mode surveillance
pnpm test:watch
# Démarre la suite e2e Playwright locale (le serveur Next.js est lancé automatiquement)
pnpm test:e2e后端FastAPI
make setup
ALLOWED_ORIGINS=http://localhost:3000 make devmake setup安装Python依赖项并以可编辑模式注册项目。ALLOWED_ORIGINS必须至少包含一个授权来源;在本地
可以重用next.js前端URL(http://localhost:3000).
- 服务器正在运行 具有自动充电。
MCP服务器
- 安装 :
pip install -r requirements.txt安装fastmcp. - 发射 :
python -m chart_mcp.mcp_main启动MCP服务器(stdio)。 - 文档 :中描述的输入/输出方案
chart_mcp/schemas/mcp.py和规格 .
展示的工具
| 工具 | 主要输入 | 输出 |
|---|---|---|
get_crypto_data | symbol, timeframe, limit, start, end | HLCV排行榜 {ts,o,h,l,c,v} 由Pydantic验证 |
compute_indicator | symbol, timeframe, indicator, params, limit | 列表 {ts, valeurs...} 无 NaN |
identify_support_resistance | symbol, timeframe, limit, params | 水平 {price, kind, strength, strength_label, ts_range} |
detect_chart_patterns | symbol, timeframe, limit, params | 数字 {name, score, confidence, points, metadata} |
generate_analysis_summary | payload (symbol, timeframe,选项) | 教学文本+ disclaimer |
web_search | query, categories, time_range | SearXNG结果 {title, url, snippet, source, score} |
示例调用(FastMCP客户端)
fastmcp call python -m chart_mcp.mcp_main compute_indicator \
'{"symbol": "BTCUSDT", "timeframe": "1h", "indicator": "ema", "limit": 100}'SearxNG
存款包括现成的SearXNG服务:
- 文件:
docker/docker-compose.yml,docker/docker-compose.dev.yml,docker/searxng/settings.yml. - 环境变量:
SEARXNG_BASE_URL,SEARXNG_SECRET(未提交),SEARXNG_TIMEOUT(可选)。 - 开始:
docker compose -f docker/docker-compose.dev.yml up --build searxngL’API FastAPI展会 /api/v1/search 一旦 SEARXNG_BASE_URL 将指向 http://searxng:8080.Le工具MCP web_search 基于相同的配置。
Docker和Compose
make docker-build
make docker-run- 图像包含一个
HEALTHCHECK执行者docker/healthcheck.py(请求GET /health). docker-compose.dev.yml长矛api和searxng用于完整的堆栈。
测试和CI
本地订单:
make lint # ruff
make typecheck # mypy
make test # pytest (unitaires + intégration + SSE)CI管道(定义于 .github/workflows/ci.yml,待创建): ruff → mypy → pytest → 构建镜像Docker→ 前端测试(Vitest/Playwright)→ 文物。
安全
- 强制认证:
Authorization: Bearer+X-Session-User: regular. - CORS严格:通过定义来源
ALLOWED_ORIGINS.生产中没有回退。 - 秘密:
.env通过Environment/Docker Secrets注入的非承诺敏感变量。
版本列表
| 语言 | 支持的版本 |
|---|---|
| Python | 3.11,3.12 |
| Node.js(前端即将推出) | 20.x |
限制alpha
- 仅加密数据(目前不支持股票或外汇)。
- 基于教学启发式的人工智能合成,从不规定。
- 基本模式检测(通道、三角形、简单烛台)。
许可证
麻省理工学院
