FastAPI Architect MCP
An MCP server that gives Claude Code IDE-level intelligence for FastAPI projects using semantic code navigation, safe refactoring, route/dependency inspection, Pydantic model analysis, and a static knowledge graph.
Find all references to a symbol across the project
Safely rename symbols across all files
Jump to definitions and get completions at a cursor position
List FastAPI routes with full paths and router prefixes
Get full
Depends()injection trees for handlersList and inspect Pydantic/SQLModel models: fields, types, defaults, validators
Find everywhere a model is used across the project
Detect routes missing
response_modeland schema/ORM field mismatchesBuild and refresh a typed knowledge graph of the app
Generate markdown graph reports, explore neighbors, and run impact analysis
Find shortest paths between nodes (e.g. route → SQL table)
Audit routes for missing auth, duplicates, unused schemas, and dependency cycles
Export the graph as a standalone interactive HTML visualization
fastapi-architect-mcp
An MCP server that gives Claude Code IDE-level intelligence for FastAPI projects — semantic code navigation, safe renaming, route inspection, dependency trees, Pydantic model analysis, and a typed knowledge graph of the whole application.
Instead of Claude reading files blindly, it calls structured tools backed by Jedi (Python language server) and Python's AST.
Tools
Tool | Description |
| Find all usages of a symbol across the project |
| Safely rename a symbol across all files |
| Jump to where a symbol is defined |
| Get completion suggestions at a cursor position |
| List all FastAPI routes with their full paths (router prefixes applied) |
| Get the full injection tree for a handler (router, decorator and signature |
| Per-file view: route → input models → dependencies → response model |
| Detect routes missing a |
| List all Pydantic/SQLModel models in a file |
| Inspect a model's fields, types, defaults, and validators |
| Find everywhere a model is used across the project |
| Detect field mismatches between ORM model and Pydantic schema |
Knowledge graph
Tool | Description |
| Build or refresh the project graph and return its statistics |
| Markdown overview: routes with their auth, most connected symbols, tables, audit findings |
| Explore what a route, function, model or table uses and is used by |
| Everything affected if a symbol changes, with the chain explaining each impacted route |
| Shortest paths between two nodes, e.g. from a route to a SQL table |
| Write routes without auth, duplicate or unmounted routes, unused schemas, unreferenced ORM models, dependency cycles |
| Standalone interactive HTML visualization of the graph |
Related MCP server: PyEye Server
Knowledge graph
The graph is built statically from the AST — no code is executed and no LLM is involved.
Nodes: App, Router, Route, Handler, Dependency, Middleware, Function, Schema, ORMModel, Class, Table, Template, Module
Edges:
App/Router ──INCLUDES──▶ Router (prefixes → full route paths)
Route ──HANDLED_BY──▶ Handler
Route/Router/function ──DEPENDS_ON──▶ Dependency
function ──ACCEPTS / RETURNS──▶ Schema/ORMModel
function ──CALLS──▶ function function/class ──USES──▶ class
function ──QUERIES──▶ Table (raw SQL strings: SELECT, INSERT, UPDATE, DELETE, CREATE)
function ──RENDERS──▶ Template App ──MIDDLEWARE──▶ Middleware
ORMModel ──MAPS_TO / REFERENCES──▶ Table ORMModel ──RELATES_TO──▶ ORMModel
Schema ──INHERITS──▶ Schema Schema ──MIRRORS──▶ ORMModel (name + field overlap, with confidence)It covers both structured projects (APIRouter, Depends, SQLAlchemy/SQLModel) and flat ones (a single main.py, raw psycopg2 queries, Jinja2 templates, manual auth checks).
Cache: per-file extraction results are stored in <project>/.fastapi-architect/graph.json (git-ignored automatically). Only new or modified files are re-parsed, so graph tools stay fast after the first build.
Installation
pip install fastapi-architect-mcpConfiguration
Option 1 — Global (available in all projects)
Add to ~/.claude/settings.json:
{
"mcpServers": {
"fastapi-architect": {
"command": "fastapi-architect-mcp"
}
}
}Option 2 — Per project (recommended for best results)
Create .mcp.json at your project root:
{
"mcpServers": {
"fastapi-architect": {
"command": "/path/to/your/project/venv/bin/fastapi-architect-mcp"
}
}
}Using your project's own venv gives Jedi access to all your project's dependencies, which enables full cross-file find_references and rename_symbol support.
Then restart Claude Code.
Usage examples
Once connected, you can ask Claude Code things like:
"List all routes in this project"
"What are the dependencies of the
get_usershandler?""Find all references to
get_dbacross the project""Rename
get_dbtoget_sessioneverywhere""Inspect the
UserCreatemodel""Are there any routes missing a response_model?"
"Show me the full dependency graph for the users router"
"Are there any mismatches between my
UserORM model andUserPublicschema?""Give me an overview of this FastAPI project"
"If I change the
Usermodel, which endpoints are affected?""Which write endpoints have no authentication?"
"How does
POST /chatreach thechat_logstable?""Export the knowledge graph as HTML"
Supported patterns
Dependency injection
def handler(x=Depends(func))— standard FastAPIdef handler(*, x=Depends(func))— keyword-only args@router.get("/", dependencies=[Depends(func)])— decorator-level depsSessionDep = Annotated[Session, Depends(get_db)]— Annotated aliases (modern FastAPI)
Models
BaseModel— PydanticSQLModel— SQLModelBaseSettings— Pydantic settingsRootModel— Pydantic v2Inherited models (e.g.
class UserCreate(UserBase))
Validators
@validator— Pydantic v1@field_validator— Pydantic v2
Known limitations
find_referencesandrename_symbolwork cross-file only when the MCP is configured to use the project's own venv (Option 2 above). With a global install, they only operate on the file where the symbol is defined.get_dependenciesand the knowledge graph support native FastAPIDepends()/Security()only. Other DI frameworks (Dishka, dependency-injector, etc.) are not supported.Auth detection in
audit_graphis inferred from names (dependencies, auth headers, called functions). Middleware-based auth is not detected; passauth_dependenciesto declare custom guards.Static analysis limits: routes registered dynamically, dependencies passed through variables, calls through
selfor injected objects, and SQL built at runtime are only partially captured.export_graph_htmlloads vis-network from a CDN, so viewing the page requires internet access.Runtime dependencies (middleware, lifespan events, startup hooks) are not visible to static analysis and won't appear in dependency trees.
get_completionsis most useful at attribute access positions (e.g. after a.). On empty lines it returns all Python builtins.
Requirements
Python 3.11+
Claude Code (VS Code extension or CLI)
Author
Abdessamad Touzani
GitHub: @AbdessamadTzn
LinkedIn: abdessamadtouzani
Available Tools
19 toolsaudit_graphA
Project-wide checks: write routes without auth, duplicate routes, routers never mounted, unused schemas, unreferenced ORM models, dependency cycles and parse errors.
Auth is inferred from dependency names, auth Header params and calls to auth-like functions.
Pass auth_dependencies (function names) to declare custom guards the heuristics miss.
| Name | Required | Description | Default |
|---|---|---|---|
| project_root | Yes | ||
| auth_dependencies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does add value: it reveals that auth detection is heuristic, based on dependency names, auth Header params, and calls to auth-like functions, and that the optional parameter extends those heuristics. It implies a read-only static-analysis tool, though it does not state the return format or side effects explicitly.
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?
Three dense sentences: the first lists the audit scope, the second explains the auth inference mechanism, and the third tells how to extend it with custom guard functions. There is no filler, redundancy, or restatement of the tool name.
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?
For a multi-category audit tool with no annotations and no output schema, the description covers what is checked and how auth detection behaves, which is enough for an agent to decide whether to call it. It could improve by describing the shape of the returned report and the expected value of project_root, but these are moderate gaps.
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 description goes beyond the schema by explaining that auth_dependencies declares function names for custom guards the heuristics miss. project_root is not described in detail, but 'project-wide checks' plus the parameter name make its role reasonably clear; the parameter surface is small even though schema description coverage is 0%.
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 that the tool performs project-wide audits and enumerates concrete check categories (authless write routes, duplicate routes, unmounted routers, unused schemas, unreferenced ORM models, dependency cycles, parse errors), so an agent can tell this is a broad analysis/audit tool rather than a single lookup. It does not explicitly contrast itself with overlapping siblings like list_routes or build_dependency_graph, so it stops short of full differentiation.
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 enumerated check types make it clear the tool is for project-wide audits rather than single-target lookups, and the second paragraph explains when to pass auth_dependencies for custom auth guards the heuristics miss. It provides clear usage context but no explicit when-not-to-use guidance or routing to an alternative sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_dependency_graphB
Build a full dependency graph for the routes of a file: route → handler → dependencies → models.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden; it does communicate the main output structure (route → handler → dependencies → models). It does not explicitly state that the operation is read-only, whether it can fail for unresolved routes, or whether it writes anything, but nothing in the wording suggests mutation.
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 entire description is a single, front-loaded sentence with no filler. Every clause adds meaning: full graph, routes of a file, and the exact traversal chain.
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?
An output schema is present, so return-value documentation is not required, and the chain covers the graph content. But the required file/project_root parameters are left ambiguous and there is no selection guidance relative to the many sibling graph tools, so an agent cannot reliably invoke this tool correctly.
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 0%, and the description does not compensate: it never defines whether file is a path or route identifier, what format it expects, or how project_root anchors resolution. The two parameter names are the only semantics available.
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 verb and resource: build a full dependency graph for routes of a file, and the arrow chain clarifies the graph's scope. It is clear and distinguishes from broader graph tools by restricting to routes, though it does not explicitly call out sibling-based alternatives.
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 imperative 'Build...' implies the use case: call this when you need a route-to-model dependency graph. However, it gives no when-not-to-use guidance, exclusions, or pointers to siblings such as get_dependencies or build_knowledge_graph, leaving selection among the many graph tools to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_knowledge_graphA
Build or refresh the project's FastAPI knowledge graph and return its statistics.
The graph links routes, handlers, dependencies, schemas, ORM models, SQL tables, templates and function calls. It is cached in /.fastapi-architect/ and only changed files are re-parsed, so other graph tools are fast. Use force=True to rebuild from scratch.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| project_root | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the graph is cached in <project_root>/.fastapi-architect/ and that only changed files are re-parsed, which implies incremental updates and writes to the project directory. It also mentions force=True for full rebuilds. It does not detail potential side effects like overwriting existing cache or permission requirements, but it covers the key behaviors.
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 three sentences long, front-loaded with the core purpose, then explains graph contents, then caching and force usage. Every sentence adds necessary information without redundancy or fluff.
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?
For a build tool with no output schema, the description explains what it does (builds/refreshes), what the graph contains, caching behavior, and that it returns statistics. It does not detail the exact statistics returned or potential failure scenarios, but given the tool's role and sibling context, it is sufficiently 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?
The input schema has no descriptions (0% coverage), so the description must compensate. It explicitly explains the force parameter with 'Use force=True to rebuild from scratch.' The project_root parameter is implicitly described via the cache path <project_root>/.fastapi-architect/. This adds meaning beyond the raw schema, though project_root could be more explicitly defined.
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 clearly states the tool's function: 'Build or refresh the project's FastAPI knowledge graph and return its statistics.' It specifies the verb (build/refresh), the resource (knowledge graph), and the output (statistics). It differentiates from siblings like build_dependency_graph by explicitly referring to the FastAPI knowledge graph and mentioning caching and incremental parsing, which are unique to this tool.
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 provides usage context by noting that the graph is cached and only changed files are re-parsed, so other graph tools are fast after this tool runs. This implies the tool should be invoked before using other graph tools. It also explains when to use force=True ('rebuild from scratch'). It does not explicitly mention alternatives or when not to use it, but the intended usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_schema_orm_mismatchesC
Detect field mismatches between a SQLAlchemy ORM model and a Pydantic schema.
| Name | Required | Description | Default |
|---|---|---|---|
| orm_file | Yes | ||
| orm_model | Yes | ||
| schema_file | Yes | ||
| schema_model | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool detects mismatches, which implies a read-only analysis, but it does not say whether files are read from disk, whether anything is modified, how results are returned, or what error conditions exist.
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, well-formed sentence with no redundant words. The core function is front-loaded ('Detect field mismatches') and the target types are specified compactly.
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?
For a tool with four required parameters, no output schema, no annotations, and no parameter documentation, this description is far from complete. It omits return format, file path expectations, failure modes, and any behavioral caveats, leaving an agent to guess at invocation details.
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 0%, so the description must compensate for four undocumented required parameters. The phrase 'between a SQLAlchemy ORM model and a Pydantic schema' loosely maps to orm_model and schema_model, but it does not explain the file path parameters (orm_file, schema_file), the expected model identifiers, or how the parameters interrelate.
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 clearly states a specific verb ('Detect') and a specific resource ('field mismatches between a SQLAlchemy ORM model and a Pydantic schema'). It is distinguishable by name and function from most siblings, though it does not explicitly contrast with validate_response_models or inspect_model.
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 gives no guidance on when to prefer this tool over siblings like validate_response_models or inspect_model, nor any conditions, prerequisites, or exclusions. The intended usage is only implied by the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_graph_htmlA
Export the knowledge graph as a standalone interactive HTML page (open it in a browser).
Nodes are colored by type (Route, Handler, Dependency, Schema, ORMModel, Table...), with search, type filters and a details panel listing each node's connections. Defaults to /.fastapi-architect/graph.html. Rendering loads vis-network from a CDN.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| project_root | Yes |
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 discloses that the tool writes to a default path, that rendering loads vis-network from a CDN (network dependency), and that nodes are colored/filterable. It does not mention overwrite behavior, directory creation, or what happens if the graph is empty, which are notable gaps for a side-effecting export tool. It adds value but is not fully transparent.
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 efficiently organized: one sentence for the core purpose, followed by a focused paragraph on visual features and important defaults. Every sentence contributes useful information with no filler. Minor redundancy exists ('standalone interactive HTML page' vs. details about interactive features), but overall it is concise and front-loaded.
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?
For a tool with two simple parameters and no output schema, the description covers key details like output location and CDN dependency. However, it omits whether the tool requires a pre-existing knowledge graph or if it builds one implicitly, and it does not address common concerns like file overwriting or error conditions. These gaps mean it is not fully complete for safe agent invocation.
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 0%, so the description must compensate. It partially does by explaining that project_root determines the default output path and that output_path defaults to null (meaning use the default). However, it does not clarify what project_root should point to, the accepted format, or the effect of providing an explicit output_path. The meaning added is useful but incomplete.
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 ('Export'), resource ('knowledge graph'), and output format ('standalone interactive HTML page'). It also mentions interactive features like search, filters, and details panel, which clearly distinguishes it from sibling tools like build_knowledge_graph or graph_report. An agent can accurately select this tool when an exportable HTML visualization is needed.
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 usage for creating a browser-viewable HTML file, and it gives practical details (default path, CDN requirement). However, it does not explicitly state when to use this tool versus alternatives, nor does it mention preconditions like whether the knowledge graph must already be built. The guidance is reasonable but not explicit enough to warrant a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_model_usagesC
Find all places a Pydantic model is used as a type annotation across the project.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavior. It states it finds usages but does not clarify scope (e.g., whole project, file types), whether it's read-only, performance implications, or side effects. The description is insufficient.
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 unnecessary words. It is well-structured and front-loaded with the key action.
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?
Although an output schema exists, the description lacks crucial context: parameter semantics, usage guidelines, and behavioral details. For a tool with two undocumented required parameters, the description does not provide sufficient information for correct invocation.
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 0%, meaning parameters have no descriptions. The tool description does not explain the 'file' or 'model' parameters (e.g., format, required vs optional, interpretation). The agent has no guidance on what values to provide.
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+resource construction: 'Find all places a Pydantic model is used as a type annotation.' It clearly identifies the tool's purpose and distinguishes it from siblings like 'find_references' (more general) and 'go_to_definition'.
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?
No explicit guidance on when to use this tool versus alternatives like 'find_references' or 'get_dependencies'. The description does not mention limitations or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pathC
Shortest paths between two nodes, e.g. from a route to a table ("POST /chat" → "chat_logs").
Directed paths are tried first; if none exists, direction is ignored and directed is false.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| target | Yes | ||
| max_paths | No | ||
| project_root | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It usefully discloses the fallback behavior: directed paths are tried first, and direction is ignored if none exist. However, it does not reveal whether the operation is read-only, what the output structure looks like, or how max_paths affects results.
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 compact and front-loaded with the core purpose, followed by a useful example and a key behavioral caveat. Every sentence earns its place, though it omits some parameter context.
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?
Without annotations or an output schema, the description leaves important gaps: the return format, the meaning of max_paths, and what the 'directed' flag in results represents. It is minimally viable but incomplete for an agent needing to call and interpret this tool correctly.
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 0%, so the description must compensate for parameter meanings. The example clarifies source and target by mapping a route to a table, but max_paths and project_root are not explained at all, and their purpose is not inferable from the description.
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 and resource: finding shortest paths between two nodes, with a concrete example from a route to a table. It is clear enough to distinguish from sibling tools like get_dependencies or graph_neighbors, though it does not explicitly name an alternative.
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 usage for pathfinding between two connected nodes but gives no explicit guidance on when to prefer this tool over siblings such as graph_neighbors, find_references, or impact_analysis. There is no when-not-to-use or alternative comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_referencesB
Find all references to the symbol at the given position across the project.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| column | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as error handling, performance implications, or whether references include external files.
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, front-loaded with action, no wasteful 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?
Despite an output schema existing, the description lacks context about the meaning of 'references', scope nuances, and error scenarios, leaving gaps for a 3-parameter tool.
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 0%, but parameter names (file, line, column) are self-explanatory. However, the description adds no further meaning beyond the schema, so it partially compensates but not fully.
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 clearly states the verb 'Find' and resource 'references' with scope 'across the project', distinguishing it from siblings like go_to_definition and find_model_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?
No guidance on when to use this tool versus alternatives like find_model_usages or go_to_definition; lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_completionsC
Return completion suggestions at the given cursor position.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| column | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description is minimal. It does not disclose whether the operation is read-only, what happens if the file does not exist, any side effects, or error behaviors.
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, concise sentence that is easy to parse and front-loaded. However, it is borderline too short and could include more detail without sacrificing conciseness.
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 the lack of annotations, the description is too brief to be complete. It does not explain the output schema (though it exists), error handling, or any prerequisites for using the tool effectively.
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 has zero description coverage for its parameters. The description only loosely implies that 'line' and 'column' define the cursor position but does not explain file path format or indexing conventions (e.g., 0-based vs 1-based).
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 clearly states the tool returns completion suggestions at a given cursor position, using a specific verb and resource. It distinguishes itself from sibling tools like find_references or go_to_definition, which serve different navigation purposes.
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?
No guidelines are provided about when to use this tool versus alternatives. The agent must infer usage from the name and description, with no explicit context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dependenciesA
Get the full Depends() injection tree for a FastAPI handler across the entire project.
Includes router-level, include_router, decorator-level and signature dependencies.
handler may be a function name, a "Class.method" qualname, or a graph id ("app.routes.users:list_users").
| Name | Required | Description | Default |
|---|---|---|---|
| handler | Yes | ||
| project_root | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: it scans the whole project, aggregates multiple dependency sources, and accepts three handler identifier forms. It does not describe the return shape or error behavior, but it gives more behavioral context than most descriptions of this type.
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 compact and front-loaded: the action is stated in the first sentence, followed by the key inclusion detail and a concrete parameter note. Every sentence earns its place, with no filler or repetition.
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?
For a two-parameter query tool, the description is mostly sufficient to attempt a call, but there is no output schema and no description of the returned structure, empty results, or failure modes. The lack of usage-routing guidance also leaves some contextual gaps despite the strong core definition.
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 0%, so the description must compensate. It thoroughly documents `handler` by listing function names, qualified 'Class.method' names, and graph ids with an example. However, `project_root` gets no explanatory treatment beyond its parametric name, leaving its expected format or path semantics implicit.
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: it fetches the full Depends() injection tree for a FastAPI handler across the project. It also enumerates the included dependency levels (router-level, include_router, decorator-level, signature), which clearly differentiates it from graph-oriented siblings like build_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 does not state when to use this tool versus the many sibling tools, nor does it name alternatives or exclusions. The 'across the entire project' and 'full' phrasing imply comprehensive scope, but the agent is left to infer when to choose this instead of build_dependency_graph or find_references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_definitionA
Return the file and line where the symbol at the given position is defined.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| column | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description is straightforward and does not contradict any. However, it does not disclose any behavioral traits like performance or permissions beyond the basic operation.
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, concise sentence with no unnecessary words, effectively communicating the tool's purpose.
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?
While the description covers the basic purpose, it lacks details about return format, error conditions, or limitations. The presence of an output schema mitigates some gaps, but the description alone is minimal.
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 0%, and the description adds no additional meaning to the parameters (file, line, column) beyond their names. It does not explain indexing conventions or file types.
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 clearly states it returns the file and line where a symbol at a given position is defined, using specific verb and resource. It distinguishes from sibling tools like find_references and find_model_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 usage for navigating to a symbol's definition but provides no explicit guidance on when to use versus siblings like find_references or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_neighborsA
Explore the knowledge graph around a node.
node can be a graph id, a route ("GET /api/users/" or "/api/users/"), a table name, or a
function/class name. direction is "out" (what it uses), "in" (what uses it) or "both".
edge_types filters edges, e.g. ["DEPENDS_ON", "CALLS"]. Valid types: INCLUDES, HAS_ROUTE,
HANDLED_BY, DEPENDS_ON, ACCEPTS, RETURNS, CALLS, USES, QUERIES, RENDERS, MIDDLEWARE, INHERITS,
MAPS_TO, REFERENCES, RELATES_TO, MIRRORS, DEFINES (excluded by default).
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | ||
| depth | No | ||
| direction | No | both | |
| edge_types | No | ||
| project_root | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It honestly conveys the flexible node resolution, direction semantics, and edge-type filtering, including the fact that DEFINES is excluded by default. It does not mention output shape, depth behavior, or any read-only/safety expectations, though 'explore' implies a non-mutating operation.
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 front-loaded with the core action, then compactly explains each relevant parameter and valid values. The edge-type list is dense but necessary. There is no filler or redundant repetition of the schema.
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 main behavior and several parameter nuances, making it minimally viable for an agent to invoke the tool with defaults. However, it omits meaningful context about `project_root`, the semantics/bounds of `depth`, and what output the agent should expect. Given five parameters and no output schema or annotations, this is a noticeable gap.
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 0%, so the description must compensate for all parameters. It does explain `node`, `direction`, and `edge_types` in detail, adding meaning beyond the schema. However, `depth` and `project_root` are not described, leaving two of five parameters underspecified.
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 clearly states a specific action ('Explore the knowledge graph around a node') and identifies the tool's resource. It clarifies the flexible forms `node` can take, which sharpens the purpose. However, it does not explicitly distinguish this from siblings like `get_dependencies` or `find_references`.
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 first line implies the usage context: exploring neighbors in the knowledge graph. Parameter semantics are explained well, but there is no explicit guidance on when to choose this over sibling tools such as `find_path`, `get_dependencies`, or `find_references`. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_reportA
A concise Markdown overview of the project: stats, routes with their auth, hubs and audit findings. Good first call to understand an unfamiliar FastAPI codebase. With save=True the report is also written to /.fastapi-architect/GRAPH_REPORT.md.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | ||
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well by disclosing the output format (Markdown), the content areas, and the side effect that save=True writes to a specific file path. It does not over-promise or hide the main behavioral trait, though it could have stated whether the report is read-only apart from saving.
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?
Three sentences, each earning its place: what the report contains, when to use it, and the save side effect. The most important information is front-loaded, and there is no filler or repetition of schema details.
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?
For a low-complexity, two-parameter tool with an output schema, the description is reasonably complete. It covers the output type, content scope, primary use case, and file-writing side effect. Additional detail on what 'hubs' or 'audit findings' mean would be nice but is not essential for a first-call overview tool.
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 0%, so the description must compensate. It explains save=True behavior and references <project_root> in the output path, giving some semantic meaning. Still, it leaves project_root itself undefined and does not fully explain how the two parameters interact beyond the save effect.
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 clearly identifies the deliverable as a concise Markdown overview of the project, listing concrete contents: stats, routes with auth, hubs, and audit findings. It also signals its role as a good first call for unfamiliar FastAPI codebases, which helps distinguish it from more specialized siblings like audit_graph or list_routes, though it does not explicitly name those alternatives.
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 phrase 'Good first call to understand an unfamiliar FastAPI codebase' provides a clear context for when to use the tool. However, it does not mention when to prefer other sibling tools or any exclusions, leaving the comparison to alternatives largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
impact_analysisB
What is affected if symbol changes: routes, handlers, dependencies, schemas, ORM models...
Follows reverse edges (callers, users, dependents, subclasses, mirroring schemas, tables → models).
Each impacted route includes a via chain explaining why. symbol accepts the same forms as
graph_neighbors (e.g. "User", "get_db", "users" for a table, "app.models.user:User").
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| max_depth | No | ||
| project_root | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does explain that it follows reverse edges (callers, users, dependents, subclasses, mirroring schemas, tables → models) and that each impacted route includes a 'via' chain. However, it does not mention whether the operation is read-only, how max_depth affects results, or any performance implications, leaving some behavioral gaps.
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 fairly concise, with two sentences that front-load the core purpose and then add detail on traversal and symbol format. The opening question is slightly informal but efficient. No filler is present, and the structure is logical.
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?
For a tool with three parameters, no output schema, and no annotations, the description is incomplete. It explains the purpose and symbol parameter but omits details on max_depth (e.g., how depth limits traversal), project_root (e.g., what it refers to), and the overall output structure (beyond the via chain). An agent would need to infer too much to use this tool correctly.
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 0%, so the description must compensate. It explains the 'symbol' parameter thoroughly, giving examples of accepted forms (e.g., 'User', 'get_db', 'users', 'app.models.user:User'). However, it says nothing about 'max_depth' or 'project_root', leaving those parameters underspecified. The description covers only one of three parameters, which is insufficient given the lack of schema descriptions.
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 clearly states the tool's purpose: analyzing what is affected if a symbol changes, listing categories like routes, handlers, dependencies, schemas, and ORM models. It also mentions following reverse edges, which distinguishes it from forward-traversal tools like graph_neighbors. However, it does not explicitly name a sibling as an alternative, so it misses the full differentiation that would earn a 5.
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 use case (change impact analysis) and references graph_neighbors for symbol format, but it does not explicitly state when to use this tool over siblings like find_references or get_dependencies. The guidance is implied rather than explicit, so agents might not know when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_modelB
Inspect a Pydantic model: fields with types/defaults, and validators.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| model | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose behavioral traits such as read-only nature, side effects, authentication needs, or rate limits. The read-only behavior is implied but not stated.
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 that front-loads the purpose. It is concise but could be slightly more informative without losing brevity.
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?
With no output schema and two parameters, the description should explain what the tool returns (e.g., fields, validators list) and clarify parameter meaning. It fails to do so, leaving gaps in agent understanding.
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 0%, and the description does not add any meaning beyond the bare parameter names. 'file' and 'model' are not explained (e.g., file path, model name), leaving the agent without guidance on their semantics.
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 clearly states the verb 'inspect' and the resource 'Pydantic model', specifying what aspects are inspected (fields with types/defaults, and validators). It distinguishes from siblings like 'list_models' or 'find_model_usages' by focusing on internal details of a specific model.
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 usage for getting model details, but lacks explicit guidance on when to use this tool versus alternatives. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsC
List all Pydantic BaseModel classes defined in a file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden but only states the basic operation. It omits details such as output format, handling of non-existent files, or whether inherited classes are included.
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, concise sentence. While it lacks additional structure, it is front-loaded with the core action. It could be improved by briefly noting the parameter requirement.
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 the simple input (one parameter) and existence of an output schema, the description still fails to cover key context like file path conventions or what constitutes a 'Pydantic BaseModel' in the listing.
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 has 0% description coverage, yet the description does not add meaning to the 'file' parameter beyond its name. No information on allowed formats, paths, or extensions is provided.
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 clearly states the action (List), the resource (Pydantic BaseModel classes), and the scope (in a file). It effectively distinguishes from sibling tools like find_model_usages or go_to_definition.
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?
No guidance is provided on when to use this tool versus siblings. It does not mention alternatives or prerequisites, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_routesC
List all FastAPI routes across the entire project, with full paths (router prefixes applied).
| Name | Required | Description | Default |
|---|---|---|---|
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether the operation is read-only, whether it requires any permissions, or any side effects. The description only restates the function without revealing potential performance implications of scanning the whole project or failure modes for invalid project_root paths.
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, tightly written sentence that front-loads the main action and scope. It contains no filler or redundant information, making it easy 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 tool has only one parameter, but it is completely undocumented in both the schema and the description. There is no usage guidance, no explanation of prerequisites, and no hint about what the output might look like (though an output schema exists, the input ambiguity alone makes the tool difficult to use correctly). The description is far from sufficient for an agent to make a correct call.
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?
With schema description coverage at 0%, the description must explain the parameter 'project_root'. It does not mention it at all, leaving the agent with no clue about its format, meaning, or constraints. This is a critical gap for a tool with only one parameter.
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 is highly specific: 'List all FastAPI routes across the entire project' uses a clear verb (list), a concrete resource (FastAPI routes), and a defined scope (entire project). The detail about 'full paths (router prefixes applied)' further clarifies the output format, leaving no ambiguity about what the tool does. It does not conflate with any sibling tool, as no other sibling offers route listing.
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?
There is no guidance on when to use this tool versus the many sibling tools. It does not mention conditions, exclusions, or alternatives. An agent is left to infer from the name alone, which is insufficient for selecting between similar analysis tools in the project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_symbolC
Rename the symbol at the given position across all files in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| column | Yes | ||
| new_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It mentions renaming across all files but omits side effects (e.g., undoability, file modifications, risk of breaking code) and does not clarify if the operation is read-only or write.
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 short sentence, which is concise but lacks important details. It is front-loaded with the verb, but brevity comes at the cost of completeness.
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 4 required parameters with no explanations, no output schema, and no annotations, the description is insufficient. It does not cover return values, error cases, or success feedback, making it incomplete for an agent to use reliably.
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 0%, and the description provides no additional context for parameters (e.g., file path format, line/column indexing base). Although parameter names are self-explanatory, the tool's description adds no value 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 clearly states the action (rename), the resource (symbol at given position), and the scope (across all files). It is easily distinguishable from sibling tools which focus on finding references or completions.
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?
No guidance on when to use this tool versus alternatives like find_references or go_to_definition. Does not specify prerequisites, such as the symbol needing to exist or write permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_response_modelsC
Detect FastAPI routes missing a response_model declaration.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. The description states the tool 'detects' issues, implying a read-only analysis, but does not disclose whether files are modified, what the output format is, or whether any side effects occur. Given the presence of an output schema, some behavioral disclosure is missing.
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, direct sentence with no filler. It front-loads the action and target, making it immediately scannable. This is appropriately concise for a tool with a single parameter.
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?
For a validation tool with one parameter and no annotations, the description is thin. It does not explain what the tool returns (despite an output schema), how it detects missing declarations, or any limitations. While the simplicity of the tool reduces the need for extensive detail, the lack of behavioral and parameter context makes it incomplete for an agent to use confidently.
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 has 0% description coverage and only one parameter, 'file'. The description adds no extra meaning about the parameter—its type, purpose, or expected format are entirely undocumented. The description fails to compensate for the schema's lack of detail.
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 clearly states a specific action ('Detect') applied to a specific resource ('FastAPI routes') with a precise outcome ('missing a response_model declaration'). This distinguishes it from sibling tools like list_routes or detect_schema_orm_mismatches, which serve different purposes.
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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of contexts where this validation is appropriate, nor any exclusions or prerequisites. The agent is left to infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.3.0- Added
audit_graph - Added
build_dependency_graph - Added
build_knowledge_graph - Added
detect_schema_orm_mismatches - Added
export_graph_html - Added
find_path - Changed
get_dependencies3 fields changed- removed
Input schema / properties / fileRemoved value: -{ - "title": "File", - "type": "string" -} - added
Input schema / properties / project_rootAdded value: +{ + "title": "Project Root", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "file", - "handler" -]New value: +[ + "project_root", + "handler" +]
- Added
graph_neighbors - Added
graph_report - Added
impact_analysis - Changed
list_routes3 fields changed- removed
Input schema / properties / fileRemoved value: -{ - "title": "File", - "type": "string" -} - added
Input schema / properties / project_rootAdded value: +{ + "title": "Project Root", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "file" -]New value: +[ + "project_root" +]
- Added
validate_response_models
9 tool updates
v0.1.0- First observed
find_model_usages - First observed
find_references - First observed
get_completions - First observed
get_dependencies - First observed
go_to_definition - First observed
inspect_model - First observed
list_models - First observed
list_routes - First observed
rename_symbol
TDQS
Scored across 19 tools
Each tool has a clearly distinct purpose: model inspection vs. listing, route enumeration vs. dependency trees, graph building vs. exploration, and audit vs. reporting. Even overlapping tools like impact_analysis and graph_neighbors differ in focus (impact vs. generic navigation). No ambiguity for agent selection.
The vast majority follow a consistent verb_noun snake_case pattern (inspect_model, list_routes, build_dependency_graph). A few like impact_analysis and graph_neighbors deviate slightly from the verb-first convention but remain predictable and readable, so only minor inconsistency.
19 tools is on the heavier side (borderline per rubric), but the FastAPI architecture domain is complex and the tool set covers analysis, refactoring, audit, graph exploration, and IDE-like features. Each tool earns its place; the count feels slightly large but not excessive.
The surface is highly complete for its purpose: covers model inspection/listing/usages, route enumeration/dependencies/validation, graph construction/exploration/impact/pathfinding, audit checks, reporting, and common IDE operations (references, completions, go-to-definition). No obvious dead ends or missing core capabilities.
Maintenance
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server that provides dynamic codebase context to Claude Code through tools like hybrid search, recent changes, and symbol definitions, enhancing AI-assisted coding with local RAG.8MIT
- AlicenseAqualityAmaintenanceAn extensible MCP server that provides intelligent Python code analysis, navigation, and understanding capabilities for AI assistants like Claude.25MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for real-time analysis of Lovable-generated projects, enabling Claude Desktop to instantly understand project structure, components, dependencies, and more.39MIT
- FlicenseNot gradedqualityDmaintenanceInstantly converts any running FastAPI application into an MCP server by parsing its OpenAPI spec, enabling Claude to call all endpoints via natural language without manual tool writing.-