notion_search
Search Notion pages and databases by title with options to filter, sort, and paginate results. Retrieve data in JSON or Markdown format for reading or editing.
Instructions
Search pages or databases by title in Notion
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter results by object type (page or database) | |
| format | No | Specify the response format. 'json' returns the original data structure, 'markdown' returns a more readable format. Use 'markdown' when the user only needs to read the page and isn't planning to write or modify it. Use 'json' when the user needs to read the page with the intention of writing to or modifying it. | markdown |
| page_size | No | Number of results to return (max 100). | |
| query | No | Text to search for in page or database titles | |
| sort | No | Sort order of results | |
| start_cursor | No | Pagination start cursor |
Implementation Reference
- src/client/index.ts:292-316 (handler)Core handler function in NotionClientWrapper that executes the Notion search API call by POSTing parameters to /search endpoint.async search( query?: string, filter?: { property: string; value: string }, sort?: { direction: "ascending" | "descending"; timestamp: "last_edited_time"; }, start_cursor?: string, page_size?: number ): Promise<ListResponse> { const body: Record<string, any> = {}; if (query) body.query = query; if (filter) body.filter = filter; if (sort) body.sort = sort; if (start_cursor) body.start_cursor = start_cursor; if (page_size) body.page_size = page_size; const response = await fetch(`${this.baseUrl}/search`, { method: "POST", headers: this.headers, body: JSON.stringify(body), }); return response.json(); }
- src/types/schemas.ts:427-476 (schema)Tool schema definition for 'notion_search' including name, description, and input schema specification.export const searchTool: Tool = { name: "notion_search", description: "Search pages or databases by title in Notion", inputSchema: { type: "object", properties: { query: { type: "string", description: "Text to search for in page or database titles", }, filter: { type: "object", description: "Filter results by object type (page or database)", properties: { property: { type: "string", description: "Must be 'object'", }, value: { type: "string", description: "Either 'page' or 'database'", }, }, }, sort: { type: "object", description: "Sort order of results", properties: { direction: { type: "string", enum: ["ascending", "descending"], }, timestamp: { type: "string", enum: ["last_edited_time"], }, }, }, start_cursor: { type: "string", description: "Pagination start cursor", }, page_size: { type: "number", description: "Number of results to return (max 100). ", }, format: formatParameter, }, }, };
- src/server/index.ts:302-325 (registration)Registers the 'notion_search' tool (as schemas.searchTool) in the list of available tools returned by ListToolsRequest.server.setRequestHandler(ListToolsRequestSchema, async () => { const allTools = [ schemas.appendBlockChildrenTool, schemas.retrieveBlockTool, schemas.retrieveBlockChildrenTool, schemas.deleteBlockTool, schemas.updateBlockTool, schemas.retrievePageTool, schemas.updatePagePropertiesTool, schemas.listAllUsersTool, schemas.retrieveUserTool, schemas.retrieveBotUserTool, schemas.createDatabaseTool, schemas.queryDatabaseTool, schemas.retrieveDatabaseTool, schemas.updateDatabaseTool, schemas.createDatabaseItemTool, schemas.createCommentTool, schemas.retrieveCommentsTool, schemas.searchTool, ]; return { tools: filterTools(allTools, enabledToolsSet), };
- src/server/index.ts:251-260 (registration)Dispatch case in CallToolRequest handler that routes 'notion_search' calls to the notionClient.search method.case "notion_search": { const args = request.params.arguments as unknown as args.SearchArgs; response = await notionClient.search( args.query, args.filter, args.sort, args.start_cursor, args.page_size ); break;