Skip to main content
Glama
UnboundCompute

lachesis-mcp

Official

taint

Trace concrete source-to-sink taint paths in code graphs, leveraging Atropos models to show where untrusted input reaches dangerous sinks, with CWE and file:line for both ends.

Instructions

Taint witnesses from the Atropos catalog: where untrusted input actually reaches a dangerous sink through value flow. Folds the Atropos taint models (sources / sinks / summaries) onto this graph's exact nodes and runs propagation, returning each source->sink reach with the catalog model id, CWE, and file:line for both ends. atropos_connected rows are the ones a catalog fact drove (e.g. request -> urlopen SSRF); the rest are the engine's own generic-role reaches. Costs one whole-graph value-flow build on first call per graph (cached after). A no-op with a clear reason if the Atropos catalog is not checked out. Each witness carries source_id/sink_id, the exact graph node ids of the bound endpoints, plus path -- the ordered source->sink hops taint actually walked ({id,label,at} each). Adjudicate a witness from its path (read source at each hop); do NOT re-derive it with reaches, which follows a different edge set (VALUE_FLOWS_TO/POINTS_TO) and can return 0 hops for a pair taint reached over REACHING_DEF/summary edges. unwitnessed lists bound sinks/sources that took part in no reach -- feed those ids straight to sources_of/flow/reaches to trace why (on a C graph they mark where value-flow gaps sever the chain); no name resolution needed since the endpoint is often an external callee the name index can't seed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
formatNotext (compact, default) | json (structured result page)
atropos_onlyNoonly witnesses a catalog fact drove

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv1.0.0

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral disclosure burden and meets it thoroughly. It discloses the costly whole-graph value-flow build on first call, caching, the no-op condition, the distinction between catalog-driven and generic reaches, and the exact semantics of the witness `path` versus `reaches` edge sets.

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

Conciseness4/5

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

The description is dense but every sentence earns its place: it front-loads the purpose, then gives cost, no-op behavior, output shape, and adjudication warnings. However, it is a single long unbroken paragraph with many nested caveats, which reduces readability for an AI agent scanning for key constraints.

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 complex tool with no output schema, the description covers a remarkable amount: witness shape, path semantics, CWE/model ids, caching cost, no-op condition, and the unwitnessed follow-up workflow. The main gap is that the `limit` parameter's truncation effect is never stated, so an agent might assume all reaches are returned.

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 67%: `format` and `atropos_only` are described in the schema, while `limit` is not. The description adds some semantic color around catalog-driven versus generic reaches, which helps interpret `atropos_only`, but it does not clarify `limit` behavior or the `text`/`json` format distinction beyond the schema. It also says 'returning each source->sink reach,' which could misleadingly imply no truncation despite the default limit.

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 a specific verb and resource: 'Taint witnesses from the Atropos catalog,' immediately explaining the tool's core function. It clearly differentiates this tool from siblings by defining taint propagation through source->sink reaches with catalog model ids, CWEs, and file:line endpoints, and by explicitly warning not to use `reaches` for adjudication.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance and alternatives: it says to adjudicate from `path`, do NOT re-derive with `reaches`, and feed `unwitnessed` ids to `sources_of`/`flow`/`reaches`. It also states the tool is a no-op if the Atropos catalog is not checked out, which prevents wasted calls.

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

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/UnboundCompute/lachesis'

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