m8-codex-mcp 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{McpServer}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport}from"@modelcontextprotocol/sdk/server/stdio.js";import{z}from"zod";import{loadKnowledgeBase,getComponentDoc,getStandardDocs,getUtilDocs}from"./knowledge/index.js";import{generateModuleFiles}from"./tools/generate_module_structure.js";const server=new McpServer({name:"m8-generator-mcp",version:"1.0.0"}),knowledgeBase=loadKnowledgeBase();async function main(){const e=new StdioServerTransport;await server.connect(e),console.error("m8-generator-mcp server started")}server.tool("get_component_usage","获取 M8 UI 组件的详细用法、Props、Events 和示例代码。组件名格式如 em-button, em-form, em-field 等。",{component_name:z.string().describe("组件名称,如 em-button, em-form, em-field")},async({component_name:e})=>{const n=getComponentDoc(knowledgeBase,e);if(!n)return{content:[{type:"text",text:`未找到组件 "${e}" 的文档。\n\n可用组件列表:\n${knowledgeBase.components.map(e=>`- ${e.name}`).join("\n")}`}]};const t=getStandardDocs(knowledgeBase);return{content:[{type:"text",text:`# ${n.name} 组件用法\n\n${n.description}\n\n## Props\n\n${n.props}\n\n## Events\n\n${n.events}\n\n## 示例代码\n\n${n.examples.join("\n\n---\n\n")}\n\n---\n\n## M8 开发规范提醒\n\n${t}`}]}}),server.tool("generate_module_structure","为 M8 项目生成新页面/模块的标准目录结构和文件模板,遵循 M8 开发规范。",{module_name:z.string().describe("模块名称(小写下划线格式,如 user_list)"),page_name:z.string().describe("页面名称(小写下划线格式,如 index)"),vue_version:z.enum(["2","3"]).optional().describe("Vue 版本,2 或 3,默认为 3"),author:z.string().optional().describe("作者名称"),description:z.string().optional().describe("页面描述")},async({module_name:e,page_name:n,vue_version:t,author:o,description:r})=>{const s=generateModuleFiles({moduleName:e,pageName:n,vueVersion:t||"3",author:o||"developer",description:r||"页面功能描述"});let a=`# 模块 "${e}" 结构生成完成\n\n`;a+=`## 目录结构\n\n\`\`\`\nsrc/pages/${e}/\n`;for(const e of s)a+=`├── ${e.path}\n`;a+="```\n\n",a+="## 文件内容\n\n";for(const e of s){const n=e.path.split(".").pop()||"";a+=`### ${e.path}\n\n\`\`\`${n}\n${e.content}\n\`\`\`\n\n`}return a+=`---\n\n## M8 开发规范提醒\n\n${getStandardDocs(knowledgeBase)}`,{content:[{type:"text",text:a}]}}),server.tool("search_utils","搜索 M8 框架的 Util 工具函数用法,如 Util.ajax, Util.upload, Util.string 等。",{keyword:z.string().describe("搜索关键词,如 ajax, upload, string")},async({keyword:e})=>{const n=getUtilDocs(knowledgeBase,e);return n?{content:[{type:"text",text:n}]}:{content:[{type:"text",text:`未找到与 "${e}" 相关的 Util 工具函数。\n\n可用的工具函数文档:\n- Ajax 与文件上传 (ajax, upload)\n- 工具函数库 (string, os 等)`}]}}),main().catch(console.error);
2
+ import{McpServer}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport}from"@modelcontextprotocol/sdk/server/stdio.js";import{z}from"zod";import{loadKnowledgeBase,getComponentDoc,getStandardDocs,getUtilDocs,getStandardRules,getStandardCategories}from"./knowledge/index.js";import{generateModuleFiles}from"./tools/generate_module_structure.js";const server=new McpServer({name:"m8-generator-mcp",version:"1.0.0"}),knowledgeBase=loadKnowledgeBase();async function main(){const e=new StdioServerTransport;await server.connect(e),console.error("m8-generator-mcp server started")}server.tool("get_component_usage","获取 M8 UI 组件的详细用法、Props、Events 和示例代码。组件名格式如 em-button, em-form, em-field 等。",{component_name:z.string().describe("组件名称,如 em-button, em-form, em-field")},async({component_name:e})=>{const n=getComponentDoc(knowledgeBase,e);if(!n)return{content:[{type:"text",text:`未找到组件 "${e}" 的文档。\n\n可用组件列表:\n${knowledgeBase.components.map(e=>`- ${e.name}`).join("\n")}`}]};const t=getStandardDocs(knowledgeBase);return{content:[{type:"text",text:`# ${n.name} 组件用法\n\n${n.description}\n\n## Props\n\n${n.props}\n\n## Events\n\n${n.events}\n\n## 示例代码\n\n${n.examples.join("\n\n---\n\n")}\n\n---\n\n## M8 开发规范提醒\n\n${t}`}]}}),server.tool("generate_module_structure","为 M8 项目生成新页面/模块的标准目录结构和文件模板,遵循 M8 开发规范。",{module_name:z.string().describe("模块名称(小写下划线格式,如 user_list)"),page_name:z.string().describe("页面名称(小写下划线格式,如 index)"),vue_version:z.enum(["2","3"]).optional().describe("Vue 版本,2 或 3,默认为 3"),author:z.string().optional().describe("作者名称"),description:z.string().optional().describe("页面描述")},async({module_name:e,page_name:n,vue_version:t,author:o,description:r})=>{const s=generateModuleFiles({moduleName:e,pageName:n,vueVersion:t||"3",author:o||"developer",description:r||"页面功能描述"});let a=`# 模块 "${e}" 结构生成完成\n\n`;a+=`## 目录结构\n\n\`\`\`\nsrc/pages/${e}/\n`;for(const e of s)a+=`├── ${e.path}\n`;a+="```\n\n",a+="## 文件内容\n\n";for(const e of s){const n=e.path.split(".").pop()||"";a+=`### ${e.path}\n\n\`\`\`${n}\n${e.content}\n\`\`\`\n\n`}return a+=`---\n\n## M8 开发规范提醒\n\n${getStandardDocs(knowledgeBase)}`,{content:[{type:"text",text:a}]}}),server.tool("search_utils","搜索 M8 框架的 Util 工具函数用法,如 Util.ajax, Util.upload, Util.string 等。",{keyword:z.string().describe("搜索关键词,如 ajax, upload, string")},async({keyword:e})=>{const n=getUtilDocs(knowledgeBase,e);return n?{content:[{type:"text",text:n}]}:{content:[{type:"text",text:`未找到与 "${e}" 相关的 Util 工具函数。\n\n可用的工具函数文档:\n- Ajax 与文件上传 (ajax, upload)\n- 工具函数库 (string, os 等)`}]}}),server.tool("get_standard_rules","获取 M8 框架的开发规范文档,包括项目规范、Vue规范、CSS规范、API规范、TypeScript规范、Mock规范、路由规范等。",{category:z.string().describe("规范类别:project(项目)、vue、css、api、typescript、mock、router")},async({category:e})=>{const n=getStandardRules(knowledgeBase,e);if(!n){return{content:[{type:"text",text:`未找到 "${e}" 相关规范。\n\n可用的规范类别:\n${getStandardCategories().map(e=>`- ${e}`).join("\n")}`}]}}return{content:[{type:"text",text:n}]}}),main().catch(console.error);
@@ -15,6 +15,7 @@ export interface ComponentDoc {
15
15
  export interface KnowledgeBase {
16
16
  components: ComponentDoc[];
17
17
  standards: string;
18
+ standardDocs: Map<string, string>;
18
19
  utilDocs: Map<string, string>;
19
20
  }
20
21
  /**
@@ -33,4 +34,12 @@ export declare function getStandardDocs(kb: KnowledgeBase): string;
33
34
  * 获取 Util 工具文档
34
35
  */
35
36
  export declare function getUtilDocs(kb: KnowledgeBase, keyword: string): string | undefined;
37
+ /**
38
+ * 获取规范文档(按关键词检索)
39
+ */
40
+ export declare function getStandardRules(kb: KnowledgeBase, category: string): string | undefined;
41
+ /**
42
+ * 获取所有规范类别
43
+ */
44
+ export declare function getStandardCategories(): string[];
36
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAUjD;AAyHD;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQlG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,CAiBzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWlF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC1B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAWjD;AA6KD;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQlG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,CAiBzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBxF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAUhD"}
@@ -1 +1 @@
1
- import*as fs from"fs";import*as path from"path";import{fileURLToPath}from"url";const __filename=fileURLToPath(import.meta.url),__dirname=path.dirname(__filename),KNOWLEDGE_ROOT=path.resolve(__dirname,"../../data");export function loadKnowledgeBase(){return{components:loadComponentDocs(),standards:loadStandardDocs(),utilDocs:loadUtilDocs()}}function loadComponentDocs(){const n=path.join(KNOWLEDGE_ROOT,"m8mpdoc","UI组件库"),o=[];if(!fs.existsSync(n))return console.error(`Components directory not found: ${n}`),o;const t=fs.readdirSync(n).filter(n=>n.endsWith(".md"));for(const e of t)try{const t=path.join(n,e),r=parseComponentDoc(e,fs.readFileSync(t,"utf-8"));r&&o.push(r)}catch(n){console.error(`Failed to parse component doc: ${e}`,n)}return o}function parseComponentDoc(n,o){const t=n.match(/\d+-(\w+)/);if(!t)return null;const e=`em-${t[1]}`,r=o.match(/### 介绍\s*\n+([\s\S]*?)(?=\n###|\n##|$)/),s=r?r[1].trim():"",a=o.match(/#### Props\s*\n+([\s\S]*?)(?=\n####|\n###|\n##|$)/),c=a?a[1].trim():"无 Props 文档",i=o.match(/#### Events\s*\n+([\s\S]*?)(?=\n####|\n###|\n##|$)/),d=i?i[1].trim():"无 Events 文档",l=[],m=/```(html|vue|js|javascript)\n([\s\S]*?)```/g;let f;for(;null!==(f=m.exec(o));)l.push(`\`\`\`${f[1]}\n${f[2]}\`\`\``);return{name:e,filename:n,description:s,props:c,events:d,examples:l.slice(0,5),rawContent:o}}function loadStandardDocs(){const n=path.join(KNOWLEDGE_ROOT,"standards","_index.md");if(!fs.existsSync(n))return console.error(`Standards index not found: ${n}`),"";try{return fs.readFileSync(n,"utf-8")}catch(n){return console.error("Failed to load standards docs",n),""}}function loadUtilDocs(){const n=path.join(KNOWLEDGE_ROOT,"m8mpdoc","核心通用Util工具库"),o=new Map;if(!fs.existsSync(n))return console.error(`Util directory not found: ${n}`),o;const t=fs.readdirSync(n).filter(n=>n.endsWith(".md"));for(const e of t)try{const t=path.join(n,e),r=fs.readFileSync(t,"utf-8"),s=e.replace(".md","").toLowerCase();o.set(s,r)}catch(n){console.error(`Failed to load util doc: ${e}`,n)}return o}export function getComponentDoc(n,o){let t=o.toLowerCase().trim();return t.startsWith("em-")||(t=`em-${t}`),n.components.find(n=>n.name===t)}export function getStandardDocs(n){return'\n### 关键规范要点\n\n1. **全局变量**:直接使用 `Config`、`Util`、`ejs`,禁止 import\n2. **样式分离**:禁止内联 CSS,必须使用 `@import "./css/[module_name].scss";`\n3. **API 调用**:使用 `Util.ajax` 进行数据请求\n4. **交互反馈**:使用 `ejs.ui.toast`、`ejs.ui.confirm` 替代原生 alert\n5. **命名规范**:\n - 页面文件:小写+下划线 (如 `user_list.vue`)\n - 组件:PascalCase (如 `UserCard.vue`)\n - CSS 类名:BEM 命名 (如 `.user-card__title`)\n6. **注释规范**:Vue 文件必须包含头部注释块\n7. **readonly 输入框**:必须添加 `is-link` + `clickable`\n'}export function getUtilDocs(n,o){const t=o.toLowerCase();for(const[o,e]of n.utilDocs)if(o.includes(t)||e.toLowerCase().includes(t))return e}
1
+ import*as fs from"fs";import*as path from"path";import{fileURLToPath}from"url";const __filename=fileURLToPath(import.meta.url),__dirname=path.dirname(__filename),KNOWLEDGE_ROOT=path.resolve(__dirname,"../../data");export function loadKnowledgeBase(){const t=loadComponentDocs(),{summary:e,docs:o}=loadAllStandardDocs();return{components:t,standards:e,standardDocs:o,utilDocs:loadUtilDocs()}}function loadComponentDocs(){const t=path.join(KNOWLEDGE_ROOT,"m8mpdoc","UI组件库"),e=[];if(!fs.existsSync(t))return console.error(`Components directory not found: ${t}`),e;const o=fs.readdirSync(t).filter(t=>t.endsWith(".md"));for(const n of o)try{const o=path.join(t,n),s=parseComponentDoc(n,fs.readFileSync(o,"utf-8"));s&&e.push(s)}catch(t){console.error(`Failed to parse component doc: ${n}`,t)}return e}function parseComponentDoc(t,e){const o=t.match(/\d+-(\w+)/);if(!o)return null;const n=`em-${o[1]}`,s=e.match(/### 介绍\s*\n+([\s\S]*?)(?=\n###|\n##|$)/),r=s?s[1].trim():"",a=e.match(/#### Props\s*\n+([\s\S]*?)(?=\n####|\n###|\n##|$)/),c=a?a[1].trim():"无 Props 文档",i=e.match(/#### Events\s*\n+([\s\S]*?)(?=\n####|\n###|\n##|$)/),d=i?i[1].trim():"无 Events 文档",l=[],f=/```(html|vue|js|javascript)\n([\s\S]*?)```/g;let p;for(;null!==(p=f.exec(e));)l.push(`\`\`\`${p[1]}\n${p[2]}\`\`\``);return{name:n,filename:t,description:r,props:c,events:d,examples:l.slice(0,5),rawContent:e}}function loadAllStandardDocs(){const t=path.join(KNOWLEDGE_ROOT,"standards"),e=new Map;let o="";const n=path.join(t,"_index.md");if(fs.existsSync(n))try{o=fs.readFileSync(n,"utf-8")}catch(t){console.error("Failed to load standards index",t)}const s=[{dir:"01-project",keys:["project","naming","structure","version"]},{dir:"02-vue",keys:["vue","component","basic","performance","state"]},{dir:"03-css",keys:["css","scss","style","bem"]},{dir:"04-api",keys:["api","ajax","ejs","util"]},{dir:"05-typescript",keys:["typescript","ts","type"]},{dir:"06-mock",keys:["mock","test"]},{dir:"07-router",keys:["router","route","navigation"]}];for(const o of s){const n=path.join(t,o.dir);if(!fs.existsSync(n))continue;const s=fs.readdirSync(n).filter(t=>t.endsWith(".md"));let r="";for(const t of s)try{const e=path.join(n,t);r+=`\n\n---\n\n${fs.readFileSync(e,"utf-8")}`}catch(e){console.error(`Failed to load standard doc: ${o.dir}/${t}`,e)}if(r)for(const t of o.keys)e.set(t,r)}return{summary:o,docs:e}}function loadUtilDocs(){const t=new Map,e=path.join(KNOWLEDGE_ROOT,"m8mpdoc","核心通用Util工具库");if(fs.existsSync(e)){const o=fs.readdirSync(e).filter(t=>t.endsWith(".md"));for(const n of o)try{const o=path.join(e,n),s=fs.readFileSync(o,"utf-8"),r=n.replace(".md","").toLowerCase();t.set(r,s)}catch(t){console.error(`Failed to load util doc: ${n}`,t)}}else console.error(`Util directory not found: ${e}`);const o=path.join(KNOWLEDGE_ROOT,"standards","04-api","util.md");if(fs.existsSync(o))try{const e=fs.readFileSync(o,"utf-8");t.set("string",e),t.set("validate",e),t.set("mobile",e),t.set("email",e),t.set("idcard",e)}catch(t){console.error("Failed to load api util doc",t)}return t}export function getComponentDoc(t,e){let o=e.toLowerCase().trim();return o.startsWith("em-")||(o=`em-${o}`),t.components.find(t=>t.name===o)}export function getStandardDocs(t){return'\n### 关键规范要点\n\n1. **全局变量**:直接使用 `Config`、`Util`、`ejs`,禁止 import\n2. **样式分离**:禁止内联 CSS,必须使用 `@import "./css/[module_name].scss";`\n3. **API 调用**:使用 `Util.ajax` 进行数据请求\n4. **交互反馈**:使用 `ejs.ui.toast`、`ejs.ui.confirm` 替代原生 alert\n5. **命名规范**:\n - 页面文件:小写+下划线 (如 `user_list.vue`)\n - 组件:PascalCase (如 `UserCard.vue`)\n - CSS 类名:BEM 命名 (如 `.user-card__title`)\n6. **注释规范**:Vue 文件必须包含头部注释块\n7. **readonly 输入框**:必须添加 `is-link` + `clickable`\n'}export function getUtilDocs(t,e){const o=e.toLowerCase();for(const[e,n]of t.utilDocs)if(e.includes(o)||n.toLowerCase().includes(o))return n}export function getStandardRules(t,e){const o=e.toLowerCase();if(t.standardDocs.has(o))return t.standardDocs.get(o);for(const[e,n]of t.standardDocs)if(e.includes(o)||o.includes(e))return n}export function getStandardCategories(){return["project - 项目规范(命名、结构、版本检测)","vue - Vue 开发规范(基础、组件、性能、状态管理)","css - CSS/SCSS 规范(BEM命名、样式分离)","api - API 规范(ajax、ejs接口、util工具)","typescript - TypeScript 规范","mock - Mock 数据规范","router - 路由规范"]}
@@ -1 +1 @@
1
- {"version":3,"file":"vue3.d.ts","sourceRoot":"","sources":["../../src/templates/vue3.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,UAAU,eAAe;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAuErE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAmBhF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAuBpG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkCjF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAiChF"}
1
+ {"version":3,"file":"vue3.d.ts","sourceRoot":"","sources":["../../src/templates/vue3.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,UAAU,eAAe;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAuErE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAmBhF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAuBpG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkCjF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAiChF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "m8-codex-mcp",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "M8 框架智能辅助工具 - 基于 MCP 协议提供组件用法查询和模块结构生成",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -36,7 +36,7 @@
36
36
  "node": ">=18"
37
37
  },
38
38
  "dependencies": {
39
- "@modelcontextprotocol/sdk": "^1.12.1",
39
+ "@modelcontextprotocol/sdk": "^1.25.2",
40
40
  "zod": "^3.24.2"
41
41
  },
42
42
  "devDependencies": {