Skip to main content
Glama
DocImprint Document Intelligence

DocImprint Document Intelligence

Official

Table of contents


Related MCP server: DocImprint

At a glance

DocImprint turns any PDF or URL into a tamper-evident evidence bundle — structured data, AI-cited answers, and a cryptographic proof your agents can verify independently.

Input

PDF or URL

Output

ev_... evidence bundle — cited answers, artifact hashes, EIP-191 signature

Verify

client.verify() — free, no auth; optional Base L2 notarization via EAS


Choose your integration

Path

Best for

Start here

TypeScript SDK

Node agents, typed apps

Quick start

Python SDK

CrewAI, scripts

Quick start · CrewAI

MCP server

Claude, Cursor

MCP server

x402 USDC

Autonomous agents, no account

x402 USDC payments


See what you get

Every response includes a verifiable bundle ID, manifest hash, and cited answers tied to exact source quotes.

{
  "bundle_id": "ev_01jqv8k3m2x",
  "manifest_sha256": "a3f2c1d8e9b0476f8a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f",
  "signature": {
    "signature": "0x8f4e2a1b9c3d5e7f0a2b4c6d8e0f1a3b5c7d9e1f3a5b7c9d1e3f5a7b9c1d3e5f71c",
    "signer_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0EbE",
    "algorithm": "secp256k1-eip191"
  },
  "answer_cited": {
    "value": "Section 4.2 does not permit unilateral termination without 90 days written notice.",
    "citations": [
      {
        "quote": "Neither party may terminate this Agreement unilaterally except upon ninety (90) days prior written notice to the other party.",
        "paragraphs": [42],
        "page": 4,
        "confidence": "high"
      }
    ]
  },
  "artifacts": {
    "markdown": { "sha256": "b4e5f6a79876543210fedcba9876543210fedcba9876543210fedcba9876543210ab" },
    "manifest": { "sha256": "a3f2c1d8e9b0476f8a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e0f" }
  }
}

How it works

flowchart LR
  source[PDF or URL] --> extract[extract / qa / checkClaims]
  extract --> bundle[Evidence bundle ev_...]
  bundle --> artifacts[Artifacts + manifest SHA-256]
  bundle --> citations[Cited answers with quotes]
  artifacts --> verify[verify - free]
  verify --> notarize[notarize on Base L2 - optional]

Why not plain OCR or RAG?

Plain OCR

Vector RAG

DocImprint

Exact source quotes

No

Approximate

Yes, with paragraph refs

Tamper evidence

No

No

SHA-256 manifest + EIP-191 sig

Independent verify

No

No

verify() without API key

On-chain attestation

No

No

EAS on Base L2

Agent audit trail

No

No

Provenance + handoff (Python)


Use cases

Scenario

Method

Result

Contract Q&A

client.qa()

Cited answer with confidence score

Claim verification

client.checkClaims()

Per-claim verdict: supported / contradicted / not_found

Invoice intake

client.extract({ mode: 'invoice' })

Structured merchant, line items, totals — all cited

Compliance archive

legal_hold: true + notarize()

Immutable on-chain record, deletion blocked


Install

npm install docimprint           # TypeScript / Node.js
pip install docimprint           # Python REST client
pip install "docimprint[crewai]" # + 10 CrewAI tools & ProvenanceTracker

Python source lives in python/. PyPI: docimprint.


Quick start

Get an API key at docimprint.com — free tier available, no credit card required.

TypeScript

import { DocImprintClient } from 'docimprint'

const client = new DocImprintClient({ apiKey: 'dr_live_...' })

const result = await client.extract({
  source: 'https://example.com/contract.pdf',
  include: ['markdown', 'summary'],
})

console.log(result.bundle_id)        // ev_01j...
console.log(result.summary)          // AI-generated summary
console.log(result.manifest_sha256)  // tamper-evident hash
console.log(result.key_points_cited[0].citations[0].quote)

Python

from docimprint import DocImprintClient

client = DocImprintClient(api_key="dr_live_...")

