HefestoAI
Server Details
HefestoAI checks AI-generated code before you ship it.
- Status
- Healthy
- Uptime
- 100.0% over 75 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- artvepa80/Agents-Hefesto
- GitHub Stars
- 7
- Server Listing
- HefestoAI
TDQS
Scored across 4 tools
Each tool has a clearly distinct role: analyze inspects code, compare returns a competitor comparison, install returns setup commands, and pricing returns cost info. An agent can trivially decide which to call based on intent, with no overlapping behavior.
Three of four tools use bare imperative verbs (analyze, compare, install) with a consistent style, but 'pricing' is a noun noun-phrase that breaks the verb pattern. The convention is still readable and minor divergence only.
Four tools is lean but each covers a distinct user intent (analysis, comparison, installation, cost) and the server's scope is narrow. It sits at the low end of the comfortable 3-15 range but does not feel artificially padded or dangerously thin.
The analysis surface covers single and multi-file scanning plus severity/format options, but there is no way to list supported rules, retrieve past results, or get fix/remediation guidance, and whole-repo scanning is explicitly delegated to local execution. Comparison, install, and pricing are static info tools that round out the lifecycle but do not compensate for the limited analysis workflow.
Available Tools
4 toolsanalyzeAnalyze codeARead-onlyIdempotentInspect
Runs the open-source hefesto-ai engine (hefesto analyze --no-config, free tier) on the files you send to the hosted analyzer and returns its findings: rule id, severity, file, line, message and the SARIF hefestoFingerprint/v1 fingerprint (format "sarif" adds the full SARIF 2.1.0 log). Use it to check a file or snippet the user shares (for example "analyze this file") for security and quality issues before committing. Try it: {"code":"password = "Sup3rS3cret!2026""} returns a HARDCODED_SECRET finding. Minimum call: {"code": ""}. Add path (e.g. "app/run.py") so the language comes from the extension; without path or language the language is inferred from the content, else python. For several files send files=[{"path", "content"}] instead. severity and format are optional. Covers Python, COBOL, the DevOps/IaC formats hefesto analyze routes, and TypeScript, JavaScript, Java, Go, Rust and C# through the multilang tree-sitter grammars (the first such request on a fresh server instance downloads the grammars and can take a few seconds longer). Limits: 20 files, 100 KB per file, 256 KB in total, 20 seconds, 10 requests per minute per IP, shared across server instances. No .hefesto.yaml is read. Files are deleted after the run; nothing is stored. For a whole repository, run hefesto analyze . locally.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Contents of one file or snippet, used when files is omitted. At most 100 KB. This is the only argument a first call needs. | |
| path | No | Optional file name for code, e.g. "app/run.py" or "Dockerfile". The extension picks the language. Same rules as files[].path. Ignored when files is set. | |
| files | No | Several files to analyze. Used instead of code when present. path: relative POSIX, at most 200 characters and 8 levels; each segment is letters, digits, "_", "." or "-" and must not start with "-"; no "..", no absolute paths, no ".git" or ".hefesto.yaml". content: UTF-8 text, no NUL bytes, at most 100 KB. | |
| format | No | Optional. json (default): findings only; sarif: also the full SARIF 2.1.0 log. | |
| language | No | Optional language of code. Ignored when files or path is set. When omitted it is inferred from the content (python if unsure). An unknown language is rejected; send path or files instead. | |
| severity | No | Optional minimum severity to report (default LOW). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true when the engine returned analyzed: true. |
| error | No | Failure code when ok is false. invalid_json when the analyzer body was not JSON. |
| message | No | Same string as content[0].text when ok is false. |
| analysis | No | Analyzer JSON. The content text is a one-line summary plus this object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent behavior, and the description adds substantial context: hosted analyzer, free tier, no .hefesto.yaml read, files deleted after the run, no storage, rate limits, and first-request grammar download latency. This is rich behavioral disclosure beyond structured fields.
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 long but warranted for a tool with many constraints, and it front-loads purpose and key usage. Some details duplicate schema descriptions, but the sentences generally earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a complex hosted analysis tool: it covers limits, supported languages, output modes, privacy behavior, and the local alternative. With an output schema and annotations also present, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description still adds practical semantics: path extension drives language, language is inferred from content with python fallback, files replaces code, and severity/format are optional.
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?
States a specific action (runs the hefesto-ai engine on submitted code) and concrete outputs (rule id, severity, file, line, message, SARIF fingerprint), with an example invocation. It is unmistakably a code-analysis tool rather than compare, install, or pricing.
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?
Explicitly says to use it for a file or snippet a user shares before committing, gives the minimum call and example, and directs whole-repository analysis to the local CLI. It also distinguishes code vs files and notes which parameters are optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compareCompare toolsARead-onlyIdempotentInspect
Return a short static comparison of HefestoAI with one named tool. Use it when the user asks how HefestoAI differs from another scanner. No live lookup and no code is inspected. All arguments are optional: {} compares with sonarqube. Known values: sonarqube (the default when tool is omitted), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, qodo. Any other value is answered as sonarqube.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | Optional. Tool to compare with: sonarqube (default), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, or qodo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | Comparison paragraph. Same string as content[0].text. |
| tool | Yes | sonarqube, snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, or qodo. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the comparison is static, no live lookup occurs, no code is inspected, and invalid tool values fall back to sonarqube. Those are non-obvious behavioral facts an agent needs in order to trust and describe the output.
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?
Front-loaded with the action, then usage, then defaults and accepted values — logical order with no filler. The known-values enumeration is repeated verbatim in the schema, which is mild redundancy.
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 single optional-enum tool with an output schema, the description covers scope, default behavior, fallback handling, and what is not done. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by spelling out that all arguments are optional, that {} defaults to sonarqube, and that unknown values are treated as sonarqube — semantics the schema does not encode. It does partly duplicate the enum list already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return a short static comparison of HefestoAI with one named tool') and immediately scopes it as static, so an agent can distinguish it from the analyze/install/pricing siblings without opening the schema.
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?
Gives an explicit trigger ('Use it when the user asks how HefestoAI differs from another scanner') and clarifies it is not a live lookup, which rules out a plausible misfire. It stops short of naming an alternative tool to use instead, so it is clear but not a full when/when-not/alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
installInstallARead-onlyIdempotentInspect
Return install commands for the open-source package (pip install hefesto-ai, Python 3.10+). Use it when the user wants to run HefestoAI locally, in a pre-commit hook or on a whole repository. Does not install anything on the caller's machine. No parameters: call it with {}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| steps | Yes | Quickstart steps, in order. |
| command | Yes | pip install command. |
| requires | Yes | Python version required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely non-redundant context the annotations cannot express: it only returns commands and 'Does not install anything on the caller's machine' — a critical clarification that prevents an agent from reporting a completed install. It omits any mention of what the returned command set contains, but the output schema covers return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose and the actual command, then usage, then the key non-effect caveat. Nothing is padded or repeated.
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 zero-parameter, read-only tool with a declared output schema, the description covers everything an agent needs: what it returns, when to reach for it, that it performs no installation, and how to call it.
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?
Zero parameters, so the baseline is 4, and the description reinforces the empty-object contract explicitly with 'No parameters: call it with {}', which removes any chance of an agent inventing arguments despite additionalProperties=false.
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?
States a specific verb and resource — 'Return install commands for the open-source package' — and even names the concrete command (pip install hefesto-ai) and required runtime (Python 3.10+). This is unmistakably different from the sibling tools analyze, compare and pricing, which an agent can tell apart without opening any schema.
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?
Gives concrete invocation contexts: run HefestoAI locally, in a pre-commit hook, or on a whole repository. It does not name a sibling as an alternative or state when NOT to use it, but the usage envelope is clear enough that mis-selection against analyze/compare/pricing is unlikely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricingPricingARead-onlyIdempotentInspect
Return current HefestoAI prices (Free $0, PRO $8/month per user, OMEGA $19/month). Use it when the user asks what HefestoAI costs. Static text. Does not look up or change a subscription. No parameters: call it with {}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| pro | Yes | PRO $8/month per user. |
| free | Yes | Free tier, $0/month. |
| omega | Yes | OMEGA $19/month. |
| checkout | Yes | Checkout URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the payload is 'static text', it performs no lookup and no mutation, and it is parameterless so invocation is guaranteed side-effect free. It does not discuss rate limits or caching, but for a constant-return tool that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is returned and the actual price data, followed by the usage trigger, the exclusion, and the calling convention. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape need not be described, and annotations carry the safety profile. The description supplies the remaining essentials: trigger condition, negative scope, and empty-argument invocation, leaving nothing an agent needs in order to call it 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 tool takes zero parameters, which sets the baseline at 4. The description reinforces this with 'No parameters: call it with {}', removing any ambiguity about whether an argument is required, though it adds nothing beyond that confirmation.
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?
States a specific verb and resource ('Return current HefestoAI prices') and immediately names the concrete contents (Free $0, PRO $8, OMEGA $19). It also carves out what it is not ('Does not look up or change a subscription'), so an agent can separate it from siblings like analyze or compare without opening the schema.
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?
Gives an explicit trigger ('Use it when the user asks what HefestoAI costs') and an explicit exclusion ('Does not look up or change a subscription'), which routes subscription-lookup intents elsewhere. Nothing is left to inference about when to call this tool.
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.
1 tool update
- Changed
analyze1 field changed- changed
Input schema / examplesPrevious value: -[ - { - "code": "import subprocess\n\ndef run(cmd):\n return subprocess.call(cmd, shell=True)\n" - }, - { - "code": "import subprocess\n\ndef run(cmd):\n return subprocess.call(cmd, shell=True)\n", - "path": "app/run.py", - "severity": "MEDIUM" - }, - { - "files": [ - { - "content": "import subprocess\n\ndef run(cmd):\n return subprocess.call(cmd, shell=True)\n", - "path": "src/run.py" - } - ] - } -]New value: +[ + { + "code": "import sqlite3\n\npassword = \"Sup3rS3cret!2026\"\n\n\ndef find_user(db, name):\n return db.execute(\"SELECT * FROM users WHERE name = '\" + name + \"'\")\n" + }, + { + "code": "import sqlite3\n\npassword = \"Sup3rS3cret!2026\"\n\n\ndef find_user(db, name):\n return db.execute(\"SELECT * FROM users WHERE name = '\" + name + \"'\")\n", + "path": "app/users.py", + "severity": "MEDIUM" + }, + { + "files": [ + { + "content": "import sqlite3\n\npassword = \"Sup3rS3cret!2026\"\n\n\ndef find_user(db, name):\n return db.execute(\"SELECT * FROM users WHERE name = '\" + name + \"'\")\n", + "path": "src/users.py" + } + ] + } +]
3 tool updates
- Changed
analyze9 fields changed- changed
Input schema / descriptionPrevious value: -"Provide files, or code (language optional, default python). severity and format are optional."New value: +"Send code (one file; path and language optional) or files (several). Everything else is optional." - added
Input schema / examplesAdded value: +[ + { + "code": "import subprocess\n\ndef run(cmd):\n return subprocess.call(cmd, shell=True)\n" + }, + { + "code": "import subprocess\n\ndef run(cmd):\n return subprocess.call(cmd, shell=True)\n", + "path": "app/run.py", + "severity": "MEDIUM" + }, + { + "files": [ + { + "content": "import subprocess\n\ndef run(cmd):\n return subprocess.call(cmd, shell=True)\n", + "path": "src/run.py" + } + ] + } +] - changed
Input schema / properties / code / descriptionPrevious value: -"A single snippet, used only when files is omitted (written as e.g. snippet.py for language python). At most 100 KB."New value: +"Contents of one file or snippet, used when files is omitted. At most 100 KB. This is the only argument a first call needs." - changed
Input schema / properties / files / descriptionPrevious value: -"Files to analyze. Used instead of code when present. path: relative POSIX, at most 200 characters and 8 levels; each segment is letters, digits, \"_\", \".\" or \"-\" and must not start with \"-\"; no \"..\", no absolute paths, no \".git\" or \".hefesto.yaml\". content: UTF-8 text, no NUL bytes, at most 100 KB."New value: +"Several files to analyze. Used instead of code when present. path: relative POSIX, at most 200 characters and 8 levels; each segment is letters, digits, \"_\", \".\" or \"-\" and must not start with \"-\"; no \"..\", no absolute paths, no \".git\" or \".hefesto.yaml\". content: UTF-8 text, no NUL bytes, at most 100 KB." - changed
Input schema / properties / files / items / properties / path / descriptionPrevious value: -"Relative POSIX path."New value: +"Relative POSIX path. The extension picks the language." - changed
Input schema / properties / format / descriptionPrevious value: -"json (default): findings only; sarif: also the full SARIF 2.1.0 log."New value: +"Optional. json (default): findings only; sarif: also the full SARIF 2.1.0 log." - changed
Input schema / properties / language / descriptionPrevious value: -"Language of code when files is omitted. Default python. Ignored when files is set. An unknown language is rejected; send files instead."New value: +"Optional language of code. Ignored when files or path is set. When omitted it is inferred from the content (python if unsure). An unknown language is rejected; send path or files instead." - added
Input schema / properties / pathAdded value: +{ + "description": "Optional file name for code, e.g. \"app/run.py\" or \"Dockerfile\". The extension picks the language. Same rules as files[].path. Ignored when files is set.", + "type": "string" +} - changed
Input schema / properties / severity / descriptionPrevious value: -"Minimum severity to report (default LOW)."New value: +"Optional minimum severity to report (default LOW)."
- Changed
compare2 fields changed- added
Input schema / examplesAdded value: +[ + {}, + { + "tool": "semgrep" + } +] - changed
Input schema / properties / tool / descriptionPrevious value: -"Tool to compare with: sonarqube (default), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, or qodo."New value: +"Optional. Tool to compare with: sonarqube (default), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, or qodo."
- Changed
pricing2 fields changed- changed
Output schema / properties / omega / descriptionPrevious value: -"OMEGA: $19/month."New value: +"OMEGA $19/month." - changed
Output schema / properties / pro / descriptionPrevious value: -"PRO: $8/month."New value: +"PRO $8/month per user."
1 tool update
- Changed
compare2 fields changed- changed
Input schema / properties / tool / descriptionPrevious value: -"Tool to compare with: sonarqube (default), snyk, github-advanced-security, semgrep, or claude-code-security."New value: +"Tool to compare with: sonarqube (default), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, or qodo." - changed
Output schema / properties / tool / descriptionPrevious value: -"sonarqube, snyk, github-advanced-security, semgrep, or claude-code-security."New value: +"sonarqube, snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, or qodo."
1 tool update
- Changed
analyze1 field changed- changed
Output schema / descriptionPrevious value: -"ok true carries the hosted analyzer body in analysis. ok false carries error and message. On success the content text is the summary, the analyzer JSON, and one PRO price line. On failure the content text is the error sentence only."New value: +"ok true carries the hosted analyzer body in analysis. ok false carries error and message. On success the content text is the summary and the analyzer JSON. On failure the content text is the error sentence only."
2 tool updates
- Changed
analyze1 field changed- changed
Output schema / descriptionPrevious value: -"ok true carries the hosted analyzer body in analysis. ok false carries error and message. The content text is unchanged either way."New value: +"ok true carries the hosted analyzer body in analysis. ok false carries error and message. On success the content text is the summary, the analyzer JSON, and one PRO price line. On failure the content text is the error sentence only."
- Changed
pricing5 fields changed- removed
Output schema / properties / founding_memberRemoved value: -{ - "description": "Founding-member price note.", - "type": "string" -} - changed
Output schema / properties / omega / descriptionPrevious value: -"OMEGA tier, $19/month."New value: +"OMEGA: $19/month." - changed
Output schema / properties / pro / descriptionPrevious value: -"PRO tier, $8/month."New value: +"PRO: $8/month." - removed
Output schema / properties / trialRemoved value: -{ - "description": "Trial terms.", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "free", - "pro", - "omega", - "trial", - "founding_member", - "checkout" -]New value: +[ + "free", + "pro", + "omega", + "checkout" +]
4 tool updates
- Changed
analyze1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "allOf": [ + { + "if": { + "properties": { + "ok": { + "const": true + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + "then": { + "required": [ + "ok", + "analysis" + ] + } + }, + { + "if": { + "properties": { + "ok": { + "const": false + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + "then": { + "required": [ + "ok", + "error", + "message" + ] + } + } + ], + "description": "ok true carries the hosted analyzer body in analysis. ok false carries error and message. The content text is unchanged either way.", + "properties": { + "analysis": { + "additionalProperties": true, + "description": "Analyzer JSON. The content text is a one-line summary plus this object.", + "properties": { + "analyzed": { + "description": "true on this branch.", + "type": "boolean" + }, + "engine": { + "additionalProperties": true, + "type": "object" + }, + "findings": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "stored": { + "description": "false. Nothing is stored.", + "type": "boolean" + }, + "summary": { + "additionalProperties": true, + "properties": { + "critical": { + "type": "number" + }, + "files_analyzed": { + "type": "number" + }, + "files_received": { + "type": "number" + }, + "high": { + "type": "number" + }, + "low": { + "type": "number" + }, + "medium": { + "type": "number" + }, + "total_issues": { + "type": "number" + } + }, + "type": "object" + } + }, + "required": [ + "analyzed", + "summary", + "findings", + "stored" + ], + "type": "object" + }, + "error": { + "description": "Failure code when ok is false. invalid_json when the analyzer body was not JSON.", + "type": "string" + }, + "message": { + "description": "Same string as content[0].text when ok is false.", + "type": "string" + }, + "ok": { + "description": "true when the engine returned analyzed: true.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
compare1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "Static comparison. tool is the known value actually answered (unknown names are sonarqube). text is the content text.", + "properties": { + "text": { + "description": "Comparison paragraph. Same string as content[0].text.", + "type": "string" + }, + "tool": { + "description": "sonarqube, snyk, github-advanced-security, semgrep, or claude-code-security.", + "type": "string" + } + }, + "required": [ + "tool", + "text" + ], + "type": "object" +}
- Changed
install1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "Install commands for the open-source package. Does not install anything. The content text is the same prose as before.", + "properties": { + "command": { + "description": "pip install command.", + "type": "string" + }, + "requires": { + "description": "Python version required.", + "type": "string" + }, + "steps": { + "description": "Quickstart steps, in order.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "command", + "requires", + "steps" + ], + "type": "object" +}
- Changed
pricing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "Current HefestoAI prices. Static. The content text is this object as JSON.", + "properties": { + "checkout": { + "description": "Checkout URL.", + "type": "string" + }, + "founding_member": { + "description": "Founding-member price note.", + "type": "string" + }, + "free": { + "description": "Free tier, $0/month.", + "type": "string" + }, + "omega": { + "description": "OMEGA tier, $19/month.", + "type": "string" + }, + "pro": { + "description": "PRO tier, $8/month.", + "type": "string" + }, + "trial": { + "description": "Trial terms.", + "type": "string" + } + }, + "required": [ + "free", + "pro", + "omega", + "trial", + "founding_member", + "checkout" + ], + "type": "object" +}
4 tool updates
- Changed
analyze10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"Provide files, or code (language optional, default python). severity and format are optional." - changed
Input schema / properties / code / descriptionPrevious value: -"A single snippet, used when files is not given (written as e.g. snippet.py for language python)."New value: +"A single snippet, used only when files is omitted (written as e.g. snippet.py for language python). At most 100 KB." - changed
Input schema / properties / files / descriptionPrevious value: -"Files to analyze. path: relative POSIX path (letters, digits, '_', '.', '-'; no '..', no absolute paths); content: UTF-8 text."New value: +"Files to analyze. Used instead of code when present. path: relative POSIX, at most 200 characters and 8 levels; each segment is letters, digits, \"_\", \".\" or \"-\" and must not start with \"-\"; no \"..\", no absolute paths, no \".git\" or \".hefesto.yaml\". content: UTF-8 text, no NUL bytes, at most 100 KB." - added
Input schema / properties / files / items / additionalPropertiesAdded value: +false - added
Input schema / properties / files / items / properties / content / descriptionAdded value: +"UTF-8 source text. At most 100 KB. No NUL bytes." - added
Input schema / properties / files / items / properties / path / descriptionAdded value: +"Relative POSIX path." - changed
Input schema / properties / language / descriptionPrevious value: -"Language of code: python (default), cobol, yaml, dockerfile, terraform, shell, sql, javascript, typescript, java, go, rust, csharp."New value: +"Language of code when files is omitted. Default python. Ignored when files is set. An unknown language is rejected; send files instead." - added
Input schema / properties / language / enumAdded value: +[ + "python", + "py", + "cobol", + "yaml", + "yml", + "dockerfile", + "docker", + "terraform", + "hcl", + "shell", + "bash", + "sh", + "sql", + "javascript", + "js", + "typescript", + "ts", + "java", + "go", + "rust", + "csharp", + "c#" +] - removed
Input schema / requiredRemoved value: -[]
- Changed
compare2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / tool / descriptionPrevious value: -"Tool to compare with (sonarqube, snyk, github-advanced-security, semgrep, claude-code-security)"New value: +"Tool to compare with: sonarqube (default), snyk, github-advanced-security, semgrep, or claude-code-security."
- Changed
install3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / propertiesRemoved value: -{} - removed
Input schema / requiredRemoved value: -[]
- Changed
pricing3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / propertiesRemoved value: -{} - removed
Input schema / requiredRemoved value: -[]
1 tool update
- Changed
analyze5 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"Ignored. Accepted for backward compatibility; run hefesto analyze locally to analyze code."New value: +"A single snippet, used when files is not given (written as e.g. snippet.py for language python)." - added
Input schema / properties / filesAdded value: +{ + "description": "Files to analyze. path: relative POSIX path (letters, digits, '_', '.', '-'; no '..', no absolute paths); content: UTF-8 text.", + "items": { + "properties": { + "content": { + "type": "string" + }, + "path": { + "maxLength": 200, + "type": "string" + } + }, + "required": [ + "path", + "content" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" +} - added
Input schema / properties / formatAdded value: +{ + "description": "json (default): findings only; sarif: also the full SARIF 2.1.0 log.", + "enum": [ + "json", + "sarif" + ], + "type": "string" +} - changed
Input schema / properties / language / descriptionPrevious value: -"Ignored. Accepted for backward compatibility."New value: +"Language of code: python (default), cobol, yaml, dockerfile, terraform, shell, sql, javascript, typescript, java, go, rust, csharp." - added
Input schema / properties / severityAdded value: +{ + "description": "Minimum severity to report (default LOW).", + "enum": [ + "LOW", + "MEDIUM", + "HIGH", + "CRITICAL" + ], + "type": "string" +}
1 tool update
- Changed
analyze3 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"Code snippet to analyze"New value: +"Ignored. Accepted for backward compatibility; run hefesto analyze locally to analyze code." - changed
Input schema / properties / language / descriptionPrevious value: -"Programming language (python, javascript, etc)"New value: +"Ignored. Accepted for backward compatibility." - changed
Input schema / requiredPrevious value: -[ - "code" -]New value: +[]
Related MCP Connectors
Security scanner for AI-written code: SAST, secrets, dependencies, IaC, containers and DAST.
Production-safety audits for AI-generated code, with a fix for every finding.
- VulX WatchOAuthai.vulx
Independent security review for AI-built apps. Watch a GitHub repo. Never a patch.
The bug mediator for AI-built apps: plain-English diagnosis + a ready fix, in your editor.
Related MCP Servers
- AlicenseAqualityDmaintenanceValidates AI-generated code against actual codebases to catch hallucinations, dead code, and API mismatches before runtime.1280 npm1MIT
- FlicenseNot gradedqualityDmaintenanceAI-powered code quality analysis that detects security issues, bugs, code smells, and performance problems across multiple languages.4-
- AlicenseNot gradedqualityDmaintenanceAutomatically detects security vulnerabilities in AI-generated code, scanning for hardcoded secrets, injection flaws, XSS, weak cryptography, authentication issues, path traversal, and vulnerable dependencies across JavaScript, Python, Java, and Go.33 npm2MIT
- AlicenseNot gradedqualityCmaintenanceProvides pre-deploy AI-assisted security and readiness checks for AI-built apps, including scanning for secrets, auth gaps, and payment safety.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.