Skip to main content
Glama
tobiasGuta

PrecisionPDF-MCP

by tobiasGuta

PrecisionPDF-MCP

A local PDF toolkit combining a PrecisionPDF MCP server for reviewable PDF annotations with an optional VS Code Learning Mode for interactive reading, exact document search, and Copilot-assisted explanations.

Current components: the MCP annotation server and the experimental PrecisionPDF Learning Mode v0.6.2 VS Code extension. Learning Mode has been tested on real course PDFs through the VS Code Extension Development Host. It is not a published VS Code Marketplace extension.

Features

  • Ten MCP tools: list_pdfs, read_pdf_page, propose_highlight, apply_highlight, list_annotations, render_pdf_page, propose_annotation_update, apply_annotation_update, propose_annotation_removal, and apply_annotation_removal.

  • Match normalized full word sequences with explicit ambiguity rejection.

  • Group word positions by PDF text line to create clean colored highlights.

  • Yellow, blue, green, pink and orange with configurable opacity.

  • 1-based page numbering; source SHA-256 fingerprint between proposal and application.

  • Confine all PDF and image I/O to a single workspace directory (including symlink resolution).

  • Refuse accidental original-file overwrite. Only explicitly update *-annotated.pdf copies.

  • Atomic replacement when saving an annotated working copy, so Okular can reload after each save.

  • Optional read-only VS Code PDF reader with word-level selection, page-aware tutoring, whole-PDF guided explanations, evidence navigation, and local exact-phrase search.

Related MCP server: PDF Memo MCP Server

Fedora install

  1. Ensure uv and okular are available (sudo dnf install uv okular).

  2. Clone this repo, then from inside it:

uv sync --extra dev
uv run pytest
  1. In the PDF workspace .vscode/mcp.json, configure:

{
  "servers": {
    "precisionpdf": {
      "type": "stdio",
      "command": "uv",
      "args": ["--directory", "/home/YOU/Development/PrecisionPDF-MCP", "run", "precisionpdf-mcp"],
      "env": {"PRECISIONPDF_ROOT": "${workspaceFolder}"}
    }
  }
}

Replace the source directory with your clone location. Open MCP: List Servers in VS Code and start precisionpdf.

VS Code Learning Mode — setup and use

The optional extension lives in vscode-learning/ and is separate from the MCP server. Learning Mode is read-only: selecting or automatically highlighting passages does not add annotations or modify your PDF. The MCP tools above handle persistent highlights.

Start Learning Mode (development installation)

This extension currently runs via VS Code's Extension Development Host rather than a Marketplace installation.

  1. Install VS Code, Python 3.11+, uv, and (for tests) Node.js 20+. From the repository root, run uv sync --extra dev.

  2. Open the extension folder in VS Code, not the repository root:

    cd /absolute/path/to/PrecisionPDF-MCP
    code vscode-learning
  3. Review and trust the workspace if prompted, then press F5 (or Run → Start Debugging). A separate Extension Development Host window opens.

  4. In that new window, choose File → Open Folder and open the folder containing your PDF files. This PDF folder is the PDF workspace, not the extension source folder.

  5. Open the Command Palette (Ctrl+Shift+P) and run PrecisionPDF: Open Learning Mode.

  6. Choose a PDF. The reader opens with the PDF on the left and learning tools on the right.

If the extension cannot find the repository, set precisionpdfLearning.repositoryPath in VS Code Settings to your clone's absolute path. If it cannot find uv, set precisionpdfLearning.uvPath to the executable shown by command -v uv.

Manual tutoring — understand a selected passage

  1. Choose Manual tutoring.

  2. Drag across words in the PDF to select the text you want to discuss.

  3. Enter a question, for example, “Explain this passage simply, with a practical example.”

  4. Click Ask with Copilot. VS Code may ask you to authorize this extension to use an available Copilot language model.

  5. Type follow-up questions using the composer at the bottom; Ctrl+Enter sends a question. Navigating pages or selecting a new passage retains the visible discussion, but changes the active evidence.

  6. Use New discussion to clear history, or Clear selection to drop only the active selection.