result = client.extract(
    url="https://example.com/contract.pdf",
    include=["markdown", "summary"],
)
print(result["bundle_id"])         # ev_01j...
print(result["summary"])           # AI-generated summary
print(result["manifest_sha256"])   # tamper-evident hash

REST API (cURL)

curl -X POST https://api.docimprint.com/v1/extract \
  -H "Authorization: Bearer dr_live_..." \
  -H "Content-Type: application/json" \
  -d '{"source": "https://example.com/contract.pdf", "include": ["markdown", "summary"]}'

Examples

Runnable demos that show the full proof story — claim-check with citations, a stored evidence bundle, and a signed action receipt:

# Python
cd examples/python
pip install -e .
cp .env.example .env   # set DOCIMPRINT_API_KEY
python -m docimprint_examples.prove_what_agent_read

# TypeScript
cd examples/typescript
npm install
cp .env.example .env   # set DOCIMPRINT_API_KEY
npm run prove

See examples/README.md for both languages and what each artifact proves.


Features

Capability

Method / Mode

Description

Extract

extract()

Full evidence bundle — markdown, summary, cited key points, artifacts, manifest SHA-256

Invoice parsing

mode: 'invoice'

Structured InvoiceResult: merchant, date, line items, subtotal, tax, total — all with citations

Document comparison

mode: 'compare'

Diff two documents; supply previous_bundle_id to track changes

Structured extraction

mode: 'extract-structured'

Extract typed fields using a caller-defined JSON Schema

Summarize

summarize()

Prose summary + key points, each with cited paragraph references

Q&A

qa()

Single-question answer with inline citations and confidence score

Claim-check

checkClaims()

Per-claim verdict: supported / contradicted / not_found with evidence quotes

Translate

translate()

Source-cited translation to any language

Describe

describe()

AI description of image or PDF page contents

Collections

createCollection() + searchCollection() + askCollection()

Semantic search + cross-document RAG Q&A across multiple bundles

Verify

verify()

Cryptographic integrity check — manifest hash, EIP-191 signature, artifact hashes. Free, no auth

Notarize

notarize()

Write manifest SHA-256 to Base L2 via EAS — permanent, immutable attestation

MCP server

20 tools · 2 prompts

Native MCP for Claude, Cursor, and any MCP-compatible client

x402

REST X-Payment header

Pay per call in USDC — no account required


Why DocImprint?

  • 🔏 Cryptographic provenance — every bundle is EIP-191 signed at creation; optionally notarized on Base L2 via EAS for an immutable on-chain audit trail

  • 🤖 Agent-native by design — async jobs, webhooks, idempotency keys, and legal hold built into every request, not bolted on

  • 📎 Beyond OCR — citations carry exact quotes, paragraph indices, and confidence scores (high/medium/low), not just raw text

  • 🛠️ 10 CrewAI tools out of the box — research_tools(), legal_tools(), collection_tools() pre-grouped for common agent workflows

  • ⚖️ Compliance-ready — legal_hold, provenance logging, multi-agent handoff tracking, and on-chain notarization designed for legal and regulated industries

  • 💳 Flexible payment — monthly credit plans or pay-per-call USDC via x402, no account required


Agent-native features

DocImprint is designed for autonomous agent workflows, not just synchronous API calls.

// Fire-and-forget async extraction — returns job_id immediately
const job = await client.extract({
  source: 'https://example.com/large-report.pdf',
  async: true,
  webhook: 'https://your-agent.io/callback',
  idempotency_key: 'report-2025-q4',
  legal_hold: true,
})

const status = await client.getJob(job.job_id)
// { status: 'complete', bundle_id: 'ev_...', progress_pct: 100 }

// Monitor a URL for changes — get notified on diff
await client.extract({
  source: 'https://example.com/terms.html',
  monitor: { webhook: 'https://your-agent.io/changes', mode: 'diff' },
})

Python: provenance & multi-agent handoff tracking

client.log_provenance(bundle_id="ev_...", agent_id="agent-research", action="extracted")
client.handoff(bundle_id="ev_...", from_agent="agent-research", to_agent="agent-legal", note="ready for claim check")

CrewAI integration

10 purpose-built tools for CrewAI agents, organized into preset groups.

