rt-prompt-mcp
Version:
MCP Server for prompt engineering suggestions
195 lines (187 loc) • 7.06 kB
JavaScript
#!/usr/bin/env node
/** @format */
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// 导入我们的提示词补充服务
import { getBackendPrompts, getFrontendPrompts, getGeneralPrompts, getUiDesignPrompts, getRongtongBackendCrudSuggestions } from "./promptSuggestions.js";
// 导入飞书文档获取函数
import { getContentByName } from "./feishu.js";
// 导入coding内容获取函数
import { getCodingContent } from "./coding.js";
// 创建MCP服务器实例
const server = new McpServer({
name: "rt-prompt-mcp",
version: "1.0.0",
description: "MCP Server for prompt engineering suggestions",
});
// 修改获取后端相关提示词的工具
server.tool("get_backend_suggestions", {
context: z.string().optional().describe("当前上下文或任务描述"),
databaseType: z.string().optional().describe("数据库类型,如MySQL、PostgreSQL等"),
language: z.string().optional().describe("编程语言,如Java、Python等"),
}, async ({ context, databaseType, language }) => {
const suggestions = getBackendPrompts(context, databaseType, language);
return {
content: [
{
type: "text",
text: suggestions,
},
],
};
});
// 修改获取前端相关提示词的工具
server.tool("get_frontend_suggestions", {
context: z.string().optional().describe("当前上下文或任务描述"),
framework: z.string().optional().describe("前端框架,如React、Vue等"),
deviceType: z.string().optional().describe("设备类型,如移动端、桌面端等"),
}, async ({ context, framework, deviceType }) => {
const suggestions = getFrontendPrompts(context, framework, deviceType);
return {
content: [
{
type: "text",
text: suggestions,
},
],
};
});
// 修改获取通用提示词补充的工具
server.tool("get_general_suggestions", {
context: z.string().optional().describe("当前上下文或任务描述"),
taskType: z.string().optional().describe("任务类型,如代码生成、文档生成等"),
}, async ({ context, taskType }) => {
const suggestions = getGeneralPrompts(context, taskType);
return {
content: [
{
type: "text",
text: suggestions,
},
],
};
});
// 添加获取UI设计图转化的提示词补充工具
server.tool("get_ui_design_suggestions", {
context: z.string().optional().describe("当前上下文或任务描述"),
designType: z.string().optional().describe("设计类型,如线框图、高保真原型图等"),
platform: z.string().optional().describe("平台类型,如Web、iOS、Android等"),
}, async ({ context, designType, platform }, extra) => {
const suggestions = await getUiDesignPrompts(context, designType, platform);
return {
content: [
{
type: "text",
text: suggestions,
},
],
};
});
// 新增:注册荣通后端 CRUD 工具
server.tool("get_rt_crud_suggestions", {
base_path: z
.string()
.optional()
.describe("可选的 Java/Kotlin 根包路径,例如 'com.example.myapp' 或 'cn.teamy'。如果提供,将替换提示中默认的 'cn.teamy'。请使用点分隔。"),
}, async ({ base_path }) => {
const suggestionsArray = getRongtongBackendCrudSuggestions(base_path);
return {
content: [
{
type: "text",
text: suggestionsArray.length > 0 ? suggestionsArray[0] : "",
},
],
};
});
// 新增:从飞书文档获取提示词工具
server.tool("get_feishu_prompt", {
prompt_name: z.string().describe("提示词名称,如'UI转化提示词'、'AI生成UI-3D风格'等"),
}, async ({ prompt_name }) => {
try {
// 调用飞书API获取对应名称的内容
const content = await getContentByName(prompt_name);
// 检查内容是否是coding.net链接
if (content && content.trim().includes("coding.net")) {
// 使用正则表达式提取链接
const urlMatch = content.match(/(https?:\/\/[^\s]+coding\.net[^\s]+)/i);
if (urlMatch && urlMatch[1]) {
// 使用getCodingContent获取链接内容
const codingContent = await getCodingContent(urlMatch[1]);
return {
content: [
{
type: "text",
text: codingContent || `无法从链接获取内容: ${urlMatch[1]}`,
},
],
};
}
}
return {
content: [
{
type: "text",
text: content || `未找到名为"${prompt_name}"的提示词`,
},
],
};
}
catch (error) {
return {
content: [
{
type: "text",
text: `获取提示词失败: ${error instanceof Error ? error.message : String(error)}`,
},
],
};
}
});
// 资源: 提供关于如何使用此服务的信息
server.resource("info", "info://usage", async (uri) => ({
contents: [
{
uri: uri.href,
text: `# RT-Prompt-MCP 使用指南
本服务提供专业的提示词补充功能,可以帮助LLM生成更符合要求的内容。
## 可用工具
1. get_backend_suggestions: 获取后端开发相关的提示词补充
2. get_frontend_suggestions: 获取前端开发相关的提示词补充
3. get_general_suggestions: 获取通用场景的提示词补充
4. get_ui_design_suggestions: 获取UI设计图转化相关的提示词补充
5. get_rt_crud_suggestions: 获取荣通后端标准 CRUD 开发规范提示词
6. get_feishu_prompt: 从飞书文档获取指定名称的提示词
## 使用示例
例如,当您需要生成数据库表结构时,可以使用:
\`\`\`
使用 get_backend_suggestions 工具,并提供以下参数:
- context: "创建用户和订单的数据库表结构"
- databaseType: "MySQL"
- language: "SQL"
\`\`\`
例如,当您需要将UI设计图转化为代码时,可以使用:
\`\`\`
使用 get_ui_design_suggestions 工具,并提供以下参数:
- context: "将设计图转换为响应式界面"
- designType: "高保真原型图"
- platform: "Web"
\`\`\`
例如,当您需要获取飞书文档中的特定提示词时,可以使用:
\`\`\`
使用 get_feishu_prompt 工具,并提供以下参数:
- prompt_name: "UI转化提示词"
\`\`\`
`,
},
],
}));
// 启动服务器
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
}
main().catch((error) => {
process.exit(1);
});