Skip to main content
Glama

TASIE MCP

TASIE — autonomous SAST + real exploit + human-gated remediation — exposed as an MCP app (NitroStack + NitroCloud), so ChatGPT and other MCP clients can scan code for vulnerabilities and get proof-carrying remediation.

This Node/TypeScript service is a thin MCP surface over the TASIE FastAPI backend (demo/backend/). All detection, live exploitation and patching happens in the Python engine; this app forwards tool calls over HTTP.

Architecture

ChatGPT / Studio  ──MCP──▶  tasie-mcp (this app)  ──HTTP──▶  TASIE FastAPI backend
                                                              (~90 engines + Docker
                                                               exploit sandbox)

The backend URL is TASIE_API_BASE (default http://localhost:8000).

  • Stateless tools (scan_code, scan_dependencies, detect_frameworks) send the code/manifest inline — they work against any reachable TASIE host.

  • Backend-state tools (remediate_file, scan_repo) act on files that live on the TASIE host and need the full Docker-enabled deployment.

Related MCP server: chatgpt-codex-local-mcp

Tools

Tool

Backend route

Needs Docker host

Purpose

scan_code

POST /api/analyze

no

Static scan of inline source → ranked findings (renders scan-report widget)

scan_dependencies

POST /api/depscan

no

SCA over an inline dependency manifest

detect_frameworks

POST /api/frameworks

no

Fingerprint web framework(s) + attack surface

remediate_file

POST /api/remediate

yes

Detect → live-exploit → patch → re-verify a host file

scan_repo

POST /api/scan-repo

yes

Route discovery + scan of a repo on the host

tasie_health

GET /health

no

Backend reachability + which endpoint is wired

Setup

npm install                 # main app
npm --prefix src/widgets install   # widget subpackage (or run `npm run dev`)
cp .env.example .env        # then set TASIE_API_BASE

Start the TASIE backend first (from demo/backend):

.venv/Scripts/python.exe -m uvicorn app:app --host 127.0.0.1 --port 8000

Run

npm run dev        # MCP server (STDIO) + widget dev server (:3001)

Then connect in NitroStudio → Add Server → Nitro Project → this folder → Studio App Canvas. Test scan_code on the Tools page; the TASIE Scan Report widget renders the findings.

Deploy (NitroCloud → ChatGPT)

  1. Set TASIE_API_BASE to a publicly reachable TASIE host (a cloud VM/Docker host running demo/backend). NitroCloud deploys only this Node app — the Python engine + exploit sandbox must be hosted separately.

  2. In Studio App Canvas: Link to app / Create Cloud App → Deploy.

  3. In ChatGPT: Settings → Plugins → Developer mode (Plus/Pro) → + → Server URL = {serviceUrl}/sse → Create → Connect.

Cloud builds run on Node 20 (engines pins 20.x). Local dev on newer Node works but test against 20 before deploying.

Config

Var

Default

Meaning

TASIE_API_BASE

http://localhost:8000

TASIE backend base URL

TASIE_API_KEY

optional bearer token (Authorization: Bearer …)

TASIE_TIMEOUT_MS

120000

per-request timeout

Notes

  • ctx.logger only inside tools — console.* breaks the STDIO transport.

  • Verified end-to-end: scan_code on a Flask SQLi sample returns critical / CWE-89 / OWASP A03 from the live backend.

Available Tools

6 tools
detect_frameworksA

Fingerprint the web framework(s) in a source file (Flask, FastAPI, Django, …) and report where the request-handling attack surface is. Send the code inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesSource code to fingerprint

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description is the only source for behavioral expectations. It discloses that the tool reports attack-surface locations, which is useful beyond a simple framework list. However, it does not mention whether the code is stored, transmitted externally, or if the operation is non-destructive; these are typical disclosures expected for code-analyzing tools.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the action and resource. Every clause adds value—'Fingerprint the web framework(s)', examples, attack-surface reporting, and the inline-send instruction. No redundancy or filler.

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

Completeness4/5

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

For a single-parameter, no-output-schema tool, the description covers the core function, expected inputs, and high-level outputs (framework names and attack-surface locations). It could elaborate on output format or what 'attack surface' includes, but the description is sufficiently contextual for an agent to select and call the tool effectively.

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

Parameters3/5

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

The schema already describes the 'source' parameter as 'Source code to fingerprint' (100% coverage). The description adds minimal extra meaning by saying 'Send the code inline,' which reinforces the same concept. Per the rubric, baseline for full schema coverage is 3, and the description does not significantly elevate param understanding beyond that.

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

Purpose5/5

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

The description uses a specific verb ('Fingerprint') and clearly identifies the resource ('web framework(s) in a source file'), with concrete examples (Flask, FastAPI, Django). It also differentiates from siblings like scan_code by focusing on framework identification and attack-surface mapping, not general scanning or remediation.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: when you need to identify frameworks in a source file and locate request-handling attack surface. It includes a direct usage instruction ('Send the code inline'). However, it does not explicitly contrast with alternatives or state when not to use it, so it stops short of a 5.

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

remediate_fileA

Full verified remediation loop on a file already loaded on the TASIE host: detect -> live-exploit in a sandbox -> assemble patch -> re-verify. Requires the full Docker-enabled TASIE deployment (TASIE_API_BASE). Returns the proof and the proposed patch for human review.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoFilename on the TASIE host to remediateapp.py

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It discloses that the tool runs a live exploit in a sandbox (safety), assembles a patch, and returns the patch for human review rather than auto-applying. It also states the Docker deployment prerequisite. This is strong disclosure, though it doesn't explicitly state whether the original file is modified.

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

Conciseness5/5

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

Two sentences, no redundancies. Every phrase adds value: the remediation loop steps, the deployment requirement, and the human-review return. Very efficient.

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

Completeness4/5

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

The description covers purpose, prerequisites, and return value for a simple one-parameter tool. It does not describe error conditions or the exact format of the proof, but with no output schema and a single parameter, this is sufficient for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

The schema already fully describes the lone 'file' parameter (100% coverage), so the baseline is 3. The description adds context that the file must already be loaded on the host, slightly reinforcing the schema's 'on the TASIE host' phrasing, but does not add new parameter semantics.

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

Purpose5/5

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

The description uses the specific verb 'remediate' and describes a multi-step loop (detect, live-exploit in sandbox, assemble patch, re-verify), clearly distinguishing it from sibling scanning/detection tools. It also states the resource (file on TASIE host) and output (proof and patch).

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

Usage Guidelines4/5

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

The description gives clear context: it is for a file already loaded on the host and requires the Docker-enabled deployment. It does not explicitly mention alternatives or exclusions, but the contrast with sibling scan tools implies remediation is the use case. It could be improved by naming alternative scanning tools for detection-only tasks.

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

scan_codeA

Statically scan a source file for security vulnerabilities using TASIE. Returns ranked findings (SQLi, command injection, SSTI, XSS, path traversal, deserialization, and ~90 more classes) with severity, CWE and OWASP tags. Send the code inline — no files need to exist on the server.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesFull source code to scan
filenameNoFilename (drives language/framework detection, e.g. app.py)app.py

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description takes on full disclosure responsibility. It states that the scan is static, reveals the output as ranked findings with severity/CWE/OWASP tags, and clarifies that no server-side files are created. It falls short of mentioning rate limits, auth, or size constraints, but covers the core behavior well.

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

Conciseness5/5

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

The description is three sentences, each carrying information: action, output, and input method. It is front-loaded and contains no filler.

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

Completeness4/5

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

For a tool with two well-schema'd parameters and no output schema, the description adequately covers purpose, return values, and usage. A minor gap is the lack of detail about the exact response structure, but the mention of tags and severity suffices for invocation.

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

Parameters4/5

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

The schema already fully documents both parameters (content and filename with default). The description adds practical guidance that the code should be sent inline without requiring a file, reinforcing the content parameter semantics, which justifies going slightly above the baseline for 100% coverage.

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

Purpose5/5

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

The description opens with 'Statically scan a source file for security vulnerabilities using TASIE,' which precisely states the action and target. It distinguishes from siblings by noting the code is sent inline and no files are needed, clearly separating it from repo-wide or dependency scans.

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

Usage Guidelines4/5

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

The instruction 'Send the code inline — no files need to exist on the server' provides clear invocation context, and the phrase 'source file' implies single-file use. However, it does not explicitly mention alternatives or when not to use this tool compared to siblings like scan_repo.

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

scan_dependenciesA

Software Composition Analysis: scan a Python dependency manifest (requirements.txt / Pipfile / pyproject) for known-vulnerable packages. Send the manifest text inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlineNoIf true, query live advisory sources; else use the local DB
filenameNoManifest filename (e.g. requirements.txt)requirements.txt
manifestYesDependency manifest contents

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It only says 'scan' which implies read-only, but it fails to mention that the 'online' parameter causes network queries to live advisory sources, potential data sent externally, or what the output looks like. The schema notes the online behavior, but the description does not contextualize it.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose, and contains zero filler. Every phrase adds information: the scan target, the manifest types, and the invocation method. Extremely economical and well-structured.

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

Completeness3/5

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

For a moderately complex tool with no output schema, the description adequately states what the tool accepts but not what it returns or how results are presented. It also omits any note about network/privacy implications when 'online' is enabled, which is significant given the tool processes inline manifest text. The schema covers parameters, but the description leaves return format and behavioral caveats unspecified.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are already documented. The description adds marginal value by listing acceptable filenames and instructing to send the manifest 'inline,' but it does not elaborate on the 'online' vs local DB distinction beyond what the schema already states. This meets the baseline for full schema coverage.

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

Purpose5/5

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

The description specifies a clear verb ('scan') and resource ('Python dependency manifest'), explicitly identifies the vulnerability-checking purpose, and enumerates accepted manifest types (requirements.txt/Pipfile/pyproject). This distinguishes it from sibling tools like scan_code or scan_repo.

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

Usage Guidelines3/5

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

The description implies when to use the tool (when you have a Python dependency manifest to check) and instructs to 'send the manifest text inline,' but it does not explicitly contrast with alternative scan tools or state when this tool is preferred over scan_repo/scan_code. No exclusions or when-not-to-use guidance is provided.

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

scan_repoA

Ingest a multi-file repository on the TASIE host: discover routes and scan every module for vulnerabilities. Requires the path to exist on the TASIE backend (full deployment).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesDirectory path on the TASIE host to scan

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description must disclose side effects, permissions, and return behavior. It describes a scan operation (likely read-only) but does not explicitly state that it is non-destructive, whether it produces a report, or if it has any side effects. The 'full deployment' requirement is useful but insufficient for full transparency.

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

Conciseness5/5

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

The description is two sentences, front-loads the action, and contains no fluff. Every word adds value, efficiently conveying purpose and a key requirement.

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

Completeness2/5

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

The tool has no output schema and no annotations, so the description must explain return values and behavioral context. It does not describe what the scan returns, how results are formatted, or any success/failure indicators. Given the complexity of a multi-file scan, this is a significant gap.

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

Parameters4/5

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

The schema already covers the single 'path' parameter with 100% coverage. The description adds a meaningful constraint: the path must reference a full deployment on the TASIE backend, which goes beyond the schema's basic 'directory path' definition.

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

Purpose5/5

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

The description clearly states the action (ingest), the resource (multi-file repository on TASIE host), and the specific outcomes (discover routes, scan modules for vulnerabilities). This distinguishes it from sibling tools like scan_code (likely per-file) and scan_dependencies.

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

Usage Guidelines3/5

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

The description provides a prerequisite (path must exist on TASIE backend full deployment) but does not explicitly state when to use this tool over alternatives like scan_code or detect_frameworks. The phrase 'multi-file repository' implies it is for whole repos, but no explicit comparison is made.

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

tasie_healthA

Check that the TASIE backend is reachable and report which endpoint the MCP app is wired to.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses the reachability check and endpoint reporting, but does not explicitly state whether the operation is read-only or has side effects. The term 'check' implies safety, but lacks explicit assurance.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the core action and includes the key output. Every word contributes meaning without unnecessary detail.

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

Completeness5/5

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

For a simple health-check tool with no parameters and no output schema, the description is complete: it states what is checked, what is reported, and the tool's relationship to the MCP app. No missing information is needed for correct invocation.

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

Parameters4/5

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

The tool has zero parameters, so the description need not explain parameter syntax. The baseline for 0 params is 4, and the description adds context about what the check does (reachability and endpoint reporting) beyond the schema.

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

Purpose5/5

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

The description clearly states a specific verb ('Check') and resource ('TASIE backend'), and adds a secondary purpose of reporting the endpoint the MCP app is wired to. This distinguishes it from sibling scanning/remediation tools.

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

Usage Guidelines3/5

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

The description implies usage as a connectivity check but does not explicitly state when to use it versus alternatives. No exclusions or alternative tool mentions are provided, though the context of sibling scanning tools makes the intent somewhat clear.

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. 6 tool updatesv1.0.0
    • First observeddetect_frameworks
    • First observedremediate_file
    • First observedscan_code
    • First observedscan_dependencies
    • First observedscan_repo
    • First observedtasie_health

TDQS

A4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct action: framework detection, vulnerability scanning (code, dependencies, repo), remediation, and health checking. No two tools appear to do the same thing, and their descriptions clearly delineate the use cases.

Naming Consistency4/5

Five of six tools follow the verb_noun pattern (detect_frameworks, remediate_file, scan_code, scan_dependencies, scan_repo). The outlier is tasie_health, which uses a noun_health format and breaks the predictable verb-led pattern.

Tool Count5/5

With six tools, the set is well-scoped for a security scanning MCP server. Each tool covers a distinct and necessary capability without redundancy or bloat.

Completeness4/5

The tool surface covers the core workflow: detect frameworks, scan code and dependencies, scan full repos, remediate, and check health. Minor gaps exist (e.g., no tool for managing or re-listing past findings), but no critical dead ends are present.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers