Skip to main content
Glama

MCP Stock Assistant

index.ts3.89 kB
#!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import { searchStock, fetchStockData, fetchStockHistory, fetchMarketIndex } from "./api.js"; import { formatStockInfo, formatHistoryData, formatIndexInfo } from "./formatters.js"; // Create server instance const server = new McpServer({ name: "stock-assistant", version: "1.0.0", }); // Register stock info tool server.tool( "get-stock-info", "获取单个股票的实时当前信息,包括当前价格、涨跌幅、成交量等实时数据", { stock_code: z .string() .describe("股票代码或名称 (例如: 600519 或 贵州茅台)"), }, async ({ stock_code }) => { const stockData = await fetchStockData(stock_code); if (!stockData) { return { content: [ { type: "text", text: `无法获取股票 ${stock_code} 的数据。请检查输入是否正确。`, }, ], }; } return { content: [ { type: "text", text: formatStockInfo(stockData), }, ], }; } ); // Register stock history tool server.tool( "get-stock-history", "获取单个股票的历史数据、过去价格、K线数据,支持日K、周K、月K线,用于分析股票过去的表现", { stock_code: z .string() .describe("股票代码或名称 (例如: 600519 或 贵州茅台)"), period: z .enum(["1d", "1w", "1m"]) .default("1d") .describe("时间周期: 1d=日K线, 1w=周K线, 1m=月K线"), days: z .number() .min(1) .max(500) .default(30) .describe("获取天数 (1-500天)"), }, async ({ stock_code, period, days }) => { // Convert period to API format const periodMap = { "1d": "101", "1w": "102", "1m": "103" }; const apiPeriod = periodMap[period]; const historyData = await fetchStockHistory(stock_code, apiPeriod, days); if (!historyData || historyData.length === 0) { return { content: [ { type: "text", text: `无法获取股票 ${stock_code} 的历史数据。请检查输入是否正确。`, }, ], }; } // Get stock name for display let stockName = stock_code; if (!stock_code.match(/^\d{6}$/)) { const searchResult = await searchStock(stock_code); if (searchResult) { stockName = `${searchResult[1]}(${searchResult[0]})`; } } else { // Try to get name from current data const currentData = await fetchStockData(stock_code); if (currentData) { stockName = `${currentData.name}(${currentData.code})`; } } return { content: [ { type: "text", text: formatHistoryData(historyData, stockName), }, ], }; } ); // Register market index tool server.tool( "get-market-index", "获取大盘指数概览信息,包括上证指数和深证成指等主要指数的实时数据", {}, async () => { const indexData = await fetchMarketIndex(); if (!indexData || indexData.length === 0) { return { content: [ { type: "text", text: "无法获取大盘指数数据,请稍后重试。", }, ], }; } return { content: [ { type: "text", text: formatIndexInfo(indexData), }, ], }; } ); // Start the server async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error("Stock Assistant MCP Server running on stdio"); } main().catch((error) => { console.error("Fatal error in main():", error); process.exit(1); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/qqzhangyanhua/mcp-stock'

If you have feedback or need assistance with the MCP directory API, please join our Discord server