cyntrisec
The Cyntrisec server provides AWS security analysis through an MCP interface, enabling AI agents to analyze cloud infrastructure based on read-only scans.
Core Capabilities:
Scan Data Retrieval: Get scan summaries, query assets by type/name/ARN, view relationships between resources, and compare snapshots to detect changes over time
Security Analysis: Retrieve security findings filtered by severity, discover attack paths with risk scoring, and get detailed hop-by-hop breakdowns and impact assessments
Access Control Testing: Check if specific principals can access target resources and identify unused IAM permissions (default: 90-day threshold) for blast radius reduction
Remediation: Find optimal security fixes using min-cut algorithms and generate Terraform code snippets for implementing changes
Compliance Checking: Assess infrastructure against CIS AWS and SOC 2 frameworks with scoring
Tool Discovery: List all 15 available MCP tools and manage active scan snapshots for analysis
Scans AWS infrastructure to build capability graphs, discover attack paths, and prioritize security fixes for services including IAM, EC2, RDS, and S3.
Generates remediation plans and Terraform code hints based on infrastructure analysis to help secure resources and reduce blast radius.
Cyntrisec CLI
Historical pre-company project.
cyntrisec-cliwas created before Cyntrisec narrowed its company focus to EphemeralML and AIR v1. It is not a current Cyntrisec product, support surface, or commercial offering. The PyPI package namecyntrisec, CLI commandcyntrisec, and MCP server IDio.github.cyntrisec/cyntrisecare retained only to avoid breaking historical installs.
Historical Software Disclaimer: This tool is no longer an active Cyntrisec product. It is provided "as is", without warranty of any kind. While the CLI is a read-only analysis tool by default, the user assumes all responsibility for any actions taken based on its findings. Always review generated remediation plans and Terraform code before application.
Historical AWS capability graph analysis and attack path discovery CLI.
A read-only CLI tool that historically:
Scans AWS infrastructure via AssumeRole
Builds a capability graph (IAM, network, dependencies)
Discovers attack paths from internet to sensitive targets
Prioritizes fixes by ROI (security impact + cost savings)
Identifies unused capabilities (blast radius reduction)
Outputs deterministic JSON with proof chains
Demo

