Statelessor MCP Server
Analyzes GitHub repositories for stateful code patterns in .NET and Java projects, detecting issues like session state usage and providing remediation guidance.
Analyzes .NET projects for stateful code patterns, identifying anti-patterns and providing remediation guidance for stateless architecture migration.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Statelessor MCP Serveranalyze my .NET project for stateful patterns"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Statelessor MCP Server
MCP (Model Context Protocol) server for analyzing .NET and Java projects for stateful code patterns. Integrates with Amazon Q Developer.
Installation
npm install -g statelessor-mcpQuick Start
1. Configure Amazon Q
Create or edit ~/.aws/amazonq/mcp-config.json:
{
"mcpServers": {
"statelessor": {
"command": "npx",
"args": ["statelessor-mcp"],
"env": {
"STATELESSOR_API_URL": "https://statelessor-api.port2aws.pro"
}
}
}
}2. Restart Amazon Q in your IDE
3. Use in Amazon Q Chat
You: Analyze my local project at /path/to/my-dotnet-app
You: Analyze https://github.com/myorg/java-project
You: Explain how to fix Session State issues
You: Generate a bash script for analyzing .NET projectsAvailable Tools
analyze_git_repository - Analyze Git repos for stateful patterns
analyze_local_project - Analyze local project directories
generate_analysis_script - Generate bash/PowerShell scripts
get_project_findings - Retrieve historical findings
explain_remediation - Get remediation guidance
Configuration
Environment variables:
STATELESSOR_API_URL- API endpoint (default: http://localhost:3001)STATELESSOR_API_TIMEOUT- Request timeout in ms (default: 300000)
Additional details
Read USER_GUIDE.md for more details Read INTEGRATION.md as well for additional information
License
MIT
Available Tools
5 toolsanalyze_git_repositoryC
Analyze a Git repository for stateful code patterns in .NET or Java projects
| Name | Required | Description | Default |
|---|---|---|---|
| gitUrl | Yes | Git repository URL (HTTPS or SSH) | |
| sshKeyId | No | SSH key ID for private repositories (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions what gets analyzed (stateful code patterns in .NET/Java), it doesn't describe what the analysis produces, whether it's destructive, what permissions are needed, rate limits, or output format. This leaves significant behavioral gaps for a tool with no structured safety hints.
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, efficient sentence with zero wasted words. It's appropriately sized for the tool's complexity and front-loads the core purpose immediately.
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 no annotations and no output schema, the description is insufficiently complete. It doesn't explain what the analysis produces, what 'stateful code patterns' entails, or how results are returned. Given the lack of structured fields, the description should provide more context about the tool's behavior and outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., doesn't clarify what 'stateful code patterns' means in relation to the gitUrl parameter). Baseline 3 is appropriate when the schema does the heavy lifting.
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 Git repositories for stateful code patterns in specific tech stacks (.NET/Java). It specifies the verb 'analyze' and resource 'Git repository' with scope 'stateful code patterns', but doesn't explicitly differentiate from sibling tools like 'analyze_local_project' or 'get_project_findings'.
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 about when to use this tool versus alternatives. The description doesn't mention sibling tools like 'analyze_local_project' (for local projects) or 'explain_remediation' (for remediation guidance), leaving the agent to guess when this specific Git repository analysis tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_local_projectC
Analyze a local project directory for stateful code patterns
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | Absolute path to project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the analysis purpose but doesn't describe what the tool actually does behaviorally—e.g., whether it scans files, runs static analysis, returns a report, has side effects, requires specific permissions, or handles errors. For a tool with zero annotation coverage, this leaves significant gaps in understanding its operation and safety.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and target, making it easy to parse. Every part of the sentence contributes meaning, earning its place with zero waste.
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 tool's complexity (analysis of code patterns), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what 'analyze' entails behaviorally, what 'stateful code patterns' means, or what the output looks like (e.g., a report, list of findings). For a tool with no structured data to clarify these aspects, the description should provide more context to be fully helpful.
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 100% description coverage, with the single parameter 'projectPath' documented as 'Absolute path to project directory'. The description adds no additional parameter semantics beyond implying analysis of a 'local project directory', which aligns with the schema. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but doesn't need to.
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 ('analyze') and target ('local project directory'), with the specific purpose of detecting 'stateful code patterns'. It distinguishes from siblings like 'analyze_git_repository' by specifying 'local' vs. 'git', but doesn't fully differentiate from 'get_project_findings' which might retrieve results. The purpose is specific but sibling differentiation could be more explicit.
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 no guidance on when to use this tool versus alternatives like 'analyze_git_repository' for remote repositories or 'get_project_findings' for retrieving results. It implies usage for local projects but lacks explicit when/when-not instructions or prerequisites, leaving the agent to infer context without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_remediationC
Get detailed remediation guidance for a specific stateful pattern
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Pattern category (e.g., "Session State", "Static Mutable Field") |
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 states what the tool does but lacks details on how it behaves: it doesn't specify if this is a read-only operation, what the output format is (e.g., text, structured data), whether it requires authentication, or any rate limits. The description is minimal and doesn't compensate for the absence of annotations.
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, clear sentence that efficiently conveys the tool's purpose without any wasted words. It is appropriately sized and front-loaded, making it easy to understand at a glance.
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 complexity of providing remediation guidance and the absence of both annotations and an output schema, the description is incomplete. It doesn't explain what the output will look like (e.g., step-by-step instructions, code snippets), any dependencies on other tools, or error handling. For a tool that likely returns detailed guidance, more context 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'category' well-documented in the schema as 'Pattern category (e.g., "Session State", "Static Mutable Field")'. The description adds no additional meaning beyond this, such as explaining what constitutes a valid category or providing more examples. Baseline 3 is appropriate since the schema does the heavy lifting.
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 'Get' and the resource 'detailed remediation guidance for a specific stateful pattern', making the purpose understandable. It doesn't explicitly distinguish from sibling tools like 'analyze_git_repository' or 'get_project_findings', which appear to be analysis tools rather than remediation guidance tools, but the distinction is somewhat implied by the different focus areas.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing prior analysis results, or specify scenarios where this tool is appropriate compared to siblings like 'generate_analysis_script' or 'get_project_findings'. Usage is implied only by the tool's name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_analysis_scriptC
Generate a bash or PowerShell script for offline analysis
| Name | Required | Description | Default |
|---|---|---|---|
| scriptType | Yes | Type of script to generate |
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 states the tool generates a script but doesn't explain what the script does, how it's used for 'offline analysis,' whether it requires specific inputs or permissions, or what the output format is. This leaves critical behavioral traits unspecified, making it inadequate for a tool with no annotation support.
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, efficient sentence: 'Generate a bash or PowerShell script for offline analysis.' It's front-loaded with the core action and resource, with no wasted words or redundant information. This makes it highly concise and well-structured for quick understanding.
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 and output schema, the description is incomplete. It doesn't explain what 'offline analysis' entails, what the generated script does, or how to use the output. For a tool that generates scripts, more context is needed to understand its behavior and application, making it insufficient for effective agent use.
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 100% description coverage, with the parameter 'scriptType' fully documented in the schema. The description mentions 'bash or PowerShell script,' which aligns with the enum values but doesn't add any semantic details beyond what the schema provides. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description adds minimal extra value.
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: 'Generate a bash or PowerShell script for offline analysis.' It specifies the verb ('generate'), resource ('script'), and context ('for offline analysis'), which is clear and specific. However, it doesn't explicitly differentiate from sibling tools like 'analyze_git_repository' or 'explain_remediation,' which might also involve analysis-related tasks, 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.
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 any prerequisites, contexts, or exclusions, and it doesn't reference sibling tools like 'analyze_git_repository' or 'explain_remediation' to help the agent choose appropriately. This lack of usage context leaves the agent without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_findingsC
Retrieve historical analysis findings for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | Name of the project |
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 states the action is to 'retrieve' findings, implying a read-only operation, but doesn't specify details like whether it returns all findings or a subset, if there are rate limits, authentication requirements, or error conditions. This leaves gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's appropriately sized for a simple tool and front-loaded with the core purpose, making it efficient and easy to parse.
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 no annotations and no output schema, the description is incomplete. It doesn't explain what 'historical analysis findings' entail, the return format, or potential limitations. For a tool with one parameter but lacking structured behavioral data, more context is needed to fully understand its use.
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 100% description coverage, with the parameter 'projectName' documented as 'Name of the project'. The description doesn't add any extra meaning beyond this, such as format examples or constraints, so it meets the baseline score of 3 where the schema does the heavy lifting.
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 ('retrieve') and resource ('historical analysis findings for a project'), making the purpose understandable. However, it doesn't distinguish this tool from its siblings like 'analyze_git_repository' or 'analyze_local_project', which might also retrieve findings but through different methods or scopes.
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. The description doesn't mention prerequisites, such as whether the project must have been previously analyzed, or differentiate it from sibling tools like 'explain_remediation' or 'generate_analysis_script', which could be related to findings.
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.
5 tool updates
v1.0.0- First observed
analyze_git_repository - First observed
analyze_local_project - First observed
explain_remediation - First observed
generate_analysis_script - First observed
get_project_findings
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: analyze_git_repository and analyze_local_project target different source locations, explain_remediation provides guidance, generate_analysis_script creates scripts, and get_project_findings retrieves historical data. No overlap or ambiguity exists between these functions.
All tools follow a consistent verb_noun pattern with snake_case naming (e.g., analyze_git_repository, explain_remediation, generate_analysis_script). The naming is predictable and readable throughout the set.
With 5 tools, the server is well-scoped for analyzing stateful code patterns. Each tool serves a unique and necessary function in the workflow, from analysis to remediation and historical retrieval, without being too sparse or bloated.
The toolset covers core analysis workflows (git/local analysis, remediation guidance, script generation, and findings retrieval). A minor gap exists in direct remediation actions (e.g., fixing patterns automatically), but agents can work around this using the provided guidance and scripts.
Related MCP Connectors
Detects database migration table locks, terraform cost leaks, and OWASP API flaws.
Change-impact intelligence for tracing dependencies, stale references and required updates.
Threat modeling, code/cloud/pipeline scanning, shadow-AI discovery, compliance checks and fixes.
Draw your app's architecture on a live canvas and flag the bottlenecks and security gaps.