search_inbox_emails
Search your Outlook inbox for specific emails by entering keywords and specifying the number of results to retrieve, simplifying email management without complex setup.
Instructions
Search inbox emails
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results to return | |
| query | Yes | Search keywords |
Implementation Reference
- src/index.ts:567-585 (handler)MCP server request handler case for 'search_inbox_emails': extracts query and count from args, calls outlookManager.searchInboxEmails, formats and returns search results.case 'search_inbox_emails': { const query = (args as any)?.query; const count = (args as any)?.count || 10; if (!query) { throw new Error('Search query is required'); } const emails = await outlookManager.searchInboxEmails(query, count); return { content: [ { type: 'text', text: `🔍 **Search Results: "${query}"**\nTotal: ${emails.length} items\nUnread: ${emails.filter(e => !e.isRead).length} items\n\n📋 **Search Results List:**\n` + emails.map((email, index) => `${index + 1}. ${email.isRead ? '✅' : '📩'} **${email.subject}**\n From: ${email.sender}\n Time: ${email.receivedTime}\n EntryID: ${email.id}\n StoreID: ${email.storeId || 'N/A'}\n Search Context: ${email.body?.includes(query) ? 'Match in content' : 'Match in subject'}: ${email.subject}\n Preview: ${email.body?.substring(0, 100)}...\n` ).join('\n') }, ], }; }
- src/outlook-manager.ts:367-372 (handler)Core implementation of searchInboxEmails: fetches extra inbox emails via getInboxEmails, uses EmailSummarizer.searchEmails for filtering, returns top count results.async searchInboxEmails(query: string, count: number = 10): Promise<EmailMessage[]> { const emails = await this.getInboxEmails(Math.min(count * 2, 50)); const { EmailSummarizer } = await import('./email-summarizer.js'); const searchResults = EmailSummarizer.searchEmails(emails, query); return searchResults.slice(0, count); }
- src/email-summarizer.js:35-50 (helper)EmailSummarizer.searchEmails: performs case-insensitive full-text search across email subject, sender, and body (stripping HTML tags).static searchEmails(emails, searchTerm) { if (!searchTerm.trim()) { return emails; } const normalizedSearchTerm = searchTerm.toLowerCase(); return emails.filter(email => { // 件名での検索 const subjectMatch = email.subject.toLowerCase().includes(normalizedSearchTerm); // 送信者での検索 const senderMatch = email.sender.toLowerCase().includes(normalizedSearchTerm); // 本文での検索(HTMLタグを除去して検索) const cleanBody = email.body.replace(/<[^>]*>/g, '').toLowerCase(); const bodyMatch = cleanBody.includes(normalizedSearchTerm); return subjectMatch || senderMatch || bodyMatch; }); }
- src/index.ts:133-150 (registration)Tool registration in ListToolsResponse: defines name, description, and input schema (query required string, optional count number default 10).name: "search_inbox_emails", description: "Search inbox emails", inputSchema: { type: "object", properties: { query: { type: "string", description: "Search keywords" }, count: { type: "number", description: "Number of results to return", default: 10 } }, required: ["query"] } },
- src/outlook-manager.ts:3-13 (schema)EmailMessage TypeScript interface defining the structure of email objects returned by search functions.export interface EmailMessage { id: string; storeId?: string; subject: string; sender: string; recipients: string[]; body: string; receivedTime: Date; isRead: boolean; hasAttachments: boolean; }