Watch how to discover attack paths and generate fixes using natural language with Claude MCP.
Related MCP server: opzyai
Architecture
+----------------------------------------------------------------------------------+
| CYNTRISEC CLI |
+----------------------------------------------------------------------------------+
| CLI Layer (Typer) |
| scan analyze cuts waste report comply can diff serve ... |
+-----------------------------+----------------------------------------------------+
| Core Engine | Storage (local) |
| - AWS collectors | ~/.cyntrisec/scans/<scan_id>/ |
| - Normalization/schema | snapshot.json, assets.json, relationships.json |
| - GraphBuilder -> AwsGraph | findings.json, attack_paths.json |
| - Path search -> paths | ~/.cyntrisec/scans/latest -> <scan_id> |
| - Min-cut + Cost (ROI) | (Windows fallback: latest is a file) |
+-----------------------------+----------------------------------------------------+
| Outputs: JSON/agent, HTML report, remediation plan + Terraform hints |
+----------------------------------------------------------------------------------+Data Flow
CLI (scan) --AssumeRole--> AWS Session --Describe/Get/List--> AWS APIs (read-only)
|
v
Collectors -> normalize -> Assets + Relationships -> AwsGraph
|
v
Attack path search (BFS/DFS)
|
v
Min-cut (remediation cuts)
|
v
Cost engine (ROI)
Local artifacts: ~/.cyntrisec/scans/<scan_id>/*.jsonInstallation
pip install cyntrisecWindows PATH Fix
If you see "cyntrisec is not recognized", the Scripts folder isn't on PATH:
# Option 1: Run with python -m
python -m cyntrisec --help
# Option 2: Add to PATH for current session
$env:PATH += ";$env:APPDATA\Python\Python311\Scripts"Quick Start
Prerequisite: Ensure you have AWS CLI installed and configured with credentials (e.g.,
aws configure) or environment variables set.terraformis required for the setup step.
# 1. Create the read-only IAM role in your account
cyntrisec setup iam 123456789012 --output role.tf
# 2. Apply the Terraform
cd your-infra && terraform apply
# 3. Run a scan
cyntrisec scan --role-arn arn:aws:iam::123456789012:role/CyntrisecReadOnly
# 4. View attack paths
cyntrisec analyze paths --min-risk 0.5
# 5. Find minimal fixes (prioritized by ROI)
cyntrisec cuts --format json
# 6. Generate HTML report
cyntrisec report --output report.htmlCommands
Core Analysis
Command | Description |
| Scan AWS infrastructure |
| View attack paths |
| View security findings |
| View scan statistics |
| Business entrypoint analysis |
| Generate HTML/JSON report |
Setup & Validation
Command | Description |
| Generate IAM role Terraform |
| Validate IAM role permissions |
Remediation
Command | Description |
| Find minimal fixes (Cost & ROI prioritized) |
| Find unused IAM permissions |
| Generate or optionally apply Terraform plans (gated) |
Policy Testing
Command | Description |
| Test "can X access Y?" |
| Compare scan snapshots |
| Check CIS AWS / SOC2 compliance |
Agentic Interface
Command | Description |
| Output machine-readable capabilities |
| Natural language explanations |
| Query scans in plain English |
| Run as MCP server for AI agents |
MCP Server Mode
The historical CLI can still run as an MCP server for compatibility with existing local setups:
# Install with MCP support (now included by default)
pip install cyntriseccyntrisec serve # Start stdio server
cyntrisec serve --list-tools # List available toolsMCP Tools (15)
Category | Tool | Description |
Discovery |
| List all available tools |
| Set active snapshot for session | |
| Get summary of latest AWS scan | |
Assets |
| Get assets with type/name filtering |
| Get relationships between assets | |
| Get security findings with severity filtering | |
Attack Paths |
| Get attack paths with risk scores |
| Detailed hop-by-hop path breakdown | |
| Detailed finding explanation | |
Remediation |
| Find optimal fixes for attack paths |
| Generate Terraform code for remediation | |
Access |
| Test if principal can access resource |
| Find unused IAM permissions | |
Compliance |
| Check CIS AWS or SOC 2 compliance |
| Compare scan snapshots |
Claude Desktop
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"cyntrisec": {
"command": "python",
"args": ["-m", "cyntrisec", "serve"]
}
}
}Claude Code (CLI)
Run the following command to configure the server:
claude mcp add cyntrisec -- python -m cyntrisec serveGoogle Gemini / Antigravity
Locate your agent configuration (e.g., ~/.gemini/antigravity/mcp_config.json) and add:
{
"mcpServers": {
"cyntrisec": {
"command": "python",
"args": ["-m", "cyntrisec", "serve"]
}
}
}Trust & Safety
Read-Only Guarantees
This tool makes read-only API calls to your AWS account. The IAM role
should have only Describe*, Get*, List* permissions.
No Data Exfiltration
All data stays on your local machine. Nothing is sent to external servers.
Scan results are stored in ~/.cyntrisec/scans/.
No Auto-Remediation (Default Safe Mode)
By default, Cyntrisec is read-only and does not modify your AWS infrastructure.
It analyzes your account using read-only APIs.
It can generate remediation artifacts (e.g., Terraform modules) for you to review.
It does not apply changes automatically.
Optional Remediation Execution (Explicit Opt-In)
Cyntrisec includes an explicitly gated path that can execute Terraform only if you intentionally enable it.
This mode is:
Disabled by default
Requires
--enable-unsafe-write-modeRequires an additional explicit flag (e.g.
--execute-terraform) to run TerraformIntended for controlled environments (sandbox / CI with approvals), not unattended production
If you do not pass these flags, Cyntrisec will never run terraform apply.
Write Operations
Cyntrisec makes no AWS write API calls during scanning and analysis.
The only supported "write" behavior is optional execution of Terraform locally on your machine, and only when explicitly enabled via unsafe flags.
Every AWS API call is logged in CloudTrail under session name cyntrisec-cli.
Trust & Permissions
Cyntrisec runs with a read-only IAM role. Generate the recommended policy with
cyntrisec setup iam <ACCOUNT_ID> and keep permissions to Describe*, Get*,
and List*. Live modes (waste --live, can --live) require extra IAM
permissions; the generated policy and docs cover those additions.
Output Format
Primary output is JSON to stdout. When stdout is not a TTY, the CLI automatically switches to JSON:
cyntrisec analyze paths --format json | jq '.paths[] | select(.risk_score > 0.7)'Agent-friendly output wraps results in a structured envelope:
cyntrisec analyze paths --format agent{
"schema_version": "1.0",
"status": "success",
"data": {...},
"artifact_paths": {...},
"suggested_actions": [...]
}Exit Codes
Code | Meaning |
0 | Success / compliant |
1 | Findings / regressions / denied |
2 | Usage error |
3 | Transient error (retry) |
4 | Internal error |
Use in CI/CD:
cyntrisec scan --role-arn $ROLE_ARN || exit 1
cyntrisec diff || echo "Regressions detected"Storage
Scan results are stored locally:
~/.cyntrisec/
|-- scans/
| |-- 2026-01-17_123456_123456789012/
| | |-- snapshot.json
| | |-- assets.json
| | |-- relationships.json
| | |-- findings.json
| | `-- attack_paths.json
| `-- latest -> 2026-01-17_...
`-- config.yamlVersioning
This project follows Semantic Versioning. See CHANGELOG.md for release notes.
License
Apache-2.0
Links
Available Tools
15 toolscheck_accessB
Test if a principal can access a resource.
Args:
principal: IAM role or user name (e.g., "ECforS")
resource: Target resource (e.g., "s3://prod-bucket")
Returns:
Whether access is allowed and via which relationship.
| Name | Required | Description | Default |
|---|---|---|---|
| principal | Yes | ||
| resource | Yes | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return value ('Whether access is allowed and via which relationship'), providing behavioral insight. However, it does not mention side effects, permissions required, or idempotency. Given no annotations, it offers minimal but adequate transparency.
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 short and front-loaded with the core purpose. However, it includes docstring-style Args/Returns that could be more concise. It earns its place but could drop the structural extras without loss.
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 3 parameters, no annotations, and an output schema, the description covers the purpose and return value. However, it misses the third parameter (snapshot_id) and does not address safety or usage constraints, leaving gaps for an agent.
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%, requiring the description to add meaning. It explains 'principal' and 'resource' with examples but omits the 'snapshot_id' parameter entirely. This incomplete coverage fails to fully compensate for the lack of schema documentation.
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: testing if a principal can access a resource. It uses a specific verb ('Test') and identifies the key resources ('principal', 'resource'). This distinguishes it from sibling tools like check_compliance or explain_finding.
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 provide guidance on when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. It only states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_complianceA
Check compliance against CIS AWS or SOC 2 framework.
Args:
framework: "cis-aws" or "soc2"
Returns:
Compliance score and failing controls.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | No | cis-aws | |
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It states it returns compliance data but omits any side effects, authorization needs, or limitations. Minimal transparency.
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?
Description is very concise, well-structured with args and returns, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output exists, so return description is optional but present. However, snapshot_id is not explained, and prerequisites (e.g., snapshot session) are missing. Adequate but with 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?
Schema coverage is 0%, description partially compensates by listing framework values but does not explain snapshot_id. Only half of parameters are clarified.
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 checks compliance against specific frameworks (CIS AWS, SOC2), distinguishes from siblings like check_access and get_findings, and includes parameter details.
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 explains what the tool does but does not provide guidance on when to use it versus sibling tools or any prerequisites/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_scansA
Compare latest scan to previous scan.
Returns:
Changes in assets, relationships, and attack paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return type ('Changes in assets, relationships, and attack paths') but does not disclose potential side effects, performance implications, or definition of 'previous scan'. No annotations provided to compensate.
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?
Extremely concise—three lines with no redundant information. Every sentence contributes meaning: purpose and return type.
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 zero parameters and existence of an output schema, the description is largely complete. However, it could clarify what constitutes 'previous scan' (e.g., immediately prior or any selected) and mention that comparison is read-only.
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?
No parameters exist, so baseline is 4. The description adds value by specifying the return content, but does not need to elaborate on parameters.
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?
Clear verb 'Compare' with specific resources 'latest scan to previous scan'. Distinguishes from sibling tools like get_assets or get_attack_paths which retrieve individual entities rather than comparing two scans.
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?
Implies usage for viewing changes between scans but lacks explicit guidance on when to use this vs alternatives like get_scan_summary or get_findings. No exclusions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_findingA
Get detailed explanation of a security finding.
Args:
finding_id: The finding ID to explain
snapshot_id: Optional snapshot ID (default: latest)
Returns:
Detailed explanation with context, impact, and remediation steps.
| Name | Required | Description | Default |
|---|---|---|---|
| finding_id | Yes | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It only states the tool returns an explanation; it does not disclose whether it is read-only, requires special permissions, has rate limits, or any side effects. The description is minimal in behavioral terms.
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 relatively concise, but it uses a docstring format with 'Args:' and 'Returns:' sections that add some verbosity. The core information is front-loaded in the first sentence, and the rest is structured. It could be slightly more compact.
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 simple tool with only two parameters, the description covers the return values (context, impact, remediation steps). However, since an output schema exists but is not shown, the description is somewhat incomplete about the exact structure of the response. Still, it provides adequate context for selection.
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 0% description coverage, so the description must compensate. It provides clear meaning for both parameters: finding_id ('The finding ID to explain') and snapshot_id ('Optional snapshot ID (default: latest)'). This adds value beyond the schema's property names and 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 the tool retrieves a detailed explanation of a security finding. It uses a specific verb ('Get detailed explanation') and identifies the resource ('security finding'). It is distinct from sibling tools like get_findings (which lists findings) and explain_path (which explains attack paths).
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 when a user wants an explanation for a specific finding, but it does not provide explicit guidance on when to use this tool versus alternatives like get_findings or explain_path. No when-not-to-use or prerequisite conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_pathB
Get detailed explanation of an attack path.
Args:
path_id: The attack path ID to explain
snapshot_id: Optional snapshot ID (default: latest)
Returns:
Detailed breakdown of the attack path with each hop explained.
| Name | Required | Description | Default |
|---|---|---|---|
| path_id | Yes | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 returning a 'detailed breakdown' but lacks specifics on behavior, side effects, or limitations (e.g., no mention of read-only nature, required permissions, or performance).
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 concise but includes an Args section and a Returns line, which is acceptable. However, the Returns line is redundant given an output schema exists. Slight front-loading with the main purpose is good.
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 is simple with two parameters and an output schema, so the description is minimally adequate. It explains the core purpose and parameters but lacks usage context or edge case handling.
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 adds meaning to both parameters: path_id is 'The attack path ID to explain' and snapshot_id is 'Optional snapshot ID (default: latest)'. Since schema coverage is 0%, this is valuable context beyond the property names.
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 explicitly states the tool's function: 'Get detailed explanation of an attack path.' It clearly identifies the resource (attack path) and the action (explain), distinguishing it from siblings like 'explain_finding' and 'get_attack_paths'.
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 such as 'explain_finding' or 'get_attack_paths'. It does not mention contextual cues 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_assetsA
Get assets from the scan with optional filtering.
Args:
asset_type: Filter by type (e.g., "iam:role", "ec2:instance", "s3:bucket")
search: Search by name or ARN (case-insensitive)
max_assets: Maximum number of assets to return (default: 50)
snapshot_id: Optional snapshot ID (default: latest)
Returns:
List of assets with their properties.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | ||
| search | No | ||
| max_assets | No | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only mentions returning a list of assets with properties, without disclosing behavioral traits such as pagination, rate limits, or potential side effects. Minimal transparency.
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 well-structured with Args and Returns sections, using concise language. Every sentence serves a purpose, though it could be slightly more terse without losing clarity.
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 presence of an output schema and 4 parameters, the description covers purpose and basic parameter meaning but lacks usage guidelines and behavioral context. It is minimally adequate but incomplete for full agent guidance.
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 0% description coverage, but the description provides meaningful explanations for each parameter: asset_type examples, search case-insensitivity, max_assets default, snapshot_id optional. This adds significant 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 'Get assets from the scan with optional filtering,' specifying the resource (assets) and action (get) with filtering capabilities. It distinguishes from siblings like get_findings or get_attack_paths by focusing on assets.
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 retrieving assets with filters but does not explicitly state when to use this tool versus alternatives like get_findings or get_relationships. No exclusion criteria or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attack_pathsA
Get discovered attack paths from the latest scan.
Args:
max_paths: Maximum number of paths to return (default: 10)
min_risk: Minimum risk score filter (0.0-1.0, default: 0.0)
snapshot_id: Optional snapshot ID (default: latest)
Returns:
List of attack paths with risk scores, confidence, and traversed assets.
| Name | Required | Description | Default |
|---|---|---|---|
| max_paths | No | ||
| min_risk | No | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 read-only nature, required permissions, rate limits, or side effects. The term 'Get' implies a read operation, but this is not explicit.
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 organized with Args and Returns sections, making it easy to parse. It is relatively concise, though the blank lines and full docstring format could be slightly trimmed for an MCP description.
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, the description covers purpose, parameters, and return value structure. It mentions risk scores, confidence, and traversed assets, providing enough context for an agent to invoke the 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?
The input schema has 0% description coverage, but the description provides defaults and a range for min_risk (0.0-1.0), explains max_paths and snapshot_id. This adds significant meaning beyond the bare schema, though more detail on snapshot_id would improve clarity.
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 gets 'discovered attack paths from the latest scan', specifying the verb 'get', the resource 'attack paths', and the context 'latest scan'. This distinguishes it from sibling tools like get_assets or get_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 explicit guidance on when to use this tool versus alternatives like explain_path or get_scan_summary. The description implies it is for the latest scan, but lacks when-not or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_findingsB
Get security findings from the scan.
Args:
severity: Filter by severity (CRITICAL, HIGH, MEDIUM, LOW)
max_findings: Maximum number of findings to return (default: 20)
snapshot_id: Optional snapshot ID (default: latest)
Returns:
List of security findings with severity and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| severity | No | ||
| max_findings | No | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Behavioral traits are sparse: the description indicates it returns a list of findings but does not specify if it is read-only, what happens when snapshot_id is invalid, or any error conditions. Since no annotations exist, the description carries full burden but 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 relatively concise, with a clear opening sentence and a structured docstring format for parameters and return value. It is front-loaded but could be more streamlined.
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 low complexity (3 optional params, no enums) and presence of an output schema, the description covers the basics: what it does, its parameters, and return. However, it lacks examples or usage context, making it minimally 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 description adds meaning to all five parameters (severity, max_findings, snapshot_id) by explaining their purpose and providing defaults. This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and the resource 'security findings from the scan,' differentiating it from siblings like get_scan_summary. However, it does not explicitly distinguish from the sibling tool explain_finding or list findings variations.
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 such as check_access or get_scan_summary. The description does not mention prerequisites or context for selecting this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_relationshipsA
Get relationships between assets with optional filtering.
Args:
relationship_type: Filter by type (e.g., "CAN_ASSUME", "CAN_REACH", "MAY_ACCESS")
source_name: Filter by source asset name
target_name: Filter by target asset name
max_relationships: Maximum number to return (default: 50)
snapshot_id: Optional snapshot ID (default: latest)
Returns:
List of relationships with source, target, and type.
| Name | Required | Description | Default |
|---|---|---|---|
| relationship_type | No | ||
| source_name | No | ||
| target_name | No | ||
| max_relationships | No | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses return format, default max_relationships=50, and snapshot default. It does not mention side effects or read-only nature, but is adequate.
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 well-structured docstring with Args and Returns sections. It is concise but could be slightly tighter; still very readable.
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 an output schema present, the description covers essential return structure and parameter context. Missing exact relationship type enumeration, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description fully compensates by explaining each parameter's purpose, examples, and defaults, adding significant meaning.
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 retrieves relationships between assets with optional filtering, using specific verb and resource. It distinguishes from siblings like get_assets and get_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?
While the description explains parameters, it provides no guidance on when to use this tool vs alternatives such as check_access or get_attack_paths, which may overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_remediationsA
Find optimal remediations that block attack paths.
Uses min-cut algorithm to find smallest set of changes
that block all attack paths.
Args:
max_cuts: Maximum number of remediations (default: 5)
Returns:
List of remediations with coverage percentages.
| Name | Required | Description | Default |
|---|---|---|---|
| max_cuts | No | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the algorithm (min-cut) and output format (list with coverage percentages), providing behavioral insight. However, it does not disclose authorization needs or behavior when no attack paths exist, but annotations are 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?
Extremely concise, front-loaded with purpose, and each sentence adds value. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides essential information about the algorithm and return type, but lacks explanation for the 'snapshot_id' parameter and broader context. Acceptable but 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 has 0% description coverage; the description only explains 'max_cuts' (default 5) but fails to mention 'snapshot_id' parameter at all. This leaves a gap for the agent.
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 finds optimal remediations to block attack paths, using a specific algorithm (min-cut). It distinguishes itself from sibling tools like 'check_access' or 'explain_path' by focusing on remediation solutions.
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 (e.g., 'explain_finding' or 'get_attack_paths'). Lacks context for preferences, prerequisites, or exclusion scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scan_summaryB
Get summary of the latest AWS scan.
Returns asset counts, finding counts, and attack path counts.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description bears full burden. It does not disclose if the tool is read-only, performance impact, or how 'latest' is determined. Minimal behavioral insight.
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?
Two short, direct sentences. No fluff, front-loaded with key purpose. Highly efficient.
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?
Adequate for a simple summary tool given output schema exists. However, missing explanation of 'snapshot_id' and 'latest' concept leaves some 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?
Schema description coverage is 0% and description does not explain the 'snapshot_id' parameter. It implies no parameter needed but schema shows optional one, causing ambiguity.
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 'Get summary of the latest AWS scan' and lists the specific counts returned (assets, findings, attack path counts), distinguishing it from sibling tools like get_assets or get_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 on when to use this tool versus alternatives (e.g., get_findings for details) or any exclusions. The description lacks context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_terraform_snippetC
Get Terraform code snippet for a specific remediation.
Args:
source_name: Name of the source asset
target_name: Name of the target asset
relationship_type: Type of relationship (e.g., "CAN_ASSUME", "ALLOWS_TRAFFIC_TO")
snapshot_id: Optional snapshot ID (default: latest)
Returns:
Terraform HCL code snippet for the remediation.
| Name | Required | Description | Default |
|---|---|---|---|
| source_name | Yes | ||
| target_name | Yes | ||
| relationship_type | Yes | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It does not disclose behavioral traits such as side effects, auth requirements, or performance implications. The read-only nature 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 concise and front-loaded with the purpose. The Args section is structured but includes unnecessary blank lines. Generally efficient.
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 simplicity and presence of an output schema, the description is minimally adequate. However, it lacks context on prerequisites (e.g., session snapshot) or what 'remediation' refers to, which could be important 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 coverage is 0%, but the description provides brief parameter explanations ('Name of the source asset') and default behavior for snapshot_id. This adds basic meaning beyond the schema titles, though not richly detailed.
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 retrieves a Terraform code snippet for a specific remediation. It identifies the action and resource, distinguishing it from siblings like get_remediations that list remediations, but does not explicitly differentiate.
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 get_remediations or explain_finding. The description lacks context about prerequisites or typical usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unused_permissionsB
Find unused IAM permissions (blast radius reduction opportunities).
Args:
days_threshold: Days of inactivity to consider unused
Returns:
Unused permissions grouped by role with reduction percentages.
| Name | Required | Description | Default |
|---|---|---|---|
| days_threshold | No | ||
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits but only says 'find' and returns data. No mention of read-only nature, required permissions, or impact on system.
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?
Very short and structured with Args/Returns, but the Returns section is redundant due to output schema. Could add value without becoming verbose.
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 having output schema, the description is too sparse for an IAM analysis tool, missing context on how results are computed, snapshot usage, or relationship to other tools.
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 description adds meaning for days_threshold ('Days of inactivity'). Snapshot_id is not explained, leaving one parameter undocumented in 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 clearly states the tool finds unused IAM permissions for blast radius reduction, with a specific verb and resource. It is distinct from siblings like check_access or get_remediations.
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 vs alternatives like check_access or get_remediations. The description lacks context on prerequisites, limitations, or use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_toolsA
List all available Cyntrisec tools.
Returns:
List of tools with descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is straightforward, stating it returns a list of tools with descriptions. Since there are no annotations, behavioral traits are not disclosed, but the simple read nature of the tool does not require extensive elaboration. Adequate but not detailed.
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?
Extremely concise with two sentences. The first sentence states the purpose and the second describes the return. No unnecessary 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?
For a simple listing tool with no parameters and an output schema, the description is sufficient. It explains what the tool does and what it returns. Could mention that it's server-level, but not necessary.
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?
No parameters exist, so the description does not need to add parameter semantics. The input schema is fully covered (100%), meeting the baseline expectation.
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 lists all available Cyntrisec tools, which is a specific verb and resource. It easily distinguishes from siblings that perform other actions like checking access or compliance.
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 or when not to use it. The description assumes an agent will understand usage implicitly, but it lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_session_snapshotB
Set or retrieve the active snapshot id used for subsequent calls.
Args:
snapshot_id: Optional scan id/directory name. If omitted, returns current/ latest.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses that setting a snapshot affects subsequent calls, but it does not explain side effects, scope (e.g., session-level), or whether changes are persistent. More detail is needed.
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 relatively concise with a clear front-loaded purpose statement. The Args section adds some redundancy but is not overly verbose. Slight improvement could be made by integrating the parameter explanation into the main sentence.
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 simplicity (one optional parameter, output schema exists), the description provides adequate context for basic use. However, it lacks explanation of how the snapshot ID impacts subsequent calls or the overall workflow, leaving some conceptual 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 adds significant meaning beyond the schema, explaining that the parameter is optional and that omitting it retrieves the current/latest snapshot. It also hints at the format (scan ID/directory name), which compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: setting or retrieving the active snapshot ID. It uses specific verbs and the resource is clear, though it could be more distinct from sibling tools like get_scan_summary. Overall, the purpose is well-defined.
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 managing session state before subsequent calls, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. The guidance is implied rather than direct.
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. Dates show when Glama detected each change.
15 tool updates
v0.1.10- First observed
check_access - First observed
check_compliance - First observed
compare_scans - First observed
explain_finding - First observed
explain_path - First observed
get_assets - First observed
get_attack_paths - First observed
get_findings - First observed
get_relationships - First observed
get_remediations - First observed
get_scan_summary - First observed
get_terraform_snippet - First observed
get_unused_permissions - First observed
list_tools - First observed
set_session_snapshot
TDQS
Each tool has a clearly distinct purpose, covering different aspects of security analysis such as access checks, compliance scans, attack paths, findings, relationships, and remediations. No two tools overlap in functionality.
Tool names consistently follow a verb_noun pattern with underscores, using verbs like get_, check_, explain_, compare_, list_, and set_. While the verbs vary, the pattern is uniform and predictable.
15 tools cover a broad range of security audit tasks without feeling excessive. The count is appropriate for the domain, providing comprehensive yet navigable functionality.
The tool set covers core workflows like asset enumeration, finding analysis, attack path exploration, and remediation recommendations. Minor gaps exist, such as the lack of a scan initiation tool, but the set is largely complete for a read-heavy security analysis context.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
IaC attack-path auditor: finds internet-to-crown-jewel chains in Terraform/CFN/K8s.
AWS cloud security scanners for AI agents — S3, IAM, EC2, EKS, RDS, CloudTrail, CloudWatch Logs
Threat modeling, code/cloud/pipeline scanning, shadow-AI discovery, compliance checks and fixes.
Security reviews for coding agents: diffs checked against your org policy and live infrastructure.
Related MCP Servers
- AlicenseAqualityBmaintenanceOpen-source AWS security scanner with Attack Chains, Breach Cost Estimation, and MCP Server. 47 checks across 15 AWS services. Every finding includes copy-paste remediation (CLI + Terraform) and a dollar-risk estimate with verified source. First free standalone AWS security MCP server - Prowler and Wiz require paid SaaS.669MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first security check for AI coding agents — finds hardcoded secrets, exposed .env files, git-history leaks and vulnerable dependencies (OSV), entirely on your machine. Ask your agent "is this safe to ship?" and get a Launch Readiness score with a fix for every finding.MIT
- FlicenseNot gradedqualityAmaintenanceEnables auditors to scan cloud IAM policies for privilege-escalation paths, wildcards, and risky grants directly within Cursor or Claude Code, using a deterministic rule engine that runs entirely on local infrastructure.1-
- FlicenseNot gradedqualityBmaintenanceEnables AI to scan AWS accounts, analyze attack paths, and verify security fixes on a read-only graph of cloud resources.4-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyntrisec/cyntrisec-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server