search-code
Search for code patterns within repositories using queries and file filters to locate specific implementations or functions.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to find code in the repository | |
| filePattern | No | Optional file pattern to limit search (e.g., '*.ts') | |
| maxResults | No | Maximum number of results to return |
Implementation Reference
- src/features/dev-tools/index.ts:45-103 (handler)The handler function for the 'search-code' tool. It constructs a grep command to search the 'src' directory for the query (optionally filtered by file pattern), limits results, parses the output into file, line number, and content matches, formats a success response, and returns it as text content. Handles no-results and errors gracefully.async ({ query, filePattern, maxResults }) => { try { const searchPattern = filePattern ? `--include="${filePattern}"` : ""; const command = `grep -n ${searchPattern} -r "${query}" src --color=never | head -n ${maxResults}`; let results; try { results = execSync(command, { encoding: "utf-8" }); } catch (error) { // grep returns non-zero exit code when no results found results = ""; } const matches = results .split("\n") .filter((line) => line.trim().length > 0) .map((line) => { const [file, lineNum, ...contentParts] = line.split(":"); const content = contentParts.join(":").trim(); return { file, lineNum: parseInt(lineNum, 10), content }; }); const result = createSuccessResponse( { query, filePattern: filePattern || "all files", resultsCount: matches.length, matches, }, "search-code" ); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { return { content: [ { type: "text", text: JSON.stringify( createErrorResponse( error instanceof Error ? error.message : String(error), "search-code" ), null, 2 ), }, ], isError: true, }; } }
- Zod schema defining the input parameters for the 'search-code' tool: query (required string), optional filePattern (string glob), and maxResults (number, default 10).{ query: z.string().describe("Search query to find code in the repository"), filePattern: z .string() .optional() .describe("Optional file pattern to limit search (e.g., '*.ts')"), maxResults: z .number() .default(10) .describe("Maximum number of results to return"), },
- src/features/dev-tools/index.ts:32-104 (registration)The server.tool call that registers the 'search-code' tool, including its name, input schema, and handler function.server.tool( "search-code", { query: z.string().describe("Search query to find code in the repository"), filePattern: z .string() .optional() .describe("Optional file pattern to limit search (e.g., '*.ts')"), maxResults: z .number() .default(10) .describe("Maximum number of results to return"), }, async ({ query, filePattern, maxResults }) => { try { const searchPattern = filePattern ? `--include="${filePattern}"` : ""; const command = `grep -n ${searchPattern} -r "${query}" src --color=never | head -n ${maxResults}`; let results; try { results = execSync(command, { encoding: "utf-8" }); } catch (error) { // grep returns non-zero exit code when no results found results = ""; } const matches = results .split("\n") .filter((line) => line.trim().length > 0) .map((line) => { const [file, lineNum, ...contentParts] = line.split(":"); const content = contentParts.join(":").trim(); return { file, lineNum: parseInt(lineNum, 10), content }; }); const result = createSuccessResponse( { query, filePattern: filePattern || "all files", resultsCount: matches.length, matches, }, "search-code" ); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { return { content: [ { type: "text", text: JSON.stringify( createErrorResponse( error instanceof Error ? error.message : String(error), "search-code" ), null, 2 ), }, ], isError: true, }; } } );