analyze_diff
Analyze git diffs against IDE rules to identify code violations before committing changes. Use speed mode for faster analysis or filters to focus on specific issues.
Instructions
This tool is used to analyze a git diff (unstaged, staged, or all changes) against IDE rules to identify rule violations. By default, the tool will use the staged changes, unless the user explicitly asks for unstaged or all changes.
Parameters:
params: An object containing:
speedMode: boolean - A mode that can be enabled to speed up the analysis. Default value is false.
filterBy: enum - "Violations" | "Compliants" | "Human Review Required" | "None" - A filter that can be applied to set the focus of the analysis. Default is None.
diff: string - A git diff string.
rules: string - Rules to use for analysis, found in the rules subdirectory of the IDE workspace settings. Combine all rules from multiple files by separating them with ---
Returns:
A list of rule violations found in the git diff.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| params | No |
Implementation Reference
- src/tools/analyzeDiff/handler.ts:10-67 (handler)Main handler function implementing the core logic of the analyze_diff tool. It uses CircletClient to review git diff against provided rules and returns violations or compliance message.export const analyzeDiff: ToolCallback<{ params: typeof analyzeDiffInputSchema; }> = async (args) => { const { diff, rules, speedMode, filterBy } = args.params ?? {}; const circlet = new CircletClient(); if (!diff) { return { content: [ { type: 'text', text: 'No diff found. Please provide a diff to analyze.', }, ], }; } if (!rules) { return { content: [ { type: 'text', text: 'No rules found. Please add rules to your repository.', }, ], }; } const response = await circlet.circlet.ruleReview({ diff, rules, filterBy, speedMode, }); if (!response.isRuleCompliant) { return { content: [ { type: 'text', text: response.relatedRules.violations .map((violation) => { return `Rule: ${violation.rule}\nReason: ${violation.reason}\nConfidence Score: ${violation.confidenceScore}`; }) .join('\n\n'), }, ], }; } return { content: [ { type: 'text', text: `All rules are compliant.`, }, ], }; };
- Zod input schema defining parameters for analyze_diff: speedMode, filterBy, diff, rules.export const analyzeDiffInputSchema = z.object({ speedMode: z .boolean() .default(false) .describe('The status of speed mode. Defaults to false.'), filterBy: z .nativeEnum(FilterBy) .default(FilterBy.none) .describe(`Analysis filter. Defaults to ${FilterBy.none}`), diff: z .string() .describe( 'Git diff content to analyze. Defaults to staged changes, unless the user explicitly asks for unstaged changes or all changes.', ), rules: z .string() .describe( 'Rules to use for analysis, found in the rules subdirectory of the IDE workspace settings. Combine all rules from multiple files by separating them with ---', ), });
- src/tools/analyzeDiff/tool.ts:4-21 (registration)Tool object registration defining name 'analyze_diff', description, and inputSchema.export const analyzeDiffTool = { name: 'analyze_diff' as const, description: ` This tool is used to analyze a git diff (unstaged, staged, or all changes) against IDE rules to identify rule violations. By default, the tool will use the staged changes, unless the user explicitly asks for unstaged or all changes. Parameters: - params: An object containing: - speedMode: boolean - A mode that can be enabled to speed up the analysis. Default value is false. - filterBy: enum - "${FilterBy.violations}" | "${FilterBy.compliants}" | "${FilterBy.humanReviewRequired}" | "${FilterBy.none}" - A filter that can be applied to set the focus of the analysis. Default is ${FilterBy.none}. - diff: string - A git diff string. - rules: string - Rules to use for analysis, found in the rules subdirectory of the IDE workspace settings. Combine all rules from multiple files by separating them with --- Returns: - A list of rule violations found in the git diff. `, inputSchema: analyzeDiffInputSchema, };
- src/circleci-tools.ts:37-54 (registration)analyzeDiffTool is included in the CCI_TOOLS array for MCP tool registration.export const CCI_TOOLS = [ getBuildFailureLogsTool, getFlakyTestLogsTool, getLatestPipelineStatusTool, getJobTestResultsTool, configHelperTool, createPromptTemplateTool, recommendPromptTemplateTestsTool, runPipelineTool, listFollowedProjectsTool, runEvaluationTestsTool, rerunWorkflowTool, downloadUsageApiDataTool, findUnderusedResourceClassesTool, analyzeDiffTool, runRollbackPipelineTool, listComponentVersionsTool, ];
- src/circleci-tools.ts:68-85 (registration)Handler for 'analyze_diff' is mapped to analyzeDiff function in CCI_HANDLERS.export const CCI_HANDLERS = { get_build_failure_logs: getBuildFailureLogs, find_flaky_tests: getFlakyTestLogs, get_latest_pipeline_status: getLatestPipelineStatus, get_job_test_results: getJobTestResults, config_helper: configHelper, create_prompt_template: createPromptTemplate, recommend_prompt_template_tests: recommendPromptTemplateTests, run_pipeline: runPipeline, list_followed_projects: listFollowedProjects, run_evaluation_tests: runEvaluationTests, rerun_workflow: rerunWorkflow, download_usage_api_data: downloadUsageApiData, find_underused_resource_classes: findUnderusedResourceClasses, analyze_diff: analyzeDiff, run_rollback_pipeline: runRollbackPipeline, list_component_versions: listComponentVersions, } satisfies ToolHandlers;