UNPKG

msexchange-mcp

Version:

MCP server for Microsoft Exchange/Outlook email operations via Microsoft Graph API

186 lines 6.33 kB
import { z } from 'zod'; import { MailService } from './mail.js'; import { EmailMessage } from '../types/email.js'; export interface SearchQuery { text: string; from?: string[]; to?: string[]; subject?: string; hasAttachments?: boolean; dateRange?: { start?: Date; end?: Date; }; folders?: string[]; categories?: string[]; isRead?: boolean; importance?: 'low' | 'normal' | 'high'; limit?: number; requireAllTerms?: boolean; includeAliases?: boolean; semanticSearch?: boolean; } export interface SearchOptions { accountId?: string; limit?: number; offset?: number; orderBy?: 'receivedDateTime' | 'subject' | 'from' | 'importance' | 'relevance'; orderDirection?: 'asc' | 'desc'; includeBody?: boolean; includeSentItems?: boolean; exactMatch?: boolean; enableSemanticExpansion?: boolean; } export interface SearchResult { emails: EmailMessage[]; totalCount: number; hasMore: boolean; suggestions?: string[]; expandedQuery?: string; searchStrategy?: string; } interface ParsedQuery { terms: string[]; filters: { from: string[]; to: string[]; subject: string[]; hasAttachments?: boolean; dateRange?: { start?: Date | string; end?: Date | string; }; }; originalQuery: string; hasOrOperator?: boolean; orParts?: string[]; } export declare class UnifiedSearchService { private mailService; private aliasManager; constructor(mailService: MailService); /** * Parse natural language query into structured search parameters */ parseQuery(query: string): ParsedQuery; /** * Expand names to known email addresses using AliasManager */ expandAliases(names: string[]): string[]; /** * Expand search terms with semantic concepts */ expandConcepts(terms: string[], enableSemanticExpansion?: boolean): string[]; /** * Build Microsoft Graph filter string */ buildGraphFilter(query: ParsedQuery, options: SearchOptions): string; /** * Build Microsoft Graph search query */ buildSearchQuery(terms: string[], requireAll?: boolean, enableSemanticExpansion?: boolean): string; /** * Perform unified email search with intelligent fallbacks */ search(query: string | SearchQuery, options?: SearchOptions): Promise<SearchResult>; /** * Execute OR search by combining results from multiple searches */ private executeOrSearch; /** * Execute search with automatic chunking to prevent token limit issues */ private executeChunkedSearch; /** * Generate helpful search suggestions */ private generateSearchSuggestions; } export declare const searchQuerySchema: z.ZodObject<{ text: z.ZodString; from: z.ZodOptional<z.ZodArray<z.ZodString, "many">>; to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>; subject: z.ZodOptional<z.ZodString>; hasAttachments: z.ZodOptional<z.ZodBoolean>; dateRange: z.ZodOptional<z.ZodObject<{ start: z.ZodEffects<z.ZodOptional<z.ZodString>, Date | undefined, string | undefined>; end: z.ZodEffects<z.ZodOptional<z.ZodString>, Date | undefined, string | undefined>; }, "strip", z.ZodTypeAny, { start?: Date | undefined; end?: Date | undefined; }, { start?: string | undefined; end?: string | undefined; }>>; folders: z.ZodOptional<z.ZodArray<z.ZodString, "many">>; categories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>; isRead: z.ZodOptional<z.ZodBoolean>; importance: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>; limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; requireAllTerms: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; includeAliases: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; semanticSearch: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; }, "strip", z.ZodTypeAny, { text: string; limit: number; requireAllTerms: boolean; includeAliases: boolean; semanticSearch: boolean; subject?: string | undefined; from?: string[] | undefined; isRead?: boolean | undefined; hasAttachments?: boolean | undefined; importance?: "low" | "normal" | "high" | undefined; categories?: string[] | undefined; to?: string[] | undefined; dateRange?: { start?: Date | undefined; end?: Date | undefined; } | undefined; folders?: string[] | undefined; }, { text: string; subject?: string | undefined; from?: string[] | undefined; isRead?: boolean | undefined; hasAttachments?: boolean | undefined; importance?: "low" | "normal" | "high" | undefined; categories?: string[] | undefined; to?: string[] | undefined; limit?: number | undefined; dateRange?: { start?: string | undefined; end?: string | undefined; } | undefined; folders?: string[] | undefined; requireAllTerms?: boolean | undefined; includeAliases?: boolean | undefined; semanticSearch?: boolean | undefined; }>; export declare const searchOptionsSchema: z.ZodObject<{ accountId: z.ZodDefault<z.ZodOptional<z.ZodString>>; limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; orderBy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["receivedDateTime", "subject", "from", "importance", "relevance"]>>>; orderDirection: z.ZodDefault<z.ZodOptional<z.ZodEnum<["asc", "desc"]>>>; includeBody: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; includeSentItems: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; }, "strip", z.ZodTypeAny, { limit: number; accountId: string; offset: number; orderBy: "subject" | "from" | "receivedDateTime" | "importance" | "relevance"; orderDirection: "asc" | "desc"; includeBody: boolean; includeSentItems: boolean; }, { limit?: number | undefined; accountId?: string | undefined; offset?: number | undefined; orderBy?: "subject" | "from" | "receivedDateTime" | "importance" | "relevance" | undefined; orderDirection?: "asc" | "desc" | undefined; includeBody?: boolean | undefined; includeSentItems?: boolean | undefined; }>; export {}; //# sourceMappingURL=unifiedSearch.d.ts.map