Skip to main content
Glama

SystemPrompt MCP Notion Server

index.test.ts4.66 kB
import { jest, describe, it, expect, beforeEach, afterEach, } from "@jest/globals"; import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { MockServer } from "../__mocks__/@modelcontextprotocol/sdk"; import { SystemPromptService } from "../services/systemprompt-service.js"; import { NotionService } from "../services/notion-service.js"; import { ListResourcesRequestSchema, ReadResourceRequestSchema, ListToolsRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, CallToolRequestSchema, CreateMessageRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import { serverConfig, serverCapabilities } from "../config/server-config.js"; import { main } from "../index.js"; // Mock dependencies jest.mock("../services/systemprompt-service.js", () => ({ SystemPromptService: { initialize: jest.fn(), getInstance: jest.fn(), cleanup: jest.fn(), }, })); jest.mock("../services/notion-service.js", () => ({ NotionService: { initialize: jest.fn(), getInstance: jest.fn().mockReturnValue({ searchPages: jest.fn(), getPage: jest.fn(), createPage: jest.fn(), updatePage: jest.fn(), deletePage: jest.fn(), }), }, })); jest.mock("dotenv", () => ({ config: jest.fn(), })); // Mock the server module const mockServer: MockServer = { setRequestHandler: jest.fn(), connect: jest.fn(), onRequest: jest.fn(), }; jest.mock("@modelcontextprotocol/sdk/server/index.js", () => ({ Server: jest.fn().mockImplementation(() => mockServer), })); // Mock process.env const originalEnv = process.env; describe("Server Initialization", () => { beforeEach(() => { jest.clearAllMocks(); process.env = { ...originalEnv }; jest.resetModules(); // Reset server mock Object.assign(mockServer, { setRequestHandler: jest.fn(), connect: jest.fn(), onRequest: jest.fn(), }); }); afterAll(() => { process.env = originalEnv; }); it("should initialize services and connect server with valid environment", async () => { // Set up environment variables process.env.SYSTEMPROMPT_API_KEY = "test-systemprompt-key"; process.env.NOTION_API_KEY = "test-notion-key"; // Run main function await main(); // Verify SystemPrompt service initialization expect(SystemPromptService.initialize).toHaveBeenCalledWith( "test-systemprompt-key" ); // Verify Notion service initialization expect(NotionService.initialize).toHaveBeenCalledWith("test-notion-key"); // Verify server initialization expect(Server).toHaveBeenCalledWith(serverConfig, serverCapabilities); // Verify request handlers were set expect(mockServer.setRequestHandler).toHaveBeenCalledWith( ListResourcesRequestSchema, expect.any(Function) ); expect(mockServer.setRequestHandler).toHaveBeenCalledWith( ReadResourceRequestSchema, expect.any(Function) ); expect(mockServer.setRequestHandler).toHaveBeenCalledWith( ListToolsRequestSchema, expect.any(Function) ); expect(mockServer.setRequestHandler).toHaveBeenCalledWith( ListPromptsRequestSchema, expect.any(Function) ); expect(mockServer.setRequestHandler).toHaveBeenCalledWith( GetPromptRequestSchema, expect.any(Function) ); expect(mockServer.setRequestHandler).toHaveBeenCalledWith( CallToolRequestSchema, expect.any(Function) ); expect(mockServer.setRequestHandler).toHaveBeenCalledWith( CreateMessageRequestSchema, expect.any(Function) ); // Verify server connection expect(mockServer.connect).toHaveBeenCalled(); }); it("should throw error if SYSTEMPROMPT_API_KEY is missing", async () => { // Set up environment variables without SYSTEMPROMPT_API_KEY process.env.NOTION_API_KEY = "test-notion-key"; delete process.env.SYSTEMPROMPT_API_KEY; // Import and run main function const { main } = await import("../index.js"); await expect(main()).rejects.toThrow( "SYSTEMPROMPT_API_KEY environment variable is required" ); }); it("should throw error if NOTION_API_KEY is missing", async () => { // Set up environment variables without NOTION_API_KEY process.env.SYSTEMPROMPT_API_KEY = "test-systemprompt-key"; delete process.env.NOTION_API_KEY; // Import and run main function const { main } = await import("../index.js"); await expect(main()).rejects.toThrow( "NOTION_API_KEY environment variable is required" ); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ejb503/systemprompt-mcp-notion'

If you have feedback or need assistance with the MCP directory API, please join our Discord server