from docimprint.crewai import DocImprintToolkit

toolkit = DocImprintToolkit(
    api_key="dr_live_...",
    collection_id="col_...",  # required for collection tools
)

toolkit.research_tools()      # extract, summarize, qa, check_claims
toolkit.legal_tools()         # check_claims, verify, notarize
toolkit.collection_tools()    # search, ask, add_to_collection
toolkit.all_tools()           # all 10 tools

Tool

What it does

ExtractEvidenceTool

Full evidence bundle with citations and manifest hash

SummarizeTool

Key points with cited paragraph references

QATool

Cited answer with confidence score

CheckClaimsTool

Per-claim verdict: supported / contradicted / not_found

TranslateTool

Source-cited translation

VerifyBundleTool

Cryptographic integrity check — manifest, hash, signature

NotarizeTool

On-chain EAS attestation on Base L2

SearchCollectionTool

Semantic vector search across document collection

AskCollectionTool

Cross-document RAG Q&A with cited sources

AddToCollectionTool

Add bundle to collection and trigger async indexing

ProvenanceTracker wraps all tools to automatically log agent actions and bundle handoffs.

from docimprint.crewai import DocImprintToolkit, ProvenanceTracker

tracker = ProvenanceTracker(client=toolkit.client)
trackable = toolkit.trackable_tools()

DocImprintKnowledgeSource integrates with CrewAI's knowledge system for retrieval-augmented agents.


MCP server

DocImprint exposes a native MCP server for use with Claude, Cursor, and any MCP-compatible client.

Install via Smithery (one command):

npx @smithery/cli install docimprint --client claude

Manual config:

{
  "mcpServers": {
    "docimprint": {
      "type": "streamable-http",
      "url": "https://api.docimprint.com/mcp",
      "headers": {
        "Authorization": "Bearer dr_live_..."
      }
    }
  }
}

Transport: streamable-http · Auth: Bearer token · Listed on Smithery · Listed on Glama

MCP tools

URL tools — lean mode, no bundle stored:

Tool

Description

extract_url

Fetch URL → text + metadata

summarize_url

Fetch URL → prose summary + key points

qa_url

Fetch URL → cited answer to a specific question

translate_url

Fetch URL → translated content

Document tools — accepts base64 PDF or image:

Tool

Description

extract_text

OCR plain text from PDF / image

extract_tables

OCR tables as Markdown from PDF / image

parse_invoice

Structured invoice fields: merchant, line items, totals + citations

summarize_document

Prose summary + cited key points

check_claims

Per-claim verdict with evidence quotes

extract_structured

Extract typed fields using a caller-defined schema

Bundle & collections:

Tool

Description

verify_bundle

Cryptographic integrity check (returns signed action receipt)

get_bundle

Bundle metadata and notarization status (returns receipt)

notarize_bundle

On-chain EAS attestation on Base L2 (returns receipt)

list_receipts

List signed action receipts for a bundle

verify_action_receipt

Verify a receipt signature + manifest binding

create_collection

Create a named document collection

list_collections

List your collections

add_document_to_collection

Add bundle + trigger async indexing (returns receipt)

search_collection

Semantic vector search

ask_collection

Cross-document RAG Q&A

get_job_status

Poll async job (extract, indexing, batch)

get_quota

Check credit balance and plan status

Guided prompts: claim_check_workflow · invoice_intake

Resource: bundle://{bundle_id} — read bundle metadata directly


API reference

Full typed reference: docimprint.com/docs · OpenAPI

Category

Methods

Core

extract, verify, download, notarize, deleteBundle

Focused

summarize, qa, translate, checkClaims, describe

Extract modes

invoice, extract-structured, compare, store: false (lean)

Collections

createCollection, listCollections, addToCollection, searchCollection, askCollection

Jobs

getJob, listJobs, getQuota


Error handling

import { DocImprintClient, DocImprintError } from 'docimprint'

try {
  const result = await client.extract({ source: 'https://example.com/doc.pdf' })
} catch (err) {
  if (err instanceof DocImprintError) {
    console.error(err.message)    // human-readable error
    console.error(err.status)     // HTTP status code
    console.error(err.requestId)  // x-request-id for support
  }
}

