MCP, MCP server
Affine Mcp Server
Model Context Protocol server for AFFiNE.
Compatibility: Not stated.
Grade B
Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit cc58fe3d3757.
PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST SECRETS_PATH_DOTENV SECRETS_ENV_READ OBFUSCATION_FILE_OVER_READ_CAP
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
src/cli.ts, line 1338
fs.unlinkSync(CONFIG_FILE); - NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
docker/forward-port.mjs, line 5
const upstream = net.connect({ host: "affine", port: 3010 }); - SECRETS_PATH_DOTENV Low
Mentions a .env file.
.gitignore, line 9
.env - SECRETS_ENV_READ Note
Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.
test-comprehensive.mjs, line 15
const PASSWORD = process.env.AFFINE_PASSWORD || process.env.AFFINE_ADMIN_PASSWORD; - OBFUSCATION_FILE_OVER_READ_CAP Note
A file was over the read cap and was not fully read.
src/tools/docs.ts, line 1
import { isDeepStrictEqual } from "node:util";
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
src/cli.ts, line 1338
fs.unlinkSync(CONFIG_FILE);
src/config.ts, line 108
try { fs.unlinkSync(tmpFile); } catch {}
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
docker/forward-port.mjs, line 5
const upstream = net.connect({ host: "affine", port: 3010 });
src/auth.ts, line 82
signal => fetch(url, {
src/cli.ts, line 273
signal => fetch(graphqlEndpoint, {
Show more
src/cli.ts, line 1413
const response = await fetch(summary.baseUrl, { signal: healthController.signal });
src/graphqlClient.ts, line 221
signal => fetch(this.opts.endpoint, {
src/httpDiagnostics.ts, line 24
signal => fetch(config.graphqlEndpoint, {
src/oauth.ts, line 48
signal => fetch(input, {
src/stdioHttpProxy.ts, line 92
signal => fetch(input, { ...init, signal }),
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
test-comprehensive.mjs, line 15
const PASSWORD = process.env.AFFINE_PASSWORD || process.env.AFFINE_ADMIN_PASSWORD;
scripts/test-append-block-expansion.mjs, line 10
const PASSWORD = process.env.AFFINE_PASSWORD || 'dev';
.gitignore, line 9
.env
Show more
src/config.ts, line 254
const environmentHasPassword = Boolean(process.env.AFFINE_PASSWORD);
src/sse.ts, line 103
process.env.AFFINE_MCP_HTTP_ALLOW_QUERY_TOKEN,
src/stdioHttpProxy.ts, line 20
const token = process.env.AFFINE_MCP_HTTP_TOKEN?.trim();
CHANGELOG.md, line 845
- Documentation: removed `.env`-based configuration guidance; recommend environment variables via shell or app configuration.
CHANGELOG.md, line 859
- Unnecessary repo artifacts (e.g., `.env.example`, `.dockerignore`).
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.
OBFUSCATION_FILE_OVER_READ_CAP
src/tools/docs.ts, line 1
import { isDeepStrictEqual } from "node:util";
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit cc58fe3d3757. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file. a file was over the read cap and was not fully read.
Date and source
Date checked:
github.com
Commit graded: cc58fe3d37579eb5ffb75b843f5cb312993e23ad
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.