Copy prompt lets you manually paste a question with page context into another chat, such as Codex or Antigravity. This is not an automatic subscription or account integration.

Guided Reading — document-wide questions and highlighted evidence

  1. Choose Guided Reading.

  2. Enter a question, then select a Search behavior:

    • Automatic: a short term like black box or “Where does it mention ‘black box’?” is treated as a local exact-phrase search. Questions such as “Explain why deep learning models are called black boxes” use Copilot.

    • Find exact wording (local; no Copilot): scan all indexed pages for occurrences of the phrase. Click a result to jump to and temporarily highlight the match. The full match count is reported, with at most 150 clickable results.

    • Guided explanation (Copilot): ask, for example, “What are the main ideas of this PDF?” or “Why are neural networks difficult to interpret?”

  3. Click Find / Analyze.

  4. For Copilot-guided analysis, inspect the estimated number of model requests and approve before the extension sends extracted PDF text.

  5. Read the Answer from reviewed direct evidence and navigate its supporting passages with Previous, Next, or Play / Pause (default 12 seconds per step). Click an evidence item to navigate directly to its page.

  6. Optional contextual examples are shown separately, not as direct answers. After exact search, Explore related ideas with Copilot offers a separate non-exhaustive, AI-assisted tour.

Exact wording search and AI interpretation are different: exact search does not detect every semantic discussion of a concept, and the guided tour is not a complete inventory of relevant ideas. The reader checks document fingerprints, page positions, and exact source text before showing guided highlights, but these checks do not prove that an AI explanation is correct.

Copilot access, privacy, and limitations

  • Local exact search: no Copilot request or additional API key.

  • AI tutoring / guided explanations: use available GitHub Copilot models through VS Code's Language Model API; existing plan limits and quotas apply. The extension has no automatic Codex or Antigravity model integration.

  • The Python PDF-rendering bridge makes no outbound network requests. PDF text sent to Copilot can leave your machine. Manual questions are sent only after you click Ask; document-wide guided analysis requests explicit confirmation.

  • Best suited to ordinary selectable, horizontal PDF text. Scanned PDFs (no built-in OCR), encrypted documents, rotated pages, and complex layouts may be unsupported.

  • Guided whole-PDF analysis has limits of 60 pages, 350,000 indexed characters, 1,600 excerpts, and 30 analysis batches, plus synthesis and relevance-review requests. Oversized documents are rejected rather than summarized as though fully analyzed.

  • Neither mode changes the original PDF. To save a highlight or change an existing one, use the separate MCP annotation tools.

For detailed instructions, controls, limitations, and feature history, see vscode-learning/README.md.

Test Learning Mode

From the repository root:

npm --prefix vscode-learning test
uv run pytest -q

The JavaScript suite uses Node's built-in test runner and needs no npm install for this repository. Automated tests do not replace testing the webview and Copilot integration in the Extension Development Host.

Suggested MCP annotation workflow

  1. Ask the AI to call read_pdf_page to inspect a particular page.

  2. Ask it to call propose_highlight with a passage from the page. Inspect the returned matched text, page and rectangles.

  3. Approve and call apply_highlight using the exact returned fingerprint. Use an output filename such as lesson-annotated.pdf.

  4. Open the output in Okular and review it. Use render_pdf_page to capture a PNG.

  5. For the next highlight, propose against the annotated copy and apply with file=output_file=lesson-annotated.pdf, overwrite_annotated_copy=true. Keep the original separate.

Important: Proposal/apply separation and client-side manual tool permissions help user review but are not a cryptographic human-approval gate. AI clients may call permitted tools automatically; choose Manual permissions if you want to inspect each edit before it is allowed.

