关于 MetaEngine
MetaEngine 是一个 MCP 服务,可根据 JSON 配方、类型图和 API 模式生成相关源文件,面向构建模型或类型化客户端的开发者。它通过类型引用关联生成内容,并支持 11 种语言。
主要功能
- 01从精简 JSON 配方生成文件
- 02在单次生成中解析关联类型
- 03根据 OpenAPI、GraphQL、Protobuf 和 SQL 生成
- 04以 11 种编程语言生成模型
- 05为列出的框架生成类型化客户端
- 06预览生成结果或在本地写入文件
适用场景
- 01根据类型图创建关联模型文件
- 02从 API 模式生成类型化客户端
- 03在配方中复用模板和本地 JSON 输入
MCP 相关
stdio MCP 服务提供配方和类型图生成、基于模式的客户端生成及本地规格文件读取工具。它将展开后的生成数据发送到托管的 MetaEngine API,由该 API 返回源文件。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
8收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| enums | array | 否 | 枚举定义 |
| dryRun | boolean | 否 | 预览模式——返回生成的代码,但不写入磁盘文件。为 true 时,响应中会返回文件内容供检查。 |
| classes | array | 否 | 类定义(普通类和泛型类模板) |
| language | enum | 是 | 目标编程语言typescript | python | go | csharp | java | kotlin | groovy | scala | swift | php | rust |
| arrayTypes | array | 否 | 数组类型定义——创建 IArrayType 引用(不生成文件)。可用于可复用的数组定义。 |
| initialize | boolean | 否 | 是否使用默认值初始化属性 |
| interfaces | array | 否 | 接口定义(普通接口和泛型接口模板) |
| outputPath | string | 否 | 写入文件的输出目录路径。默认为当前目录。 |
| customFiles | array | 否 | 自定义文件(实用工具文件、类型别名、barrel 导出)——生成不带类包装的文件。非常适合类型别名和实用函数。 |
| packageName | string | 否 | 生成代码的包/模块/命名空间名称。默认值因语言而异:Go='github.com/metaengine/demo'、Java/Kotlin/Groovy='com.metaengine.generated'。对于 C#:省略或留空时,不会生成命名空间声明(适合 GlobalUsings)。 |
| skipExisting | boolean | 否 | 跳过已存在的文件(适用于存根模式)。为 true 时,仅创建新文件。 |
| dictionaryTypes | array | 否 | 字典类型定义——创建 IDictionaryType 引用(不生成文件)。支持键/值为基本类型或自定义类型的全部 4 种组合。 |
| typeScriptOptions | object | 否 | 仅适用于 TypeScript 的渲染选项。省略此选项可保留旧版无扩展名的相对导入。 |
| typeScriptOptions.relativeImportExtension | enum | 否 | Node16/NodeNext ESM 源码请使用 'js':生成的 .ts 文件会使用运行时 .js 说明符导入相对模块。'none' 会保留无扩展名导入。none | js |
| concreteGenericClasses | array | 否 | 具体泛型实现(Repository<User>)——创建内联类型引用,不生成文件 |
| concreteGenericInterfaces | array | 否 | 具体泛型接口实现(IRepository<User>)——创建内联类型引用,不生成文件 |
| skipEnumMembersValidation | boolean | 否 | 跳过生成引擎中的枚举成员验证。 |
详细介绍
MetaEngine MCP 服务
通过 MCP 客户端,根据类型图、精简的 JSON 配方或 API 架构生成相关源文件。
MetaEngine 将结构化类、接口、枚举、集合和泛型,与 customCode 中提供的目标语言代码相结合。显式引用将这些代码连接到同一个类型图,因此生成器可以解析批次中的名称和导入。你可以用它生成模型、服务、适配器或其他你所描述的结构;此格式不会规定应用架构。
安装
需要 Node.js 18 或更高版本。将此服务添加到 MCP 客户端的配置中:
{
"mcpServers": {
"metaengine": {
"command": "npx",
"args": ["-y", "@metaengine/[email protected]"]
}
}
}
对于 Claude Code:
claude mcp add metaengine -- npx -y @metaengine/[email protected]
托管服务无需 API 密钥或账户。支持 stdio 的 MCP 客户端包括 Claude Code、Claude Desktop、Cursor、Cline 等。
从配方开始
使用以下参数调用 generate_from_recipe:
{
"recipe": {
"recipeVersion": 1,
"language": "typescript",
"typeScriptOptions": { "relativeImportExtension": "js" },
"classes": [
{ "name": "Customer", "id": "customer", "properties": { "id": "string", "name": "string" } },
{ "name": "Order", "properties": { "customer": { "ref": "customer" }, "total": "number", "note?": "string" } }
]
},
"outputPath": "src/models"
}
本地 MCP 服务会将配方扩展为现有的生成负载,将该负载发送到 MetaEngine API,并写入返回的文件。如果结构重复,可以添加命名模板和参数行。现有的 customCode、templateRefs、导入、装饰器、继承和泛型定义仍可使用。
可以通过 {"recipeFilePath":"specs/models.recipe.json"} 调用受版本控制的配方。在工具调用中读取文件可避免重复发送其内容。不过,文件仍需编写或维护。
工具
| 工具 | 用途 |
|---|---|
generate_from_recipe | 将精简的 JSON 字段、命名模板和本地 JSON 输入行扩展为现有类型图,然后生成文件。 |
generate_code | 根据完整的原生 JSON 类型图生成代码,包括带显式引用的任意目标语言代码。 |
load_spec_from_file | 从本地 JSON 文件读取原生 generate_code 负载。 |
generate_openapi | 根据内联提供或通过 URL 提供的 OpenAPI 文档生成类型化客户端。 |
generate_graphql | 根据 GraphQL SDL 生成类型化客户端,并可选择使用命名片段。 |
generate_protobuf | 根据 Protocol Buffers 定义生成类型化客户端。 |
generate_sql | 根据 SQL DDL 生成模型类型。 |
metaengine_initialize | 为助手加载生成规则和语言说明。 |
类型和模型生成支持 TypeScript、Python、Go、C#、Java、Kotlin、Groovy、Scala、Swift、PHP 和 Rust。客户端生成面向 Angular、React、TypeScript Fetch、Go net/http、Java Spring、Python httpx、C# HttpClient、Kotlin Ktor、Rust Reqwest 和 Swift URLSession。
generate_code、load_spec_from_file 和 generate_from_recipe 共享生成和文件写入行为:
outputPath用于选择本地输出目录;默认使用 MCP 服务的工作目录。skipExisting默认为true。将其设为false可覆盖生成的文件。dryRun: true会返回生成的文件内容,但不会写入文件。生成过程仍会调用托管 API。- 相关类型引用会在一个批次内解析。请在该次调用中包含完整类型图。
- 托管服务的限制是每个生成请求最多计数 250 个类型。具体计数方式见配方指南。
对于 Node16/NodeNext TypeScript ESM,请使用 typeScriptOptions: {"relativeImportExtension":"js"}。其他 TypeScript 输出默认保留不带扩展名的相对导入。
配方适用场景
字段映射可省去重复的属性元数据。模板只需描述一次重复结构,并绑定明确的参数值。本地 JSON 输入可以从你已维护的文件中提供这些值。适配器不会执行配方中的 JavaScript。
节省效果取决于重复内容的多少、所选模型和分词器,以及周边的 Agent 工作流。自定义业务逻辑仍需编写。一份已记录的开发测试样例对比了包含 59 个接口的配方及其展开后的负载;它衡量的是 JSON 字节数,而非模型词元数,也不保证使用限额。
精简格式为常见声明保留了一条易读的路径,同时支持使用现有原生字段编写高级代码。原生类型表达式和 customCode 仍针对各自的目标语言。请在项目中审查并编译生成的代码,包括其依赖项和编译器设置。
隐私与执行
本地 MCP 服务通过 stdio 运行,负责展开配方、读取声明的本地文件,以及写入生成的文件。托管的 MetaEngine API 会对展开后的生成负载进行临时处理,并返回源文件。
服务不会自动扫描或上传现有项目源文件。明确包含在生成请求中的源代码或 customCode 内容属于该请求的一部分,并会发送至托管的 MetaEngine API。只有当配方使用了从配方输入中读取的值时,这些值才会包含在展开后的负载中。
提交的生成内容和生成的文件内容不会被持久化或记录;匿名运行元数据会予以保留。有关处理和保留详情,请参阅隐私政策和条款。
已记录的 Agent 工作流
一次 MCP 调用可生成多个文件,从而减少所需的工具操作次数。模型响应是另一项独立指标:在已记录的 TypeScript 运行中,Opus 通常每次响应发出一次 Write,而 Sonnet 通常会批量处理 Write。修正后的基准测试结果区分了这两类计数,并保留了输出词元总数和通过率。
如需跨语言、模型和规格形态进行可复现的测量,请参阅 benchmark/——这是一个自包含的测试框架,包含提示词、评测工具和 15 个规范结果文件夹。其中的数据展示的是一位作者在每个单元格 N=5 的情况下进行测试所得的结果;请在自己的环境中复现,以了解哪些结果适用于你。
链接
许可证
MIT
关于此仓库
此仓库包含 MetaEngine MCP Server 的公开文档、示例、基准测试和问题跟踪。已编译的 npm 包可在 @metaengine/mcp-server 获取。服务实现维护在私有仓库中。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。