D

Definesys MCP Framework

Definesys.AI/test-mcp
Hosted
0 Stars 52 次浏览 更新于 2026-08-23

Definesys MCP 框架是一个灵活且易于使用的 MCP(模型上下文协议)服务框架。它简化了工具扩展,支持多种传输模式,并允许通过 JSON 配置文件创建 API 工具。

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "definesys-mcp": {
      "args": [
        "-y",
        "proxy-api-mcp"
      ],
      "command": "npx",
      "env": {
        "KINGDEE_ACCT_ID": "\u003cKINGDEE_ACCT_ID\u003e",
        "KINGDEE_ALGORITHM": "\u003cKINGDEE_ALGORITHM\u003e",
        "KINGDEE_APP_ID": "\u003cKINGDEE_APP_ID\u003e",
        "KINGDEE_DOMAIN": "\u003cKINGDEE_DOMAIN\u003e",
        "KINGDEE_LCID": "\u003cKINGDEE_LCID\u003e",
        "KINGDEE_SECRET": "\u003cKINGDEE_SECRET\u003e",
        "KINGDEE_USERNAME": "\u003cKINGDEE_USERNAME\u003e",
        "MCP_JSON_CONFIG": "\u003cMCP_JSON_CONFIG\u003e",
        "MCP_TRANSPORT": "\u003cMCP_TRANSPORT\u003e"
      }
    }
  }
}

该服务需要配置环境变量:KINGDEE_ACCT_ID、KINGDEE_ALGORITHM、KINGDEE_APP_ID、KINGDEE_DOMAIN、KINGDEE_LCID、KINGDEE_SECRET、KINGDEE_USERNAME、MCP_JSON_CONFIG、MCP_TRANSPORT

可用工具 (15 个)

该服务在 MCP 协议中暴露的工具,AI 可按需调用

bd_account_view 2 个参数 需填 2 项

科目-查看

必填参数:formid、data

bd_account_execute_bill_query 1 个参数 需填 1 项

科目-单据查询

必填参数:data

bd_account_book_view 2 个参数 需填 2 项

账簿-查看

必填参数:formid、data

bd_account_book_execute_bill_query 1 个参数 需填 1 项

账簿-单据查询

必填参数:data

bd_currency_view 2 个参数 需填 2 项

币别-查看

必填参数:formid、data

bd_currency_execute_bill_query 1 个参数 需填 1 项

币别-单据查询

必填参数:data

bd_expense_view 2 个参数 需填 2 项

费用项目-查看

必填参数:formid、data

bd_expense_execute_bill_query 1 个参数 需填 1 项

费用项目-单据查询

必填参数:data

bd_rate_view 2 个参数 需填 2 项

汇率-查看

必填参数:formid、data

bd_rate_execute_bill_query 1 个参数 需填 1 项

汇率-单据查询

必填参数:data

bd_settletype_view 2 个参数 需填 2 项

结算方式-查看

必填参数:formid、data

bd_settletype_execute_bill_query 1 个参数 需填 1 项

结算方式-单据查询

必填参数:data

gl_aging_schedule_get_sys_repor_data 2 个参数 需填 2 项

总账账龄分析表-查询报表数据

必填参数:formid、data

gl_cash_flow_view 2 个参数 需填 2 项

现金流量项目-查看

必填参数:formid、data

gl_cash_flow_execute_bill_query 1 个参数 需填 1 项

现金流量项目-单据查询

必填参数:data

服务介绍

Definesys MCP Framework

核心特性

  • 简化工具扩展 - 声明式工具配置,无需关心 MCP 协议细节
  • 多传输模式 - 支持 Stdio、SSE 和 Streamable HTTP 三种传输模式
  • JSON 配置驱动 - 通过 JSON 配置文件零代码创建 API 工具
  • 环境变量支持 - 在 JSON 配置中使用环境变量,提升安全性和灵活性
  • 请求预处理器 - 支持在 API 请求发送前进行自定义处理
  • JSON 配置映射 - 通过简单的 key 加载预定义的配置文件集合
  • 类型安全 - 使用 TypeScript 开发,严格的类型检查
  • Schema 验证 - 基于 Zod 的输入输出验证

安装

