mcpField
M
MetaEngine

MetaEngine

本地服务
metaengine.eu开发工具07 周前更新

关于 MetaEngine

MetaEngine 是一个 MCP 服务,可根据 JSON 配方、类型图和 API 模式生成相关源文件,面向构建模型或类型化客户端的开发者。它通过类型引用关联生成内容,并支持 11 种语言。

主要功能

  1. 01从精简 JSON 配方生成文件
  2. 02在单次生成中解析关联类型
  3. 03根据 OpenAPI、GraphQL、Protobuf 和 SQL 生成
  4. 04以 11 种编程语言生成模型
  5. 05为列出的框架生成类型化客户端
  6. 06预览生成结果或在本地写入文件

适用场景

  1. 01根据类型图创建关联模型文件
  2. 02从 API 模式生成类型化客户端
  3. 03在配方中复用模板和本地 JSON 输入

MCP 相关

stdio MCP 服务提供配方和类型图生成、基于模式的客户端生成及本地规格文件读取工具。它将展开后的生成数据发送到托管的 MetaEngine API,由该 API 返回源文件。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"eu-metaengine": {
"command": "npx",
"args": [
"-y",
"@metaengine/mcp-server"
],
"env": {
"METAENGINE_API_URL": "<METAENGINE_API_URL>"
}
}
}
}
启动命令npx -y @metaengine/mcp-server
需要配置的环境变量
METAENGINE_API_URLOverride the MetaEngine generation API endpoint (defaults to https://api.metaengine.eu)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@metaengine/mcp-server1.5.0

工具

8

收录的工具列表 · 更新于 3 周前

参数类型必填说明
enumsarray否枚举定义
dryRunboolean否预览模式——返回生成的代码,但不写入磁盘文件。为 true 时,响应中会返回文件内容供检查。
classesarray否类定义(普通类和泛型类模板)
languageenum是目标编程语言typescript | python | go | csharp | java | kotlin | groovy | scala | swift | php | rust
arrayTypesarray否数组类型定义——创建 IArrayType 引用(不生成文件)。可用于可复用的数组定义。
initializeboolean否是否使用默认值初始化属性
interfacesarray否接口定义(普通接口和泛型接口模板)
outputPathstring否写入文件的输出目录路径。默认为当前目录。
customFilesarray否自定义文件(实用工具文件、类型别名、barrel 导出)——生成不带类包装的文件。非常适合类型别名和实用函数。
packageNamestring否生成代码的包/模块/命名空间名称。默认值因语言而异:Go='github.com/metaengine/demo'、Java/Kotlin/Groovy='com.metaengine.generated'。对于 C#:省略或留空时,不会生成命名空间声明(适合 GlobalUsings)。
skipExistingboolean否跳过已存在的文件(适用于存根模式)。为 true 时,仅创建新文件。
dictionaryTypesarray否字典类型定义——创建 IDictionaryType 引用(不生成文件)。支持键/值为基本类型或自定义类型的全部 4 种组合。
typeScriptOptionsobject否仅适用于 TypeScript 的渲染选项。省略此选项可保留旧版无扩展名的相对导入。
typeScriptOptions.relativeImportExtensionenum否Node16/NodeNext ESM 源码请使用 'js':生成的 .ts 文件会使用运行时 .js 说明符导入相对模块。'none' 会保留无扩展名导入。none | js
concreteGenericClassesarray否具体泛型实现(Repository<User>)——创建内联类型引用,不生成文件
concreteGenericInterfacesarray否具体泛型接口实现(IRepository<User>)——创建内联类型引用,不生成文件
skipEnumMembersValidationboolean否跳过生成引擎中的枚举成员验证。

详细介绍

MetaEngine MCP 服务

npm version License: MIT

通过 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 获取。服务实现维护在私有仓库中。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。