UNPKG

ai-knowledge-hub

Version:

MCP server that provides unified access to organizational knowledge across multiple platforms (local docs, Guru, Notion)

129 lines (128 loc) 5.11 kB
import { AppendBlockChildrenRequest, CreateCommentRequest, CreatePageRequest, DatabaseQueryRequest, NotionBlock, NotionBlockChildren, NotionColor, NotionComment, NotionCommentResults, NotionConfig, NotionDatabase, NotionDatabaseQueryResults, NotionPage, NotionRichText, UpdatePageRequest } from '../types/notion.js'; import { ConversionOptions, ConversionResult } from '../types/markdown.js'; import { EnhancedSearchResult, SearchStatistics } from '../types/search.js'; import { NotionBlockData } from '../utils/notion-blocks.js'; export declare class NotionService { private config; private baseUrl; private propertyTypeCache; constructor(config: NotionConfig); private analyzeSearchMatch; private getPropertyType; private setPropertyValue; private makeRequest; getDatabase(databaseId: string): Promise<NotionDatabase>; queryDatabase(request: DatabaseQueryRequest): Promise<NotionDatabaseQueryResults>; updateDatabase(databaseId: string, updateData: unknown): Promise<NotionDatabase>; getPage(pageId: string): Promise<NotionPage>; createPage(request: CreatePageRequest): Promise<NotionPage>; updatePage(pageId: string, request: UpdatePageRequest): Promise<NotionPage>; archivePage(pageId: string): Promise<NotionPage>; getBlockChildren(blockId: string, startCursor?: string): Promise<NotionBlockChildren>; appendBlockChildren(blockId: string, request: AppendBlockChildrenRequest): Promise<NotionBlockChildren>; /** * Append blocks to a page/block with automatic chunking for 100-block limit */ appendBlockChildrenChunked(blockId: string, blocks: NotionBlockData[], maxBlocksPerRequest?: number): Promise<NotionBlockChildren[]>; updateBlock(blockId: string, updateData: unknown): Promise<NotionBlock>; deleteBlock(blockId: string): Promise<NotionBlock>; getComments(pageId: string): Promise<NotionCommentResults>; createComment(request: CreateCommentRequest): Promise<NotionComment>; private getAllBlocksRecursively; getAllBlocksRecursivelyParallel(blockId: string, maxConcurrency?: number): Promise<NotionBlock[]>; createRichText(content: string, annotations?: Partial<{ bold: boolean; italic: boolean; strikethrough: boolean; underline: boolean; code: boolean; color: NotionColor; }>, link?: string): NotionRichText; /** * Create a Notion page from markdown content */ createPageFromMarkdown(databaseId: string, options: { markdown?: string; filePath?: string; pageTitle?: string; conversionOptions?: Partial<ConversionOptions>; metadata?: { category?: string; tags?: string[]; description?: string; status?: string; }; }): Promise<{ page: NotionPage; conversionResult: ConversionResult; }>; /** * Export a Notion page to markdown */ exportPageToMarkdown(pageId: string, options?: Partial<ConversionOptions>): Promise<{ markdown: string; page: NotionPage; conversionResult: ConversionResult; }>; /** * Update page metadata (properties only) */ updatePageMetadata(pageId: string, metadata: { category?: string; tags?: string[]; description?: string; status?: string; }): Promise<NotionPage>; /** * Update page content (create new page, keep old page) */ updatePageContent(pageId: string, options: { markdown?: string; filePath?: string; conversionOptions?: Partial<ConversionOptions>; }): Promise<{ conversionResult: ConversionResult; newPageId: string; }>; /** * List/query database pages with advanced filtering and sorting */ listDatabasePages(databaseId: string, options?: { limit?: number; search?: string; category?: string; tags?: string[]; status?: string; sortBy?: 'title' | 'last_edited' | 'created' | 'category' | 'status'; sortOrder?: 'ascending' | 'descending'; startCursor?: string; searchMode?: 'tags' | 'full-text' | 'combined'; }): Promise<NotionDatabaseQueryResults>; /** * Enhanced version of listDatabasePages that includes search match metadata */ searchPagesWithMetadata(databaseId: string, options?: { limit?: number; search?: string; category?: string; tags?: string[]; status?: string; sortBy?: 'title' | 'last_edited' | 'created' | 'category' | 'status'; sortOrder?: 'ascending' | 'descending'; startCursor?: string; searchMode?: 'tags' | 'full-text' | 'combined'; }): Promise<{ results: EnhancedSearchResult[]; statistics: SearchStatistics; hasMore: boolean; nextCursor?: string; }>; /** * Find the title property name in a database */ private getTitlePropertyName; /** * Ensure database has required properties for metadata */ private ensureDatabaseProperties; }