npm install definesys-mcp

快速开始

创建一个简单的 MCP 服务

import { McpServer, startHttpServer, ToolConfig } from 'definesys-mcp';

// 定义工具
const greetTool: ToolConfig = {
  name: 'greet',
  description: 'Greets a person by name',
  inputSchema: {
    type: 'object',
    properties: {
      name: {
        type: 'string',
        description: 'The name of the person to greet',
      },
    },
    required: ['name'],
  },
  handler: async (args) => {
    const name = args.name as string;
    return {
      content: [
        {
          type: 'text',
          text: `Hello, ${name}! Welcome to MCP!`,
        },
      ],
    };
  },
};

// 创建服务器
const server = new McpServer({
  name: 'my-mcp-server',
  version: '1.0.0',
});

// 注册工具
server.registerTool(greetTool);

// 启动 HTTP 服务器
await startHttpServer(server, { port: 3000 });

使用 Stdio 模式 (适用于 Claude Desktop)

import { McpServer, startStdioServer } from 'definesys-mcp';

const server = new McpServer({
  name: 'my-mcp-server',
  version: '1.0.0',
});

server.registerTool(greetTool);

await startStdioServer(server);

核心概念

工具配置

工具通过声明式配置进行定义:

interface ToolConfig {
  name: string;              // 工具唯一标识符
  title?: string;            // 工具的可读标题
  description: string;       // 工具功能描述
  inputSchema: object;       // 输入参数的 JSON Schema
  outputSchema?: object;     // 输出结果的 JSON Schema
  handler: ToolHandler;      // 工具处理函数
}

传输模式

框架支持三种传输模式:

模式 场景 特点
stdio 本地进程,IDE 插件 零网络配置,最高安全性
http 远程服务,多客户端 支持并发,会话管理
sse 需要服务端推送 向后兼容旧版协议

JSON 配置 API 工具

通过 JSON 配置文件自动生成 MCP 工具,无需编写代码即可调用 RESTful API。

基本配置结构

{
  "version": "1.0",
  "globals": {
    "baseUrl": "https://api.example.com",
    "timeout": 30000,
    "headers": {
      "User-Agent": "MyApp/1.0"
    }
  },
  "tools": [
    {
      "name": "get_user",
      "description": "Get user by ID",
      "method": "GET",
      "path": "/users/{userId}",
      "parameters": [
        {
          "name": "userId",
          "in": "path",
          "required": true,
          "type": "integer"
        }
      ]
    }
  ]
}

在配置中使用环境变量

支持在 JSON 配置中使用环境变量占位符:

{
  "baseUrl": "${API_BASE_URL}",
  "headers": {
    "Authorization": "Bearer ${API_TOKEN}"
  },
  "timeout": "${API_TIMEOUT:30000}"
}
  • 基本语法: ${ENV_VAR_NAME}
  • 带默认值: ${ENV_VAR_NAME:default_value}

JSON 配置映射

通过环境变量快速加载预定义的配置文件集合:

# .env 文件
MCP_JSON_CONFIG=kingdee_basic,kingdee_finance

可用配置 Keys:

Key 说明
kingdee_basic 基础管理
kingdee_finance 财务会计
kingdee_scm 供应链管理
kingdee_manufacture 生产制造
kingdee_tax 税务管理
kingdee_employee 员工服务
kingdee_all 全部模块

请求预处理器

在 API 请求发送前对请求数据进行自定义处理:

创建预处理器

import { type RequestPreprocessor, type RequestData } from 'definesys-mcp';

export class MyPreprocessor implements RequestPreprocessor {
  readonly name = 'my_preprocessor';

  preprocess(requestData: RequestData): RequestData {
    requestData.headers['X-Custom-Header'] = 'value';
    return requestData;
  }
}

注册并使用

import { PreprocessorRegistry } from 'definesys-mcp';

PreprocessorRegistry.register(new MyPreprocessor());

在配置中指定预处理器:

{
  "name": "my_api",
  "preprocessor": "my_preprocessor",
  "method": "GET",
  "path": "/data"
}

环境变量管理

使用集中式环境变量管理类:

import { env } from './config/env';

// 获取环境变量
const port = env.get('MCP_PORT');
const transport = env.get('MCP_TRANSPORT');

