Skip to main content
Glama

Nuanced MCP Server

A Model Context Protocol (MCP) server that provides call graph analysis capabilities to LLMs through the nuanced library.

Overview

This MCP server enables LLMs to understand code structure by accessing function call graphs through standardized tools and resources. It allows AI assistants to:

  • Initialize call graphs for Python repos

  • Explore function call relationships

  • Analyze dependencies between functions

  • Provide more contextually aware code assistance

Related MCP server: Axon.MCP.Server

API

Tools

  • initialize_graph

    • Initialize a code graph for the given repository path

    • Input: repo_path (string)

  • switch_repository

    • Switch to a different initialized repository

    • Input: repo_path (string)

  • list_repositories

    • List all initialized repositories

    • No inputs required

  • get_function_call_graph

    • Get the call graph for a specific function

    • Inputs:

      • file_path (string)

      • function_name (string)

      • repo_path (string, optional) - uses active repository if not specified

  • analyze_dependencies

    • Find all module or file dependencies in the codebase

    • Inputs (at least one required):

      • file_path (string, optional)

      • module_name (string, optional)

  • analyze_change_impact

    • Analyze the impact of changing a specific function

    • Inputs:

      • file_path (string)

      • function_name (string)

Resources

  • graph://summary

    • Get a summary of the currently loaded code graph

    • No parameters required

  • graph://repo/{repo_path}/summary

    • Get a summary of a specific repository's code graph

    • Parameters:

      • repo_path (string) - Path to the repository

  • graph://function/{file_path}/{function_name}

    • Get detailed information about a specific function

    • Parameters:

      • file_path (string) - Path to the file containing the function

      • function_name (string) - Name of the function to analyze

Prompts

  • analyze_function

    • Create a prompt to analyze a function with its call graph

    • Parameters:

      • file_path (string) - Path to the file containing the function

      • function_name (string) - Name of the function to analyze

  • impact_analysis

    • Create a prompt to analyze the impact of changing a function

    • Parameters:

      • file_path (string) - Path to the file containing the function

      • function_name (string) - Name of the function to analyze

  • analyze_dependencies_prompt

    • Create a prompt to analyze dependencies of a file or module

    • Parameters (at least one required):

      • file_path (string, optional) - Path to the file to analyze

      • module_name (string, optional) - Name of the module to analyze

Usage with Claude Desktop

Add this to your claude_desktop_config.json

UV

{
  "mcpServers": {
    "nuanced": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/nuanced-mcp",
        "run",
        "nuanced_mcp_server.py"
      ]
    }
  }
}

Available Tools

6 tools
analyze_change_impactC

Analyze the impact of changing a specific function.

This tool performs a comprehensive impact analysis to help understand what would be affected if you modify the specified function.

Args: file_path: Path to the file containing the function function_name: Name of the function to analyze

Returns: A detailed analysis of the potential impact of changing the function

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
function_nameYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'comprehensive impact analysis' but doesn't disclose behavioral traits like whether this is a read-only operation, if it requires specific permissions, execution time, rate limits, or what 'impact' entails (e.g., dependencies, side effects). The description is vague about the tool's behavior beyond its basic purpose.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded: the first sentence states the purpose clearly. The Args and Returns sections add structure, though 'Returns' is redundant since it just restates the purpose. No unnecessary sentences, but could be more efficient by integrating parameter info.

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

Completeness2/5

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

Given no annotations, 0% schema coverage, and no output schema, the description is incomplete. It lacks details on what the analysis includes, output format, error conditions, or how it differs from siblings. For a tool with two parameters and potential complexity in impact analysis, this is inadequate.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It lists both parameters ('file_path' and 'function_name') in the Args section, providing basic semantics. However, it doesn't add meaning beyond naming them—no details on format, constraints, or examples. With 0% coverage, this partial compensation earns a baseline score.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Analyze the impact of changing a specific function' and 'performs a comprehensive impact analysis'. It specifies the verb (analyze) and resource (function), but doesn't explicitly differentiate from sibling tools like 'analyze_dependencies' or 'get_function_call_graph', which might have overlapping purposes.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'analyze_dependencies' or 'get_function_call_graph', nor does it specify prerequisites, exclusions, or contextual triggers for usage. The only implied usage is when you want to understand impact before modifying a function.

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

analyze_dependenciesB

Find all module or file dependencies in the codebase.

Identifies all function dependencies for a file or module in the active repository. This identifies all modules that depend on the specified module or file.

Args: file_path: Path to a specific file to analyze dependencies for module_name: Name of a module to analyze dependencies for (e.g., 'auth' will match 'app.auth', 'auth.users', etc.)

Returns: A list of all functions and files that depend on the specified module

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNo
module_nameNo

