search_rules
Search D&D 5e SRD rules and conditions to quickly find specific game mechanics or look up condition details during gameplay.
Instructions
Search D&D 5e SRD rules and conditions. Look up specific conditions or search rules text.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Full-text search query for rules | |
| condition_name | No | Name of a specific condition to look up |
Implementation Reference
- src/data/db.ts:438-453 (handler)The core database logic for searching rules using Full-Text Search (FTS).
export function searchRules( db: Database.Database, query: string, ): RuleRow[] { const ftsQuery = sanitizeFtsQuery(query); if (ftsQuery.length === 0) { return db .prepare('SELECT * FROM rules ORDER BY section ASC, name ASC') .all() as RuleRow[]; } return db .prepare( 'SELECT r.* FROM rules r WHERE r.id IN (SELECT rowid FROM rules_fts WHERE rules_fts MATCH ?) ORDER BY r.section ASC, r.name ASC', ) .all(ftsQuery) as RuleRow[]; } - src/tools/search-rules.ts:10-45 (registration)The registration of the 'search_rules' MCP tool and its request handler, which dispatches to different modes (condition lookup, rule search, or listing conditions).
export function registerSearchRules( server: McpServer, db: Database.Database, ): void { server.registerTool( 'search_rules', { description: 'Search D&D 5e SRD rules and conditions. Look up specific conditions or search rules text.', inputSchema: { query: z .string() .optional() .describe('Full-text search query for rules'), condition_name: z .string() .optional() .describe('Name of a specific condition to look up'), }, }, async ({ query, condition_name }) => { // Mode 1: Specific condition if (condition_name) { return handleCondition(db, condition_name); } // Mode 2: Full-text search rules if (query) { return handleRulesSearch(db, query); } // Mode 3: List all conditions return handleListConditions(db); }, ); }