// 验证环境变量
env.validate();

// 判断运行环境
if (env.isProduction()) {
  // 生产环境逻辑
}

配置

环境变量

变量 默认值 说明
MCP_TRANSPORT http 传输模式 (stdio/sse/http)
MCP_PORT 3000 HTTP 端口
MCP_SESSION_TIMEOUT 3600000 会话超时时间(毫秒)
MCP_LOG_LEVEL info 日志级别 (debug/info/warn/error)
MCP_TOOLS_DIR ./tools 工具目录路径
MCP_API_TOOLS_CONFIG ./api-tools.json API 工具配置文件路径
MCP_JSON_CONFIG - JSON 配置映射 keys (逗号分隔)
NODE_ENV development 运行环境

Claude Desktop 配置

HTTP 模式

{
  "mcpServers": {
    "definesys-mcp": {
      "type": "streamableHttp",
      "url": "http://localhost:3000/mcp",
      "timeout": 60000
    }
  }
}

Stdio 模式

{
  "mcpServers": {
    "definesys-mcp": {
      "command": "node",
      "args": ["/path/to/definesys-mcp/dist/server.js"],
      "env": {
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}

高级用法

添加中间件

import { Middleware } from 'definesys-mcp';

const loggingMiddleware: Middleware = async (context, next) => {
  console.log(`Tool called at ${new Date(context.timestamp)}`);
  const result = await next();
  console.log(`Tool completed`);
  return result;
};

server.getRouter().use(loggingMiddleware);

批量注册工具

server.registerTools([
  echoTool,
  calculatorTool,
]);

项目结构

definesys-mcp/
├── src/
│   ├── core/                 # 核心框架
│   │   ├── server.ts        # MCP Server 封装
│   │   ├── registry.ts      # 工具注册器
│   │   ├── router.ts        # 工具路由器
│   │   ├── session.ts       # 会话管理器
│   │   └── transports/      # 传输层实现
│   ├── tools/               # 工具层
│   │   ├── types.ts         # 类型定义
│   │   ├── validator.ts     # Schema 验证器
│   │   ├── api/             # API 工具模块
│   │   │   ├── builder.ts   # API 工具构建器
│   │   │   ├── executor.ts  # API 请求执行器
│   │   │   ├── loader.ts    # API 工具加载器
│   │   │   ├── preprocessor.ts # 预处理器注册表
│   │   │   └── json-config-*.ts # JSON 配置相关
│   │   └── examples/        # 示例工具
│   ├── config/              # 配置管理
│   │   └── env.ts           # 环境变量管理
│   ├── utils/               # 工具函数
│   │   ├── logger.ts        # 日志工具
│   │   ├── errors.ts        # 错误定义
│   │   └── env-replacer.ts  # 环境变量替换
│   └── index.ts             # 框架入口
├── examples/                # 使用示例
└── docs/                    # 文档

文档

常用命令

npm run build      # 编译 TypeScript
npm run dev        # 开发模式运行
npm start          # 运行编译后的服务
npm run lint       # 代码检查
npm test           # 运行测试

API 参考

McpServer

class McpServer {
  constructor(config: ServerConfig);
  registerTool(config: ToolConfig): void;
  registerTools(configs: ToolConfig[]): void;
  getRegistry(): ToolRegistry;
  getRouter(): ToolRouter;
  getSessionManager(): SessionManager;
  close(): Promise<void>;
}

PreprocessorRegistry

class PreprocessorRegistry {
  static register(preprocessor: RequestPreprocessor): void;
  static registerMany(preprocessors: RequestPreprocessor[]): void;
  static get(name: string): RequestPreprocessor | undefined;
  static has(name: string): boolean;
  static unregister(name: string): boolean;
  static getAll(): string[];
  static clear(): void;
}

EnvManager

class EnvManager {
  get<K extends keyof EnvSchema>(key: K): EnvSchema[K];
  getAll(): EnvSchema;
  has(key: keyof EnvSchema): boolean;
  validate(): void;
  isProduction(): boolean;
  isDevelopment(): boolean;
  isTest(): boolean;
  print(): void;
}

许可证

MIT License

致谢

相关 MCP 服务