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
TypeScript
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;
}