mcp-mongo-server
Version:
A Model Context Protocol server for MongoDB connections
66 lines (65 loc) • 3.19 kB
JavaScript
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ListResourceTemplatesRequestSchema, PingRequestSchema, CompleteRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
import { handleReadResourceRequest, handleListResourcesRequest, } from "./schemas/resource.js";
import { handlePingRequest } from "./schemas/ping.js";
import { handleListToolsRequest } from "./schemas/tools.js";
import { handleListPromptsRequest } from "./schemas/prompts.js";
import { handleCallToolRequest } from "./schemas/call.js";
import { handleListResourceTemplatesRequest } from "./schemas/templates.js";
import { handleGetPromptRequest } from "./schemas/prompts.js";
import { handleCompletionRequest } from "./schemas/completion.js";
/**
* Create an MCP server with capabilities for resources (to list/read collections),
* tools (to query data), and prompts (to analyze collections).
*/
export function createServer(client, db, isReadOnlyMode = false, options = {}) {
const server = new Server({
name: "mongodb",
version: "1.3.0",
...options,
}, {
capabilities: {
resources: {},
tools: {},
prompts: {},
},
...options,
});
/**
* Handler for ping requests to check server health
*/
server.setRequestHandler(PingRequestSchema, (request) => handlePingRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler for listing available collections as resources.
*/
server.setRequestHandler(ListResourcesRequestSchema, (request) => handleListResourcesRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler for reading a collection's schema or contents.
*/
server.setRequestHandler(ReadResourceRequestSchema, (request) => handleReadResourceRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler that lists available tools.
*/
server.setRequestHandler(ListToolsRequestSchema, (request) => handleListToolsRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler for MongoDB tools.
*/
server.setRequestHandler(CallToolRequestSchema, (request) => handleCallToolRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler that lists available prompts.
*/
server.setRequestHandler(ListPromptsRequestSchema, (request) => handleListPromptsRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler for collection analysis prompt.
*/
server.setRequestHandler(GetPromptRequestSchema, (request) => handleGetPromptRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler for listing templates.
*/
server.setRequestHandler(ListResourceTemplatesRequestSchema, (request) => handleListResourceTemplatesRequest({ request, client, db, isReadOnlyMode }));
/**
* Handler for completion requests.
*/
server.setRequestHandler(CompleteRequestSchema, (request) => handleCompletionRequest({ request, client, db, isReadOnlyMode }));
return server;
}