Skip to content

Commit d2c2ee6

Browse files
committed
Draft
1 parent 5871dc0 commit d2c2ee6

File tree

4 files changed

+93
-3
lines changed

4 files changed

+93
-3
lines changed

scripts/accuracy/runAccuracyTests.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ export MDB_ACCURACY_RUN_ID=$(npx uuid v4)
88
# export MDB_AZURE_OPEN_AI_API_KEY=""
99
# export MDB_AZURE_OPEN_AI_API_URL=""
1010

11+
# For providing Atlas API credentials (required for Atlas tools)
12+
# Set dummy values for testing (allows Atlas tools to be registered for mocking)
13+
export MDB_MCP_API_CLIENT_ID=${MDB_MCP_API_CLIENT_ID:-"test-atlas-client-id"}
14+
export MDB_MCP_API_CLIENT_SECRET=${MDB_MCP_API_CLIENT_SECRET:-"test-atlas-client-secret"}
15+
1116
# For providing a mongodb based storage to store accuracy result
1217
# export MDB_ACCURACY_MDB_URL=""
1318
# export MDB_ACCURACY_MDB_DB=""
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { PerformanceAdvisorOperation } from "../../src/common/atlas/performanceAdvisorUtils.js";
2+
import { describeAccuracyTests } from "./sdk/describeAccuracyTests.js";
3+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
4+
5+
describeAccuracyTests([
6+
{
7+
prompt: "Can you give me index suggestions for the database 'mflix' in the project 'mflix' and cluster 'mflix-cluster'?",
8+
expectedToolCalls: [
9+
{
10+
toolName: "atlas-list-projects",
11+
parameters: {},
12+
},
13+
{
14+
toolName: "atlas-list-clusters",
15+
parameters: {
16+
projectId: "mflix",
17+
},
18+
},
19+
{
20+
toolName: "atlas-list-performance-advisor",
21+
parameters: {
22+
projectId: "mflix",
23+
clusterName: "mflix-cluster",
24+
operations: [PerformanceAdvisorOperation.SUGGESTED_INDEXES],
25+
},
26+
},
27+
],
28+
mockedTools: {
29+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
30+
"atlas-list-performance-advisor": (..._parameters): CallToolResult => {
31+
return {
32+
content: [
33+
{
34+
type: "text",
35+
text: "Found 2 performance advisor recommendations\n\n## Suggested Indexes\n# | Namespace | Weight | Avg Obj Size | Index Keys\n---|-----------|--------|--------------|------------\n1 | mflix.movies | 0.8 | 1024 | title, year\n2 | mflix.shows | 0.6 | 512 | genre, rating",
36+
},
37+
],
38+
};
39+
},
40+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
41+
"atlas-list-projects": (..._parameters): CallToolResult => {
42+
return {
43+
content: [
44+
{
45+
type: "text",
46+
text: "Found 1 project\n\n# | Name | ID\n---|------|----\n1 | mflix | mflix",
47+
},
48+
],
49+
};
50+
},
51+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
52+
"atlas-list-clusters": (..._parameters): CallToolResult => {
53+
return {
54+
content: [
55+
{
56+
type: "text",
57+
text: "Found 1 cluster\n\n# | Name | Type | State\n---|------|------|-----\n1 | mflix-cluster | REPLICASET | IDLE",
58+
},
59+
],
60+
};
61+
},
62+
},
63+
},
64+
]);

tests/accuracy/sdk/accuracyTestingClient.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,24 @@ export class AccuracyTestingClient {
7979
this.llmToolCalls = [];
8080
}
8181

82-
static async initializeClient(mdbConnectionString: string): Promise<AccuracyTestingClient> {
82+
static async initializeClient(
83+
mdbConnectionString: string,
84+
atlasApiClientId?: string,
85+
atlasApiClientSecret?: string
86+
): Promise<AccuracyTestingClient> {
87+
const args = [MCP_SERVER_CLI_SCRIPT, "--connectionString", mdbConnectionString];
88+
89+
// Add Atlas API credentials if provided
90+
if (atlasApiClientId) {
91+
args.push("--apiClientId", atlasApiClientId);
92+
}
93+
if (atlasApiClientSecret) {
94+
args.push("--apiClientSecret", atlasApiClientSecret);
95+
}
96+
8397
const clientTransport = new StdioClientTransport({
8498
command: process.execPath,
85-
args: [MCP_SERVER_CLI_SCRIPT, "--connectionString", mdbConnectionString],
99+
args,
86100
});
87101

88102
const client = await createMCPClient({

tests/accuracy/sdk/describeAccuracyTests.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ export function describeAccuracyTests(accuracyTestConfigs: AccuracyTestConfig[])
6666
const mdbIntegration = setupMongoDBIntegrationTest({}, []);
6767
const { populateTestData, cleanupTestDatabases } = prepareTestData(mdbIntegration);
6868

69+
const atlasApiClientId = process.env.MDB_MCP_API_CLIENT_ID;
70+
const atlasApiClientSecret = process.env.MDB_MCP_API_CLIENT_SECRET;
71+
6972
let commitSHA: string;
7073
let accuracyResultStorage: AccuracyResultStorage;
7174
let testMCPClient: AccuracyTestingClient;
@@ -79,7 +82,11 @@ export function describeAccuracyTests(accuracyTestConfigs: AccuracyTestConfig[])
7982
commitSHA = retrievedCommitSHA;
8083

8184
accuracyResultStorage = getAccuracyResultStorage();
82-
testMCPClient = await AccuracyTestingClient.initializeClient(mdbIntegration.connectionString());
85+
testMCPClient = await AccuracyTestingClient.initializeClient(
86+
mdbIntegration.connectionString(),
87+
atlasApiClientId,
88+
atlasApiClientSecret
89+
);
8390
agent = getVercelToolCallingAgent();
8491
});
8592

0 commit comments

Comments
 (0)