BooCode wrapper tools for the 4 new MCP tools added to the codecontext sidecar (Go side committed separately at /opt/forks/codecontext). - get_blast_radius: reverse-edge BFS — "what breaks if I change this?" - get_hot_files: most-imported files by incoming edge count - get_routes: Fastify/Express route extraction via tree-sitter AST - get_middleware: middleware detection via import + registration patterns Wrappers follow the existing codecontext pattern: Zod input → callCodecontext → ToolDef export. Registered in ALL_TOOLS (alpha-sorted). All 4 are read-only. codecontext sidecar rebuilt from commit b19e646 with the 4 new Go handlers (2130 lines, 29 tests). Reviewer fixes applied: defer RUnlock on Tier 2 handlers, extractObjectProperty delegates to extractStringValue for template-literal route paths. 363/363 server tests passing. No schema changes, no frontend changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
import { z } from 'zod';
|
|
import type { ToolDef } from '../../tools.js';
|
|
import { callCodecontext, type CodecontextResponse } from '../../codecontext_client.js';
|
|
|
|
export const GetRoutesInput = z.object({
|
|
framework: z.string().trim().optional(),
|
|
});
|
|
export type GetRoutesInputT = z.infer<typeof GetRoutesInput>;
|
|
|
|
const DESCRIPTION =
|
|
'Extracts HTTP routes from the project via tree-sitter AST analysis. ' +
|
|
'Detects Fastify and Express route registrations (app.get, app.post, app.route, router.use, etc.) ' +
|
|
'with method, path, file, line number, and inferred tags (db, auth, cache). ' +
|
|
'Optional framework filter narrows to "fastify" or "express".';
|
|
|
|
export async function executeGetRoutes(
|
|
input: GetRoutesInputT,
|
|
projectPath: string,
|
|
fetcher: typeof fetch = fetch,
|
|
): Promise<CodecontextResponse> {
|
|
const args: Record<string, unknown> = {};
|
|
if (input.framework) args.framework = input.framework;
|
|
return callCodecontext({ toolName: 'get_routes', args, projectPath }, fetcher);
|
|
}
|
|
|
|
export const getRoutes: ToolDef<GetRoutesInputT> = {
|
|
name: 'get_routes',
|
|
description: DESCRIPTION,
|
|
inputSchema: GetRoutesInput,
|
|
jsonSchema: {
|
|
type: 'function',
|
|
function: {
|
|
name: 'get_routes',
|
|
description: DESCRIPTION,
|
|
parameters: {
|
|
type: 'object',
|
|
properties: {
|
|
framework: {
|
|
type: 'string',
|
|
description: 'Filter to a specific framework: "fastify" or "express". Omit for all.',
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
async execute(input, projectRoot) {
|
|
return await executeGetRoutes(input, projectRoot);
|
|
},
|
|
};
|