mcp-mongo-server
Version:
A Model Context Protocol server for MongoDB connections
63 lines (62 loc) • 2.2 kB
JavaScript
export async function handleReadResourceRequest({ request, client, db, isReadOnlyMode, }) {
const url = new URL(request.params.uri);
const collectionName = url.pathname.replace(/^\//, "");
try {
const collection = db.collection(collectionName);
const sample = await collection.findOne({});
const indexes = await collection.indexes();
const schema = sample
? {
type: "collection",
name: collectionName,
fields: Object.entries(sample).map(([key, value]) => ({
name: key,
type: typeof value,
})),
indexes: indexes.map((idx) => ({
name: idx.name,
keys: idx.key,
})),
}
: {
type: "collection",
name: collectionName,
fields: [],
indexes: [],
};
return {
contents: [
{
uri: request.params.uri,
mimeType: "application/json",
text: JSON.stringify(schema, null, 2),
},
],
};
}
catch (error) {
if (error instanceof Error) {
throw new Error(`Failed to read collection ${collectionName}: ${error.message}`);
}
throw new Error(`Failed to read collection ${collectionName}: Unknown error`);
}
}
export async function handleListResourcesRequest({ request, client, db, isReadOnlyMode, }) {
try {
const collections = await db.listCollections().toArray();
return {
resources: collections.map((collection) => ({
uri: `mongodb:///${collection.name}`,
mimeType: "application/json",
name: collection.name,
description: `MongoDB collection: ${collection.name}`,
})),
};
}
catch (error) {
if (error instanceof Error) {
throw new Error(`Failed to list collections: ${error.message}`);
}
throw new Error("Failed to list collections: Unknown error");
}
}