Authentication

API key

Monthly credits via Stripe — sign up at docimprint.com, free tier available:

const client = new DocImprintClient({ apiKey: 'dr_live_...' })

x402 USDC payments

DocImprint supports the x402 open standard — pay per call in USDC on Base, straight from any EVM wallet. No account. No sign-up. No API key. Your agent can call the API autonomously without any human-managed credentials.

The API is x402-native: it returns a standard 402 Payment Required response with on-chain payment details, your client settles in USDC, and the request completes automatically. From $0.01 / call.

With @x402/fetch (automatic payment handling):

import { wrapFetchWithPayment } from '@x402/fetch'
import { createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { base } from 'viem/chains'

const account = privateKeyToAccount('0x...')
const wallet = createWalletClient({ account, chain: base, transport: http() })

const fetchWithPayment = wrapFetchWithPayment(fetch, wallet)

const res = await fetchWithPayment('https://api.docimprint.com/v1/summarize', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ source: 'https://example.com/report.pdf' }),
})
const data = await res.json()

Identity on owner routes: For GET/DELETE operations that require ownership (e.g. fetching your bundle), pass the payment-signature header from a prior payment response so the API can verify your wallet address without a separate login.


TypeScript

All request and response types are exported:

import type {
  ExtractRequest,
  ExtractResponse,
  Citation,
  CitedField,
  InvoiceResult,
  Job,
  Collection,
  SearchResult,
} from 'docimprint'

Pricing

Free tier available — no credit card required. Monthly credit plans via Stripe, or pay per call in USDC via x402. See pricing →


Community

Questions, integrations, and announcements: GitHub Discussions.


Available Tools

22 tools
account.quotaGet QuotaA
Read-onlyIdempotent

Get current credit balance and plan details for your API key. Free — no credits consumed. Check this before running credit-consuming operations (extract, summarize, etc.) to avoid QUOTA_EXCEEDED errors. Returns plan tier, billing period, and usage breakdown. Returns: { plan_id, billing_period (YYYY-MM), credits_used, credits_limit, credits_remaining, status: "active"|"suspended" } Example prompts:

  • "How many credits do I have left this month?"

  • "Check my current quota and plan status."

  • "Am I going to hit my credit limit soon?"

Inputs: no named parameters. Returns: status, plan_id, credits_used, credits_limit, +2 more

bundle.getGet Evidence BundleA
Read-onlyIdempotent

Retrieve metadata for an evidence bundle (ev_...) owned by your API key. Free — no credits consumed. Use for quick status/metadata lookups such as checking if a bundle is complete, finding its notarization status, or viewing retention/legal hold info. For deep cryptographic integrity verification (hash + signature + artifact checks), use bundle.verify instead. Also returns a signed action receipt (rcpt_...) binding this lookup to the bundle manifest — list with receipt.list, verify with receipt.verify. Returns: { bundle_id, source_url, mode, status: "pending"|"complete"|"failed", manifest_sha256, manifest_signature, signer_address, attestation_tx, attestation_at, eas_uid, parent_bundle_id, superseded_by, legal_hold: boolean, retention_until, created_at, receipt: ActionReceipt|null } Example prompts:

  • "Show me the metadata for bundle ev_550e8400."

  • "Check the status and notarization info of my evidence bundle."

  • "Get me the details of bundle [ev_id] — is it complete?"

Inputs: bundle_id (required). Returns: mode, status, eas_uid, receipt, +12 more

bundle.notarizeNotarize Bundle On-ChainA
Idempotent