MCP annotation scope and limitations

  • The MCP annotation server does not provide OCR for scanned PDFs or independently decide which text is important. Learning Mode's experimental AI evidence selection is a separate feature.

  • Word-level matching, unusual layouts, and rotated text require care; validate highlights on complex PDFs.

  • No network calls made by the server. The AI host/provider may still send document text to its model; consider your privacy needs.

  • Verify each visual highlight in Okular before trusting it. PDFs with complex layout need further tests.

  • Annotation counts may include annotations that already existed in the source PDF.

  • Changes to *-annotated.pdf are atomic file replacements, not PDF-incremental saves. Keep backups as appropriate.

Edit or remove an existing highlight

Use list_annotations(file, page) on an existing *-annotated.pdf document to inspect page, xref, color, opacity, and stored annotation content. Identify the exact target before editing.

  • To recolor: call propose_annotation_update(file, page, xref, color, opacity?), review the current annotation and proposed values, then (only after user permission) pass the returned fingerprint to apply_annotation_update(file, page, xref, expected_fingerprint, color, opacity?). Omit opacity to preserve the original.

  • To remove: call propose_annotation_removal(file, page, xref), review the target, then (only after user permission) call apply_annotation_removal(file, page, xref, expected_fingerprint).

  • Proposals never change the PDF. Each application edits exactly one identified highlight in the existing annotated copy; it does not delete the file or rebuild highlights from scratch. It saves to a temporary PDF, verifies other annotations are unchanged, then atomically replaces that working copy.

  • Editing is limited to *-annotated.pdf files inside PRECISIONPDF_ROOT. Original PDFs, invalid colors, wrong-page or non-highlight xrefs, and stale SHA-256 fingerprints are rejected. Other annotations and their object references are checked after saving.

  • A successful edit changes the PDF fingerprint; run a new proposal before the next edit. Keep backups for important documents, and visually verify changes in Okular.

Client safety: MCP tool permission prompts remain the approval mechanism. The server checks the fingerprint and target but cannot independently authenticate a human's approval. Do not grant automatic write permission if you want to review each change. Do not use rm or a shell-based rebuild as a workaround for an unsupported edit.

License

MIT.

Available Tools

10 tools
apply_annotation_removalB

Remove ONE existing highlight after explicit user approval.

Refuses to edit original PDFs, stale files, and non-highlight annotations.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageYes
xrefYes
expected_fingerprintYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does add value by disclosing rejection conditions (original PDFs, stale files, non-highlight annotations) and an approval gate. However it omits the permission/auth model, what side effects or irreversible changes occur on success, and what a successful result looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the core action plus its approval gate are front-loaded. Efficient, though the brevity borders on under-specification for a 4-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 4 undocumented required params, no annotations, and no output schema, the description is thin. It should explain the fingerprint/identity param, what 'stale' means operationally, and the success/error outcome, none of which are covered elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and all four required parameters (file, page, xref, expected_fingerprint) are undocumented. The description only hints at the singular target via 'ONE existing highlight'; it never explains the fingerprint's role or how page/xref identify a highlight, so it fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove ONE existing highlight') with the singular scope emphasized, which is more precise than the bare name. It implies the apply/propose split vs siblings like propose_annotation_removal, but never names or contrasts them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a real workflow precondition ('after explicit user approval') and a set of exclusions ('refuses to edit original PDFs, stale files, and non-highlight annotations'). It stops short of naming propose_annotation_removal as the intended preparatory step, which is the most relevant alternative an agent would weigh.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_annotation_updateA

Change ONE existing highlight after explicit user approval.

