Skip to main content
Glama
server.js3.57 kB
import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js'; import { NotionClient } from './client.js'; import { createPageToolDefinition, retrievePageToolDefinition, updatePageToolDefinition, retrievePagePropertyToolDefinition, handleCreatePageTool, handleRetrievePageTool, handleUpdatePageTool, handleRetrievePagePropertyTool } from './tools/index.js'; export class NotionServer { client; server; constructor(apiKey, version) { this.client = new NotionClient(apiKey, version); this.server = new Server({ name: 'notion-mcp', version: '0.1.0', }, { capabilities: { tools: {}, }, }); this.setupHandlers(); this.setupErrorHandling(); } setupHandlers() { this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ createPageToolDefinition, retrievePageToolDefinition, updatePageToolDefinition, retrievePagePropertyToolDefinition ], })); this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; switch (name) { case 'notion_create_page': return handleCreatePageTool(this.client, args); case 'notion_retrieve_page': return handleRetrievePageTool(this.client, args); case 'notion_update_page': return handleUpdatePageTool(this.client, args); case 'notion_retrieve_page_property': return handleRetrievePagePropertyTool(this.client, args); default: throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); } }); } setupErrorHandling() { this.server.onerror = (error) => console.error('[MCP Error]', error); process.on('SIGINT', async () => { await this.server.close(); process.exit(0); }); } getServer() { return this.server; } } export function createStandaloneServer(apiKey, version) { const server = new Server({ name: "notion-mcp-standalone", version: "0.1.0", }, { capabilities: { tools: {}, }, }); const client = new NotionClient(apiKey, version); server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ createPageToolDefinition, retrievePageToolDefinition, updatePageToolDefinition, retrievePagePropertyToolDefinition ], })); server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; switch (name) { case 'notion_create_page': return handleCreatePageTool(client, args); case 'notion_retrieve_page': return handleRetrievePageTool(client, args); case 'notion_update_page': return handleUpdatePageTool(client, args); case 'notion_retrieve_page_property': return handleRetrievePagePropertyTool(client, args); default: throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); } }); return server; }

Latest Blog Posts

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/michaelwaves/notion-mcp'

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