Skip to main content
Glama
notion-service.ts4.47 kB
import { Client } from '@notionhq/client'; export class NotionService { private notion: Client; constructor() { const token = process.env.NOTION_TOKEN; if (!token) { throw new Error('NOTION_TOKEN environment variable is required'); } this.notion = new Client({ auth: token, }); } async getPage(pageId: string) { try { const response = await this.notion.pages.retrieve({ page_id: pageId, }); return response; } catch (error) { throw new Error(`Failed to get page: ${error instanceof Error ? error.message : String(error)}`); } } async searchPages(query: string, filter?: { property?: string; value?: any }) { try { const searchParams: any = { query, sort: { direction: 'descending', timestamp: 'last_edited_time', }, }; if (filter) { searchParams.filter = { property: 'object', value: 'page', }; } const response = await this.notion.search(searchParams); return response; } catch (error) { throw new Error(`Failed to search pages: ${error instanceof Error ? error.message : String(error)}`); } } async createPage( parent: { database_id?: string; page_id?: string }, properties: Record<string, any>, children?: any[] ) { try { const createParams: any = { parent, properties, }; if (children) { createParams.children = children; } const response = await this.notion.pages.create(createParams); return response; } catch (error) { throw new Error(`Failed to create page: ${error instanceof Error ? error.message : String(error)}`); } } async updatePage(pageId: string, properties: Record<string, any>) { try { const response = await this.notion.pages.update({ page_id: pageId, properties, }); return response; } catch (error) { throw new Error(`Failed to update page: ${error instanceof Error ? error.message : String(error)}`); } } async queryDatabase( databaseId: string, filter?: any, sorts?: any[], startCursor?: string, pageSize?: number ) { try { const queryParams: any = { database_id: databaseId, }; if (filter) { queryParams.filter = filter; } if (sorts) { queryParams.sorts = sorts; } if (startCursor) { queryParams.start_cursor = startCursor; } if (pageSize) { queryParams.page_size = pageSize; } const response = await this.notion.databases.query(queryParams); return response; } catch (error) { throw new Error(`Failed to query database: ${error instanceof Error ? error.message : String(error)}`); } } async getRecentPages() { try { const response = await this.notion.search({ sort: { direction: 'descending', timestamp: 'last_edited_time', }, filter: { property: 'object', value: 'page', }, page_size: 10, }); return response; } catch (error) { throw new Error(`Failed to get recent pages: ${error instanceof Error ? error.message : String(error)}`); } } async getDatabases() { try { const response = await this.notion.search({ filter: { property: 'object', value: 'database', }, sort: { direction: 'descending', timestamp: 'last_edited_time', }, }); return response; } catch (error) { throw new Error(`Failed to get databases: ${error instanceof Error ? error.message : String(error)}`); } } async getPageContent(pageId: string) { try { const response = await this.notion.blocks.children.list({ block_id: pageId, }); return response; } catch (error) { throw new Error(`Failed to get page content: ${error instanceof Error ? error.message : String(error)}`); } } async appendBlocksToPage(pageId: string, blocks: any[]) { try { const response = await this.notion.blocks.children.append({ block_id: pageId, children: blocks, }); return response; } catch (error) { throw new Error(`Failed to append blocks: ${error instanceof Error ? error.message : String(error)}`); } } }

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/589411/notion_mcp_connection'

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