Notarize an evidence bundle on-chain by writing its manifest SHA-256 to the blockchain (Base/EVM). Creates a permanent, tamper-evident on-chain record of the document fingerprint. If the bundle is already notarized, returns the existing attestation immediately (idempotent). Use when you need an immutable on-chain timestamp proving a document existed at a point in time. For quick integrity checks without on-chain cost, use bundle.verify instead. Also returns a signed action receipt (rcpt_...) binding this notarize call to the bundle manifest — list with receipt.list, verify with receipt.verify. PREREQUISITE: Bundle status must be "complete". Check status with bundle.get first. NOTE: Costs gas (ETH). The on-chain record is permanent and cannot be deleted even if the bundle is later purged. Returns: { bundle_id, attestation: { tx_hash, network, attested_at, key_id, eas_uid?, schema_uid? }, receipt: ActionReceipt|null } Example prompts:

  • "Notarize bundle ev_550e8400 on-chain so I have a permanent record."

  • "Put the fingerprint of my evidence bundle on the blockchain."

  • "Create an on-chain timestamp for this document bundle."

Inputs: bundle_id (required). Returns: receipt, bundle_id, attestation

bundle.verifyVerify Evidence BundleA
Read-onlyIdempotent

Verify the cryptographic integrity of an evidence bundle (ev_...) owned by your API key. Checks manifest hash, EIP-191 signature, and R2 artifact hashes. Free — no credits consumed. Use when you need to confirm a bundle has not been tampered with. For quick metadata lookups (without full crypto verification), use bundle.get instead. Also returns a signed action receipt (rcpt_...) binding this verify call to the bundle manifest — list with receipt.list, verify with receipt.verify. Returns: { valid: boolean, bundle_id, manifest_sha256, checks: { status, manifest_hash, signature, artifacts: [{ name, ok }] }, tampered: string[], signer_address: string|null, attestation_tx: string|null, url: string, captured_at: string, receipt: ActionReceipt|null } Example prompts:

  • "Verify the cryptographic integrity of bundle ev_550e8400."

  • "Is this evidence bundle still valid and untampered?"

  • "Deep-check the manifest hash and signature of my bundle."

Inputs: bundle_id (required). Returns: url, valid, checks, receipt, +6 more

collection.add_documentAdd Document to CollectionA
Idempotent

Add an evidence bundle to a collection and trigger async vector indexing. Use after collection.create to populate a collection with documents. Once indexed, documents become searchable via collection.search and collection.ask. Indexing is async — poll job.status with the returned job_id until status is "complete". Also returns a signed action receipt (rcpt_...) binding this add call to the bundle manifest — list with receipt.list, verify with receipt.verify. PREREQUISITE: Bundle must have status "complete" (check with bundle.get). Collection must be owned by your API key. Returns: { collection_id, bundle_id, job_id (poll for indexing completion), receipt: ActionReceipt|null } Example prompts:

  • "Add my contract bundle ev_550e8400 to the Q4 Contracts collection."

  • "Put this evidence bundle into my Due Diligence Docs collection for search."

  • "Add document [bundle_id] to collection [col_id] with a title."

Inputs: bundle_id (required), collection_id (required), title. Returns: job_id, receipt, bundle_id, collection_id

collection.askAsk CollectionA
Read-onlyIdempotent

Answer a question using RAG over a document collection. Retrieves relevant chunks then synthesizes a cited answer with source attribution. Use when you need a direct answer grounded in your collection documents. For raw matching chunks (without synthesis), use collection.search instead. For single-document Q&A, use url.qa instead. PREREQUISITE: Collection must be populated via collection.add_document and indexed before results appear. Returns: { answer: string, sources: [{ bundle_id, chunk_id }], retrieval: [{ bundle_id, chunk_id, text, score }] } Example prompts:

  • "What are the key terms of the service agreement in my collection?"

  • "Based on my due diligence docs, what are the main risks?"

  • "Answer this question using all documents in the Q4 Contracts collection."

Inputs: question (required), collection_id (required), max_chunks. Returns: answer, sources, retrieval

collection.createCreate CollectionA

Create a named document collection for cross-document semantic search and RAG-based Q&A. Free — no credits consumed. Use when you want to group related evidence bundles for unified search (collection.search) or question answering (collection.ask). NOTE: Collections start empty. Add evidence bundles with collection.add_document. Indexing is async — once complete, use collection.search or collection.ask. Returns: { collection_id: string (col_...), name: string } Example prompts:

  • "Create a collection called Q4 Contracts for my quarterly reports."

  • "Set up a new document group named Due Diligence Docs."

  • "Make a collection to organize my vendor agreements."

