Skip to content

Commit f7dc230

Browse files
committed
wip
1 parent d6bd5d7 commit f7dc230

File tree

7 files changed

+22
-11
lines changed

7 files changed

+22
-11
lines changed

src/server.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { type ServerCommand } from "./telemetry/types.js";
1212
import { CallToolRequestSchema, CallToolResult } from "@modelcontextprotocol/sdk/types.js";
1313
import assert from "assert";
1414
import { detectContainerEnv } from "./common/container.js";
15+
import { ToolBase } from "./tools/tool.js";
1516

1617
export interface ServerOptions {
1718
session: Session;
@@ -25,6 +26,7 @@ export class Server {
2526
private readonly mcpServer: McpServer;
2627
private readonly telemetry: Telemetry;
2728
public readonly userConfig: UserConfig;
29+
public readonly tools: ToolBase[] = [];
2830
private readonly startTime: number;
2931

3032
constructor({ session, mcpServer, userConfig, telemetry }: ServerOptions) {
@@ -141,8 +143,11 @@ export class Server {
141143
}
142144

143145
private registerTools() {
144-
for (const tool of [...AtlasTools, ...MongoDbTools]) {
145-
new tool(this.session, this.userConfig, this.telemetry).register(this.mcpServer);
146+
for (const toolConstructor of [...AtlasTools, ...MongoDbTools]) {
147+
const tool = new toolConstructor(this.session, this.userConfig, this.telemetry);
148+
if (tool.register(this.mcpServer)) {
149+
this.tools.push(tool);
150+
}
146151
}
147152
}
148153

src/tools/atlas/tools.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { ListDBUsersTool } from "./read/listDBUsers.js";
88
import { CreateDBUserTool } from "./create/createDBUser.js";
99
import { CreateProjectTool } from "./create/createProject.js";
1010
import { ListOrganizationsTool } from "./read/listOrgs.js";
11-
import { ConnectClusterTool } from "./metadata/connectCluster.js";
11+
import { ConnectClusterTool } from "./connect/connectCluster.js";
1212
import { ListAlertsTool } from "./read/listAlerts.js";
1313

1414
export const AtlasTools = [

src/tools/mongodb/metadata/connect.ts renamed to src/tools/mongodb/connect/connect.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export class ConnectTool extends MongoDBToolBase {
4242
connectionString: z.string().optional(),
4343
};
4444

45-
protected operationType: OperationType = "metadata";
45+
protected operationType: OperationType = "connect";
4646

4747
constructor(session: Session, config: UserConfig, telemetry: Telemetry) {
4848
super(session, config, telemetry);
@@ -72,10 +72,13 @@ export class ConnectTool extends MongoDBToolBase {
7272
};
7373
}
7474

75-
public register(server: McpServer): void {
76-
super.register(server);
75+
public register(server: McpServer): boolean {
76+
if (super.register(server)) {
77+
this.updateMetadata();
78+
return true;
79+
}
7780

78-
this.updateMetadata();
81+
return false;
7982
}
8083

8184
private updateMetadata(): void {

src/tools/mongodb/tools.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ConnectTool } from "./metadata/connect.js";
1+
import { ConnectTool } from "./connect/connect.js";
22
import { ListCollectionsTool } from "./metadata/listCollections.js";
33
import { CollectionIndexesTool } from "./read/collectionIndexes.js";
44
import { ListDatabasesTool } from "./metadata/listDatabases.js";

src/tools/tool.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { UserConfig } from "../config.js";
99

1010
export type ToolArgs<Args extends ZodRawShape> = z.objectOutputType<Args, ZodNever>;
1111

12-
export type OperationType = "metadata" | "read" | "create" | "delete" | "update";
12+
export type OperationType = "metadata" | "read" | "create" | "delete" | "update" | "connect";
1313
export type ToolCategory = "mongodb" | "atlas";
1414
export type TelemetryToolMetadata = {
1515
projectId?: string;
@@ -36,6 +36,7 @@ export abstract class ToolBase {
3636
switch (this.operationType) {
3737
case "read":
3838
case "metadata":
39+
case "connect":
3940
annotations.readOnlyHint = true;
4041
annotations.destructiveHint = false;
4142
break;
@@ -63,9 +64,9 @@ export abstract class ToolBase {
6364
protected readonly telemetry: Telemetry
6465
) {}
6566

66-
public register(server: McpServer): void {
67+
public register(server: McpServer): boolean {
6768
if (!this.verifyAllowed()) {
68-
return;
69+
return false;
6970
}
7071

7172
const callback: ToolCallback<typeof this.argsShape> = async (...args) => {
@@ -120,6 +121,8 @@ export abstract class ToolBase {
120121

121122
server.sendToolListChanged();
122123
};
124+
125+
return true;
123126
}
124127

125128
protected update?: (updates: { name?: string; description?: string; inputSchema?: AnyZodObject }) => void;

0 commit comments

Comments
 (0)