MCP, MCP server
canonic
canonic, an MCP server listed in the PlugVet directory.
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
NETWORK_HOST_FROM_INPUT
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
canonic/config.py, line 101
#: parameters a provider needs to do its fetch (``region``, ``cluster_id``,
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
canonic/cli/commands/gc.py, line 80
shutil.rmtree(path)
canonic/mcp/daemon.py, line 12
The background daemon is spawned via ``subprocess.Popen`` (fork+exec into a fresh
canonic/mcp/daemon.py, line 210
proc: subprocess.Popen[bytes],
Show more
canonic/mcp/daemon.py, line 342
Re-launches ``python -m canonic mcp start ... --_child`` via ``subprocess.Popen``
canonic/mcp/daemon.py, line 404
proc = subprocess.Popen( # noqa: S603 - fixed argv, no shell, no user-controlled parts
canonic/packs/repo.py, line 62
subprocess.run(
scripts/check_contract_changelog.py, line 20
result = subprocess.run(
scripts/check_contract_changelog.py, line 31
result = subprocess.run(
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
canonic/config.py, line 101
#: parameters a provider needs to do its fetch (``region``, ``cluster_id``,
canonic/credentials.py, line 386
knows *how* to fetch (region, cluster id, db user). Ignored for static refs.
canonic/cli/commands/knowledge.py, line 52
# connection id nor the capability contract, just fetch() for one reference.
Show more
canonic/cli/commands/knowledge.py, line 137
ref: Annotated[str, typer.Argument(help="Source reference to fetch (e.g. a URL).")],
canonic/cli/commands/knowledge.py, line 237
raw_docs = await builder(ref).fetch()
canonic/connectors/evidence.py, line 110
async def fetch(self) -> list[RawDoc]:
canonic/connectors/evidence.py, line 192
await self._fetch_adapter.fetch()
canonic/connectors/evidence.py, line 203
raw_docs = await self._fetch_adapter.fetch()
canonic/connectors/notion.py, line 217
async def fetch(self) -> list[RawDoc]:
canonic/connectors/web.py, line 87
async def fetch(self, url: str) -> str: ...
Dockerfile, line 12
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:7474/livez', timeout=2)"
scripts/posthog_pack_demo/Dockerfile, line 21
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:7474/livez', timeout=2)"
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
.gitignore, line 153
# Environments
CLAUDE.md, line 44
- `.env` files - never read or modify
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
uv.lock, line 1
version = 1
examples/coffeehouse/coffeehouse.duckdb, line 1
�-�Z�n�DUCK@ v1.5.6 069cc9f9b5
examples/dutch-railway/dutch_railway.duckdb, line 1
��]�F�DUCK@ v1.5.4 08e34c447b
Show more
examples/dutch-railway/dbt/manifest.json, line 1
{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", "dbt_version": "1.11.12", "generated_at": "2026-07-05T09:59:24.766685Z", "invocation_id": "0
examples/jaffle-shop/README.md, line 1
# Canonic Jaffle Shop demo
Licence
Pass
A licence file is present (LICENSE.md).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit f63db70e16da. can delete files. accepts a host from input, with no fixed list in this file. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: f63db70e16daeaa396ed2f24113e34c715bf3f2f
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.