symbiont
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@symbiontfind all usages of thecreateUserfunction"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 buildMCP 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?: stringfind_all_usages:symbolName: string,entryFile?: string,workspaceRoot?: stringrename_symbol:oldName: string,newName: string,targetFile: string,line?: number,dryRun?: boolean,workspaceRoot?: stringcheck_architecture_rules:configPath?: string,workspaceRoot?: stringget_dependency_graph:workspaceRoot?: stringset_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: errorCLI 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 graphTesting
npm testLicense
MIT
Available Tools
6 toolscheck_architecture_rulesA
Evaluates the dependency graph against declarative architectural rules (.symbiontrc.yaml) and returns actionable boundary violations.
| Name | Required | Description | Default |
|---|---|---|---|
| configPath | No | Optional path to .symbiontrc.yaml or .symbiontrc.json configuration file. | |
| workspaceRoot | No | Optional workspace root directory to scan. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entryFile | No | Optional entry file where the symbol is declared. | |
| symbolName | Yes | Exact name of the symbol to find. | |
| workspaceRoot | No | Optional workspace root directory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceRoot | No | Optional workspace root directory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Relative or absolute path to the TypeScript/JavaScript file. | |
| workspaceRoot | No | Optional workspace root directory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | Optional line number to disambiguate if multiple symbols share the name. | |
| dryRun | No | If true, returns the unified diff preview without modifying files on disk. | |
| newName | Yes | New name for the symbol. | |
| oldName | Yes | Current name of the symbol to rename. | |
| targetFile | Yes | File path containing the symbol declaration or reference. | |
| workspaceRoot | No | Optional workspace root directory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceRoot | Yes | Absolute path to workspace root. |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
Six tools is well-scoped for a code intelligence and refactoring server. Each tool earns its place and covers a distinct phase without redundancy.
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
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
Hosted code graph over MCP: exact callers, dependencies, and cross-repo blast radius for AI agents.
A MCP server built for developers enabling Git based project management with project and personal…
Free MCP tools: the only MCP linter, health checks, cost estimation, and trust evaluation.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for comprehensive code analysis, navigation, and quality assessment across 25+ programming languages.988MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables parsing, indexing, and querying source code as structured knowledge, providing code exploration, spec generation, and migration tools via 20 MCP tools.MIT
- FlicenseNot gradedqualityCmaintenanceProvides 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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