flycode-mcp 1.0.0

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.
@@ -0,0 +1,186 @@
1
+ import { z } from 'zod';
2
+ import { getEntity, pageEntityList } from '../../clients/entityClient.js';
3
+ /**
4
+ * 实体的“属性”结构(EntityProperty):
5
+ * 实体详情中 properties 数组里每个对象携带的字段级属性。
6
+ * 字段类型严格依据 entityClient.ts 中的 EntityProperty 接口声明构建:
7
+ * string -> z.string(),number -> z.coerce.number()。
8
+ */
9
+ const entityPropertySchema = z.array(z.object({
10
+ columnname: z.string().describe('属性列的列名,即数据库表的字段的名字'),
11
+ idxtype: z.string().describe('索引方式:1-无;2-主键索引'),
12
+ ismaster: z.string().describe('保留字段,暂无特殊含义'),
13
+ marktype: z.string().describe('创建标记:0-平台;1-产品;2-租户'),
14
+ propertycategorycode: z.string().describe('属性类别编码'),
15
+ propertycode: z.string().describe('属性编码,唯一标识一个属性'),
16
+ propertydescr: z.string().describe('属性描述'),
17
+ propertyname: z.string().describe('属性中文名,便于阅读'),
18
+ propertytypecode: z.string().describe('属性类型编码,编码和值的对应关系:1-主键(int8);2-名称(200);3-文本(200);4-长文本;5-整数(int4);6-长整数(int8);10-数字(numeric);7-日期时间(ts);30-时间范围;29-年月日(date);18-状态(int4);16-图片;26-附件;17-定位;19-选项集;200000000000-关联对象;100000000000-业务对象;10000000000-字典对象;300000000000-复杂关联对象;1000000000-本对象;8-创建人(int8);9-修改人(int8);11-创建时间(ts);12-修改时间(ts);31-拼音;100-是否默认;13-手机号;15-固定电话;14-邮箱;27-邮编;20-排序(int4)'),
19
+ publishstatus: z.coerce.number().describe('属性的发布状态,1-已发布;2-未发布'),
20
+ relationobjectcode: z.string().describe('关联的实体编码,此属性关联了其他实体,则说明 SQL 查询的时候可以用此字段连其他实体对应的表的主键'),
21
+ relationpropertycode: z.string().describe('保留字段,一般为空字符串'),
22
+ status: z.string().describe('属性的状态,1-启用;2-停用')
23
+ }));
24
+ /** 只读类工具:查询、列表、读取等不会修改数据的操作。 */
25
+ export const readTools = [
26
+ {
27
+ name: 'page_entity_list',
28
+ config: {
29
+ title: '分页查询实体',
30
+ description: '根据查询条件分页查询实体列表',
31
+ inputSchema: {
32
+ objectname: z.string().optional().describe('实体中文名、实体表名、实体 objectcode 模糊匹配'),
33
+ page: z.string().optional().describe('分页参数,当前页,从 1 开始'),
34
+ rows: z.string().optional().describe('分页参数,每页记录数'),
35
+ updatetimestart: z.string().optional().describe('修改开始时间,格式:yyyy-MM-dd hh:mm:ss,和修改结束时间成对出现'),
36
+ updatetimeend: z.string().optional().describe('修改结束时间,格式:yyyy-MM-dd hh:mm:ss,和修改开始时间成对出现'),
37
+ datapattern: z.string().optional().describe('实体类型,整数,含义:1-原生实体;2-衍生实体;3-视图;4-超级表单实体'),
38
+ objecttypecode: z.string().optional().describe('实体分类,整数,含义:1-基本实体;2-树形实体;3-数据字典;4-关联实体')
39
+ },
40
+ outputSchema: {
41
+ data: z.array(z.object({
42
+ confsource: z.coerce.number().describe('配置来源,含义:1-IDE配置;2-用户级配置'),
43
+ createaccountcode: z.coerce.number().describe('创建人的账号 code'),
44
+ createaccountname: z.string().describe('创建人姓名'),
45
+ createtime: z.string().describe('创建时间'),
46
+ datapattern: z.coerce.number().describe('数据模式,含义:1-原生实体;2-衍生实体;3-视图;4-超级表单实体。原生实体:需要在数据库真正创建表;衍生、视图:不需要在数据库真正创建表;超级表单实体:需要在数据库真正创建表,但是是平台根据用户的配置自动创建的,表名无含义'),
47
+ directorytypecode: z.string().describe('实体所属目录分类的编码'),
48
+ directorytypename: z.string().describe('实体所属目录分类的名称'),
49
+ hasoffline: z.string().describe('实体是否有离线设置,1-有;0-无'),
50
+ marktype: z.coerce.number().describe('创建标记:0-平台;1-产品;2-租户'),
51
+ metamodelcode: z.string().describe('领域模型编码,和 objectcode 共同构成复合主键'),
52
+ objectcatgory: z.coerce.number().describe('对象类别,表示是否为权限设置对象,1-是;2-否'),
53
+ objectcode: z.string().describe('实体的编码,和 metamodelcode 共同构成复合主键'),
54
+ objectdescr: z.string().describe('实体的描述'),
55
+ objectmark: z.string().describe('实体标记,一般和数据库表名同名,字典类型的实体有自己的标记'),
56
+ objectname: z.string().describe('实体的中文名,便于阅读'),
57
+ objecttemplatecode: z.union([z.string(), z.null()]).describe('实体的模板编码'),
58
+ objecttypecode: z.string().describe('实体分类,整数,含义:1-基本实体;2-树形实体;3-数据字典;4-关联实体'),
59
+ parentobjectcode: z.union([z.string(), z.null()]).describe('父实体的 objectcode'),
60
+ publishstatus: z.coerce.number().describe('实体的发布状态,1-已发布;2-未发布'),
61
+ status: z.coerce.number().describe('实体的状态,1-启用;2-停用'),
62
+ tablename: z.string().describe('数据库表名'),
63
+ updateaccountcode: z.coerce.number().describe('最近更新人的账号编码'),
64
+ updateaccountname: z.string().describe('最近更新人的姓名'),
65
+ updatetime: z.string().describe('最近更新时间')
66
+ })).describe('这一页的业务数据'),
67
+ pageCount: z.coerce.number().describe('总页数'),
68
+ pageIndex: z.coerce.number().describe('第几页'),
69
+ pageSize: z.coerce.number().describe('每页记录数'),
70
+ resultCount: z.coerce.number().describe('总记录数')
71
+ },
72
+ annotations: {
73
+ readOnlyHint: true, // 此操作不会修改数据
74
+ destructiveHint: false, // 此操作不具有破坏性
75
+ idempotentHint: true // 重复调用结果相同
76
+ }
77
+ },
78
+ handler: async (args) => {
79
+ const { objectname = '', page = 1, rows = 20, updatetimestart = '', updatetimeend = '', datapattern = '', objecttypecode = '' } = args;
80
+ try {
81
+ const res = await pageEntityList({
82
+ // 以下为接口固定默认传值,不对外暴露
83
+ centercode: '',
84
+ directorytypecode: 'rootNode',
85
+ starttime: '',
86
+ objectname,
87
+ page: Number(page) || 1,
88
+ rows: Number(rows) || 20,
89
+ updatetimestart,
90
+ updatetimeend,
91
+ datapattern,
92
+ objecttypecode
93
+ });
94
+ return {
95
+ content: [{
96
+ type: 'text',
97
+ text: JSON.stringify(res.resp_data)
98
+ }],
99
+ // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
100
+ // structuredContent 与之匹配,否则会抛 -32602;这里同时返回
101
+ // 文本(给人/模型阅读)和结构化内容(供 schema 校验)。
102
+ structuredContent: res.resp_data
103
+ };
104
+ }
105
+ catch (e) {
106
+ // 业务/网络错误:HTTP 非 200 时 Axios 已在传输层抛出,
107
+ // 错误体形如 {"error_type":600,"error_code":"token无效,请重新登录","error_params":null}
108
+ // 将其原始 JSON 原样返回给模型,不做二次包装。
109
+ const err = e;
110
+ const body = err.response?.data ?? e;
111
+ return {
112
+ isError: true,
113
+ content: [{
114
+ type: 'text',
115
+ text: JSON.stringify(body)
116
+ }]
117
+ };
118
+ }
119
+ }
120
+ },
121
+ {
122
+ name: 'get_entity',
123
+ config: {
124
+ title: '查询实体详情',
125
+ description: '根据实体的编码 objectcode 查询其完整详情:包含实体的基本信息(中文名、标记、描述、分类、数据模式、发布状态等)以及实体的属性数组 properties(每个属性的列名、类型、关联实体、索引方式等)',
126
+ inputSchema: {
127
+ objectcode: z.string().describe('要查详情的实体的编码')
128
+ },
129
+ outputSchema: {
130
+ confsource: z.coerce.number().describe('配置来源,含义:1-IDE配置;2-用户级配置'),
131
+ datapattern: z.string().describe('数据模式,含义:1-原生实体;2-衍生实体;3-视图;4-超级表单实体。原生实体:需要在数据库真正创建表;衍生、视图:不需要在数据库真正创建表;超级表单实体:需要在数据库真正创建表,但是是平台根据用户的配置自动创建的,表名无含义'),
132
+ directorytypecode: z.string().describe('实体所属目录分类的编码'),
133
+ marktype: z.string().describe('创建标记:0-平台;1-产品;2-租户'),
134
+ message: z.string().describe('保存时编写的提交信息,作用类似 git 提交信息'),
135
+ objectcatgory: z.string().describe('对象类别,表示是否为权限设置对象,1-是;2-否'),
136
+ objectcode: z.string().describe('实体的编码,和 metamodelcode 共同构成复合主键'),
137
+ objectdescr: z.string().describe('实体的描述'),
138
+ objectmark: z.string().describe('实体标记,一般和数据库表名同名,字典类型的实体有自己的标记'),
139
+ objectname: z.string().describe('实体的中文名,便于阅读'),
140
+ objecttypecode: z.string().describe('实体分类,整数,含义:1-基本实体;2-树形实体;3-数据字典;4-关联实体'),
141
+ parentobjectcode: z.string().describe('父实体的 objectcode'),
142
+ properties: entityPropertySchema.describe('实体的属性数组:每个属性定义实体的一个字段(列名、类型、关联实体、索引方式等)'),
143
+ publishstatus: z.coerce.number().describe('实体的发布状态,1-已发布;2-未发布'),
144
+ status: z.string().describe('实体的状态,1-启用;2-停用'),
145
+ storagelevel: z.coerce.number().describe('存储等级'),
146
+ tablename: z.string().describe('数据库表名')
147
+ },
148
+ annotations: {
149
+ readOnlyHint: true, // 此操作不会修改数据
150
+ destructiveHint: false, // 此操作不具有破坏性
151
+ idempotentHint: true // 重复调用结果相同
152
+ }
153
+ },
154
+ handler: async (args) => {
155
+ const { objectcode } = args;
156
+ try {
157
+ const res = await getEntity({ objectcode });
158
+ return {
159
+ content: [{
160
+ type: 'text',
161
+ text: JSON.stringify(res.resp_data)
162
+ }],
163
+ // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
164
+ // structuredContent 与之匹配,否则会抛 -32602;这里同时返回
165
+ // 文本(给人/模型阅读)和结构化内容(供 schema 校验)。
166
+ structuredContent: res.resp_data
167
+ };
168
+ }
169
+ catch (e) {
170
+ // 业务/网络错误:HTTP 非 200 时 Axios 已在传输层抛出,
171
+ // 错误体形如 {"error_type":600,"error_code":"token无效,请重新登录","error_params":null}
172
+ // 将其原始 JSON 原样返回给模型,不做二次包装。
173
+ const err = e;
174
+ const body = err.response?.data ?? e;
175
+ return {
176
+ isError: true,
177
+ content: [{
178
+ type: 'text',
179
+ text: JSON.stringify(body)
180
+ }]
181
+ };
182
+ }
183
+ }
184
+ }
185
+ ];
186
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/tools/entity/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ import { z } from 'zod';
2
+ import { getModelLogic, pageModelLogicList } from '../../clients/logicClient.js';
3
+ /**
4
+ * 业务逻辑的“属性”结构(LogicParameterProperties):
5
+ * input/output 参数数组中每个对象可能携带的字段级属性。
6
+ */
7
+ const logicParameterPropertiesSchema = z.array(z.object({
8
+ marktype: z.string().describe('创建标记:0-平台;1-产品;2-租户'),
9
+ name: z.string().describe('此字段的名称,代码中用此名字访问'),
10
+ objectcode: z.string().describe('此字段所属的实体的编码,如果是自定义参数则此编码为空字符串'),
11
+ propertycode: z.string().describe('此字段的编码,只有当此字段有所属实体时才有值,临时创建的自定义实体的字段则为空字符串'),
12
+ propertyname: z.string().describe('此字段的中文名,阅读友好'),
13
+ propertytypecode: z.string().describe('字段类型,整数字符串,含义:1-主键(int8);2-名称(200);3-文本(200);4-长文本;5-整数(int4);6-长整数(int8);10-数字(numeric);7-日期时间(ts);30-时间范围;29-年月日(date);18-状态(int4);16-图片;26-附件;17-定位;19-选项集;200000000000-关联对象;100000000000-业务对象;10000000000-字典对象;300000000000-复杂关联对象;1000000000-本对象;8-创建人(int8);9-修改人(int8);11-创建时间(ts);12-修改时间(ts);31-拼音;100-是否默认;13-手机号;15-固定电话;14-邮箱;27-邮编;20-排序(int4)')
14
+ }));
15
+ /**
16
+ * 业务逻辑的“输入/输出参数”结构(LogicParameters):
17
+ * input 定义 flycode 中内置对象 IN 可获取到的内容,output 定义赋值给 OUT 的内容。
18
+ */
19
+ const logicParametersSchema = z.array(z.object({
20
+ datatype: z.string().describe('整数字符串:0-单实体;1-数组。0 表示 IN.name 或 OUT.xxx 是个对象;1 表示是个数组'),
21
+ marktype: z.string().describe('创建标记:0-平台;1-产品;2-租户'),
22
+ name: z.string().describe('此参数对象/数组的名字,代码中用此名字访问'),
23
+ objectcode: z.string().describe('此参数关联的实体的编码,如果是自定义参数则此编码为空字符串'),
24
+ objectname: z.string().describe('此参数的中文名称,阅读友好'),
25
+ properties: logicParameterPropertiesSchema.describe('此参数的属性数组:单实体时是 IN.name 这个对象有的属性;数组时是 IN.name 这个数组中的元素对象的属性')
26
+ }));
27
+ /** 只读类工具:查询、列表、读取等不会修改数据的操作。 */
28
+ export const readTools = [
29
+ {
30
+ name: 'page_model_logic_list',
31
+ config: {
32
+ title: '分页查询业务逻辑',
33
+ description: '根据查询条件分页查询业务逻辑列表',
34
+ inputSchema: {
35
+ keys: z.string().optional().describe('业务逻辑的标题、modellogiccode、或者行为方法名,模糊匹配'),
36
+ keywords: z.string().optional().describe('完整 JSON (内含代码) 中的关键字,模糊匹配'),
37
+ page: z.string().optional().describe('分页参数,当前页,从 1 开始'),
38
+ rows: z.string().optional().describe('分页参数,每页记录数'),
39
+ updateopname: z.string().optional().describe('最近修改人姓名,模糊匹配'),
40
+ updatetimestart: z.string().optional().describe('最近修改时间 - 开始时间,格式:yyyy-MM-dd hh:mm:ss,和最近修改结束时间成对出现'),
41
+ updatetimeend: z.string().optional().describe('最近修改时间 - 结束时间,格式:yyyy-MM-dd hh:mm:ss,和最近修改开始时间成对出现'),
42
+ actiontype: z.string().optional().describe('操作类型, 整数, 含义:1-列表查询;2-单个查询;3-数据提交;4-批量提交;5-导入;6-导出;7-离线数据获取;8-流程;9-业务调度;10-ipaas接口'),
43
+ actioncategory: z.string().optional().describe('行为类型,整数,含义:1-flycode接口;2-微服务;3-内部函数;4-导入;5-导出;6-flycode导入;7-flycode导出'),
44
+ tenantdbname: z.string().optional().describe('脚本操作数据库的类型,字符串枚举,枚举值:只读、读写、报表'),
45
+ jobstatus: z.string().optional().describe('定时调度任务状态,整数,含义:1-启用;0-停用;2-无调度')
46
+ },
47
+ outputSchema: {
48
+ data: z.array(z.object({
49
+ actiontype: z.coerce.number().describe('操作类型, 整数, 含义:1-列表查询;2-单个查询;3-数据提交;4-批量提交;5-导入;6-导出;7-离线数据获取;8-流程;9-业务调度;10-ipaas接口'),
50
+ createtime: z.string().describe('创建时间'),
51
+ createaccountcode: z.coerce.number().describe('创建人的账号的唯一编码'),
52
+ modelname: z.string().describe('此业务逻辑所属的业务模型名'),
53
+ modellogiccode: z.string().describe('此业务逻辑的编码,和 metamodelcode 共同构成复合主键'),
54
+ modellogicname: z.string().describe('此业务逻辑的标题'),
55
+ metamodelcode: z.string().describe('领域模型编码,和 modellogiccode 共同构成复合主键'),
56
+ execmode: z.coerce.number().describe('执行方式,1-同步;2-异步'),
57
+ functionname: z.string().describe('此业务逻辑的函数命名(A业务逻辑中调用B业务逻辑时要写函数名)'),
58
+ actioncategory: z.coerce.number().describe('行为类型,整数,含义:1-flycode接口;2-微服务;3-内部函数;4-导入;5-导出;6-flycode导入;7-flycode导出'),
59
+ modelcode: z.string().describe('此业务逻辑所属的业务模型的唯一编码'),
60
+ marktype: z.coerce.number().describe('创建标记:0-平台;1-产品;2-租户'),
61
+ updatetime: z.string().describe('最近更新时间'),
62
+ updateaccountname: z.string().describe('最近更新人姓名'),
63
+ createaccountname: z.string().describe('创建人姓名'),
64
+ seq: z.coerce.number().describe('顺序'),
65
+ status: z.coerce.number().describe('状态,1-启用'),
66
+ confsource: z.coerce.number().describe('配置来源:1-IDE配置;2-用户级配置'),
67
+ updateaccountcode: z.coerce.number().describe('最近更新人账号的唯一编码')
68
+ })).describe('这一页的业务数据'),
69
+ pageCount: z.coerce.number().describe('总页数'),
70
+ pageIndex: z.coerce.number().describe('第几页'),
71
+ pageSize: z.coerce.number().describe('每页记录数'),
72
+ resultCount: z.coerce.number().describe('总记录数')
73
+ },
74
+ annotations: {
75
+ readOnlyHint: true, // 此操作不会修改数据
76
+ destructiveHint: false, // 此操作不具有破坏性
77
+ idempotentHint: true // 重复调用结果相同
78
+ }
79
+ },
80
+ handler: async (args) => {
81
+ const { keys = '', keywords = '', page = 1, rows = 20, updateopname = '', updatetimestart = '', updatetimeend = '', actiontype = '', actioncategory = '', tenantdbname = '', jobstatus = null } = args;
82
+ try {
83
+ const res = await pageModelLogicList({
84
+ actioncategory,
85
+ actiontype,
86
+ centercode: '',
87
+ directorytypecode: 'rootNode',
88
+ jobstatus,
89
+ keys,
90
+ keywords,
91
+ modelcode: 'rootNode',
92
+ page: Number(page) || 1,
93
+ rows: Number(rows) || 20,
94
+ tenantdbname,
95
+ updateopname,
96
+ updatetimeend,
97
+ updatetimestart,
98
+ });
99
+ return {
100
+ content: [{
101
+ type: 'text',
102
+ text: JSON.stringify(res.resp_data)
103
+ }],
104
+ // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
105
+ // structuredContent 与之匹配,否则会抛 -32602;这里同时返回
106
+ // 文本(给人/模型阅读)和结构化内容(供 schema 校验)。
107
+ structuredContent: res.resp_data
108
+ };
109
+ }
110
+ catch (e) {
111
+ // 业务/网络错误:HTTP 非 200 时 Axios 已在传输层抛出,
112
+ // 错误体形如 {"error_type":600,"error_code":"token无效,请重新登录","error_params":null}
113
+ // 将其原始 JSON 原样返回给模型,不做二次包装。
114
+ const err = e;
115
+ const body = err.response?.data ?? e;
116
+ return {
117
+ isError: true,
118
+ content: [{
119
+ type: 'text',
120
+ text: JSON.stringify(body)
121
+ }]
122
+ };
123
+ }
124
+ }
125
+ },
126
+ {
127
+ name: 'get_model_logic',
128
+ config: {
129
+ title: '查询业务逻辑详情',
130
+ description: '根据业务逻辑的编码 modellogiccode 查询其完整详情:包含 flycode 脚本(operations 内 templateparams.flycode)、输入输出参数(input/output,分别定义 flycode 内置对象 IN / OUT 的结构与字段属性 properties,含 propertytypecode 字段类型)以及操作步骤等',
131
+ inputSchema: {
132
+ modellogiccode: z.string().describe('要查详情的业务逻辑的编码')
133
+ },
134
+ outputSchema: {
135
+ actioncategory: z.string().describe('行为类型,整数,含义:1-flycode接口;2-微服务;3-内部函数;4-导入;5-导出;6-flycode导入;7-flycode导出'),
136
+ actiontype: z.string().describe('操作类型, 整数, 含义:1-列表查询;2-单个查询;3-数据提交;4-批量提交;5-导入;6-导出;7-离线数据获取;8-流程;9-业务调度;10-ipaas接口'),
137
+ description: z.string().describe('对此业务领域的描述说明'),
138
+ execmode: z.string().describe('执行方式,1-同步;2-异步'),
139
+ executionmode: z.string().describe('执行模式,standard-标准模式;strict-严格模式'),
140
+ functionname: z.string().describe('此业务逻辑的函数命名(A业务逻辑中调用B业务逻辑时要写函数名)'),
141
+ idempotenttype: z.string().describe('保留字段,空字符串'),
142
+ input: logicParametersSchema.describe('该字段定义了此业务逻辑的输入:flycode 中的内置对象 IN 中可获取到的内容'),
143
+ logicscript: z.string().describe('保留字段,空字符串'),
144
+ marktype: z.string().describe('创建标记:0-平台;1-产品;2-租户'),
145
+ message: z.string().describe('提交信息,每次保存时填写的,类似 git 的提交信息'),
146
+ modelcode: z.string().describe('此业务逻辑所属的业务模型的唯一编码'),
147
+ modellogiccode: z.string().describe('此业务逻辑的编码'),
148
+ modellogicname: z.string().describe('此业务逻辑的标题'),
149
+ operations: z.array(z.object({
150
+ dynamic: z.object({
151
+ fieldblacklist: z.any().describe('字段黑名单'),
152
+ fieldmap: z.any().describe('字段映射')
153
+ }).describe('动态配置'),
154
+ marktype: z.string().describe('创建标记'),
155
+ modellogiccode: z.string().describe('业务逻辑编码'),
156
+ modellogicstepcode: z.string().describe('业务逻辑步骤编码'),
157
+ modellogicstepname: z.string().describe('业务逻辑步骤名称'),
158
+ seq: z.coerce.number().describe('顺序'),
159
+ status: z.string().describe('状态'),
160
+ templateparams: z.object({
161
+ flycode: z.string().describe('flycode 脚本代码字符串'),
162
+ sourcemap: z.string().describe('源映射'),
163
+ tempcompiledflycode: z.string().describe('编译后的 flycode')
164
+ }).describe('模板参数,内含具体的 flycode 代码'),
165
+ templateref: z.string().describe('模板引用')
166
+ })).describe('此业务逻辑的操作信息,具体的 flycode 代码就在其中;通常数组中只有单个元素,该元素对象中就有 flycode 代码字符串'),
167
+ output: logicParametersSchema.describe('该字段定义了此业务逻辑的输出:flycode 中将会赋值给内置对象 OUT 的内容'),
168
+ status: z.coerce.number().describe('状态,1-启用'),
169
+ tenantdbcode: z.string().describe('保留字段,租户数据库编码'),
170
+ tenantdbname: z.string().describe('保留字段,租户数据库操作权限,枚举值含义:只读-数据库只能查询不能增删改;读写-数据库可增删改查;报表-保留字段'),
171
+ tenantdbtype: z.string().describe('tenantdbname 对应的 key 值'),
172
+ uilogicscript: z.string().describe('离线脚本,仅用于 app 端离线数据提交'),
173
+ usedatarule: z.string().describe('1 代表使用数据权限')
174
+ },
175
+ annotations: {
176
+ readOnlyHint: true, // 此操作不会修改数据
177
+ destructiveHint: false, // 此操作不具有破坏性
178
+ idempotentHint: true // 重复调用结果相同
179
+ }
180
+ },
181
+ handler: async (args) => {
182
+ const { modellogiccode } = args;
183
+ try {
184
+ const res = await getModelLogic({ modellogiccode });
185
+ return {
186
+ content: [{
187
+ type: 'text',
188
+ text: JSON.stringify(res.resp_data)
189
+ }],
190
+ // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
191
+ // structuredContent 与之匹配,否则会抛 -32602;这里同时返回
192
+ // 文本(给人/模型阅读)和结构化内容(供 schema 校验)。
193
+ structuredContent: res.resp_data
194
+ };
195
+ }
196
+ catch (e) {
197
+ // 业务/网络错误:HTTP 非 200 时 Axios 已在传输层抛出,
198
+ // 错误体形如 {"error_type":600,"error_code":"token无效,请重新登录","error_params":null}
199
+ // 将其原始 JSON 原样返回给模型,不做二次包装。
200
+ const err = e;
201
+ const body = err.response?.data ?? e;
202
+ return {
203
+ isError: true,
204
+ content: [{
205
+ type: 'text',
206
+ text: JSON.stringify(body)
207
+ }]
208
+ };
209
+ }
210
+ }
211
+ }
212
+ ];
213
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/tools/logic/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export const BASE_URL = "http://mconfig.xuantongkeji.com:51074";
2
+ // username=xxx&password=xxx&tenantCode=xxx&envName=xxx
3
+ export const USERNAME_KEY = 'username';
4
+ export const PASSWORD_KEY = 'password';
5
+ export const TENANT_CODE_KEY = 'tenantCode';
6
+ export const ENV_NAME_KEY = 'envName';
7
+ function req(name, fallback) {
8
+ const args = process.argv.slice(2);
9
+ const query = args.join('&');
10
+ const params = new URLSearchParams(query);
11
+ const v = params.get(name);
12
+ if (v !== null && v !== '') {
13
+ return v;
14
+ }
15
+ if (fallback !== undefined) {
16
+ return fallback;
17
+ }
18
+ throw new Error(`Missing required arg: ${name}`);
19
+ }
20
+ export const config = {
21
+ username: req(USERNAME_KEY),
22
+ password: req(PASSWORD_KEY),
23
+ tenantCode: req(TENANT_CODE_KEY),
24
+ envName: req(ENV_NAME_KEY),
25
+ };
26
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,uCAAuC,CAAA;AAE/D,uDAAuD;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAA;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAA;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAA;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAA;AASrC,SAAS,GAAG,CAAC,IAAY,EAAE,QAAiB;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAA;IAEzC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC;IAC3B,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,eAAe,CAAC;IAChC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC;CAC3B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-types.js","sourceRoot":"","sources":["../../src/utils/mcp-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import axios from "axios";
2
+ import { BASE_URL } from "./config.js";
3
+ import { getToken } from "../store/token.js";
4
+ import { getTenant } from "../store/tenant.js";
5
+ /**
6
+ * 内部 axios 实例,统一配置超时与基础地址。
7
+ * baseURL 为默认值(center),具体请求可在 request() 中按 type 覆盖。
8
+ */
9
+ const service = axios.create({
10
+ baseURL: BASE_URL || "",
11
+ timeout: 20000,
12
+ headers: {
13
+ "Content-Type": "application/json",
14
+ },
15
+ });
16
+ /**
17
+ * 请求拦截器:从 token 存储器读取 token(环境变量或内存缓存),
18
+ * 若已鉴权则注入到请求头,key 为 `token`,使后续业务请求自动携带鉴权信息。
19
+ */
20
+ service.interceptors.request.use((config) => {
21
+ const token = getToken();
22
+ if (token) {
23
+ config.headers = config.headers || {};
24
+ config.headers.token = token;
25
+ }
26
+ return config;
27
+ });
28
+ /**
29
+ * 响应拦截器:剥离 AxiosResponse 包装,直接返回响应体 data,
30
+ * 使 `request<T>()` 的返回类型即为业务数据类型 T。
31
+ */
32
+ service.interceptors.response.use((response) => response.data, (error) => Promise.reject(error));
33
+ /**
34
+ * 统一请求入口。
35
+ *
36
+ * 用法:
37
+ * ```ts
38
+ * // 中心服务(默认)
39
+ * request<Resp>({ url: "/api/x", method: "post", data: {} })
40
+ * // 指定租户服务
41
+ * request<Resp>({ url: "/api/y", method: "get", type: "tenant" })
42
+ * ```
43
+ * - `type` 可选,默认 `"center"`:用 BASE_URL 作为基础地址。
44
+ * - `type: "tenant"`:用当前租户 `Tenant.conn.config` 作为基础地址;
45
+ * 若尚未设置租户信息(未调用 setTenant)则直接 reject。
46
+ *
47
+ * 返回值为响应体(已剥离 AxiosResponse 包装),类型即传入的泛型 T。
48
+ *
49
+ * @typeParam T 响应体 data 的类型,默认 any
50
+ * @param config 请求配置,可额外携带 `type`
51
+ */
52
+ export default function request(config) {
53
+ const type = config.type ?? "center";
54
+ if (type === "tenant") {
55
+ const tenant = getTenant();
56
+ if (!tenant) {
57
+ return Promise.reject(new Error("type 为 tenant 时,必须先调用 setTenant() 设置租户信息"));
58
+ }
59
+ config.baseURL = tenant.conn.config;
60
+ }
61
+ else {
62
+ config.baseURL = BASE_URL || "";
63
+ }
64
+ return service(config);
65
+ }
66
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/utils/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAgB9C;;;GAGG;AACH,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,QAAQ,IAAI,EAAE;IACvB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;KACnC;CACF,CAAC,CAAA;AAEF;;;GAGG;AACH,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;QACrC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;IAC9B,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA;AAEF;;;GAGG;AACH,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC/B,CAAC,QAAuB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CACjC,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAU,MAAqB;IAC5D,MAAM,IAAI,GAAgB,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAA;IAEjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,0CAA0C,CAAC,CACtD,CAAA;QACH,CAAC;QACD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAA;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,GAAG,QAAQ,IAAI,EAAE,CAAA;IACjC,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAA0B,CAAA;AACjD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "flycode-mcp",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "flycode-mcp": "dist/index.js"
9
+ },
10
+ "files": ["dist", "README.md", "LICENSE"],
11
+ "scripts": {
12
+ "build": "tsc -p tsconfig.json",
13
+ "start": "tsc -p tsconfig.json && node dist/index.js",
14
+ "dev": "tsc -w -p tsconfig.json"
15
+ },
16
+ "keywords": [
17
+ "flycode",
18
+ "mcp"
19
+ ],
20
+ "author": "Trust会长",
21
+ "license": "AGPL-3.0-or-later",
22
+ "description": "A MCP Server for flycode language.",
23
+ "dependencies": {
24
+ "@modelcontextprotocol/sdk": "^1.30.0",
25
+ "axios": "^1.19.0",
26
+ "zod": "^4.4.3"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^26.1.2",
30
+ "ts-node": "^10.9.2",
31
+ "typescript": "^7.0.2"
32
+ }
33
+ }