Skip to main content
Glama
okra-project

okraPDF PDF MCP server

Official
by okra-project

Verify Source

verify_source

Verifies a claim against PDF sources and presents an inline citation card with evidence, managing not-found and multiple-match cases.

Instructions

Verify a source for a PDF-backed claim and show the result as an inline citation state card. Default mode is high-level: pass document_id, claim, and any rough locator/pages/quote/number; Okra searches parsed nodes, handles not-found and multiple-candidate states, and when a confident source is found mints a durable link.okrapdf.com proof card with quote, page image, bbox focus, confidence, and reasons. For lawfully-reachable PDFs (permitted source or a doc the user has rights to; not paywalled/license-gated) that should not go through full upload/parse yet, pass pdf_url plus page/pages and the tool uses eager_url mode to fetch only that PDF page. verification_requirement defines what counts as verified and defaults to "bbox": eager_url must resolve coordinate evidence before proof is minted, and the API fails rather than returning a proof without bbox. Pass verification_requirement="text_match" only when a deterministic page-text/text-layer match is enough; that returns a found state without a durable proof link, page-image proof, or bbox-backed confidence claim. Use mode="exact_node" with nodes only when the agent is already grounded in exact query rows or node ids. This is the one model-facing source-verification tool; the result also includes create_view arguments for arranging returned card(s) in a custom view.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoAlias for pdf_url.
modeNoDefaults to high-level auto verification. Use exact_node only when passing query rows or node ids; eager_url is inferred when pdf_url is passed without document_id.
pageNoOne-based page number for eager URL verification.
claimNoSingle-source assertion to verify. Use sources[] for multiple citations.
labelNoOptional source label shown on the proof card.
nodesNoExact query row(s) or node id(s), only for mode="exact_node" or when the agent is already grounded.
pagesNoRough pages/ranges for a single citation, e.g. "2", "10-12", or "3,7".
quoteNoOptional direct quote, number, phrase, or printed value to find and cite.
locatorNoNatural-language source hint for a single citation.
pdf_urlNoLawfully-reachable HTTPS PDF URL (permitted source or a doc you have rights to; not paywalled/license-gated) for eager one-page source verification without upload/parse. Provide pages/page too.
sourcesNoBatch mode: verify several claims and render them as citation cards.
document_idNookraPDF document ID. Required unless every item in sources has document_id.
min_qualityNoRequested citation grade. Defaults to high, but low-confidence/not-found/multiple-candidate states are rendered as cards rather than hidden.
rough_pagesNoAlias for pages when the user says rough pages.
continue_on_errorNoWhen sources[] is used, keep verified citations even if one item cannot be matched.
verification_requirementNoWhat the caller considers verified. Defaults to bbox, which requires coordinate evidence before proof is minted. Use text_match only when a deterministic text-layer/page-text hit is sufficient and no proof link is needed.
Behavior5/5

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

With no annotations, the description carries full behavioral burden and succeeds: it discloses parsing of nodes, not-found and multiple-candidate handling, durable proof card contents (quote, page image, bbox focus, confidence, reasons), eager_url's single-page fetch behavior, and the API's failure rather than minting a proof without bbox. This is exceptional transparency for a complex 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?

The description is long but front-loaded with purpose and organized by mode, with each sentence adding behavioral distinction. It could be trimmed slightly, but for a 16-parameter tool with no annotations, the density is appropriate.

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

Completeness5/5

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

No output schema exists, yet the description compensates by describing success and reduced return states: durable proof links with quote/page image/bbox/confidence/reasons, text_match's found state without proof link, and failure behavior. It also mentions create_view integration, covering nearly all relevant aspects for a tool this complex.

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 coverage is 100%, so the baseline is 3, but the description adds operational meaning beyond field descriptions: it explains mode inference when pdf_url is passed without document_id, the behavior and default of verification_requirement, and alias relationships (url, rough_pages). This raises the parameter semantics above the baseline.

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 opens with a specific verb+resource+outcome: 'Verify a source for a PDF-backed claim and show the result as an inline citation state card.' It also explicitly states 'This is the one model-facing source-verification tool,' distinguishing it from siblings such as verify_block and view_document.

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?

The description gives clear when-to-use guidance for each mode: default auto requires document_id, eager_url is for lawfully-reachable PDFs that shouldn't be uploaded/parsed, exact_node is for when the agent is already grounded, and text_match is only for deterministic text-layer matches. It does not explicitly name exclusions versus other tools, but it strongly implies this is the sole source-verification entry point.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/okra-project/pdf-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server