Inputs: name (required). Returns: name, collection_id

collection.listList CollectionsA
Read-onlyIdempotent

List all document collections owned by your API key. Free — no credits consumed. Use before collection.search or collection.ask when you need the collection ID. Supports pagination with limit and offset. Returns: { collections: [{ id, name, created_at }] } Example prompts:

  • "List all my document collections."

  • "Show me the collections I have created."

  • "What collections do I own? List them."

Inputs: limit, offset. Returns: collections

collection.searchSearch CollectionA
Read-onlyIdempotent

Semantic (vector) search across documents in a collection. Returns ranked text chunks with relevance scores. Free — no credits consumed. Use when you need raw matching chunks from a collection. For a synthesized cited answer from the same context, use collection.ask instead. PREREQUISITE: Collection must be populated via collection.add_document and async indexing must complete (poll job.status) before results appear. Returns: { results: [{ bundle_id, chunk_id, text, score: number (0–1), title? }] } Example prompts:

  • "Search my Q4 Contracts collection for mentions of liability cap."

  • "Find the clause about data retention in my due diligence docs."

  • "Search for revenue numbers across my quarterly reports."

Inputs: query (required), collection_id (required), limit. Returns: results

document.check_claimsCheck ClaimsA
Read-onlyIdempotent

Verify a list of factual claims against document text. Uses a quality AI model with citation-level evidence. Use after document.extract_text or url.extract when you need to validate specific factual assertions. For open-ended questions about a document, use url.qa instead. For multi-document investigation, use collection.ask. Typical workflow: document.extract_text/url.extract → document.check_claims. Returns: { claims: [{ claim, status: "supported"|"contradicted"|"not_found", evidence: { quote, paragraphs[] }, confidence: "high"|"medium"|"low" }], truncated: boolean } Example prompts:

  • "Check whether this contract mentions a liability cap of $1M."

  • "Verify these claims against the document: [claims list]."

  • "Does the report actually say revenue grew 23%?"

Inputs: text (required), claims (required), max_tokens. Returns: claims, truncated

document.extract_structuredExtract Structured DataA
Read-onlyIdempotent

Extract typed fields from document text using a caller-defined schema. Uses a quality AI model with retry logic. Use when you need specific data points from a document rather than full text. For invoices with known fields, document.parse_invoice (prebuilt schema) may be simpler. For general summarization, use document.summarize instead. Schema format: { "field_name": "type hint or description" } — e.g. { "contract_date": "ISO date", "party_a": "string", "penalty_usd": "number" }. Returns: { data: { : value }, data_cited: { : { value, confidence: "high"|"medium"|"low", citations: [{ quote, paragraphs[] }] } } } Example prompts:

  • "Extract the contract date, parties, and penalty amount from this agreement."

  • "Pull the vendor name, PO number, and total from this document."

  • "Get me all named fields from this form using my custom schema."

Inputs: text (required), schema (required), max_tokens. Returns: data, data_cited

document.extract_tablesExtract TablesA
Read-onlyIdempotent

Extract tables and forms as Markdown from a PDF or image (base64-encoded). Use when the document contains structured tabular data such as financial statements, data sheets, or forms. For plain prose documents, use document.extract_text instead. Returns: { pages: number, text: string } — text contains Markdown-formatted tables. Example prompts:

  • "Extract the tables from this financial statement."

  • "Pull the data table from this PDF into Markdown format."

  • "Get the tabular data from this form document."

Inputs: mime_type (required), document_base64 (required). Returns: text, pages

document.extract_textExtract TextA
Read-onlyIdempotent

Extract plain text from a PDF or image (base64-encoded). Use when you need raw text for downstream AI analysis (summarization, claim checking, structured extraction). For documents at a public URL, use url.extract instead (no base64 encoding needed). Returns: { pages: number, text: string } Example prompts:

  • "Extract the text from this scanned contract so I can search it."

  • "Give me the raw text from this PDF document."

  • "OCR this image and return the text content."

Inputs: mime_type (required), document_base64 (required). Returns: text, pages

