npm TypeScript analyzed 4.1.3

SylphxAI/pdf-reader-mcp

v4.1.3
npm

Give your AI agent eyes for PDFs — structured text, tables, OCR, visual evidence, and page-level citations via MCP. Native Rust, local-first.

maintainer
SylphxAI
licence
MIT
first seen
2026-05-22
last seen
2026-09-18
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
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.

skills & danger signals github-tarball
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

code evidence v4.1.3 · github-tarball
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