TDQS

B3.1/5.0
Behavior2/5

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 describes the tool's function but lacks critical behavioral details: it doesn't mention if this is a read-only operation, what permissions are required, whether it works on saved or unsaved code, how it handles errors, or if there are rate limits. The description is functional but misses key operational context needed for safe and effective use.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by elaboration and parameter details. It avoids redundancy and uses clear sections (Args, Returns). However, the second sentence is somewhat repetitive of the first, and the structure could be slightly tighter by combining related ideas.

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

Completeness3/5

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

Given the tool's complexity (dependency analysis with 2 parameters) and lack of annotations or output schema, the description is moderately complete. It covers purpose and parameters well but misses behavioral aspects like safety, performance, and error handling. The return value description is vague ('A list of all functions and files'), lacking format details. For a tool with no structured support, this leaves gaps in operational understanding.

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

Parameters4/5

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

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains that 'file_path' is for a specific file and 'module_name' matches patterns like 'app.auth' or 'auth.users', clarifying how parameters work semantically. This compensates well for the schema's lack of documentation, though it could note that only one parameter should be used at a time or provide examples of valid paths.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Find all module or file dependencies in the codebase' and 'Identifies all function dependencies for a file or module in the active repository.' It specifies the verb ('find', 'identifies') and resource ('dependencies', 'modules/files'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from siblings like 'analyze_change_impact' or 'get_function_call_graph', which likely have related but distinct purposes.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It mentions analyzing dependencies but doesn't specify scenarios, prerequisites, or exclusions. For example, it doesn't clarify if this should be used for impact analysis vs. 'analyze_change_impact' or for dependency graphs vs. 'get_function_call_graph'. This lack of context leaves the agent guessing about appropriate use cases.

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

get_function_call_graphC

Get the call graph for a specific function.

Args: file_path: Path to the file containing the function function_name: Name of the function to analyze repo_path: Optional repository path (uses active repository if not specified)

Returns: Information about the function's call graph

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
function_nameYes
repo_pathNo

TDQS

C2.9/5.0
Behavior2/5

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 states the tool 'Get[s] the call graph' but doesn't explain what a 'call graph' entails, whether it's read-only or has side effects, or any performance or permission considerations. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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

Conciseness4/5

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

The description is well-structured with clear sections for purpose, arguments, and returns, and it's front-loaded with the main purpose. It's concise with no wasted sentences, though the parameter descriptions could be more detailed without sacrificing brevity.

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

Completeness2/5

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

Given the complexity of analyzing function call graphs, no annotations, no output schema, and low schema description coverage (0%), the description is incomplete. It lacks details on the return format, error handling, or behavioral traits, making it inadequate for a tool with 3 parameters and no structured support.

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

Parameters3/5

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

The description includes an 'Args' section that lists and briefly describes the three parameters, adding meaning beyond the input schema, which has 0% description coverage. However, the descriptions are minimal (e.g., 'Path to the file containing the function') and don't provide detailed semantics like format examples or constraints, 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.

Purpose4/5

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

The description clearly states the tool's purpose: 'Get the call graph for a specific function.' This specifies the verb ('Get') and resource ('call graph'), making it easy to understand what the tool does. However, it doesn't differentiate from sibling tools like 'analyze_dependencies' or 'analyze_change_impact,' which might have overlapping functionality, so it doesn't reach the highest score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'analyze_dependencies' or 'analyze_change_impact,' nor does it specify prerequisites or exclusions. The only implied context is analyzing functions, but this is insufficient for effective tool selection.

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

initialize_graphC

Initialize a code graph for the given repository path.

Args: repo_path: Path to the repository to analyze

Returns: Success message with information about the initialized graph

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathYes

TDQS

C2.9/5.0
Behavior2/5

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 mentions that the tool initializes a graph and returns a success message, but lacks critical details such as whether this is a one-time setup, if it requires specific permissions, what happens if the graph already exists, or any performance implications. This is inadequate for a mutation tool with zero annotation coverage.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, with the core purpose stated first, followed by brief sections for args and returns. Each sentence earns its place, though the structure is minimal and could be more polished.

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

Completeness2/5

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

Given the tool's complexity (initializing a graph, likely a mutation), lack of annotations, no output schema, and low schema coverage, the description is incomplete. It doesn't explain what 'initializing' entails, potential side effects, or error conditions, making it insufficient for safe and effective use by an agent.

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

Parameters3/5

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

The schema description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'repo_path' is the 'Path to the repository to analyze', which clarifies the parameter's purpose beyond the schema's basic type. However, it doesn't provide format details (e.g., absolute vs. relative paths) or examples, leaving some gaps.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Initialize a code graph for the given repository path.' It specifies the verb ('Initialize') and resource ('code graph'), and while it doesn't explicitly differentiate from siblings like 'analyze_dependencies' or 'get_function_call_graph', the focus on initialization is distinct enough for clarity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., if the repository must be listed first), exclusions, or how it relates to sibling tools like 'list_repositories' or 'switch_repository', leaving the agent with no usage context.

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

list_repositoriesB

List all initialized repositories.

Returns: List of initialized repositories

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

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 states the tool lists repositories and returns a list, but lacks critical behavioral details: it doesn't specify the format of the returned list (e.g., names, paths, metadata), whether it includes all repositories or only accessible ones, or any permissions required. For a tool with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness4/5

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

The description is very concise with two short sentences that directly state the action and return value. It's front-loaded with the main purpose. However, the second sentence ('Returns: List of initialized repositories') is somewhat redundant with the first, slightly reducing efficiency.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'initialized' means in this context, the structure of the returned list, or any error conditions. For a tool that likely interacts with a repository system, more context on behavior and output is needed to be fully helpful.

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

Parameters4/5

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

The tool has 0 parameters, and schema description coverage is 100% (since there are no parameters to describe). The description doesn't need to add parameter semantics beyond the schema, so it meets the baseline of 4 for tools with no parameters. It correctly omits any parameter discussion, which is appropriate.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('initialized repositories'), making the purpose immediately understandable. It distinguishes from siblings like 'analyze_change_impact' or 'get_function_call_graph' by focusing on listing rather than analysis. However, it doesn't explicitly differentiate from 'switch_repository' which might also involve repository selection.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether repositories must be initialized first), nor does it contrast with siblings like 'switch_repository' for repository selection or 'initialize_graph' for setup. Usage is implied but not explicitly stated.

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

