Give your AI agent eyes for PDFs — structured text, tables, OCR, visual evidence, and page-level citations via MCP. Native Rust, local-first.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http
verified
reported
listed in the official MCP registry counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed v4.1.3 · analyzer v33 · 4w ago
skills & prompt files 2
danger signals3
- dynamic code execution new Function() SylphxAI-pdf-reader-mcp-f794f7a/dist/index.js :2894
const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode); - dynamic code execution new Function() SylphxAI-pdf-reader-mcp-f794f7a/dist/legacy-engine-runtime.js :2894
const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode); - suspicious endpoint 169.254.169.254 (cloud metadata) SylphxAI-pdf-reader-mcp-f794f7a/test/pdf/loader.test.ts :127
{ url: 'http://169.254.169.254/latest/meta-data/' },
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 721
filesystem 216
- fs SylphxAI-pdf-reader-mcp-f794f7a/dist/doctor-cli.js :8
import { existsSync as existsSync2 } from "node:fs"; - fs SylphxAI-pdf-reader-mcp-f794f7a/dist/legacy-engine-runtime.js :23843
import { readFile } from "node:fs/promises"; - fs SylphxAI-pdf-reader-mcp-f794f7a/dist/pure-rust.js :3
import { existsSync } from "node:fs"; - fs SylphxAI-pdf-reader-mcp-f794f7a/dist/runtime-entry.js :5
import { existsSync } from "node:fs"; - fs SylphxAI-pdf-reader-mcp-f794f7a/dist/sdk.js :3
import { existsSync } from "node:fs"; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/agent-task-shared.ts :2
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pdf-corpus.ts :1
import { promises as fs } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pdf-intelligence.ts :1
import fs from 'node:fs/promises'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pdf-provider-manifest.ts :1
import { promises as fs } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pdf-providers.ts :2
import fs from 'node:fs/promises'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pdf-quality.ts :1
import fs from 'node:fs/promises'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pure-rust.ts :16
import fs from 'node:fs';
show 28 more
- fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-utils.ts :1
import fs from 'node:fs/promises'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/brand-pack-plan.ts :5
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-agent-task-corpus.ts :3
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-no-github-hosted-macos.ts :6
import { readdirSync, readFileSync, statSync } from 'node:fs' - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-prod-dependency-closure.ts :6
import { existsSync, readFileSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-pure-rust-exports.ts :3
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-pure-rust-matrix.ts :3
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-registry-install-proof.ts :21
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-semantic-contracts.ts :3
import { existsSync, readdirSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-ts-production-absence.ts :6
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-v3014-input-schema-oracle.ts :2
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-verified-candidate-admission.ts :19
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-action-dest-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-action-precedence-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-named-state-polyline-ink-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-named-state-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-named-state-square-circle-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-nonstream-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-appearance-bbox-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-contents-multiline-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-dest-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-freetext-rect-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-highlight-quadpoints-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-aa-action-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-aa-precedence-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-uri-name-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-uri-normalize-residual-oracle.ts :12
} from 'node:fs'; - fs (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-residual-oracle.ts :12
} from 'node:fs';
176 more not shown — this panel samples each group; the count above is the real total.
shell / exec 212
- shell SylphxAI-pdf-reader-mcp-f794f7a/dist/doctor-cli.js :7
import { spawnSync } from "node:child_process"; - shell SylphxAI-pdf-reader-mcp-f794f7a/dist/legacy-engine-runtime.js :23846
import { spawnSync } from "node:child_process"; - shell SylphxAI-pdf-reader-mcp-f794f7a/dist/pure-rust.js :2
import { spawn } from "node:child_process"; - shell SylphxAI-pdf-reader-mcp-f794f7a/dist/runtime-entry.js :4
import { spawn } from "node:child_process"; - shell SylphxAI-pdf-reader-mcp-f794f7a/dist/sdk.js :2
import { spawn } from "node:child_process"; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/agent-task-shared.ts :1
import { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pdf-providers.ts :1
import { execFile } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pure-rust.ts :15
import { spawn, type ChildProcess } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-prod-dependency-closure.ts :9
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-production-contract.ts :4
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-registry-install-proof.ts :12
import { type ChildProcessWithoutNullStreams, spawn, spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-sole-rust-core-admission.ts :6
import { spawnSync } from 'node:child_process';
show 28 more
- shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-v3014-input-schema-oracle.ts :5
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/check-verified-candidate-admission.ts :21
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-action-dest-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-action-precedence-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-named-state-polyline-ink-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-named-state-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-named-state-square-circle-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-ap-nonstream-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-appearance-bbox-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-contents-multiline-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-dest-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-freetext-rect-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-highlight-quadpoints-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-aa-action-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-aa-precedence-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-uri-name-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-link-uri-normalize-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-square-circle-widget-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-stamp-caret-file-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-text-markup-quadpoints-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-annotation-text-markup-with-ap-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-attachment-dupkids-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-attachment-odd-names-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-attachment-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-behavior-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-border-array-short-residual-oracle.ts :3
import { spawnSync } from 'node:child_process'; - shell (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/capture-v3014-border-array-width-residual-oracle.ts :3
import { spawnSync } from 'node:child_process';
172 more not shown — this panel samples each group; the count above is the real total.
network 14
- net SylphxAI-pdf-reader-mcp-f794f7a/dist/doctor-cli.js :5552
const response = await fetch(url); - net SylphxAI-pdf-reader-mcp-f794f7a/dist/index.js :8500
import { createServer as createHttpServer } from "node:http"; - net SylphxAI-pdf-reader-mcp-f794f7a/dist/legacy-engine-runtime.js :29762
const response = await fetch(url2); - net (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/benchmark-pdf-quality.ts :2
import { createServer } from 'node:http'; - net (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/differential/url-single-fetch-fixture-server.ts :3
import { createServer } from 'node:http'; - net (weak) SylphxAI-pdf-reader-mcp-f794f7a/scripts/pdf-url-cache.ts :112
const response = await fetch(parsed.toString(), { redirect: 'manual' }); - net SylphxAI-pdf-reader-mcp-f794f7a/src/mcp.ts :2
import { createServer as createHttpServer, type Server as HttpServer } from 'node:http'; - net SylphxAI-pdf-reader-mcp-f794f7a/src/pdf/loader.ts :146
const response = await fetch(currentUrl, { - net SylphxAI-pdf-reader-mcp-f794f7a/src/pdf/regionAnalysis.ts :1180
const response = await fetch(config.url, { - net SylphxAI-pdf-reader-mcp-f794f7a/src/utils/config.ts :30
import net from 'node:net'; - net (weak) SylphxAI-pdf-reader-mcp-f794f7a/test/integration/http-transport.test.ts :8
import net from 'node:net'; - net (weak) SylphxAI-pdf-reader-mcp-f794f7a/test/pdf/loader.test.ts :93
it('should load PDF from URL via fetch (not pdfjs URL loader)', async () => {
show 2 more
- net (weak) SylphxAI-pdf-reader-mcp-f794f7a/test/pdf/regionAnalysis.test.ts :1
import { createServer } from 'node:http'; - net (weak) SylphxAI-pdf-reader-mcp-f794f7a/test/scripts/corpusBenchmark.test.ts :5
import { createServer } from 'node:http';
secrets 2
- secrets SylphxAI-pdf-reader-mcp-f794f7a/src/index.ts :23
const apiKey = process.env['MCP_API_KEY']; - secrets (weak) SylphxAI-pdf-reader-mcp-f794f7a/test/pdf/regionAnalysis.test.ts :24
const originalOpenAiApiKey = process.env['MCP_PDF_REGION_ANALYSIS_OPENAI_API_KEY'];
install hooks 6
- prepublishOnly SylphxAI-pdf-reader-mcp-f794f7a/package.json :99
bun run clean && bun run build:package && bun run package:smoke && bun run check:ts-production-absence && bun run check:prod-dependency-closure - prepublishOnly (suspicious) SylphxAI-pdf-reader-mcp-f794f7a/packages/citra-darwin-arm64/package.json :21
node -e "const fs=require('fs');const p=require('./package.json');const bin=p.citraNativeBinary;if(!bin||!fs.existsSync(bin)||fs.statSync(bin).size<1024){console.error('REFUSE PUBLISH: native binary m - prepublishOnly (suspicious) SylphxAI-pdf-reader-mcp-f794f7a/packages/citra-darwin-x64/package.json :21
node -e "const fs=require('fs');const p=require('./package.json');const bin=p.citraNativeBinary;if(!bin||!fs.existsSync(bin)||fs.statSync(bin).size<1024){console.error('REFUSE PUBLISH: native binary m - prepublishOnly (suspicious) SylphxAI-pdf-reader-mcp-f794f7a/packages/citra-linux-arm64-gnu/package.json :21
node -e "const fs=require('fs');const p=require('./package.json');const bin=p.citraNativeBinary;if(!bin||!fs.existsSync(bin)||fs.statSync(bin).size<1024){console.error('REFUSE PUBLISH: native binary m - prepublishOnly (suspicious) SylphxAI-pdf-reader-mcp-f794f7a/packages/citra-linux-x64-gnu/package.json :21
node -e "const fs=require('fs');const p=require('./package.json');const bin=p.citraNativeBinary;if(!bin||!fs.existsSync(bin)||fs.statSync(bin).size<1024){console.error('REFUSE PUBLISH: native binary m - prepublishOnly (suspicious) SylphxAI-pdf-reader-mcp-f794f7a/packages/citra-win32-x64-msvc/package.json :21
node -e "const fs=require('fs');const p=require('./package.json');const bin=p.citraNativeBinary;if(!bin||!fs.existsSync(bin)||fs.statSync(bin).size<1024){console.error('REFUSE PUBLISH: native binary m
declared dependencies 17
- @modelcontextprotocol/sdk@^1.29.0
- @biomejs/biome@^2.4.16
- @changesets/changelog-github@^0.7.0
- @changesets/cli@^2.31.0
- @types/node@^26.1.1
- @types/pngjs@^6.0.5
- bunup@0.16.31
- typescript@^7.0.2
- vitepress@^1.6.4
- pdfjs-dist@^6.0.227
- pngjs@^7.0.0
- zod@^4.4.3
show 5 more
- @sylphx/citra-darwin-arm64@5.0.0
- @sylphx/citra-darwin-x64@5.0.0
- @sylphx/citra-linux-arm64-gnu@5.0.0
- @sylphx/citra-linux-x64-gnu@5.0.0
- @sylphx/citra-win32-x64-msvc@5.0.0