Requires a fresh fingerprint and an existing *-annotated.pdf copy. Never use shell commands to delete or reconstruct the PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageYes
xrefYes
colorYes
opacityNo
expected_fingerprintYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses meaningful safety constraints (user approval required, fingerprint freshness, do not use shell commands to delete or reconstruct the PDF), but says nothing about reversibility, side effects on other annotations, or failure modes when the fingerprint is stale.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short lines, front-loaded with the core action, then prerequisites, then the safety prohibition. Every sentence earns its place and nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and 0% schema coverage across six parameters, the description covers workflow and safety but leaves parameter meaning and post-call effects unaddressed. Adequate on workflow, incomplete on invocation detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain six undocumented parameters. It only gestures at expected_fingerprint ('fresh fingerprint') and the file prerequisite ('*-annotated.pdf copy'); xref, page, color, and opacity are left entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Change ONE existing highlight'), and the qualifiers 'ONE' and 'existing' implicitly separate this from the create-oriented apply_highlight and the propose_* siblings. It stops short of naming an alternative outright, so it is clear but not maximally differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition for use ('after explicit user approval') plus setup requirements, a fresh fingerprint and an existing *-annotated.pdf copy. It does not explicitly route the agent to propose_annotation_update versus apply_annotation_update, so guidance is strong but not complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_highlightA

Apply a proposed exact-match highlight with a checked source fingerprint.

New output must not exist. For subsequent updates, the input and output may be the same *-annotated.pdf file when overwrite_annotated_copy is true. Do NOT call without showing the proposal to the user for review.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageYes
colorNoyellow
opacityNo
occurrenceNo
exact_quoteYes
output_fileYes
expected_fingerprintYes
overwrite_annotated_copyNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does disclose meaningful behavior: a precondition that the output must not exist, an overwrite path that permits input and output to be the same annotated PDF, and a human-review gate. It still doesn't say what happens on a fingerprint mismatch or what the call returns, which are notable gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each doing work, with the core action front-loaded and the constraints following. No filler or restatement of the tool name. Slightly dense phrasing but appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and 5 required parameters, the description covers the safety and workflow essentials but leaves key operational questions unanswered: how the fingerprint is verified/mismatch handling, and the meanings of the required quote/page params. Adequate for the happy path, incomplete for correct invocation in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters, so the description must compensate but largely doesn't. It touches only expected_fingerprint (the 'checked' fingerprint), file/output_file, and overwrite_annotated_copy; page, exact_quote, color, opacity, and occurrence are left entirely undocumented in both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource: applying a proposed exact-match highlight with a verified source fingerprint. This clearly differentiates it from the propose_* siblings (proposal step) and the apply_annotation_* siblings (updates/removals), even though it never names the sibling it pairs with. 'Exact-match' and 'checked source fingerprint' are concrete scoping details an agent can act on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states two explicit usage constraints: the output must not already exist, and the tool must not be called without showing the proposal to the user first. The overwrite_annotated_copy case is described for subsequent updates. What's missing is an explicit pointer to propose_highlight as the required preceding step, so the workflow is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_annotationsB

Read existing PDF annotations, including stored colors and object references.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only operation and discloses that colors and object references are returned, but it does not cover permissions, pagination, or whether the result spans all pages when page is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It efficiently conveys the core purpose and output details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no output schema or annotations, the description covers the basic purpose and some return content. However, it omits scope behavior for the optional page parameter, leaving a meaningful gap for callers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the 'file' or 'page' parameters. While the parameter names are relatively intuitive, the description adds no meaning beyond the schema and fails to clarify the optional page filter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('existing PDF annotations'), and adds output detail ('stored colors and object references'). This clearly distinguishes it from sibling tools like apply_highlight, read_pdf_page, and propose_annotation_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as read_pdf_page or list_pdfs. The description also omits any mention of the optional page parameter or when to omit it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pdfsA

List PDF files within the configured local workspace (up to 200).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It usefully discloses a hard cap ('up to 200'), which signals possible truncation, but omits whether listing recurses into subdirectories, what order results come in, or what happens when the workspace holds more than 200 files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the resource and scope front-loaded and the result cap appended. No filler or redundancy; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter listing tool with no output schema and no annotations, the description covers the essentials (what is listed, from where, and the cap). It stops short of describing the return shape (names vs. paths) or the behavior past the 200-file limit, but the low tool complexity makes this nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a no-arg tool applies. The description appropriately adds no invented parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('List') and resource ('PDF files') scoped to a 'configured local workspace,' which is unambiguous. It is inherently distinguishable from siblings like read_pdf_page, render_pdf_page, and list_annotations, which operate on page contents or annotations rather than enumerated files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to use this tool versus alternatives, nor any prerequisites (e.g., whether a workspace must be pre-configured). The intended discovery role is only inferable from the name and the sibling set, so guidance is essentially absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_annotation_removalB

