import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
// https://www.npmjs.com/package/@modelcontextprotocol/sdk
import { z } from 'zod';
import { AppConfig } from './config/AppConfig.js';
import { ProjectRepository } from './repositories/ProjectRepository.js';
import { ProjectService } from './services/ProjectService.js';
import { WallpaperService } from './services/WallpaperService.js';
import { ProjectController } from './controllers/ProjectController.js';
import { WallpaperController } from './controllers/WallpaperController.js';
export type * from "./config/AppConfig";
export type * from "./controllers/ProjectController"
export type * from "./controllers/WallpaperController.ts"
export type * from "./models/Project.ts"
export type * from "./repositories/ProjectRepository.ts"
// 创建MCP服务器实例
const server = new McpServer({
name: AppConfig.SERVER_NAME,
version: AppConfig.SERVER_VERSION,
});
// 初始化依赖注入
const projectRepository = new ProjectRepository();
const projectService = new ProjectService(projectRepository);
const wallpaperService = new WallpaperService();
const projectController = new ProjectController(projectService);
const wallpaperController = new WallpaperController(wallpaperService);
// 注册项目查询工具
server.tool(
'get_project_info',
'根据项目名称查询项目基本信息,包括开始日期、简介、投资金额和当前进度',
{
projectName: z.string().describe('要查询的项目名称'),
},
async ({ projectName }) => {
return await projectController.getProjectInfo(projectName);
}
);
// 获取项目总数
server.tool(
'get_project_count',
'获取项目总数',
{},
async () => {
return projectController.getProjectCount();
}
);
// 获取全部项目
server.tool(
'get_project_all',
'获取全部项目',
{},
async () => {
return projectController.getAllProjects();
}
);
// 新增项目
server.tool(
'add_project',
'新增项目',
{
project: z.object({
name: z.string().describe('项目名称'),
description: z.string().describe('项目描述'),
startDate: z.string().describe('开始日期'),
investment: z.number().describe('投资金额'),
progress: z.number().describe('当前进度'),
}),
},
async ({ project }) => {
return await projectController.addProject(project);
}
);
// 随机获取壁纸工具
server.tool(
'get_random_wallpaper',
'从Bing壁纸获取随机壁纸,返回壁纸的URL、标题和描述信息',
{
resolution: z.string().optional().describe('壁纸分辨率,可选值:1920x1080, 3840x2160, 1366x768等,默认为1920x1080'),
market: z.string().optional().describe('地区市场,如zh-CN(中国), en-US(美国)等,默认为zh-CN'),
},
async ({ resolution = AppConfig.DEFAULT_WALLPAPER_RESOLUTION, market = AppConfig.DEFAULT_MARKET }) => {
return await wallpaperController.getRandomWallpaper(resolution, market);
}
);
// 启动服务器
async function main() {
try {
// 初始化项目数据
await projectRepository.initialize();
// 启动MCP服务器
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('MCP项目查询服务已启动,等待大模型调用...');
} catch (error) {
console.error('启动服务器时出错:', error);
process.exit(1);
}
}
main();