C — 126 Operations for AI Agents
This page is the canonical reference an AI coding agent uses to refactor, query, and analyze C code through the act MCP server. 126 operations available: 52 refactor, 18 query, 42 analysis, 14 verification. Each operation is callable from Claude Code, Cursor, Codex, OpenCode, or any MCP-compatible agent host. Click any operation for a stable anchor link suitable for citation.
Query
18 query tools, the same on every supported language. Descriptions live in the shared reference: /docs/query-tools.
callers control_flow data_flow definition diagnostics effect_closure effect_summary fix_auto get_type graph import_organize interface mutations references repo_outline skeleton symbols symbols_batch
Refactor
| Operation | Description |
|---|---|
add-const-qualifier |
Add const qualifier to variable or parameter |
add-default-case-to-switch |
Add default case to switch statement |
add-include-guard |
Add include guard to C header file |
add-null-check |
Add NULL check before pointer dereference |
add-parentheses-for-clarity |
Add parentheses for clarity |
add-static-qualifier |
Add static qualifier to function definition |
add-void-parameter |
Add void parameter to function with no parameters |
change-signature |
Modify function parameters, return, generics |
convert-do-while-to-while |
Convert do-while loop to while loop |
convert-for-to-while |
Convert for loop to while loop |
convert-if-to-switch |
Convert if-else chain to switch statement |
convert-macro-to-inline-function |
Convert preprocessor macro to static inline function |
convert-switch-to-if |
Convert switch statement to if-else chain |
convert-while-to-for |
Convert while loop to for loop |
demote-global-to-static |
Add static keyword to global variable declaration |
extract-constant |
Extract value to named constant |
extract-function |
Extract selected code into a new function |
extract_function |
Extract a code selection into a new function — automatically infers parameters, return types, and inserts the call site. Use instead of manually cutting/pasting code. Works without LSP; LSP improves type inference. Params: file (string), new_name (string), start_line (u32), start_column (u32), end_line (u32), end_column (u32) [, preview (bool), receipt (bool)] |
extract_variable |
Extract an expression into a named variable — inserts the declaration and replaces the expression with the variable name. Works without LSP. Params: file (string), new_name (string), start_line (u32), start_column (u32), end_line (u32), end_column (u32) [, preview (bool)] |
generate-array-iteration |
Generate array iteration loop |
generate-enum |
Generate enum definition |
generate-error-check |
Generate error checking code |
generate-for-loop |
Generate for loop with given components |
generate-free-call |
Generate free() call with optional NULL assignment |
generate-function-declaration |
Generate function declaration from definition |
generate-function-stub |
Generate function stub with signature |
generate-header-file |
Create header file with include guards |
generate-main-function |
Generate main function entry point |
generate-malloc-check |
Generate malloc with NULL check |
generate-malloc-pattern |
Generate malloc with cast and size calculation |
generate-null-check |
Generate NULL pointer guard |
generate-strcpy-safe-version |
Generate strncpy with null termination for safe string copy |
generate-string-null-terminate |
Generate code to ensure null-terminated string |
generate-struct |
Generate struct definition |
generate-switch-statement |
Generate switch statement with cases |
generate-while-loop |
Generate while loop with given condition |
inline |
Inline a variable, function, or method — replace every usage with its definition body, then remove the original. The inverse of extract. Works without LSP (single-file); LSP enables cross-file inlining. Params: file (string), symbol (string) [, line (u32), preview (bool), receipt (bool)] |
insert_body |
Replace a function's implementation body with new code. AST-validated — rejects if the result has parse errors, so you can't accidentally break syntax. Use instead of manual text editing for function rewrites. Params: file (string), symbol (string), code (string) [, commit (bool)] |
invert-if |
Invert if condition and swap then/else blocks |
merge-if-statements |
Merge adjacent if statements with same condition |
move_symbol |
Move a function, class, or type to a different file and automatically update all imports across the codebase. Use instead of manually cut/paste + fixing imports. Works without LSP (single-file); LSP enables cross-file import updates. Params: file (string), symbol (string), destination (string) [, preview (bool), receipt (bool)] |
recipe_run |
Run a codemod recipe: declarative match → transform → optional verify across modeled grammars. Preview lists matches; apply writes with optional E7 receipts and all-or-nothing rollback. Returns a per-site report. |
remove-const-qualifier |
Remove const qualifier from variable or parameter |
remove-null-check |
Remove NULL check guard block |
remove-unnecessary-break |
Remove unnecessary break statement |
remove-unreachable-code |
Remove unreachable code after return/break/continue/goto |
rename |
Rename a symbol and automatically update ALL references across the codebase. Safer and faster than find-and-replace — AST-aware, won't rename strings or comments. Works without LSP (single-file); LSP enables cross-file renames. Params: file (string), old_name (string), new_name (string) [, line (u32), column (u32), preview (bool), receipt (bool)] |
reorder-function-parameters |
Reorder function parameters |
simplify-boolean-comparison |
Simplify boolean comparison (e.g., x == true -> x) |
simplify-logical-negation |
Simplify logical negation using De Morgan's laws |
split-if-statement |
Split if statement with complex condition into nested if statements |
swap-comparison-operands |
Swap comparison operands and invert operator |
Analysis
42 analysis tools, the same on every supported language. Descriptions live in the shared reference: /docs/analysis-tools.
analyze_api_diff analyze_chokepoints analyze_clones analyze_clusters analyze_cohesion analyze_conformance analyze_coupling analyze_cycle_risk analyze_cycles analyze_dead_code analyze_depth analyze_entry_points analyze_export analyze_extraction analyze_fan_balance analyze_features analyze_hotspots analyze_impact analyze_inconsistencies analyze_inheritance analyze_interface_bloat analyze_interfaces analyze_layers analyze_orphan_types analyze_patterns analyze_platform_deps analyze_readiness analyze_roles analyze_seams analyze_stability analyze_surface analyze_test_gaps analyze_thickness analyze_type_completeness churn_hotspots co_change_clusters coverage_overlay ownership_map profile_overlay simulate split_module trace_overlay
Verify
14 verify tools, the same on every supported language. Descriptions live in the shared reference: /docs/verification.
bisect_regression gate generate_test_harness scan secret_surface summarize_pr taint_flow unsafe_surface verify_behavioral_equivalence verify_contract_preserved verify_diff_semantics verify_port_parity verify_side_effects verify_test_impact