Skip to main content
Glama

searchWhiteboards

Search Heptabase whiteboards by query, date range, card presence, or space ID to retrieve organized visual data for analysis or export.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateRangeNo
hasCardsNo
queryNo
spaceIdNo

Implementation Reference

  • Core handler implementing the searchWhiteboards logic: filters whiteboards by query string in name and optional date range, excludes trashed ones, with caching.
    async searchWhiteboards(query: SearchQuery): Promise<Whiteboard[]> { const cacheKey = `whiteboards:${JSON.stringify(query)}`; if (this.config.cacheEnabled) { const cached = this.getFromCache(cacheKey); if (cached) return cached; } const results = Object.values(this.data.whiteboards).filter(whiteboard => { // Filter out trashed whiteboards if (whiteboard.isTrashed) return false; // Search by query if (query.query) { const searchTerm = query.query.toLowerCase(); if (!whiteboard.name.toLowerCase().includes(searchTerm)) { return false; } } // Filter by date range if (query.dateRange) { const createdDate = new Date(whiteboard.createdTime); if (createdDate < query.dateRange.start || createdDate > query.dateRange.end) { return false; } } return true; }); if (this.config.cacheEnabled) { this.setCache(cacheKey, results); } return results; }
  • MCP tool handler wrapper: validates params, converts to SearchQuery, calls data service searchWhiteboards, formats results as MCP text response.
    handler: async (params) => { await this.ensureDataServiceInitialized(); const searchQuery: any = {}; if (params.query) { searchQuery.query = params.query; } if (params.dateRange) { searchQuery.dateRange = { start: new Date(params.dateRange.start), end: new Date(params.dateRange.end) }; } if (params.hasCards !== undefined) { searchQuery.hasCards = params.hasCards; } if (params.spaceId) { searchQuery.spaceId = params.spaceId; } const results = await this.dataService!.searchWhiteboards(searchQuery); const text = `Found ${results.length} whiteboards${results.length > 0 ? ':\n' : ''}` + results.map(wb => `- ${wb.name} (ID: ${wb.id}, Last edited: ${wb.lastEditedTime})`).join('\n'); return { content: [{ type: 'text', text }] }; }
  • Zod input schema validation for the searchWhiteboards MCP tool.
    const searchWhiteboardsSchema = z.object({ query: z.string().optional(), dateRange: z.object({ start: z.string(), end: z.string() }).optional(), hasCards: z.boolean().optional(), spaceId: z.string().optional() });
  • TypeScript interface defining SearchQuery used by data service search methods.
    export interface SearchQuery { query?: string; dateRange?: { start: Date; end: Date; }; tags?: string[]; whiteboardId?: string; contentType?: 'text' | 'image' | 'link'; limit?: number; offset?: number; }
  • src/server.ts:295-337 (registration)
    Registers the searchWhiteboards tool on the MCP server, linking schema and handler.
    this.tools.searchWhiteboards = { inputSchema: searchWhiteboardsSchema, handler: async (params) => { await this.ensureDataServiceInitialized(); const searchQuery: any = {}; if (params.query) { searchQuery.query = params.query; } if (params.dateRange) { searchQuery.dateRange = { start: new Date(params.dateRange.start), end: new Date(params.dateRange.end) }; } if (params.hasCards !== undefined) { searchQuery.hasCards = params.hasCards; } if (params.spaceId) { searchQuery.spaceId = params.spaceId; } const results = await this.dataService!.searchWhiteboards(searchQuery); const text = `Found ${results.length} whiteboards${results.length > 0 ? ':\n' : ''}` + results.map(wb => `- ${wb.name} (ID: ${wb.id}, Last edited: ${wb.lastEditedTime})`).join('\n'); return { content: [{ type: 'text', text }] }; } }; this.server.tool('searchWhiteboards', searchWhiteboardsSchema.shape, async (params) => { return this.tools.searchWhiteboards.handler(params); });

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/LarryStanley/heptabse-mcp'

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