• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mongodb-js / mongodb-mcp-server / 14669311657

25 Apr 2025 04:38PM UTC coverage: 81.696%. Remained the same
14669311657

Pull #128

github

fmenezes
chore: follow tools structure in atlas tools
Pull Request #128: chore: follow tools structure in atlas tools

128 of 208 branches covered (61.54%)

Branch coverage included in aggregate %.

20 of 20 new or added lines in 11 files covered. (100.0%)

720 of 830 relevant lines covered (86.75%)

44.06 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

50.0
/src/tools/atlas/read/listClusters.ts
1
import { z } from "zod";
31✔
2
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
3
import { AtlasToolBase } from "../atlasTool.js";
31✔
4
import { ToolArgs, OperationType } from "../../tool.js";
5
import { PaginatedClusterDescription20240805, PaginatedOrgGroupView, Group } from "../../../common/atlas/openapi.js";
6

7
export class ListClustersTool extends AtlasToolBase {
31✔
8
    protected name = "atlas-list-clusters";
27✔
9
    protected description = "List MongoDB Atlas clusters";
27✔
10
    protected operationType: OperationType = "read";
27✔
11
    protected argsShape = {
27✔
12
        projectId: z.string().describe("Atlas project ID to filter clusters").optional(),
13
    };
14

15
    protected async execute({ projectId }: ToolArgs<typeof this.argsShape>): Promise<CallToolResult> {
16
        if (!projectId) {
1!
17
            const data = await this.session.apiClient.listClustersForAllProjects();
×
18

19
            return this.formatAllClustersTable(data);
×
20
        } else {
21
            const project = await this.session.apiClient.getProject({
1✔
22
                params: {
23
                    path: {
24
                        groupId: projectId,
25
                    },
26
                },
27
            });
28

29
            if (!project?.id) {
1!
30
                throw new Error(`Project with ID "${projectId}" not found.`);
×
31
            }
32

33
            const data = await this.session.apiClient.listClusters({
1✔
34
                params: {
35
                    path: {
36
                        groupId: project.id || "",
1!
37
                    },
38
                },
39
            });
40

41
            return this.formatClustersTable(project, data);
1✔
42
        }
43
    }
44

45
    private formatAllClustersTable(clusters?: PaginatedOrgGroupView): CallToolResult {
46
        if (!clusters?.results?.length) {
×
47
            throw new Error("No clusters found.");
×
48
        }
49
        const formattedClusters = clusters.results
×
50
            .map((result) => {
51
                return (result.clusters || []).map((cluster) => {
×
52
                    return { ...result, ...cluster, clusters: undefined };
×
53
                });
54
            })
55
            .flat();
56
        if (!formattedClusters.length) {
×
57
            throw new Error("No clusters found.");
×
58
        }
59
        const rows = formattedClusters
×
60
            .map((cluster) => {
61
                return `${cluster.groupName} (${cluster.groupId}) | ${cluster.name}`;
×
62
            })
63
            .join("\n");
64
        return {
×
65
            content: [
66
                {
67
                    type: "text",
68
                    text: `Project | Cluster Name
69
----------------|----------------
70
${rows}`,
71
                },
72
            ],
73
        };
74
    }
75

76
    private formatClustersTable(project: Group, clusters?: PaginatedClusterDescription20240805): CallToolResult {
77
        if (!clusters?.results?.length) {
1!
78
            throw new Error("No clusters found.");
×
79
        }
80
        const rows = clusters.results
1✔
81
            .map((cluster) => {
82
                const connectionString = cluster.connectionStrings?.standard || "N/A";
1✔
83
                const mongoDBVersion = cluster.mongoDBVersion || "N/A";
1!
84
                return `${cluster.name} | ${cluster.stateName} | ${mongoDBVersion} | ${connectionString}`;
1✔
85
            })
86
            .join("\n");
87
        return {
1✔
88
            content: [
89
                {
90
                    type: "text",
91
                    text: `Here are your MongoDB Atlas clusters in project "${project.name}" (${project.id}):`,
92
                },
93
                {
94
                    type: "text",
95
                    text: `Cluster Name | State | MongoDB Version | Connection String
96
----------------|----------------|----------------|----------------|----------------
97
${rows}`,
98
                },
99
            ],
100
        };
101
    }
102
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc