Skip to main content
Glama
DRNZY
by DRNZY

symbiont-mcp

High-performance AST-aware code navigation, refactoring engine, and declarative architectural rule checker for the Model Context Protocol (MCP).

Features

  • AST File Outlines (get_file_outline): Inspects functions, classes, methods, interfaces, types, enums, and variables with line ranges and type signatures without reading full file contents into context.

  • Deterministic Symbol Tracing (find_all_usages): Resolves definitions, call sites, imports, and type references across the codebase using TypeScript compiler bindings.

  • AST Renaming (rename_symbol): Safely renames symbols across all referencing files and generates unified diff patches with dry-run support.

  • Architecture Invariant Checking (check_architecture_rules): Validates import boundaries and return-type contracts against .symbiontrc.yaml.

  • Dependency Graph & Cycle Detection (get_dependency_graph): Maps module import relationships and detects circular dependency chains.

Related MCP server: ACE-MCP

Installation

git clone https://github.com/DRNZY/symbiont-mcp.git
cd symbiont-mcp
npm install
npm run build

MCP Configuration

Add to your MCP configuration (mcp_config.json or client settings):

{
  "mcpServers": {
    "symbiont": {
      "command": "node",
      "args": ["/path/to/symbiont-mcp/dist/index.js"]
    }
  }
}

Tools Reference

  • get_file_outline: filePath: string, workspaceRoot?: string

  • find_all_usages: symbolName: string, entryFile?: string, workspaceRoot?: string

  • rename_symbol: oldName: string, newName: string, targetFile: string, line?: number, dryRun?: boolean, workspaceRoot?: string

  • check_architecture_rules: configPath?: string, workspaceRoot?: string

  • get_dependency_graph: workspaceRoot?: string

  • set_workspace_root: workspaceRoot: string

Configuration (.symbiontrc.yaml)

rules:
  - id: no-db-in-ui
    from: "src/components/**"
    disallow_imports:
      - "src/server/db/**"
      - "drizzle-orm"
      - "@prisma/client"
    message: "UI components must not import directly from the database layer."
    severity: error

  - id: enforce-zod-actions
    files: "src/actions/**"
    require_named_export_type: "z.infer<*>"
    message: "Server actions must return a z.infer typed result."
    severity: warning

  - id: disallow-cycles
    files: "src/**"
    disallow_circular_dependencies: true
    message: "Circular dependency detected."
    severity: error

CLI Usage

# Check architecture rules
symbiont-mcp check [.symbiontrc.yaml]

# Inspect symbol outline
symbiont-mcp outline src/components/Button.tsx

# Trace usages
symbiont-mcp usages calculateTotal

# View dependency graph
symbiont-mcp graph

Testing

npm test

License

MIT

Available Tools

6 tools
check_architecture_rulesA

Evaluates the dependency graph against declarative architectural rules (.symbiontrc.yaml) and returns actionable boundary violations.

ParametersJSON Schema
NameRequiredDescriptionDefault
configPathNoOptional path to .symbiontrc.yaml or .symbiontrc.json configuration file.
workspaceRootNoOptional workspace root directory to scan.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full responsibility for behavior. It does disclose that the tool evaluates a graph and returns violations, which suggests a read-only analysis. However, it does not explicitly state that no files are modified, what happens when the optional configuration is missing, or what 'actionable' means in terms of return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. The main purpose is stated first, the configuration file is named, and the expected output is mentioned. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose and output, but because both params are optional and there is no output schema, it should clarify default behavior and what the caller should expect when parameters are omitted. It also leaves the term 'actionable' undefined, which is a meaningful gap for an agent deciding whether the result is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters with clear descriptions, so the baseline is 3. The description adds useful context by connecting the config path to .symbiontrc.yaml and tying the workspace root to the scan scope. It does not need to repeat schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action, 'Evaluates the dependency graph', and identifies the resource, 'declarative architectural rules (.symbiontrc.yaml)'. It also describes the output, 'actionable boundary violations', making it clear that this tool checks rules rather than just retrieving data. This distinguishes it from sibling tools like get_dependency_graph.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's context clear: it is used when dependency-graph information needs to be evaluated against architectural rules. It does not explicitly name alternatives or state when not to use it, but the wording implies it is for validation rather than inspection. A small gap is that it does not mention get_dependency_graph as the alternative for raw graph inspection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_all_usagesA

Performs deterministic AST traversal to return every exact reference, import, definition, and call-site across the codebase.

ParametersJSON Schema
NameRequiredDescriptionDefault
entryFileNoOptional entry file where the symbol is declared.
symbolNameYesExact name of the symbol to find.
workspaceRootNoOptional workspace root directory.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful traits like 'deterministic' and 'AST traversal', and enumerates exactly what is returned. Still, it does not disclose scope boundaries (e.g., whether generated or dependency files are included), performance characteristics, or how optional workspaceRoot and entryFile affect the traversal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence communicates the method, result scope, and result categories without any wasted words. It is concise yet information-dense, and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives a solid overview of what the tool returns, which partially compensates for the absence of an output schema. However, it omits how the optional parameters alter behavior, whether a workspace root must be set in advance, and any limitations of the traversal. The presence of set_workspace_root as a sibling makes this missing relationship noticeable, so the definition is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already provides parameter-level documentation. The description reinforces that matching is exact, which aligns with the schema's 'Exact name' for symbolName, but it adds no new meaning about entryFile or workspaceRoot and how they scope the codebase-wide search. This is a baseline score given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Performs deterministic AST traversal') and a concrete deliverable ('every exact reference, import, definition, and call-site across the codebase'). This clearly distinguishes it from sibling tools like get_dependency_graph, which returns a graph, and rename_symbol, which mutates. An agent can tell exactly what this tool does at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is strongly implied: call this when you need all usages of a symbol. However, the description does not explicitly say when to use this tool versus get_dependency_graph or rename_symbol, nor does it provide exclusion criteria or mention prerequisites such as setting a workspace root. It offers only implied usage, not explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dependency_graphA

Builds a module dependency graph, tracking direct imports, dependents, and circular dependency cycles.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceRootNoOptional workspace root directory.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does communicate that the tool analyzes module relationships rather than performing a visible mutation. It does not clarify whether workspace state is changed, what the output graph looks like, or how the optional workspaceRoot influences behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the core operation, the resource, and the key tracked relationships. Every clause contributes meaning and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only one optional parameter and no output schema, the description gives the essential conceptual behavior but omits the return format and the effect or default of workspaceRoot. These details would help an agent call the tool correctly without further inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the only parameter, workspaceRoot, as an optional workspace root directory. The description adds no extra parameter detail, so it relies on the schema, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Builds a module dependency graph' and names tracked aspects. It is distinguishable from sibling tools by the graph concept, though it does not explicitly contrast itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The described functionality implies it is for module dependency analysis, especially direct imports, dependents, and cycles. However, there is no explicit statement about when to prefer this tool over siblings or what conditions make it or alternatives appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_file_outlineA

Returns high-level symbol declarations (functions, classes, interfaces, types, enums, variables) with line ranges and signatures without dumping raw file bodies.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesRelative or absolute path to the TypeScript/JavaScript file.
workspaceRootNoOptional workspace root directory.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It adds meaningful detail beyond the tool name: it returns only high-level declarations, includes line ranges and signatures, and does not dump raw bodies. However, it does not address error cases, language limitations, or the exact response structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, tightly packed with useful detail: result type, symbol kinds, returned attributes, and the key contrast with raw file bodies. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only outline tool, and the description covers its main output behavior. With no output schema, describing the return contents (line ranges and signatures) is helpful, though explicit mention of workspaceRoot handling or alternatives like find_all_usages would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents filePath and workspaceRoot. The description does not add parameter-specific detail beyond what the schema provides, but it does not need to; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns') and resource ('high-level symbol declarations'), enumerates concrete symbol categories, and contrasts with 'raw file bodies.' This clearly distinguishes it from sibling tools like get_dependency_graph or find_all_usages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for structural overviews without reading full file contents, but it does not explicitly say when to choose this over siblings or when not to use it. No exclusions or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_symbolA