document.parse_invoiceParse InvoiceA
Read-onlyIdempotent

Parse a receipt or invoice document into structured fields. Uses a quality AI model for accuracy. Use when you need to extract line items, totals, and merchant info from financial documents. For general document text, use document.extract_text instead. Returns: { invoice: { merchant, date (YYYY-MM-DD), line_items[], subtotal, tax, total }, cited: { : { value, confidence: "high"|"medium"|"low", citations: [{ quote, paragraphs[] }] } } } Example prompts:

  • "Parse this invoice and give me the line items and total."

  • "Extract the merchant, date, and amounts from this receipt."

  • "Read this scanned invoice and return structured data."

Inputs: mime_type (required), document_base64 (required). Returns: cited, invoice

document.summarizeSummarize DocumentA
Read-onlyIdempotent

Summarize document text into a prose summary and key points with citations. Use after document.extract_text or url.extract when you need a condensed understanding of a long document. For single-sentence Q&A, use url.qa instead. For extracting specific fields, use document.extract_structured. Typical workflow: document.extract_text/url.extract → document.summarize. Returns: { summary: string, key_points: string[], summary_cited: { value, confidence, citations[] }, key_points_cited: [{ text, citations[] }], truncated: boolean, strategy: "full"|"truncated"|"chunked" } Example prompts:

  • "Summarize this financial report and give me the key points."

  • "What are the main takeaways from this document?"

  • "Give me a concise summary of this 50-page report."

Inputs: text (required), max_tokens. Returns: summary, strategy, truncated, key_points, +2 more

job.statusGet Job StatusA
Read-onlyIdempotent

Poll the status of an async job (extract, indexing, batch). Free — no credits consumed. Use after collection.add_document or async extract to check when processing completes. Poll this endpoint in a loop until status is "complete" or "failed". Completed jobs include the bundle_id or result_json in the response. Jobs are created when you POST /v1/extract with a webhook, or when collection.add_document triggers async indexing. Returns: { id, type: "extract"|"extract_batch"|"index_collection", status: "queued"|"processing"|"complete"|"failed"|"cancelled", progress_pct: number (0–100), progress_message, bundle_id (when complete), result_json (when complete), error (when failed), created_at, completed_at } Example prompts:

  • "Check the status of my indexing job job_550e8400."

  • "Is my async extract job done yet?"

  • "Poll job [job_id] — what is the current progress?"

Inputs: job_id (required). Returns: id, type, error, status, +7 more

receipt.listList Action ReceiptsA
Read-onlyIdempotent

List signed action receipts (rcpt_...) for an evidence bundle owned by your API key. Free — no credits consumed. Use after bundle.get, bundle.verify, bundle.notarize, or collection.add_document to audit which agent actions were bound to which manifest hash. Pass a receipt_id from the results to receipt.verify for independent signature + manifest-binding verification. Returns: { bundle_id, receipts: [{ receipt_id, bundle_id, agent_id, action, manifest_sha256, signed_at, signature, signer_address, key_id, algorithm }], limit, offset } Example prompts:

  • "List all signed action receipts for bundle ev_550e8400."

  • "What agent actions have been recorded against this evidence bundle?"

  • "Show me the receipts for [bundle_id] so I can verify one."

Inputs: bundle_id (required), limit, offset. Returns: limit, offset, receipts, bundle_id

receipt.verifyVerify Action ReceiptA
Read-onlyIdempotent

Independently verify a signed action receipt (rcpt_...) returned by bundle.get, bundle.verify, bundle.notarize, collection.add_document, or listed via receipt.list. Free — no credits consumed. Proves both that the receipt signature is authentic AND that the manifest_sha256 it was bound to still matches the bundle's current manifest — i.e. that the action was not performed against a stale or since-superseded document. Use for third-party audit of an agent's prior actions. Returns: { receipt_id, valid: boolean, signature_valid: boolean, manifest_matches_current: boolean, bundle_id, agent_id, action, manifest_sha256, signer_address, signed_at, tampered: string[] } Example prompts:

  • "Verify action receipt rcpt_550e8400 is authentic and still current."

  • "Was this receipt signed against the real document, or a stale copy?"

