Skip to main content
Glama

Notion MCP Server

by snowan
notion.js3.09 kB
const { Client } = require('@notionhq/client'); // Initialize Notion client const notion = new Client({ auth: process.env.NOTION_API_KEY }); /** * Search for Notion pages * @param {string} query - Search query * @returns {Promise<Array>} - Search results */ const searchPages = async (query) => { try { const response = await notion.search({ query, sort: { direction: 'descending', timestamp: 'last_edited_time', }, }); return response.results; } catch (error) { console.error('Error searching pages:', error); throw error; } }; /** * Get a page by ID * @param {string} pageId - Notion page ID * @returns {Promise<Object>} - Page data */ const getPage = async (pageId) => { try { const page = await notion.pages.retrieve({ page_id: pageId }); // Get page content (blocks) const blocks = await getPageBlocks(pageId); return { page, blocks }; } catch (error) { console.error('Error getting page:', error); throw error; } }; /** * Get all blocks for a page * @param {string} pageId - Page ID * @returns {Promise<Array>} - Array of blocks */ const getPageBlocks = async (pageId) => { try { let results = []; let hasMore = true; let cursor = undefined; while (hasMore) { const response = await notion.blocks.children.list({ block_id: pageId, start_cursor: cursor, }); results = [...results, ...response.results]; hasMore = response.has_more; cursor = response.next_cursor; } return results; } catch (error) { console.error('Error getting page blocks:', error); throw error; } }; /** * Query a database * @param {Object} options - Query options * @returns {Promise<Array>} - Database items */ const queryDatabase = async (options = {}) => { try { const database_id = options.database_id || process.env.NOTION_DATABASE_ID; if (!database_id) { throw new Error('Database ID is required'); } const queryParams = { database_id, }; if (options.filter) { queryParams.filter = options.filter; } if (options.sorts) { queryParams.sorts = options.sorts; } const response = await notion.databases.query(queryParams); return response.results; } catch (error) { console.error('Error querying database:', error); throw error; } }; /** * Create a new page * @param {Object} params - Page parameters * @returns {Promise<Object>} - Created page */ const createPage = async (params) => { try { const { parent, properties, children } = params; const pageParams = { parent, properties }; if (children) { pageParams.children = children; } const response = await notion.pages.create(pageParams); return response; } catch (error) { console.error('Error creating page:', error); throw error; } }; module.exports = { searchPages, getPage, getPageBlocks, queryDatabase, createPage };

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