Applies syntactically safe, AST-level renames across all consumers and returns unified diffs.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineNoOptional line number to disambiguate if multiple symbols share the name.
dryRunNoIf true, returns the unified diff preview without modifying files on disk.
newNameYesNew name for the symbol.
oldNameYesCurrent name of the symbol to rename.
targetFileYesFile path containing the symbol declaration or reference.
workspaceRootNoOptional workspace root directory.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It does disclose that renaming is AST-level, syntactically safe, cross-consumer, and that unified diffs are returned. However, it does not explicitly state that files are modified on disk by default, whether changes are reversible, or what the concrete diff output looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every qualifier contributes meaning: syntactically safe, AST-level, across all consumers, and unified diffs. It is compact without sacrificing the most important semantic information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate given the complete parameter schema: an agent can identify the required inputs and the basic behavior. However, it lacks explicit usage guidance, a clear side-effect statement, and detail on the unified diff return format, so some context must still be inferred.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema: 'across all consumers' clarifies that targetFile is an entry point rather than the only file affected, and 'AST-level' informs how oldName and newName will be matched. Optional parameters like line, dryRun, and workspaceRoot are already well described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation ('Applies ... renames'), a concrete resource ('symbol'), a scope ('across all consumers'), and an output ('unified diffs'). It also adds meaningful qualifiers ('syntactically safe, AST-level') that distinguish this from a naive find-and-replace tool and from sibling tools like find_all_usages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: this is the tool to use when a symbol should be renamed across all its consumers. However, it does not explicitly say when to prefer find_all_usages, get_file_outline, or set_workspace_root, nor does it give when-not-to-use guidance or enumerate alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_workspace_rootA

Sets or re-indexes the active project workspace root directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceRootYesAbsolute path to workspace root.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral implications itself. It indicates a state-mutating operation and mentions re-indexing, but it does not explain side effects, whether the previous workspace root is replaced, whether validation occurs, or what happens on failure. This is a meaningful transparency gap for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler. The core action and target resource are front-loaded, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimally viable for a one-parameter tool with full schema coverage. However, because there are no annotations and no output schema, the description should clarify what re-indexing entails and what observable outcome or error behavior the agent can expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter is already well documented as an absolute path. The tool description adds only the 'active project workspace root' context and does not introduce additional semantic constraints, format requirements, or behavioral details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Sets or re-indexes') and a clear resource ('active project workspace root directory'). This is distinct from all sibling tools, which are concerned with outlines, dependency graphs, usage searches, renaming, and architecture checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool configures or re-indexes the active workspace root, which suggests it should be used before workspace-dependent operations. However, it provides no explicit guidance about when to use it, what prerequisites exist, or how it relates to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool addresses a clearly distinct concern: per-file symbol outlines, module dependency graphs, exact usages, refactoring, architecture rule validation, and workspace management. Related tools like get_dependency_graph and check_architecture_rules are separated by build vs. evaluate, preventing confusion.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_object pattern (get_file_outline, rename_symbol, set_workspace_root, etc.). There are no vague verbs or mixed casing conventions.

Tool Count5/5

Six tools is well-scoped for a code intelligence and refactoring server. Each tool earns its place and covers a distinct phase without redundancy.

Completeness4/5

The set covers the core lifecycle: workspace setup, navigation, dependency analysis, usage discovery, renaming, and architecture validation. Minor conveniences like a get_workspace_root or deeper symbol-detail lookup are absent, but they are not required for the main workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables parsing, indexing, and querying source code as structured knowledge, providing code exploration, spec generation, and migration tools via 20 MCP tools.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides structural code intelligence via 26 MCP tools, enabling AI assistants to query code symbols, dependencies, and call graphs accurately without file-pasting.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DRNZY/symbiont-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server