Find Implementations
find_implementationsLists all types implementing a C# interface, including external matches and optional test-project implementers, so you can identify every type affected before changing an interface member.
Instructions
List the types that implement an interface, in the solution or external (IDisposable). The interface counterpart to get_type_hierarchy (classes) and find_overrides.
Use it before changing an interface member, to find every type that must follow.
Returns items [{name, isAbstract (absent on interfaces and unknown kinds), kind, isTestProject, namespace, declaration, via, closes, through}], count, totalFound, truncated - at most 100, items without via first, then by name. 'declaration' is a generic implementer's arity form ('PolicyWrap'); via:'back-edge' = known only from the interface's implementer list, 'inherited' = through a solution base class or interface, 'derived-interface' = an interface extending it (implements nothing). 'closes' = the type arguments closing a generic interface, through bases too ('ContentSavedNotification'; an open generic names its own type parameter); 'through' = the base or interface it comes through. Absent when empty or unreadable.
A closed query ('IHandler') keeps the types closing it with those arguments; typeArgumentFilter counts the others closing it otherwise (otherClosings) or only over their own type parameters (openClosings). typeArgumentBase keeps the types closing it with an argument that is, derives from or implements that type ('DeletedNotification'); typeArgumentBaseFilter gives familyTypes and leftOut. An unreadable closing stays, marked closing:'unresolved'.
Test-project implementers are excluded by default; testImplementationsFiltered counts them (absent = none).
An empty answer carries a 'hint' when the name is not an interface or no indexed type carries it (a did-you-mean if one is close), and a 'generatedCodeNote' when a generator that did not run may have added it. A leading 'note' marks the inventory partial when a project's core references did not resolve (restore or build, then refresh_session).
Read-only. interfaceName is the simple name, case-sensitive. Two interfaces sharing a simple name answer as one list.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"sessionId": "<sessionId>",
"interfaceName": "<interfaceName>"
},
"name": "find_implementations"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The session_id returned by analyze_solution. Also takes an absolute .sln/.slnx/.slnf path, analyzed on first use. | |
| includeTests | No | Include test-project implementers (default false - production focus). | |
| interfaceName | Yes | The interface's simple name, e.g. 'ICodeAnalyzer'. An arity suffix ('IConsumer`1' / 'IConsumer<T>', or 'IConsumer`0' for the non-generic namesake) filters to that arity; a bare name keeps the merged view of every arity. A concrete type argument ('IConsumer<OrderPlaced>') keeps only the types that close it with that argument. | |
| typeArgumentBase | No | Optional: keep only the types that close the generic interface with a type argument that is this type or derives from or implements it - a simple name, case-sensitive, with an arity suffix for a generic ('DeletedNotification<T>', 'ICancelableNotification'). Only solution types form the family; when none matches, typeArgumentBaseFilter carries a note. |