add_member
[refactoring]
Inserts a C# member into an existing type and returns a diff.
Before you use this tool
Writes files by default. Set applyChanges: false to preview the diff. Inspect the diff before application.
Try it locally in the Glider playground
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| containerName | string | Yes | The type to add the member to. A stable symbolKey (preferred) or a name (simple or fully qualified). |
| memberCode | string | Yes | The full C# source of the member to insert. |
| filePath | string | No | For a partial type, the file whose part receives the member. Absolute or loaded-root-relative. Defaults to the largest non-generated part. |
| projectName | string | No | Optional project name to limit search when finding the type by name. |
| applyChanges | boolean | No | If true (default), applies changes to disk. If false, returns a preview diff. Default: true |
| failOnErrors | boolean | No | If true, do not write when the edit introduces a compile error; the response reports the diagnostics. Default: false |
| includeDiff | boolean | No | Include unified diff in response. Default is true. Default: true |
| maxDiffChars | number | No | Max diff characters. Use 0 for unlimited. Default is 50000. Default: 50000 |
| includePerFileDiff | boolean | No | Include per-file diffs in changedFiles. Default is true. Default: true |
| pathStyle | string | No | Path style: 'absolute' (default) or 'relative' (to solution root). Default: "absolute" |
| responseDetail | string | No | compact returns results and actionable state. full adds diagnostic metadata under responseDiagnostics. Default: "compact" |
Examples
Replace sample paths and symbol keys with values from your workspace.
Preview adding a method to a class
{
"containerName": "OrderService",
"memberCode": "public decimal Total() => 0m;",
"applyChanges": false
}Full MCP request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "add_member",
"arguments": {
"containerName": "OrderService",
"memberCode": "public decimal Total() => 0m;",
"applyChanges": false
}
}
}{
"success": true,
"containerName": "MyProject.OrderService",
"memberName": "Total",
"memberKind": "Method",
"filePath": "/path/to/OrderService.cs",
"filesChanged": 1,
"applied": false,
"message": null,
"diagnostics": {
"errorCount": 0,
"warningCount": 0,
"items": []
},
"unifiedDiff": "...",
"changedFiles": [
{
"filePath": "/path/to/OrderService.cs",
"changeCount": 1,
"diff": "..."
}
]
}Preview insertion into a discovered type
{
"containerName": "<type key from search_symbols>",
"memberCode": "public decimal Total() => 0m;",
"applyChanges": false
}Full MCP request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "add_member",
"arguments": {
"containerName": "<type key from search_symbols>",
"memberCode": "public decimal Total() => 0m;",
"applyChanges": false
}
}
}Response Notes
The member text is parsed and validated before it is inserted, and only the inserted code is formatted, so the change lands indented in the body without reformatting the rest of the file. For a partial type, filePath chooses which part receives the member; by default the largest non-generated part is used.
Returns a unified diff of the insertion. containerName, memberName, and memberKind identify what was added, and filePath names the file that received it (the chosen part for a partial type). diagnostics reports the compile errors and warnings the inserted member introduces; when failOnErrors is true and it introduces an error, applied is false and message explains why. When the file is linked into several projects or targets, the check spans all of them. Results use top-level fields with success. Compact is the default; full adds responseDiagnostics. Both modes retain errors, coverage, partial state, and recovery advice.