{
  "server": "docimprint",
  "url": "https://api.docimprint.com/mcp",
  "date": "2026-09-29",
  "protocolVersion": "2025-11-25",
  "serverInfo": {
    "name": "DocImprint",
    "version": "1.0.6"
  },
  "listChangedDeclared": true,
  "toolCount": 22,
  "outputSchemaCoveragePct": 100,
  "tools": [
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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?\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {},
        "type": "object"
      },
      "name": "account.quota",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "billing_period": {
            "type": "string"
          },
          "credits_limit": {
            "type": "number"
          },
          "credits_remaining": {
            "type": "number"
          },
          "credits_used": {
            "type": "number"
          },
          "plan_id": {
            "type": "string"
          },
          "status": {
            "enum": [
              "active",
              "suspended",
              "revoked"
            ],
            "type": "string"
          }
        },
        "required": [
          "plan_id",
          "billing_period",
          "credits_used",
          "credits_limit",
          "credits_remaining",
          "status"
        ],
        "type": "object"
      },
      "title": "Get Quota"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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?\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "bundle_id": {
            "description": "Evidence bundle ID (ev_...) returned by extract or bundle.notarize. Example: \"ev_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          }
        },
        "required": [
          "bundle_id"
        ],
        "type": "object"
      },
      "name": "bundle.get",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "attestation_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "attestation_tx": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "bundle_id": {
            "type": "string"
          },
          "created_at": {
            "type": "string"
          },
          "eas_uid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "legal_hold": {
            "type": "boolean"
          },
          "manifest_sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "manifest_signature": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "mode": {
            "type": "string"
          },
          "parent_bundle_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "receipt": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "type": "string"
                  },
                  "agent_id": {
                    "type": "string"
                  },
                  "algorithm": {
                    "const": "secp256k1-eip191",
                    "type": "string"
                  },
                  "bundle_id": {
                    "type": "string"
                  },
                  "key_id": {
                    "type": "string"
                  },
                  "manifest_sha256": {
                    "type": "string"
                  },
                  "receipt_id": {
                    "type": "string"
                  },
                  "signature": {
                    "type": "string"
                  },
                  "signed_at": {
                    "type": "string"
                  },
                  "signer_address": {
                    "type": "string"
                  }
                },
                "required": [
                  "receipt_id",
                  "bundle_id",
                  "agent_id",
                  "action",
                  "manifest_sha256",
                  "signed_at",
                  "signature",
                  "signer_address",
                  "key_id",
                  "algorithm"
                ],
                "type": "object"
              },
              {
                "type": "null"
              }
            ]
          },
          "retention_until": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "signer_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_url": {
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "complete",
              "failed"
            ],
            "type": "string"
          },
          "superseded_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "bundle_id",
          "source_url",
          "mode",
          "status",
          "manifest_sha256",
          "manifest_signature",
          "signer_address",
          "attestation_tx",
          "attestation_at",
          "eas_uid",
          "parent_bundle_id",
          "superseded_by",
          "legal_hold",
          "retention_until",
          "created_at",
          "receipt"
        ],
        "type": "object"
      },
      "title": "Get Evidence Bundle"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "readOnlyHint": false
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "bundle_id": {
            "description": "Evidence bundle ID (ev_...) to notarize. Bundle must have status \"complete\". Example: \"ev_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          }
        },
        "required": [
          "bundle_id"
        ],
        "type": "object"
      },
      "name": "bundle.notarize",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "attestation": {
            "additionalProperties": false,
            "properties": {
              "attested_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "eas_uid": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "key_id": {
                "type": "string"
              },
              "network": {
                "type": "string"
              },
              "schema_uid": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tx_hash": {
                "type": "string"
              }
            },
            "required": [
              "tx_hash",
              "network",
              "attested_at"
            ],
            "type": "object"
          },
          "bundle_id": {
            "type": "string"
          },
          "receipt": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "type": "string"
                  },
                  "agent_id": {
                    "type": "string"
                  },
                  "algorithm": {
                    "const": "secp256k1-eip191",
                    "type": "string"
                  },
                  "bundle_id": {
                    "type": "string"
                  },
                  "key_id": {
                    "type": "string"
                  },
                  "manifest_sha256": {
                    "type": "string"
                  },
                  "receipt_id": {
                    "type": "string"
                  },
                  "signature": {
                    "type": "string"
                  },
                  "signed_at": {
                    "type": "string"
                  },
                  "signer_address": {
                    "type": "string"
                  }
                },
                "required": [
                  "receipt_id",
                  "bundle_id",
                  "agent_id",
                  "action",
                  "manifest_sha256",
                  "signed_at",
                  "signature",
                  "signer_address",
                  "key_id",
                  "algorithm"
                ],
                "type": "object"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "bundle_id",
          "attestation",
          "receipt"
        ],
        "type": "object"
      },
      "title": "Notarize Bundle On-Chain"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "bundle_id": {
            "description": "Evidence bundle ID (ev_...) returned by extract or notarize. Example: \"ev_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          }
        },
        "required": [
          "bundle_id"
        ],
        "type": "object"
      },
      "name": "bundle.verify",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "attestation_tx": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "bundle_id": {
            "type": "string"
          },
          "captured_at": {
            "type": "string"
          },
          "checks": {
            "additionalProperties": false,
            "properties": {
              "artifacts": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "actual": {
                      "type": "string"
                    },
                    "expected": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "ok": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "name",
                    "ok"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "attestation": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "manifest_hash": {
                "type": "boolean"
              },
              "signature": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "status": {
                "type": "boolean"
              }
            },
            "required": [
              "status",
              "manifest_hash",
              "signature",
              "artifacts",
              "attestation"
            ],
            "type": "object"
          },
          "manifest_sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "receipt": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "type": "string"
                  },
                  "agent_id": {
                    "type": "string"
                  },
                  "algorithm": {
                    "const": "secp256k1-eip191",
                    "type": "string"
                  },
                  "bundle_id": {
                    "type": "string"
                  },
                  "key_id": {
                    "type": "string"
                  },
                  "manifest_sha256": {
                    "type": "string"
                  },
                  "receipt_id": {
                    "type": "string"
                  },
                  "signature": {
                    "type": "string"
                  },
                  "signed_at": {
                    "type": "string"
                  },
                  "signer_address": {
                    "type": "string"
                  }
                },
                "required": [
                  "receipt_id",
                  "bundle_id",
                  "agent_id",
                  "action",
                  "manifest_sha256",
                  "signed_at",
                  "signature",
                  "signer_address",
                  "key_id",
                  "algorithm"
                ],
                "type": "object"
              },
              {
                "type": "null"
              }
            ]
          },
          "signer_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "tampered": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "url": {
            "type": "string"
          },
          "valid": {
            "type": "boolean"
          }
        },
        "required": [
          "bundle_id",
          "valid",
          "manifest_sha256",
          "checks",
          "tampered",
          "receipt"
        ],
        "type": "object"
      },
      "title": "Verify Evidence Bundle"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "readOnlyHint": false
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "bundle_id": {
            "description": "Evidence bundle ID (ev_...) to add. Bundle must have status \"complete\". Example: \"ev_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          },
          "collection_id": {
            "description": "Collection ID (col_...) returned by collection.create. Example: \"col_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          },
          "title": {
            "description": "Optional display title for the document in this collection. Example: \"Q4 2025 Financial Report\"",
            "type": "string"
          }
        },
        "required": [
          "collection_id",
          "bundle_id"
        ],
        "type": "object"
      },
      "name": "collection.add_document",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "bundle_id": {
            "type": "string"
          },
          "collection_id": {
            "type": "string"
          },
          "job_id": {
            "type": "string"
          },
          "receipt": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "type": "string"
                  },
                  "agent_id": {
                    "type": "string"
                  },
                  "algorithm": {
                    "const": "secp256k1-eip191",
                    "type": "string"
                  },
                  "bundle_id": {
                    "type": "string"
                  },
                  "key_id": {
                    "type": "string"
                  },
                  "manifest_sha256": {
                    "type": "string"
                  },
                  "receipt_id": {
                    "type": "string"
                  },
                  "signature": {
                    "type": "string"
                  },
                  "signed_at": {
                    "type": "string"
                  },
                  "signer_address": {
                    "type": "string"
                  }
                },
                "required": [
                  "receipt_id",
                  "bundle_id",
                  "agent_id",
                  "action",
                  "manifest_sha256",
                  "signed_at",
                  "signature",
                  "signer_address",
                  "key_id",
                  "algorithm"
                ],
                "type": "object"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "collection_id",
          "bundle_id",
          "job_id",
          "receipt"
        ],
        "type": "object"
      },
      "title": "Add Document to Collection"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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\u0026A, 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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "collection_id": {
            "description": "Collection ID (col_...) returned by collection.create. Example: \"col_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          },
          "max_chunks": {
            "description": "Max chunks to retrieve for context (default 8). Increase for broad questions, decrease for precision. Example: 12",
            "type": "number"
          },
          "question": {
            "description": "Natural language question to answer from collection documents. Example: \"What are the key terms of the service agreement?\"",
            "type": "string"
          }
        },
        "required": [
          "collection_id",
          "question"
        ],
        "type": "object"
      },
      "name": "collection.ask",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "answer": {
            "additionalProperties": false,
            "properties": {
              "citations": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "artifact": {
                      "type": "string"
                    },
                    "char_end": {
                      "type": "number"
                    },
                    "char_start": {
                      "type": "number"
                    },
                    "chunk_id": {
                      "type": "string"
                    },
                    "confidence": {
                      "enum": [
                        "high",
                        "medium",
                        "low"
                      ],
                      "type": "string"
                    },
                    "page": {
                      "type": "number"
                    },
                    "paragraphs": {
                      "items": {
                        "type": "number"
                      },
                      "type": "array"
                    },
                    "quote": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "quote",
                    "paragraphs",
                    "confidence"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "confidence": {
                "enum": [
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              "value": {}
            },
            "required": [
              "value",
              "confidence",
              "citations"
            ],
            "type": "object"
          },
          "retrieval": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "bundle_id": {
                  "type": "string"
                },
                "chunk_id": {
                  "type": "string"
                },
                "score": {
                  "type": "number"
                },
                "text": {
                  "type": "string"
                }
              },
              "required": [
                "bundle_id",
                "chunk_id",
                "text",
                "score"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "sources": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "bundle_id": {
                  "type": "string"
                },
                "chunk_id": {
                  "type": "string"
                }
              },
              "required": [
                "bundle_id",
                "chunk_id"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "answer",
          "sources",
          "retrieval"
        ],
        "type": "object"
      },
      "title": "Ask Collection"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "readOnlyHint": false
      },
      "description": "Create a named document collection for cross-document semantic search and RAG-based Q\u0026A. 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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "name": {
            "description": "Human-readable collection name. Example: \"Q4 Contracts\" or \"Due Diligence Docs\"",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "collection.create",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "collection_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "collection_id",
          "name"
        ],
        "type": "object"
      },
      "title": "Create Collection"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "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"
          }
        },
        "type": "object"
      },
      "name": "collection.list",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "collections": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "created_at": {
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "name",
                "created_at"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "collections"
        ],
        "type": "object"
      },
      "title": "List Collections"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "collection_id": {
            "description": "Collection ID (col_...) returned by collection.create. Example: \"col_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          },
          "limit": {
            "description": "Max chunks to return (default 10, max 50). Example: 5",
            "type": "number"
          },
          "query": {
            "description": "Natural language search query. Example: \"What were the revenue numbers for Q4?\"",
            "type": "string"
          }
        },
        "required": [
          "collection_id",
          "query"
        ],
        "type": "object"
      },
      "name": "collection.search",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "bundle_id": {
                  "type": "string"
                },
                "chunk_id": {
                  "type": "string"
                },
                "score": {
                  "type": "number"
                },
                "text": {
                  "type": "string"
                }
              },
              "required": [
                "bundle_id",
                "chunk_id",
                "text",
                "score"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "results"
        ],
        "type": "object"
      },
      "title": "Search Collection"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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%?\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "claims": {
            "description": "Factual statements to verify. Each claim is checked independently against the text. Example: [\"Founded in 2010\", \"Revenue exceeded $1M\"]",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "type": "array"
          },
          "max_tokens": {
            "description": "Input length cap (1 token ≈ 4 chars). Default ~3000 tokens. Truncates input text, not the output. Example: 4000",
            "type": "number"
          },
          "text": {
            "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.\"",
            "type": "string"
          }
        },
        "required": [
          "text",
          "claims"
        ],
        "type": "object"
      },
      "name": "document.check_claims",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "claims": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "claim": {
                  "type": "string"
                },
                "confidence": {
                  "enum": [
                    "high",
                    "medium",
                    "low"
                  ],
                  "type": "string"
                },
                "evidence": {
                  "additionalProperties": false,
                  "properties": {
                    "paragraphs": {
                      "items": {
                        "type": "number"
                      },
                      "type": "array"
                    },
                    "quote": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "quote",
                    "paragraphs"
                  ],
                  "type": "object"
                },
                "status": {
                  "enum": [
                    "supported",
                    "contradicted",
                    "not_found"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "claim",
                "status",
                "evidence",
                "confidence"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "claims",
          "truncated"
        ],
        "type": "object"
      },
      "title": "Check Claims"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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: { \u003cfield\u003e: value },\n  data_cited: { \u003cfield\u003e: { 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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "max_tokens": {
            "description": "Input length cap (1 token ≈ 4 chars). Default ~2500 tokens. Truncates input, not output. Example: 3000",
            "type": "number"
          },
          "schema": {
            "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\" }",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "text": {
            "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...\"",
            "type": "string"
          }
        },
        "required": [
          "text",
          "schema"
        ],
        "type": "object"
      },
      "name": "document.extract_structured",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "data": {
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "data_cited": {
            "additionalProperties": {
              "additionalProperties": false,
              "properties": {
                "citations": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "artifact": {
                        "type": "string"
                      },
                      "char_end": {
                        "type": "number"
                      },
                      "char_start": {
                        "type": "number"
                      },
                      "chunk_id": {
                        "type": "string"
                      },
                      "confidence": {
                        "enum": [
                          "high",
                          "medium",
                          "low"
                        ],
                        "type": "string"
                      },
                      "page": {
                        "type": "number"
                      },
                      "paragraphs": {
                        "items": {
                          "type": "number"
                        },
                        "type": "array"
                      },
                      "quote": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "quote",
                      "paragraphs",
                      "confidence"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "confidence": {
                  "enum": [
                    "high",
                    "medium",
                    "low"
                  ],
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "value",
                "confidence",
                "citations"
              ],
              "type": "object"
            },
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          }
        },
        "required": [
          "data",
          "data_cited"
        ],
        "type": "object"
      },
      "title": "Extract Structured Data"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "document_base64": {
            "description": "Base64-encoded PDF or image bytes (max ~15 MB). Example: \"JVBERi0xLjcNJeLjz9MNCj...\" (truncated PDF base64)",
            "type": "string"
          },
          "mime_type": {
            "description": "MIME type of the document. Example: \"application/pdf\" for PDF bank statements, \"image/jpeg\" for photo of a form.",
            "enum": [
              "application/pdf",
              "image/jpeg",
              "image/png",
              "image/webp"
            ],
            "type": "string"
          }
        },
        "required": [
          "document_base64",
          "mime_type"
        ],
        "type": "object"
      },
      "name": "document.extract_tables",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "pages": {
            "type": "number"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "pages",
          "text"
        ],
        "type": "object"
      },
      "title": "Extract Tables"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "document_base64": {
            "description": "Base64-encoded PDF or image bytes (max ~15 MB). Example: \"JVBERi0xLjcNJeLjz9MNCj...\" (truncated PDF base64)",
            "type": "string"
          },
          "mime_type": {
            "description": "MIME type of the document. Example: \"application/pdf\" for PDFs, \"image/png\" for PNG screenshots.",
            "enum": [
              "application/pdf",
              "image/jpeg",
              "image/png",
              "image/webp"
            ],
            "type": "string"
          }
        },
        "required": [
          "document_base64",
          "mime_type"
        ],
        "type": "object"
      },
      "name": "document.extract_text",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "pages": {
            "type": "number"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "pages",
          "text"
        ],
        "type": "object"
      },
      "title": "Extract Text"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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: { \u003cfield\u003e: { 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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "document_base64": {
            "description": "Base64-encoded PDF or image of the receipt/invoice (max ~15 MB). Example: \"JVBERi0xLjcNJeLjz9MNCj...\" (base64-encoded invoice PDF)",
            "type": "string"
          },
          "mime_type": {
            "description": "MIME type of the document. Example: \"application/pdf\" for scanned invoice PDF, \"image/jpeg\" for a receipt photo.",
            "enum": [
              "application/pdf",
              "image/jpeg",
              "image/png",
              "image/webp"
            ],
            "type": "string"
          }
        },
        "required": [
          "document_base64",
          "mime_type"
        ],
        "type": "object"
      },
      "name": "document.parse_invoice",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "cited": {
            "additionalProperties": {
              "additionalProperties": false,
              "properties": {
                "citations": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "artifact": {
                        "type": "string"
                      },
                      "char_end": {
                        "type": "number"
                      },
                      "char_start": {
                        "type": "number"
                      },
                      "chunk_id": {
                        "type": "string"
                      },
                      "confidence": {
                        "enum": [
                          "high",
                          "medium",
                          "low"
                        ],
                        "type": "string"
                      },
                      "page": {
                        "type": "number"
                      },
                      "paragraphs": {
                        "items": {
                          "type": "number"
                        },
                        "type": "array"
                      },
                      "quote": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "quote",
                      "paragraphs",
                      "confidence"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "confidence": {
                  "enum": [
                    "high",
                    "medium",
                    "low"
                  ],
                  "type": "string"
                },
                "value": {}
              },
              "required": [
                "value",
                "confidence",
                "citations"
              ],
              "type": "object"
            },
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "invoice": {
            "additionalProperties": false,
            "properties": {
              "date": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "line_items": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "description": {
                      "type": "string"
                    },
                    "quantity": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "total": {
                      "type": "number"
                    },
                    "unit_price": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "description",
                    "quantity",
                    "unit_price",
                    "total"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "merchant": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "subtotal": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tax": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "total": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "merchant",
              "date",
              "line_items",
              "subtotal",
              "tax",
              "total"
            ],
            "type": "object"
          }
        },
        "required": [
          "invoice",
          "cited"
        ],
        "type": "object"
      },
      "title": "Parse Invoice"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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\u0026A, 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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "max_tokens": {
            "description": "Input length cap (1 token ≈ 4 chars). Default ~3000 tokens. Truncates input, not output. Example: 4000",
            "type": "number"
          },
          "text": {
            "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...\"",
            "type": "string"
          }
        },
        "required": [
          "text"
        ],
        "type": "object"
      },
      "name": "document.summarize",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "key_points": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "key_points_cited": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "citations": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "artifact": {
                        "type": "string"
                      },
                      "char_end": {
                        "type": "number"
                      },
                      "char_start": {
                        "type": "number"
                      },
                      "chunk_id": {
                        "type": "string"
                      },
                      "confidence": {
                        "enum": [
                          "high",
                          "medium",
                          "low"
                        ],
                        "type": "string"
                      },
                      "page": {
                        "type": "number"
                      },
                      "paragraphs": {
                        "items": {
                          "type": "number"
                        },
                        "type": "array"
                      },
                      "quote": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "quote",
                      "paragraphs",
                      "confidence"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "text": {
                  "type": "string"
                }
              },
              "required": [
                "text",
                "citations"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "strategy": {
            "enum": [
              "full",
              "truncated",
              "chunked"
            ],
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "summary_cited": {
            "additionalProperties": false,
            "properties": {
              "citations": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "artifact": {
                      "type": "string"
                    },
                    "char_end": {
                      "type": "number"
                    },
                    "char_start": {
                      "type": "number"
                    },
                    "chunk_id": {
                      "type": "string"
                    },
                    "confidence": {
                      "enum": [
                        "high",
                        "medium",
                        "low"
                      ],
                      "type": "string"
                    },
                    "page": {
                      "type": "number"
                    },
                    "paragraphs": {
                      "items": {
                        "type": "number"
                      },
                      "type": "array"
                    },
                    "quote": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "quote",
                    "paragraphs",
                    "confidence"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "confidence": {
                "enum": [
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              "value": {}
            },
            "required": [
              "value",
              "confidence",
              "citations"
            ],
            "type": "object"
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "summary",
          "key_points",
          "summary_cited",
          "key_points_cited",
          "truncated",
          "strategy"
        ],
        "type": "object"
      },
      "title": "Summarize Document"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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?\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "job_id": {
            "description": "Job ID (job_...) returned by async extract or collection.add_document. Example: \"job_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          }
        },
        "required": [
          "job_id"
        ],
        "type": "object"
      },
      "name": "job.status",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "bundle_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "id": {
            "type": "string"
          },
          "progress_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "progress_pct": {
            "type": "number"
          },
          "result_json": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "enum": [
              "queued",
              "processing",
              "complete",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "type": {
            "enum": [
              "extract",
              "extract_batch",
              "index_collection"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "type",
          "status",
          "progress_pct",
          "progress_message",
          "bundle_id",
          "collection_id",
          "result_json",
          "error",
          "created_at",
          "completed_at"
        ],
        "type": "object"
      },
      "title": "Get Job Status"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "bundle_id": {
            "description": "Evidence bundle ID (ev_...) to list receipts for. Example: \"ev_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          },
          "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"
        ],
        "type": "object"
      },
      "name": "receipt.list",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "bundle_id": {
            "type": "string"
          },
          "limit": {
            "type": "number"
          },
          "offset": {
            "type": "number"
          },
          "receipts": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "action": {
                  "type": "string"
                },
                "agent_id": {
                  "type": "string"
                },
                "algorithm": {
                  "const": "secp256k1-eip191",
                  "type": "string"
                },
                "bundle_id": {
                  "type": "string"
                },
                "key_id": {
                  "type": "string"
                },
                "manifest_sha256": {
                  "type": "string"
                },
                "receipt_id": {
                  "type": "string"
                },
                "signature": {
                  "type": "string"
                },
                "signed_at": {
                  "type": "string"
                },
                "signer_address": {
                  "type": "string"
                }
              },
              "required": [
                "receipt_id",
                "bundle_id",
                "agent_id",
                "action",
                "manifest_sha256",
                "signed_at",
                "signature",
                "signer_address",
                "key_id",
                "algorithm"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "bundle_id",
          "receipts",
          "limit",
          "offset"
        ],
        "type": "object"
      },
      "title": "List Action Receipts"
    },
    {
      "annotations": {
        "idempotentHint": true,
        "readOnlyHint": true
      },
      "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?\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "receipt_id": {
            "description": "Action receipt ID (rcpt_...) returned in the receipt field of another tool's response. Example: \"rcpt_550e8400-e29b-41d4-a716-446655440000\"",
            "type": "string"
          }
        },
        "required": [
          "receipt_id"
        ],
        "type": "object"
      },
      "name": "receipt.verify",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "action": {
            "type": "string"
          },
          "agent_id": {
            "type": "string"
          },
          "bundle_id": {
            "type": "string"
          },
          "manifest_matches_current": {
            "type": "boolean"
          },
          "manifest_sha256": {
            "type": "string"
          },
          "receipt_id": {
            "type": "string"
          },
          "signature_valid": {
            "type": "boolean"
          },
          "signed_at": {
            "type": "string"
          },
          "signer_address": {
            "type": "string"
          },
          "tampered": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "valid": {
            "type": "boolean"
          }
        },
        "required": [
          "receipt_id",
          "valid",
          "signature_valid",
          "manifest_matches_current",
          "bundle_id",
          "agent_id",
          "action",
          "manifest_sha256",
          "signer_address",
          "signed_at",
          "tampered"
        ],
        "type": "object"
      },
      "title": "Verify Action Receipt"
    },
    {
      "annotations": {
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": true
      },
      "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\u0026A, 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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "url": {
            "description": "Public HTTPS URL to fetch and extract. Example: \"https://example.com/report.pdf\" or \"https://blog.example.com/article\"",
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "url.extract",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "final_url": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "word_count": {
            "type": "number"
          }
        },
        "required": [
          "url",
          "text"
        ],
        "type": "object"
      },
      "title": "Extract Text from URL"
    },
    {
      "annotations": {
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": true
      },
      "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\u0026A, 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].\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "max_tokens": {
            "description": "Input length cap (1 token ≈ 4 chars). Truncates fetched page content, not the answer. Example: 4000",
            "type": "number"
          },
          "question": {
            "description": "Specific question to answer from the page content. Example: \"What is the refund policy?\"",
            "type": "string"
          },
          "url": {
            "description": "Public HTTPS URL to fetch and question. Example: \"https://docs.example.com/policy\"",
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "url",
          "question"
        ],
        "type": "object"
      },
      "name": "url.qa",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "answer": {
            "type": "string"
          },
          "answer_cited": {
            "additionalProperties": false,
            "properties": {
              "citations": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "artifact": {
                      "type": "string"
                    },
                    "char_end": {
                      "type": "number"
                    },
                    "char_start": {
                      "type": "number"
                    },
                    "chunk_id": {
                      "type": "string"
                    },
                    "confidence": {
                      "enum": [
                        "high",
                        "medium",
                        "low"
                      ],
                      "type": "string"
                    },
                    "page": {
                      "type": "number"
                    },
                    "paragraphs": {
                      "items": {
                        "type": "number"
                      },
                      "type": "array"
                    },
                    "quote": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "quote",
                    "paragraphs",
                    "confidence"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "confidence": {
                "enum": [
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              "value": {}
            },
            "required": [
              "value",
              "confidence",
              "citations"
            ],
            "type": "object"
          },
          "confidence": {
            "enum": [
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "truncated": {
            "type": "boolean"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "url",
          "truncated"
        ],
        "type": "object"
      },
      "title": "Ask a Question About a URL"
    },
    {
      "annotations": {
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": true
      },
      "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].\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "max_tokens": {
            "description": "Input length cap (1 token ≈ 4 chars). Truncates fetched page content, not the output summary. Example: 4000",
            "type": "number"
          },
          "url": {
            "description": "Public HTTPS URL to fetch and summarize. Example: \"https://en.wikipedia.org/wiki/Artificial_intelligence\"",
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "url.summarize",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "key_points": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "summary": {
            "type": "string"
          },
          "truncated": {
            "type": "boolean"
          },
          "url": {
            "type": "string"
          },
          "word_count": {
            "type": "number"
          }
        },
        "required": [
          "url",
          "truncated"
        ],
        "type": "object"
      },
      "title": "Summarize URL"
    },
    {
      "annotations": {
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": true
      },
      "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.\"",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "max_tokens": {
            "description": "Input length cap (1 token ≈ 4 chars). Truncates fetched page content before translation. Example: 4000",
            "type": "number"
          },
          "target_lang": {
            "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",
            "type": "string"
          },
          "url": {
            "description": "Public HTTPS URL to fetch and translate. Example: \"https://example.de/artikel\"",
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "url",
          "target_lang"
        ],
        "type": "object"
      },
      "name": "url.translate",
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "target_lang": {
            "type": "string"
          },
          "translated_text": {
            "type": "string"
          },
          "truncated": {
            "type": "boolean"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "url",
          "target_lang",
          "truncated"
        ],
        "type": "object"
      },
      "title": "Translate URL"
    }
  ]
}
