Skip to main content
Glama

search-notes

Search and retrieve Apple Notes using natural language queries. Integrates with iCloud for efficient note management and quick access to stored information.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes

Implementation Reference

  • src/index.ts:67-93 (registration)
    Registers the 'search-notes' MCP tool with input schema and handler that delegates to AppleNotesManager.searchNotes and formats the response.
    server.tool( "search-notes", searchSchema, async ({ query }: SearchParams) => { try { const notes = notesManager.searchNotes(query); const message = notes.length ? `Found ${notes.length} notes:\n${notes.map(note => `• ${note.title}`).join('\n')}` : "No notes found matching your query"; return { content: [{ type: "text", text: message }] }; } catch (error) { return { content: [{ type: "text", text: `Error searching notes: ${error instanceof Error ? error.message : 'Unknown error'}` }], isError: true }; } } );
  • Executes the core search logic by running AppleScript to find Apple Notes whose titles contain the query string, parsing results into Note objects.
    searchNotes(query: string): Note[] { const sanitizedQuery = query.replace(/"/g, '\\"'); const script = ` tell application "Notes" tell account "${this.ICLOUD_ACCOUNT}" get name of notes where name contains "${sanitizedQuery}" end tell end tell `; const result = runAppleScript(script); if (!result.success) { console.error('Failed to search notes:', result.error); return []; } return result.output .split(',') .filter(Boolean) .map(title => ({ id: Date.now().toString(), title: title.trim(), content: '', tags: [], created: new Date(), modified: new Date() })); }
  • TypeScript interface defining the input parameters for the search-notes tool.
    export interface SearchParams { query: string; }
  • Zod runtime validation schema for search-notes tool input.
    const searchSchema = { query: z.string().min(1, "Search query is required") };
  • Utility function to execute AppleScript commands via Node.js child_process.execSync, used by the searchNotes handler.
    export function runAppleScript(script: string): AppleScriptResult { try { // Trim and sanitize the script const sanitizedScript = script.trim().replace(/[\r\n]+/g, ' '); // Execute the AppleScript command const output = execSync(`osascript -e '${sanitizedScript}'`, { encoding: 'utf8', timeout: 10000 // 10 second timeout }); return { success: true, output: output.trim() }; } catch (error) { console.error('AppleScript execution failed:', error); return { success: false, output: '', error: error instanceof Error ? error.message : 'Unknown error occurred while executing AppleScript' }; } }

Other Tools

Related Tools

Latest Blog Posts

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/Siddhant-K-code/mcp-apple-notes'

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