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

mongodb-js / mongodb-mcp-server / 14640870200

24 Apr 2025 11:49AM UTC coverage: 81.603% (+4.1%) from 77.5%
14640870200

Pull #105

github

nirinchev
throw an error
Pull Request #105: chore: add remaining mongodb integration tests

123 of 199 branches covered (61.81%)

Branch coverage included in aggregate %.

13 of 13 new or added lines in 3 files covered. (100.0%)

671 of 774 relevant lines covered (86.69%)

45.35 hits per line

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

74.07
/src/tools/atlas/listDBUsers.ts
1
import { z } from "zod";
30✔
2
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
3
import { AtlasToolBase } from "./atlasTool.js";
30✔
4
import { ToolArgs, OperationType } from "../tool.js";
5
import { DatabaseUserRole, UserScope } from "../../common/atlas/openapi.js";
6

7
export class ListDBUsersTool extends AtlasToolBase {
30✔
8
    protected name = "atlas-list-db-users";
26✔
9
    protected description = "List MongoDB Atlas database users";
26✔
10
    protected operationType: OperationType = "read";
26✔
11
    protected argsShape = {
26✔
12
        projectId: z.string().describe("Atlas project ID to filter DB users"),
13
    };
14

15
    protected async execute({ projectId }: ToolArgs<typeof this.argsShape>): Promise<CallToolResult> {
16
        const data = await this.session.apiClient.listDatabaseUsers({
1✔
17
            params: {
18
                path: {
19
                    groupId: projectId,
20
                },
21
            },
22
        });
23

24
        if (!data?.results?.length) {
1!
25
            throw new Error("No database users found.");
×
26
        }
27

28
        const output =
29
            `Username | Roles | Scopes
1✔
30
----------------|----------------|----------------
31
` +
32
            data.results
33
                .map((user) => {
34
                    return `${user.username} | ${formatRoles(user.roles)} | ${formatScopes(user.scopes)}`;
1✔
35
                })
36
                .join("\n");
37
        return {
1✔
38
            content: [{ type: "text", text: output }],
39
        };
40
    }
41
}
42

43
function formatRoles(roles?: DatabaseUserRole[]) {
44
    if (!roles?.length) {
1!
45
        return "N/A";
×
46
    }
47
    return roles
1✔
48
        .map(
49
            (role) =>
50
                `${role.roleName}${role.databaseName ? `@${role.databaseName}${role.collectionName ? `:${role.collectionName}` : ""}` : ""}`
1!
51
        )
52
        .join(", ");
53
}
54

55
function formatScopes(scopes?: UserScope[]) {
56
    if (!scopes?.length) {
1✔
57
        return "All";
1✔
58
    }
59
    return scopes.map((scope) => `${scope.type}:${scope.name}`).join(", ");
×
60
}
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