Preview removal of ONE existing highlight without modifying the PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageYes
xrefYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the key trait: the PDF is not modified. That is a meaningful behavioral claim. It does not say what the preview returns, whether the proposal is persisted or handed to apply_annotation_removal, or how errors on a missing xref are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler; the preview semantics and the non-mutation guarantee are both front-loaded where an agent will read them first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so return-value explanation is not strictly required, and the non-destructive intent is clear. But with undocumented parameters and no annotation coverage, the definition leaves the agent guessing how to obtain a valid xref and what the preview actually produces.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters (file, page, xref) have 0% schema description coverage, so the description must compensate and it does not. 'ONE existing highlight' hints that a single annotation is targeted, but nothing explains that xref is the annotation reference, how it is obtained (e.g., from list_annotations), or the page/file conventions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Preview removal') plus a tightly scoped resource ('ONE existing highlight'), and the modifier 'without modifying the PDF' implicitly contrasts it with the apply-side siblings. It stops short of naming apply_annotation_removal directly, so sibling routing relies on inference from the propose/apply naming pattern.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Preview' implies the dry-run-before-apply workflow, which is adequate context for the propose/apply pair. However, it never states when to use this instead of apply_annotation_removal, nor any prerequisite (e.g., that a preview should precede the mutation).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_annotation_updateA

Preview changing ONE existing highlight's color or opacity; no edits.

Obtain page and xref from list_annotations. Review the proposed edit first.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageYes
xrefYes
colorYes
opacityNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it clearly discloses the key safety trait: this is a preview that makes no changes. It does not describe what the proposal artifact contains or whether it expires/is tied to a later apply, so the disclosure is good but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the scope constraint and the no-edit guarantee are front-loaded. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with no annotations, no output schema and 0% schema coverage, the description covers intent, a key parameter source and the non-destructive behavior, but says nothing about the returned proposal or how it links to the subsequent apply call. Adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for 5 parameters, so the description must compensate. It specifies the two mutable fields (color, opacity) and points the agent at list_annotations as the source of page and xref, but file semantics are left entirely to the schema and no format hints (color encoding, opacity range) are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Preview changing"), a scoped resource ("ONE existing highlight") and the exact fields involved (color or opacity), with "no edits" explicitly separating it from the apply_annotation_update sibling. An agent can distinguish this from apply_annotation_update and propose_highlight without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete prerequisite ("Obtain page and xref from list_annotations") and an ordering instruction ("Review the proposed edit first"), which effectively frames the propose-then-apply workflow. It does not name apply_annotation_update as the follow-up tool, so the alternative is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_highlightA

Find exact normalized words and report their locations WITHOUT modifying any PDF.

If passage repeats on the page, specify 1-based occurrence explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageYes
occurrenceNo
exact_quoteYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it does disclose the two most important behaviors: the search is normalization-aware and it performs no PDF mutation (read-only). It does not disclose failure behavior when no match is found, nor what a successful 'proposal' actually is, which matters for a propose/apply tool pair.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the read-only constraint front-loaded and the edge-case rule second. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations and no output schema, the description covers the mutation-safety question and the key parameter semantics, but omits the return shape ('locations' is vague) and the relationship to apply_highlight, leaving the propose/apply lifecycle incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for the non-obvious parameters: 'exact normalized words' clarifies exact_quote's matching semantics and the '1-based occurrence' rule clarifies occurrence's conditional purpose. file and page remain undocumented, but they are self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('find') and resource ('exact normalized words'), and its locations, plus a clear scope qualifier ('WITHOUT modifying any PDF'). This distinguishes it in spirit from apply_highlight, but the sibling is never named, so an agent must infer the propose/apply split from naming convention alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a conditional rule for the repeated-passage case ('specify 1-based occurrence explicitly'), which is genuine usage guidance. However it never says when to prefer this over apply_highlight or that the result is meant to feed a subsequent apply step, so the workflow context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_pdf_pageB