Inputs: receipt_id (required). Returns: valid, action, agent_id, tampered, +7 more

url.extractExtract Text from URLA
Read-only

Fetch a public HTTPS URL and return extracted text and page metadata. Lean mode — no evidence bundle stored, no bundle_id returned. Use for raw text extraction from web pages and online documents. Use url.summarize for summaries, url.qa for Q&A, url.translate for translation, document.extract_text for base64 file uploads. Returns: { url, title, word_count, text, final_url (after redirects) } Example prompts:

  • "Extract the text from https://example.com/report.pdf for me."

  • "Get me the raw content of this web page: [URL]."

  • "Pull the text from this online article so I can analyze it."

Inputs: url (required). Returns: url, text, title, final_url, +1 more

url.qaAsk a Question About a URLA
Read-only

Fetch a public HTTPS URL and answer a specific question about its content. Lean mode — no bundle stored. Use when you have a precise question about a web page. For a broad summary, use url.summarize. For multi-document Q&A, use collection.ask instead. Returns: { url, answer, answer_cited: { value, confidence, citations[] }, confidence: "high"|"medium"|"low", truncated } Example prompts:

  • "What is the refund policy at https://docs.example.com/policy?"

  • "Look at [URL] and tell me what the delivery terms are."

  • "Answer this question based on the content of [URL]: [question]."

Inputs: url (required), question (required), max_tokens. Returns: url, answer, truncated, confidence, +1 more

url.summarizeSummarize URLA
Read-only

Fetch a public HTTPS URL and return a prose summary with key points. Lean mode — no bundle stored. Use when you need a condensed understanding of a web page. For raw text, use url.extract. For asking a specific question about a page, use url.qa. Returns: { url, summary, key_points: string[], truncated: boolean, word_count } Example prompts:

Inputs: url (required), max_tokens. Returns: url, summary, truncated, key_points, +1 more

url.translateTranslate URLA
Read-only

Fetch a public HTTPS URL and return its content translated into a target language. Lean mode — no bundle stored. Use when you need to understand web content in a different language. For extracting raw untranslated text, use url.extract instead. Returns: { url, translated_text, target_lang, truncated } Example prompts:

  • "Translate https://example.de/artikel into English for me."

  • "Translate this German article into Spanish: [URL]."

  • "Fetch [URL] and give me the French translation."

Inputs: url (required), target_lang (required), max_tokens. Returns: url, truncated, target_lang, translated_text

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 22 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose, with specific resource-action pairs (bundle, document, collection, url, receipt, job, account). Overlapping tools like document.extract_text and url.extract are explicitly differentiated by input type (base64 vs URL), and cross-references guide selection. No two tools appear to do the same thing.

    Naming Consistency5/5

    All tools follow a consistent `resource.action` pattern with lowercase and dots, and multi-word actions use snake_case (e.g., `extract_text`, `add_document`). The naming is uniform and predictable across all resources, making it easy to infer the function of an unfamiliar tool.

    Tool Count4/5

    With 22 tools, the set is slightly above the typical 3-15 range, but each tool earns its place given the multi-faceted domain (document extraction, URL analysis, bundle management, collections, receipts, jobs, account). No redundant tools exist; the count feels justified rather than bloated.

    Completeness4/5

    The tool surface covers core document intelligence workflows (extract, parse, summarize, check claims, structured extraction), URL operations, bundle verification and notarization, collection management with RAG Q&A, receipt audit, async job monitoring, and account quota. Minor gaps include lack of explicit bundle creation/deletion and collection deletion, but these are likely handled outside this server or are intentionally omitted.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      A
      maintenance
      Verifiable document intelligence for AI agents. Extract, summarize, claim-check, and notarize PDFs & URLs with cryptographic proofs, cross-document search, and on-chain attestation via Base L2.
      -
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Provides AI agents with comprehensive document parsing capabilities including PDF text extraction, OCR, HTML-to-markdown conversion, table extraction, and summarization, optimized for agent workflows.
      72 npm
      MIT