search_decisions
Search past architectural decisions by keyword to find relevant ADRs and avoid repeating previous solutions.
Instructions
Search past architectural decisions by keyword
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search term (e.g. Redis, PostgreSQL, JWT) |
Implementation Reference
- db.js:138-145 (handler)The actual implementation of the 'search_decisions' logic, querying the SQLite database.
export function searchDecisions(query) { return db.prepare(` SELECT s.id, s.project, s.summary, s.created_at, a.title, a.decision, a.status FROM sessions s LEFT JOIN adrs a ON a.session_id = s.id WHERE s.conversation LIKE ? OR s.summary LIKE ? OR a.decision LIKE ? ORDER BY s.created_at DESC LIMIT 10 `).all(`%${query}%`, `%${query}%`, `%${query}%`); } - index.js:123-137 (registration)The registration of the 'search_decisions' tool in the MCP server, which wraps the 'searchDecisions' function.
server.registerTool('search_decisions', { description: 'Search past architectural decisions by keyword', inputSchema: { query: z.string().describe('Search term (e.g. Redis, PostgreSQL, JWT)'), }, }, async ({ query }) => { const results = searchDecisions(query); if (!results.length) return { content: [{ type: 'text', text: 'No results found' }] }; const output = results.map(r => `[${r.created_at}] ${r.project} — [${r.status ?? 'Accepted'}] ${r.title ?? 'untitled'}\n Summary: ${r.summary ?? 'none'}\n Decision: ${r.decision ?? 'none'}` ).join('\n\n'); return { content: [{ type: 'text', text: output }] }; });