Read selectable text from a 1-based PDF page; includes SHA-256 document fingerprint.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does add real context: page numbering is 1-based and the returned data includes a SHA-256 document fingerprint. It omits what happens on pages without selectable text (e.g., scanned PDFs) and gives no error or pagination behavior, leaving notable gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no padding, front-loading the core action. Efficient, though the fingerprint tail could arguably be trimmed since there is no output schema to explain return values.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description covers the essentials (text extraction, 1-based indexing, fingerprint). It still lacks file-format guidance and scanned-PDF limitations that an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that 'page' is 1-based, which is genuinely useful, but says nothing about the required 'file' parameter (path vs. id, accepted formats), so half the parameters remain unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('selectable text from a 1-based PDF page'), which distinguishes it from the rendering sibling by emphasizing text extraction rather than image output. However, it never names render_pdf_page or any alternative, so the distinction is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance. The phrase 'selectable text' hints that image-only/scanned pages are out of scope, but the agent is left to infer this and gets no routing help against render_pdf_page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_pdf_pageB

Render a PDF page (including annotations) to a local PNG for visual review.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
pageNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that annotations are baked into the render and that output is a local PNG, but says nothing about where the file is written, whether it overwrites, or how the caller retrieves it — significant gaps for a tool that writes to disk.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the action front-loaded and no filler. Every clause (render, PDF page, annotations, local PNG, visual review) adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and no parameter descriptions, the definition leaves the agent unable to determine the output artifact's location or how to consume it. For a tool whose whole purpose is producing a file, that is a material omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters, so the description must compensate. It only implies a page is rendered and never clarifies the 'file' parameter (path? identifier?) or the 'page' parameter's 1-based indexing and default. No added meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource+output: renders a PDF page to a local PNG. The parenthetical '(including annotations)' and the phrase 'visual review' differentiate it implicitly from text-oriented siblings like read_pdf_page and list_pdfs, though no sibling is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'for visual review' implies when to reach for this rather than read_pdf_page, but there is no explicit when-to-use statement, no prerequisites, and no named alternative. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.1.0
    • First observedapply_annotation_removal
    • First observedapply_annotation_update
    • First observedapply_highlight
    • First observedlist_annotations
    • First observedlist_pdfs
    • First observedpropose_annotation_removal
    • First observedpropose_annotation_update
    • First observedpropose_highlight
    • First observedread_pdf_page
    • First observedrender_pdf_page

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, and the propose_/apply_ pairing cleanly separates preview from committed edits (highlight, update, removal). Read/list/render tools (list_pdfs, read_pdf_page, render_pdf_page, list_annotations) target different resource aspects with no overlap.

Naming Consistency5/5

All names follow a consistent snake_case verb_noun pattern (list_pdfs, read_pdf_page, propose_highlight, apply_annotation_update, etc.). The propose_*/apply_* convention is applied uniformly across the three annotation operations.

Tool Count5/5

Ten tools is well within the ideal range and each earns its place, covering discovery, reading, rendering, and the full propose/apply lifecycle without redundancy.

Completeness5/5

The surface covers the full highlight lifecycle (create/update/remove) via paired propose/apply tools, plus listing PDFs, reading text, rendering for review, and listing annotations. No obvious gaps for a local PDF annotation workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables safe interaction with PDFs, including listing files, extracting highlights with exact text, reading annotations and page text, and viewing metadata, all restricted to configured directories.
    2
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to inspect and work with PDF files entirely on the local machine, covering page counts, metadata, layout, encryption permissions, scan-vs-text detection, and page rendering. Generated results land in a temporary workspace as short artifact ids that can be chained between tools and exported to real folders on request.
    12
    45 PyPI
    1
    Apache 2.0