resolve_symbol

[symbols]

Quick lookup: resolves a name or pattern into candidate symbols with stable symbolKeys. Use when you already know the symbol name. Lightweight alternative to search_symbols.

Why this tool exists

C# names are overloaded, scoped, generic, nested, and sometimes duplicated across projects.

How it helps the agent

Symbol discovery converts fuzzy names or cursor positions into stable identities the model can reuse for later references, callers, and refactors.

Try it locally in the Glider playground

Parameters

NameTypeRequiredDescription
querystringYesName fragment or fully qualified name.
kindsstringNoOptional kinds filter (comma-separated). Type, Class, Interface, Struct, Enum, Delegate, Method, Property, Field, Event, Namespace. Type means any named type; the rest match the kind a result reports.
projectNamestringNoOptional project name to limit scope.
maxCandidatesnumberNoMax candidates to return. Default is 25.
pathStylestringNoPath style: 'absolute' (default) or 'relative' (to solution root).

Examples

Resolve an ambiguous type name

Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "resolve_symbol",
    "arguments": {
      "query": "SolutionManager",
      "kinds": "Type"
    }
  }
}
Response
{
  "success": true,
  "data": {
    "query": "SolutionManager",
    "candidateCount": 2,
    "candidates": [
      {
        "symbolKey": "...",
        "fullName": "MyApp.Services.SolutionManager",
        "kind": "Type",
        "filePath": "/path/to/SolutionManager.cs",
        "lineNumber": 12,
        "projectName": "MyProject"
      }
    ],
    "hints": {
      "nextSteps": [
        "Use get_symbol_info with a candidate symbolKey for details",
        "Use find_references with symbolKey to locate usages"
      ]
    }
  },
  "meta": {
    "durationMs": 123,
    "cancelled": false,
    "timedOut": false,
    "timeoutMs": 1200000
  },
  "error": null
}

Resolve a method name

Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "resolve_symbol",
    "arguments": {
      "query": "Login",
      "kinds": "Method"
    }
  }
}
Response
{
  "success": true,
  "data": {
    "query": "SolutionManager",
    "candidateCount": 2,
    "candidates": [
      {
        "symbolKey": "...",
        "fullName": "MyApp.Services.SolutionManager",
        "kind": "Type",
        "filePath": "/path/to/SolutionManager.cs",
        "lineNumber": 12,
        "projectName": "MyProject"
      }
    ],
    "hints": {
      "nextSteps": [
        "Use get_symbol_info with a candidate symbolKey for details",
        "Use find_references with symbolKey to locate usages"
      ]
    }
  },
  "meta": {
    "durationMs": 123,
    "cancelled": false,
    "timedOut": false,
    "timeoutMs": 1200000
  },
  "error": null
}

Response Notes

Returns candidate symbols with stable symbol keys. Candidates come from one name-match tier - exact name, else name prefix, else substring - reported as matchTier, with suppressedMatches counting what a weaker tier held, so a precise query is not diluted by symbols that merely contain it. Add * or ? to the query to match loosely on purpose. A query that already contains a wildcard reports matchTier Glob, which is its own tier: every hit is equally what you asked for, so nothing is suppressed and no tier note is returned. Namespaces are returned only when kinds asks for them.

↑/↓ NavigateEnter OpenSpace Expand