{"name":"com.docimprint/api","slug":"docimprint-api","title":null,"description":"AI document intelligence: extract, summarize, claim-check, notarize, and signed action receipts.","url":"https://mcp.market/server/docimprint-api","rating":null,"grade":"C","score":60,"certified":false,"status":"active","category":"scraping","tags":["scraping"],"presence":{"score":5,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-09-27T14:31:57.924Z","last_ok_at":"2026-09-27T14:31:57.924Z","latency_ms":2398},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/sawftware-apps/darkroom-gw","website":null,"version":"1.0.4","remotes":[{"type":"streamable-http","url":"https://api.docimprint.com/mcp","headers":[{"description":"Your DocImprint API key (dr_live_...)","isRequired":true,"value":"Bearer ${DOCIMPRINT_API_KEY}","isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"account.quota","description":"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.\nReturns: {\n  plan_id, billing_period (YYYY-MM),\n  credits_used, credits_limit, credits_remaining,\n  status: \"active\"|\"suspended\"\n}\nExample prompts:\n- \"How many credits do I have left this month?\"\n- \"Check my current quota and plan status.\"\n- \"Am I going to hit my credit limit soon?\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"bundle.get","description":"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.\nReturns: {\n  bundle_id, source_url, mode, status: \"pending\"|\"complete\"|\"failed\",\n  manifest_sha256, manifest_signature, signer_address,\n  attestation_tx, attestation_at, eas_uid,\n  parent_bundle_id, superseded_by,\n  legal_hold: boolean, retention_until, created_at,\n  receipt: ActionReceipt|null\n}\nExample prompts:\n- \"Show me the metadata for bundle ev_550e8400.\"\n- \"Check the status and notarization info of my evidence bundle.\"\n- \"Get me the details of bundle [ev_id] — is it complete?\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"bundle_id":{"type":"string","description":"Evidence bundle ID (ev_...) returned by extract or bundle.notarize. Example: \"ev_550e8400-e29b-41d4-a716-446655440000\""}},"required":["bundle_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"bundle.notarize","description":"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.\nPREREQUISITE: Bundle status must be \"complete\". Check status with bundle.get first.\nNOTE: Costs gas (ETH). The on-chain record is permanent and cannot be deleted even if the bundle is later purged.\nReturns: {\n  bundle_id,\n  attestation: { tx_hash, network, attested_at, key_id, eas_uid?, schema_uid? },\n  receipt: ActionReceipt|null\n}\nExample prompts:\n- \"Notarize bundle ev_550e8400 on-chain so I have a permanent record.\"\n- \"Put the fingerprint of my evidence bundle on the blockchain.\"\n- \"Create an on-chain timestamp for this document bundle.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"bundle_id":{"type":"string","description":"Evidence bundle ID (ev_...) to notarize. Bundle must have status \"complete\". Example: \"ev_550e8400-e29b-41d4-a716-446655440000\""}},"required":["bundle_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"bundle.verify","description":"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.\nReturns: {\n  valid: boolean,\n  bundle_id, manifest_sha256,\n  checks: { status, manifest_hash, signature, artifacts: [{ name, ok }] },\n  tampered: string[],\n  signer_address: string|null,\n  attestation_tx: string|null,\n  url: string, captured_at: string,\n  receipt: ActionReceipt|null\n}\nExample prompts:\n- \"Verify the cryptographic integrity of bundle ev_550e8400.\"\n- \"Is this evidence bundle still valid and untampered?\"\n- \"Deep-check the manifest hash and signature of my bundle.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"bundle_id":{"type":"string","description":"Evidence bundle ID (ev_...) returned by extract or notarize. Example: \"ev_550e8400-e29b-41d4-a716-446655440000\""}},"required":["bundle_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"collection.add_document","description":"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.\nPREREQUISITE: Bundle must have status \"complete\" (check with bundle.get). Collection must be owned by your API key.\nReturns: { collection_id, bundle_id, job_id (poll for indexing completion), receipt: ActionReceipt|null }\nExample prompts:\n- \"Add my contract bundle ev_550e8400 to the Q4 Contracts collection.\"\n- \"Put this evidence bundle into my Due Diligence Docs collection for search.\"\n- \"Add document [bundle_id] to collection [col_id] with a title.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"collection_id":{"type":"string","description":"Collection ID (col_...) returned by collection.create. Example: \"col_550e8400-e29b-41d4-a716-446655440000\""},"bundle_id":{"type":"string","description":"Evidence bundle ID (ev_...) to add. Bundle must have status \"complete\". Example: \"ev_550e8400-e29b-41d4-a716-446655440000\""},"title":{"description":"Optional display title for the document in this collection. Example: \"Q4 2025 Financial Report\"","type":"string"}},"required":["collection_id","bundle_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"collection.ask","description":"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.\nPREREQUISITE: Collection must be populated via collection.add_document and indexed before results appear.\nReturns: {\n  answer: string,\n  sources: [{ bundle_id, chunk_id }],\n  retrieval: [{ bundle_id, chunk_id, text, score }]\n}\nExample prompts:\n- \"What are the key terms of the service agreement in my collection?\"\n- \"Based on my due diligence docs, what are the main risks?\"\n- \"Answer this question using all documents in the Q4 Contracts collection.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"collection_id":{"type":"string","description":"Collection ID (col_...) returned by collection.create. Example: \"col_550e8400-e29b-41d4-a716-446655440000\""},"question":{"type":"string","description":"Natural language question to answer from collection documents. Example: \"What are the key terms of the service agreement?\""},"max_chunks":{"description":"Max chunks to retrieve for context (default 8). Increase for broad questions, decrease for precision. Example: 12","type":"number"}},"required":["collection_id","question"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"collection.create","description":"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).\nNOTE: Collections start empty. Add evidence bundles with collection.add_document. Indexing is async — once complete, use collection.search or collection.ask.\nReturns: { collection_id: string (col_...), name: string }\nExample prompts:\n- \"Create a collection called Q4 Contracts for my quarterly reports.\"\n- \"Set up a new document group named Due Diligence Docs.\"\n- \"Make a collection to organize my vendor agreements.\"","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable collection name. Example: \"Q4 Contracts\" or \"Due Diligence Docs\""}},"required":["name"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"collection.list","description":"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.\nReturns: { collections: [{ id, name, created_at }] }\nExample prompts:\n- \"List all my document collections.\"\n- \"Show me the collections I have created.\"\n- \"What collections do I own? List them.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"description":"Max collections to return (default 50, max 100). Example: 20","type":"number"},"offset":{"description":"Pagination offset (default 0). Example: 0","type":"number"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"collection.search","description":"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.\nPREREQUISITE: Collection must be populated via collection.add_document and async indexing must complete (poll job.status) before results appear.\nReturns: { results: [{ bundle_id, chunk_id, text, score: number (0–1), title? }] }\nExample prompts:\n- \"Search my Q4 Contracts collection for mentions of liability cap.\"\n- \"Find the clause about data retention in my due diligence docs.\"\n- \"Search for revenue numbers across my quarterly reports.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"collection_id":{"type":"string","description":"Collection ID (col_...) returned by collection.create. Example: \"col_550e8400-e29b-41d4-a716-446655440000\""},"query":{"type":"string","description":"Natural language search query. Example: \"What were the revenue numbers for Q4?\""},"limit":{"description":"Max chunks to return (default 10, max 50). Example: 5","type":"number"}},"required":["collection_id","query"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"document.check_claims","description":"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.\nTypical workflow: document.extract_text/url.extract → document.check_claims.\nReturns: {\n  claims: [{ claim, status: \"supported\"|\"contradicted\"|\"not_found\", evidence: { quote, paragraphs[] }, confidence: \"high\"|\"medium\"|\"low\" }],\n  truncated: boolean\n}\nExample prompts:\n- \"Check whether this contract mentions a liability cap of $1M.\"\n- \"Verify these claims against the document: [claims list].\"\n- \"Does the report actually say revenue grew 23%?\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"Document text to check claims against. Obtain via document.extract_text or url.extract. Example: \"ACME Corp was founded in 2010. Revenue exceeded $1M in 2024.\""},"claims":{"minItems":1,"type":"array","items":{"type":"string"},"description":"Factual statements to verify. Each claim is checked independently against the text. Example: [\"Founded in 2010\", \"Revenue exceeded $1M\"]"},"max_tokens":{"description":"Input length cap (1 token ≈ 4 chars). Default ~3000 tokens. Truncates input text, not the output. Example: 4000","type":"number"}},"required":["text","claims"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"document.extract_structured","description":"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.\nSchema format: { \"field_name\": \"type hint or description\" } — e.g. { \"contract_date\": \"ISO date\", \"party_a\": \"string\", \"penalty_usd\": \"number\" }.\nReturns: {\n  data: { <field>: value },\n  data_cited: { <field>: { value, confidence: \"high\"|\"medium\"|\"low\", citations: [{ quote, paragraphs[] }] } }\n}\nExample prompts:\n- \"Extract the contract date, parties, and penalty amount from this agreement.\"\n- \"Pull the vendor name, PO number, and total from this document.\"\n- \"Get me all named fields from this form using my custom schema.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"Document text to extract from. Obtain via document.extract_text or url.extract. Example: \"This Service Agreement is entered into on 2025-03-15 between ACME Corp and Beta Inc...\""},"schema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Field map: describe each field you want extracted with a type hint. Example: { \"total_usd\": \"number\", \"vendor\": \"string\", \"invoice_date\": \"ISO date YYYY-MM-DD\" }"},"max_tokens":{"description":"Input length cap (1 token ≈ 4 chars). Default ~2500 tokens. Truncates input, not output. Example: 3000","type":"number"}},"required":["text","schema"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"document.extract_tables","description":"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.\nReturns: { pages: number, text: string } — text contains Markdown-formatted tables.\nExample prompts:\n- \"Extract the tables from this financial statement.\"\n- \"Pull the data table from this PDF into Markdown format.\"\n- \"Get the tabular data from this form document.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"document_base64":{"type":"string","description":"Base64-encoded PDF or image bytes (max ~15 MB). Example: \"JVBERi0xLjcNJeLjz9MNCj...\" (truncated PDF base64)"},"mime_type":{"type":"string","enum":["application/pdf","image/jpeg","image/png","image/webp"],"description":"MIME type of the document. Example: \"application/pdf\" for PDF bank statements, \"image/jpeg\" for photo of a form."}},"required":["document_base64","mime_type"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"document.extract_text","description":"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).\nReturns: { pages: number, text: string }\nExample prompts:\n- \"Extract the text from this scanned contract so I can search it.\"\n- \"Give me the raw text from this PDF document.\"\n- \"OCR this image and return the text content.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"document_base64":{"type":"string","description":"Base64-encoded PDF or image bytes (max ~15 MB). Example: \"JVBERi0xLjcNJeLjz9MNCj...\" (truncated PDF base64)"},"mime_type":{"type":"string","enum":["application/pdf","image/jpeg","image/png","image/webp"],"description":"MIME type of the document. Example: \"application/pdf\" for PDFs, \"image/png\" for PNG screenshots."}},"required":["document_base64","mime_type"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"document.parse_invoice","description":"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.\nReturns: {\n  invoice: { merchant, date (YYYY-MM-DD), line_items[], subtotal, tax, total },\n  cited: { <field>: { value, confidence: \"high\"|\"medium\"|\"low\", citations: [{ quote, paragraphs[] }] } }\n}\nExample prompts:\n- \"Parse this invoice and give me the line items and total.\"\n- \"Extract the merchant, date, and amounts from this receipt.\"\n- \"Read this scanned invoice and return structured data.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"document_base64":{"type":"string","description":"Base64-encoded PDF or image of the receipt/invoice (max ~15 MB). Example: \"JVBERi0xLjcNJeLjz9MNCj...\" (base64-encoded invoice PDF)"},"mime_type":{"type":"string","enum":["application/pdf","image/jpeg","image/png","image/webp"],"description":"MIME type of the document. Example: \"application/pdf\" for scanned invoice PDF, \"image/jpeg\" for a receipt photo."}},"required":["document_base64","mime_type"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"document.summarize","description":"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.\nTypical workflow: document.extract_text/url.extract → document.summarize.\nReturns: {\n  summary: string,\n  key_points: string[],\n  summary_cited: { value, confidence, citations[] },\n  key_points_cited: [{ text, citations[] }],\n  truncated: boolean,\n  strategy: \"full\"|\"truncated\"|\"chunked\"\n}\nExample prompts:\n- \"Summarize this financial report and give me the key points.\"\n- \"What are the main takeaways from this document?\"\n- \"Give me a concise summary of this 50-page report.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"Document text to summarize. Obtain via document.extract_text or url.extract. Example: \"The Q4 2025 financial report shows revenue growth of 23% year-over-year...\""},"max_tokens":{"description":"Input length cap (1 token ≈ 4 chars). Default ~3000 tokens. Truncates input, not output. Example: 4000","type":"number"}},"required":["text"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"job.status","description":"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.\nJobs are created when you POST /v1/extract with a webhook, or when collection.add_document triggers async indexing.\nReturns: {\n  id, type: \"extract\"|\"extract_batch\"|\"index_collection\",\n  status: \"queued\"|\"processing\"|\"complete\"|\"failed\"|\"cancelled\",\n  progress_pct: number (0–100), progress_message,\n  bundle_id (when complete), result_json (when complete),\n  error (when failed), created_at, completed_at\n}\nExample prompts:\n- \"Check the status of my indexing job job_550e8400.\"\n- \"Is my async extract job done yet?\"\n- \"Poll job [job_id] — what is the current progress?\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"job_id":{"type":"string","description":"Job ID (job_...) returned by async extract or collection.add_document. Example: \"job_550e8400-e29b-41d4-a716-446655440000\""}},"required":["job_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"receipt.list","description":"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.\nReturns: {\n  bundle_id,\n  receipts: [{ receipt_id, bundle_id, agent_id, action, manifest_sha256, signed_at, signature, signer_address, key_id, algorithm }],\n  limit, offset\n}\nExample prompts:\n- \"List all signed action receipts for bundle ev_550e8400.\"\n- \"What agent actions have been recorded against this evidence bundle?\"\n- \"Show me the receipts for [bundle_id] so I can verify one.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"bundle_id":{"type":"string","description":"Evidence bundle ID (ev_...) to list receipts for. Example: \"ev_550e8400-e29b-41d4-a716-446655440000\""},"limit":{"description":"Max receipts to return (default 50, max 200). Example: 50","type":"number"},"offset":{"description":"Pagination offset (default 0). Example: 0","type":"number"}},"required":["bundle_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"receipt.verify","description":"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.\nReturns: {\n  receipt_id, valid: boolean,\n  signature_valid: boolean, manifest_matches_current: boolean,\n  bundle_id, agent_id, action, manifest_sha256,\n  signer_address, signed_at, tampered: string[]\n}\nExample prompts:\n- \"Verify action receipt rcpt_550e8400 is authentic and still current.\"\n- \"Was this receipt signed against the real document, or a stale copy?\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"receipt_id":{"type":"string","description":"Action receipt ID (rcpt_...) returned in the receipt field of another tool's response. Example: \"rcpt_550e8400-e29b-41d4-a716-446655440000\""}},"required":["receipt_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"url.extract","description":"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.\nReturns: { url, title, word_count, text, final_url (after redirects) }\nExample prompts:\n- \"Extract the text from https://example.com/report.pdf for me.\"\n- \"Get me the raw content of this web page: [URL].\"\n- \"Pull the text from this online article so I can analyze it.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public HTTPS URL to fetch and extract. Example: \"https://example.com/report.pdf\" or \"https://blog.example.com/article\""}},"required":["url"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"url.qa","description":"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.\nReturns: { url, answer, answer_cited: { value, confidence, citations[] }, confidence: \"high\"|\"medium\"|\"low\", truncated }\nExample prompts:\n- \"What is the refund policy at https://docs.example.com/policy?\"\n- \"Look at [URL] and tell me what the delivery terms are.\"\n- \"Answer this question based on the content of [URL]: [question].\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public HTTPS URL to fetch and question. Example: \"https://docs.example.com/policy\""},"question":{"type":"string","description":"Specific question to answer from the page content. Example: \"What is the refund policy?\""},"max_tokens":{"description":"Input length cap (1 token ≈ 4 chars). Truncates fetched page content, not the answer. Example: 4000","type":"number"}},"required":["url","question"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"url.summarize","description":"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.\nReturns: { url, summary, key_points: string[], truncated: boolean, word_count }\nExample prompts:\n- \"Summarize https://en.wikipedia.org/wiki/Artificial_intelligence for me.\"\n- \"Give me the key points from this blog post: [URL].\"\n- \"What is this article about? Summarize [URL].\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public HTTPS URL to fetch and summarize. Example: \"https://en.wikipedia.org/wiki/Artificial_intelligence\""},"max_tokens":{"description":"Input length cap (1 token ≈ 4 chars). Truncates fetched page content, not the output summary. Example: 4000","type":"number"}},"required":["url"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"url.translate","description":"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.\nReturns: { url, translated_text, target_lang, truncated }\nExample prompts:\n- \"Translate https://example.de/artikel into English for me.\"\n- \"Translate this German article into Spanish: [URL].\"\n- \"Fetch [URL] and give me the French translation.\"","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public HTTPS URL to fetch and translate. Example: \"https://example.de/artikel\""},"target_lang":{"type":"string","description":"ISO 639-1 language code for the target language. Example: \"es\" for Spanish, \"fr\" for French, \"de\" for German, \"ja\" for Japanese, \"zh\" for Chinese"},"max_tokens":{"description":"Input length cap (1 token ≈ 4 chars). Truncates fetched page content before translation. Example: 4000","type":"number"}},"required":["url","target_lang"],"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":60,"grade":"C","scanned_at":"2026-09-25T17:23:05.869Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T17:23:05.804Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 4084ms"]},"poisoning":{"score":15,"max":15,"notes":["22 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: repo not found"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[],"inputs":{"probes":[{"url":"https://api.docimprint.com/mcp","reachable":true,"authRequired":false,"latencyMs":4084,"serverInfo":{"name":"DocImprint","version":"1.0.6"}}],"packages":[],"repo":{"found":false,"owner":"sawftware-apps","repo":"darkroom-gw","error":"repo not found"},"icon":{"url":"https://docimprint.com/favicon.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":5}}}},"grade_history":[],"reviews":[]}