Skip to main content
Semantic analysis compares your tool descriptions against existing MCP tools in the current corpus and also performs the deeper within-server parameter matching pass. Today that corpus is built from Smithery data.

Run it in your workspace

Run a normal scan to get both static and semantic analysis, or add --semantic when you want the semantic layer by itself:

What happens during a semantic scan

1

Collect your tools

Watchtower resolves the tool list from --server, --remote, --manifest, or stdin exactly the same way it does for static analysis.
2

Refresh the local index if a newer one exists

Before scanning, Watchtower checks the published corpus manifest. If a newer version is available, it downloads semantic.hnsw and semantic-meta.json to ~/.mcp-watchtower/index.
3

Embed and retrieve matches

For each tool with a non-empty description, Watchtower embeds the description, searches the local HNSW index, and retrieves the closest corpus neighbors.
4

Compare parameter meaning within your server

Watchtower also embeds parameter context (parameter name + parameter description + tool context) to catch niche parameter aliases that the static checker cannot prove from deterministic normalization alone.
5

Emit semantic findings

Matches above the configured threshold become ALREADY_IN_CORPUS, SEMANTIC_OVERLAP, or SEMANTIC_PARAMETER_CONFLICT findings.
If the remote manifest is unavailable or the download fails, Watchtower keeps scanning with the bundled index that ships inside the package. Semantic scans are never blocked by an index refresh failure.
Semantic findings are added to the report, but they do not change the exit code. Exit code 1 still means a critical static finding was detected.

Semantic finding types

Current corpus source

Today the semantic corpus comes from Smithery only. At a high level, Watchtower builds the corpus by collecting tool metadata from popular Smithery servers, normalizing that data, and turning the tool descriptions into a local search index. That means semantic analysis is only as broad as the current Smithery-backed corpus. Additional registries can be added later without changing how you run the scan.

Useful semantic-analysis flags

Static analysis

Use --syntactic when you want only the deterministic static checks.

CLI reference

See the default full scan, --semantic, --syntactic, --threshold, JSON output, and exit code behavior in one place.

SemanticAnalyzer API

Use the semantic analyzer directly from TypeScript.