Skip to content

Commit abc2bfd

Browse files
committed
feat(database): fix jsonSchemaToMermaid parameter format 🔧
- Fix jsonSchemaToMermaid function to accept {modelName: schema} format object - Add automatic related models schema fetching functionality - Integrate main model and related models schemas for complete Mermaid diagrams - Add error handling for individual related model queries - Ensure schema mapping includes all relationship targets
1 parent 1079e74 commit abc2bfd

3 files changed

Lines changed: 40 additions & 11 deletions

File tree

mcp/package-lock.json

Lines changed: 8 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mcp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
"author": "TencentCloudBase",
5656
"license": "MIT",
5757
"dependencies": {
58-
"@cloudbase/cals": "^1.2.18-alpha.0",
58+
"@cloudbase/cals": "^1.2.18-alpha.1",
5959
"@cloudbase/manager-node": "^4.4.2",
6060
"@cloudbase/mcp": "^1.0.0-beta.25",
6161
"@cloudbase/toolbox": "0.7.6",

mcp/src/tools/database.ts

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,10 +1362,38 @@ export function registerDatabaseTools(server: ExtendedMcpServer) {
13621362

13631363
// 尝试生成Mermaid图表
13641364
let mermaidDiagram = null;
1365-
if (result.Data.Schema && jsonSchemaToMermaid) {
1365+
if (result.Data.Schema && jsonSchemaToMermaid && simplifiedSchema && !simplifiedSchema.error) {
13661366
try {
1367-
const schema = JSON.parse(result.Data.Schema);
1368-
mermaidDiagram = jsonSchemaToMermaid(schema);
1367+
const mainSchema = JSON.parse(result.Data.Schema);
1368+
const schemasMap: { [modelName: string]: any } = {
1369+
[name]: mainSchema
1370+
};
1371+
1372+
// 获取关联模型的 schema
1373+
if (simplifiedSchema.relations && simplifiedSchema.relations.length > 0) {
1374+
const relatedModelNames = [...new Set(simplifiedSchema.relations.map((rel: any) => rel.targetModel))];
1375+
1376+
for (const relatedModelName of relatedModelNames) {
1377+
try {
1378+
const relatedResult = await cloudbase.commonService('lowcode').call({
1379+
Action: 'DescribeBasicDataSource',
1380+
Param: {
1381+
EnvId: currentEnvId,
1382+
Name: relatedModelName
1383+
}
1384+
});
1385+
1386+
if (relatedResult.Data && relatedResult.Data.Schema) {
1387+
schemasMap[relatedModelName] = JSON.parse(relatedResult.Data.Schema);
1388+
}
1389+
} catch (e) {
1390+
console.warn(`获取关联模型 ${relatedModelName} 的 schema 失败:`, e);
1391+
}
1392+
}
1393+
}
1394+
1395+
// 调用 jsonSchemaToMermaid,传入正确的参数格式
1396+
mermaidDiagram = jsonSchemaToMermaid(schemasMap);
13691397
} catch (e) {
13701398
console.warn('生成Mermaid图表失败:', e);
13711399
}

0 commit comments

Comments
 (0)