使用说明
MCP库存分析器-ts(STDIO)
一 MCP服务器 (Node 20+)展示股票分析工具。
设计目标:
- 仅AI评估 – 大语言模型(LLM)评估合并结果 时间序列 + 情感(分析) (无本地SMA数学)。
- N8N友好型 – 单变量环境水合,清理JSON输入输出。
- 可执行代码演示 – 可选工具以 POST(邮政服务/发布/帖子) 将结果发送到 n8n 的 webhook。
交通: STDIO(注:通常指的是“Standard Input/Output”,即标准输入/输出) (适用于n8n的MCP客户端节点)。运行时:Node.js版本≥20,TypeScript,纯ESM(NodeNext)。
快速入门
npm ci
npm run build
npx -y @bluebossa63/mcp-stock-analyzer-ts-stdio
环境设置(适合单变量用户)
使用且仅使用一个:
MCP_ENV=OPENAI_BASE_URL=https://api.openai.com,OPENAI_API_KEY=sk-...,OPENAI_MODEL=gpt-4o-miniMCP_ENV_JSON={"OPENAI_BASE_URL":"https://api.openai.com","OPENAI_API_KEY":"sk-...","OPENAI_MODEL":"gpt-4o-mini"}MCP_ENV_B64= 的 base64 编码:OPENAI_BASE_URL=https://api.openai.com OPENAI_API_KEY=sk-... OPENAI_MODEL=gpt-4o-mini
可选:
N8N_WEBHOOK_URL和N8N_AUTH_HEADER(例如。,x-api-key: abc123)。
工具目录
所有输出均为文本JSON格式 result.content[0].text。
获取图表
输入 { "symbol":"AAPL", "range":"1mo", "interval":"1d" }
输出 { "symbol":"AAPL","currency":"USD","points":[{"t":..., "o":...,"h":...,"l":...,"c":...,"v":...}] }
获取多日内的(多次)实时数据
输入 { "symbol":"NVDA" }
输出
{
"symbol":"NVDA",
"intraday": {
"1m": { "points":[...] }, // 1d/1m
"15m": { "points":[...] }, // 5d/15m
"60m": { "points":[...] } // 1mo/60m
}
}
获取新闻标题
输入 { "symbol":"NVDA", "max": 10 } → { "symbol":"NVDA", "titles":[...] }
定义情感(或情绪)
输入
{ "articles": ["Beats expectations", "Analyst warns of volatility"] }
输出
{ "sentiment":"positive","confidence":0.78,"reasoning":"..." }
使用AI进行评估 / 使用AI评估分数
输入
{
"symbol":"NVDA",
"intraday": {
"1m": { "points":[{"t":1710000000000,"c":100},{"t":1710000600000,"c":101}] },
"15m": { "points":[/* ... */] },
"60m": { "points":[/* ... */] }
},
"sentiment": { "sentiment":"positive","confidence": 0.7, "reasoning":"..." },
"aggregate": false,
"perTimeframeMaxPoints": 200,
"extraNotes": "Be conservative."
}
输出
{ "perTimeframe": { "1m": {"decision":"hold","reasoning":"..."}, "15m": {"decision":"buy","reasoning":"..."}, "60m": {"decision":"hold","reasoning":"..."} } }
从新闻中获取情感分析
输入 { "symbol":"NVDA", "max": 10 } → { "symbol":"NVDA", "titles":[...], "sentiment": {...} }
管道评估人工智能(或“用于管道评估的人工智能”)
输入 { "symbol":"NVDA", "maxNews":10, "aggregate":false, "perTimeframeMaxPoints":200 } → 与……的输出相同 evaluateWithAI。
发送到N8N(可执行文件)
输入 { "payload": {...}, "webhookUrl":"https://your/webhook", "authHeader":"x-api-key: abc123" }
输出 { "ok": true, "status": 200, "statusText": "OK", "body": "..." }
(环境回退: N8N_WEBHOOK_URL, N8N_AUTH_HEADER)
评估并发布(可执行程序)
运行 evaluateScoreWithAI 然后发布结果。
输入 = evaluateScoreWithAI 参数 + 可选 webhookUrl.
本地烟雾测试
情感:
OPENAI_BASE_URL=https://api.openai.com OPENAI_API_KEY=sk-... OPENAI_MODEL=gpt-4o-mini node --input-type=module -e "import('./dist/ai.js').then(async m => { const r = await m.defineSentimentFromTexts(['Strong demand','Macro risks']); console.log(r) })"
评估:
OPENAI_BASE_URL=https://api.openai.com OPENAI_API_KEY=sk-... OPENAI_MODEL=gpt-4o-mini node --input-type=module -e "import('./dist/ai.js').then(async m => {
const res = await m.evaluateWithAI({
symbol:'NVDA',
intraday: { '60m': { points: [ {t:1710000000000,c:100},{t:1710003600000,c:102},{t:1710007200000,c:101} ] } },
sentiment: { sentiment:'neutral', confidence:0.55 },
aggregate:false, perTimeframeMaxPoints:120
});
console.log(JSON.stringify(res,null,2));
})"
n8n布线模式
模块化 → 获取新闻标题 → 定义情感倾向 → 获取多时段日内数据 → 使用AI评估得分 → (可选) 发送到N8N
用于构建的辅助函数 toolParameters:
function parseMcp(item){const raw=item?.json?.result?.content?.[0]?.text;return raw?JSON.parse(raw):null;}
const intradayObj = parseMcp(itemsFromNode('MCP: fetchMultiIntraday')[0]).intraday;
const sentimentObj = parseMcp(itemsFromNode('MCP: defineSentiment')[0]);
const symbol = parseMcp(itemsFromNode('MCP: fetchMultiIntraday')[0]).symbol || "NVDA";
return [{ json: { toolParameters: JSON.stringify({ symbol, intraday: intradayObj, sentiment: sentimentObj, aggregate:false, perTimeframeMaxPoints:200 }) } }];
一次性(行动/尝试) → 管道评估AI → (可选) 发送到N8N
一体化(或“全合一”) → 评估并发布
有效的Yahoo范围/区间
1d→1m5d→15m(使用15米,而非10米)1mo→60m3mo+→1d/1wk/1mo
故障排除
fetch failed→ 选择性添加:NODE_OPTIONS=--dns-result-order=ipv4first- 公司代理(或代表):
HTTPS_PROXY,HTTP_PROXY,NO_PROXY - 公司CA:
NODE_EXTRA_CA_CERTS=/path/to/ca.pem
- 401 (OpenAI) → 缺失/乱码密钥;请与……核对
debug-echo-openai. - 环境变量解析 → 优先使用
MCP_ENV_JSON或者MCP_ENV_B64如果你的主机处理了空格。
版本发布与持续集成(CI)发布
- 服务器版本可以从(某处)同步
package.json通过JSON导入:import pkgJson from "../package.json" with { type: "json" }. - 看
.github/workflows/publish.yml用于基于标签的npm发布。