Skip to main content
Glama

Notion MCP Server

by snowan
notion.js4.11 kB
const notionService = require('../services/notion'); /** * Search pages controller * @param {Object} req - Express request object * @param {Object} res - Express response object */ const searchPages = async (req, res) => { try { const { query } = req.body; if (!query) { return res.status(400).json({ error: 'Query parameter is required' }); } const results = await notionService.searchPages(query); return res.json({ results }); } catch (error) { console.error('Controller error - searchPages:', error); return res.status(500).json({ error: 'Failed to search pages', details: error.message }); } }; /** * Get page controller * @param {Object} req - Express request object * @param {Object} res - Express response object */ const getPage = async (req, res) => { try { const { page_id } = req.body; if (!page_id) { return res.status(400).json({ error: 'Page ID is required' }); } const pageData = await notionService.getPage(page_id); return res.json(pageData); } catch (error) { console.error('Controller error - getPage:', error); return res.status(500).json({ error: 'Failed to retrieve page', details: error.message }); } }; /** * Query database controller * @param {Object} req - Express request object * @param {Object} res - Express response object */ const queryDatabase = async (req, res) => { try { const { database_id, filter, sorts } = req.body; const results = await notionService.queryDatabase({ database_id, filter, sorts }); return res.json({ results }); } catch (error) { console.error('Controller error - queryDatabase:', error); return res.status(500).json({ error: 'Failed to query database', details: error.message }); } }; /** * Create page controller * @param {Object} req - Express request object * @param {Object} res - Express response object */ const createPage = async (req, res) => { try { const { parent, properties, children } = req.body; if (!parent || !properties) { return res.status(400).json({ error: 'Parent and properties are required' }); } const page = await notionService.createPage({ parent, properties, children }); return res.status(201).json(page); } catch (error) { console.error('Controller error - createPage:', error); return res.status(500).json({ error: 'Failed to create page', details: error.message }); } }; // MCP function handlers const mcpHandlers = { search_pages: async (params) => { const { query } = params; return await notionService.searchPages(query); }, get_page: async (params) => { const { page_id } = params; return await notionService.getPage(page_id); }, query_database: async (params) => { const { database_id, filter, sorts } = params; return await notionService.queryDatabase({ database_id, filter, sorts }); }, create_page: async (params) => { const { parent, properties, children } = params; return await notionService.createPage({ parent, properties, children }); } }; /** * Handle MCP function invocation * @param {Object} req - Express request object * @param {Object} res - Express response object */ const handleMcpCall = async (req, res) => { try { const { function_name, parameters } = req.body; if (!function_name || !mcpHandlers[function_name]) { return res.status(400).json({ error: 'Invalid or missing function name' }); } const result = await mcpHandlers[function_name](parameters || {}); return res.json({ result }); } catch (error) { console.error('MCP function error:', error); return res.status(500).json({ error: 'Function execution failed', details: error.message }); } }; module.exports = { searchPages, getPage, queryDatabase, createPage, handleMcpCall };

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

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