mcp-invest-assistant
Version:
92 lines • 3.9 kB
JavaScript
import { z } from "zod";
import logger from "../utils/logger.js";
import { MARKET, FUND_FLOW_TYPE } from "../config/index.js";
import getCompanyFundFlow from '../services/getCompanyFundFlow.js';
import allCompanyBaseInfo from '../resource/allCompanyBaseInfo.js';
/**
* 获取公司资金流向工具
*/
export function registerGetCompanyFundFlow(server) {
server.tool('mcp_get_company_fund_flow', '获取公司资金流向数据', {
'stockCode': z.string().describe('股票代码,必传,从资源中选择,保留原始stockCode'),
'marketCn': z.string().describe('市场,必传,可选值:A股、港股,注意这里不支持获取美股公司数据'),
'startDate': z.string().describe('信息起始时间。用于获取一定时间范围内的数据。开始和结束的时间间隔不超过10年,必传,String: YYYY-MM-DD(北京时间)'),
'endDate': z.string().describe('信息结束时间。用于获取一定时间范围内的数据。默认值是上周一,可选,String: YYYY-MM-DD(北京时间)'),
'fundFlowType': z.string().describe('资金流向类型,必传,可选值:互联互通、融资融券,港股仅支持互联互通数据'),
'limit': z.number().optional().describe('返回最近数据的数量。该参数会直接透传给API接口,非必传,不传时取API接口默认值,但是可能会存在大量数据,尽可能传递你需要的数据进行限制'),
}, async ({ marketCn, stockCode, startDate, endDate, fundFlowType, limit }) => {
const token = process.env.TOKEN || '';
if (!token) {
return {
content: [
{
type: "text",
text: "参数异常:必须要传入token"
}
]
};
}
if (!(marketCn in MARKET)) {
return {
content: [
{
type: "text",
text: "参数异常:必须要传入市场类型"
}
]
};
}
if (!(fundFlowType in FUND_FLOW_TYPE)) {
return {
content: [
{
type: "text",
text: "参数异常:资金流向类型不支持,可选值:互联互通、融资融券"
}
]
};
}
if (fundFlowType === '融资融券' && marketCn === '港股') {
return {
content: [
{
type: "text",
text: "参数异常:港股不支持融资融券数据"
}
]
};
}
const companyInfo = allCompanyBaseInfo.find(item => item.marketCn === marketCn);
const stockInfo = companyInfo?.data.find(item => +item.stockCode === +stockCode);
logger.info(`stockInfo: ${JSON.stringify(stockInfo)}`);
if (!stockInfo) {
return {
content: [
{
type: "text",
text: "参数异常:传入的股票代码不存在,请重新确认"
}
]
};
}
const resBody = await getCompanyFundFlow({
stockCode: stockInfo.stockCode,
market: MARKET[marketCn],
startDate,
endDate,
fundFlowType: FUND_FLOW_TYPE[fundFlowType],
limit,
token
});
const resData = JSON.stringify(resBody);
return {
content: [
{
type: "text",
text: resData
}
]
};
});
}
//# sourceMappingURL=getCompanyFundFlow.js.map