chore: 初始化仓库

This commit is contained in:
Lydanne
2026-02-15 22:02:21 +08:00
commit 08d011d63f
381 changed files with 87202 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
# @spaceflow/{{kebabName}}
{{name}} MCP 工具插件
## 使用方法
该插件通过 `spaceflow mcp` 命令自动发现并注册 MCP 工具。
```bash
# 启动 MCP Server包含所有已安装插件的工具
spaceflow mcp
# 使用 Inspector 调试
spaceflow mcp --inspector
```
## 提供的工具
- **{{kebabName}}_hello** — 示例工具,返回问候信息
## 开发
```bash
# 构建
spaceflow build
# 开发模式
spaceflow dev
```

View File

@@ -0,0 +1,26 @@
{
"name": "@spaceflow/{{kebabName}}",
"version": "1.0.0",
"description": "Spaceflow {{name}} MCP 工具插件",
"main": "./dist/index.js",
"type": "module",
"spaceflow": {
"commands": ["."]
},
"scripts": {
"build": "spaceflow build",
"dev": "spaceflow dev"
},
"peerDependencies": {
"spaceflow": "workspace:*",
"@nestjs/common": "catalog:",
"@nestjs/config": "catalog:",
"@nestjs/swagger": "catalog:",
"nest-commander": "catalog:",
"class-validator": "catalog:",
"class-transformer": "catalog:"
},
"devDependencies": {
"@types/node": "catalog:"
}
}

View File

@@ -0,0 +1,22 @@
/**
* {{pascalName}} MCP 服务
* 提供 {{name}} 相关的 MCP 工具
*/
import { McpServer, McpTool } from "@spaceflow/core";
import { {{pascalName}}Service } from "./{{kebabName}}.service";
import { {{pascalName}}HelloInput } from "./dto/mcp.dto";
@McpServer({ name: "{{kebabName}}-mcp", version: "1.0.0", description: "{{name}} MCP 工具" })
export class {{pascalName}}Mcp {
constructor(private readonly {{camelName}}Service: {{pascalName}}Service) {}
@McpTool({
name: "{{kebabName}}_hello",
description: "示例工具:返回问候信息",
dto: {{pascalName}}HelloInput,
})
async hello(input: {{pascalName}}HelloInput) {
return this.{{camelName}}Service.hello(input.name, input.lang);
}
}

View File

@@ -0,0 +1,9 @@
import { Module } from "@spaceflow/core";
import { {{pascalName}}Mcp } from "./{{kebabName}}.mcp";
import { {{pascalName}}Service } from "./{{kebabName}}.service";
@Module({
providers: [{{pascalName}}Service, {{pascalName}}Mcp],
exports: [{{pascalName}}Mcp],
})
export class {{pascalName}}Module {}

View File

@@ -0,0 +1,19 @@
import { Injectable } from "@spaceflow/core";
export interface HelloResult {
readonly message: string;
readonly timestamp: string;
}
/** {{pascalName}} 业务逻辑服务 */
@Injectable()
export class {{pascalName}}Service {
/** 生成问候信息 */
hello(name: string, lang: string = "zh"): HelloResult {
const message = lang === "en" ? `Hello, ${name}!` : `你好,${name}`;
return {
message,
timestamp: new Date().toISOString(),
};
}
}

View File

@@ -0,0 +1,18 @@
import {
ApiProperty,
ApiPropertyOptional,
IsString,
IsOptional,
} from "@spaceflow/core";
/** {{pascalName}} hello 工具输入参数 */
export class {{pascalName}}HelloInput {
@ApiProperty({ description: "用户名称" })
@IsString()
name!: string;
@ApiPropertyOptional({ description: "问候语言zh/en" })
@IsString()
@IsOptional()
lang?: string;
}

View File

@@ -0,0 +1,27 @@
import { SpaceflowExtension, SpaceflowExtensionMetadata } from "spaceflow";
import { {{pascalName}}Module } from "./{{kebabName}}.module";
/** {{pascalName}} Extension 元数据 */
export const {{camelName}}Metadata: SpaceflowExtensionMetadata = {
name: "{{kebabName}}",
commands: [],
configKey: "{{kebabName}}",
version: "1.0.0",
description: "{{name}} MCP 工具插件",
};
export class {{pascalName}}Extension implements SpaceflowExtension {
getMetadata(): SpaceflowExtensionMetadata {
return {{camelName}}Metadata;
}
getModule() {
return {{pascalName}}Module;
}
}
export default {{pascalName}}Extension;
export * from "./{{kebabName}}.module";
export * from "./{{kebabName}}.mcp";
export * from "./{{kebabName}}.service";

View File

@@ -0,0 +1,5 @@
{
"extends": "../../core/tsconfig.skill.json",
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}