switch_repositoryC

Switch to a different initialized repository.

Args: repo_path: Path to the repository to switch to

Returns: Success message or error

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathYes

TDQS

C2.7/5.0
Behavior2/5

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 states the tool switches repositories and returns a success/error message, but lacks details on side effects (e.g., whether this affects other operations), permissions needed, or error conditions. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, with the core purpose stated first. The 'Args' and 'Returns' sections add structure, though they could be more integrated. There's no wasted text, but the lack of detailed guidance slightly reduces efficiency.

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

Completeness2/5

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

Given the tool's complexity (a mutation operation with no annotations, 1 parameter at 0% schema coverage, and no output schema), the description is incomplete. It doesn't cover behavioral traits, parameter details, or usage context, making it inadequate for safe and effective agent use.

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

Parameters2/5

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 undocumented parameters. It adds minimal value: it names the parameter ('repo_path') and states it's a 'Path to the repository to switch to,' but doesn't explain format (e.g., absolute vs. relative), examples, or constraints. This is insufficient given the low coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Switch to a different initialized repository.' This specifies the verb ('switch') and resource ('initialized repository'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'list_repositories' or 'initialize_graph,' which prevents a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., that repositories must be initialized first), exclusions, or comparisons with siblings like 'list_repositories' for checking available repos. This leaves the agent without context for proper tool selection.

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

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have distinct purposes: analyze_change_impact focuses on modification consequences, analyze_dependencies finds what depends on a module, get_function_call_graph shows function call relationships, and the last three handle repository management. However, analyze_dependencies and get_function_call_graph could be confused as both involve dependency/call analysis, though their descriptions clarify one is module-level and the other function-level.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern throughout (e.g., analyze_change_impact, get_function_call_graph, list_repositories), with all tools using snake_case. The only minor deviation is that 'initialize_graph' uses a verb without a clear noun object, but it still fits the overall pattern.

Tool Count5/5

With 6 tools, the count is well-scoped for a code analysis server. It covers core functions like impact analysis, dependency tracking, call graph generation, and repository management, with each tool earning its place without being overwhelming or too sparse.

Completeness3/5

The server covers key code analysis operations (impact, dependencies, call graphs) and repository management, but there are notable gaps. For example, it lacks tools for updating or deleting initialized repositories, and there's no way to clear or reset graphs, which could leave agents in dead ends when managing repository states.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that transforms codebases into knowledge graphs using Neo4J, enabling AI assistants to understand code structure, relationships, and metrics for more context-aware assistance.
    27
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that transforms codebases into intelligent, queryable knowledge bases, enabling AI assistants to perform semantic search, explore architecture, and analyze code relationships.
    166
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that exposes Python function- and module-level call graphs for agentic coding clients, enabling tools like callers_of, callees_of, and neighborhood queries.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides ultra-efficient code exploration through AST analysis, reducing LLM token usage by up to 95% while enabling instant call graph generation and dependency analysis for massive codebases.
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mattmorgis/nuanced-mcp'

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