MCP Server

Velrim

com.velrim/extract
Data & Analytics Public & reachable MCP 2025-11-25

What this MCP does

Extracts structured fields from PDFs or images using a supplied JSON Schema, with confidence scores and source anchors.

velrim_extract
Extract structured data from a document (PDF or image, passed as document_base64 or as the upload_key of a staged upload) against a JSON Schema you supply. Returns a typed object and, for every field, a state (present, null, or missing), a calibrated confidence score, and an anchor (the source page and bounding box). The confidence is calibrated against published reliability curves (https://velrim.com/reliability), so a 0.9 means the field is right about 90% of the time on that document class — branch on it directly: act on a field at or above your accept threshold, escalate the fields below it and any that are missing. Use each field's anchor to check it against the source page.
Open world
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schema'], 'properties': {'hints': {'type': 'object', 'description': 'Discriminator hints for union schemas.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'schema': {'type': 'object', 'description': 'The JSON Schema (draft 2020-12) the extracted object must conform to (required).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'doc_class': {'type': 'string', 'maxLength': 128, 'description': 'Opaque tag (<=128 chars) echoed back in meta.doc_class.'}, 'upload_key': {'type': 'string', 'description': 'The upload_key of a staged Velrim upload. Mutually exclusive with document_base64.'}, 'document_base64': {'type': 'string', 'description': 'The document bytes, base64-encoded. Provide exactly one of document_base64 or upload_key.'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'data': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'meta': {'type': 'object', 'required': ['model', 'tier', 'batched', 'calibrator_version', 'routing_policy_version', 'pages', 'billed_pages', 'request_id', 'warnings'], 'properties': {'tier': {'type': 'string', 'description': 'Routing tier, e.g. "default" | "resampled" | "verify".'}, 'model': {'type': 'string'}, 'pages': {'type': 'number'}, 'batched': {'type': 'boolean'}, 'warnings': {'type': 'array', 'items': {}}, 'doc_class': {'type': 'string'}, 'request_id': {'type': 'string'}, 'billed_pages': {'type': 'number'}, 'calibrator_version': {'type': 'string'}, 'routing_policy_version': {'type': 'string'}}, 'additionalProperties': {}}, 'error': {'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string'}, 'message': {'type': 'string'}, 'request_id': {'type': 'string'}, 'top_up_url': {'type': 'string'}, 'retry_after': {'type': 'number'}}, 'additionalProperties': {}}, 'fields': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'required': ['state', 'reason'], 'properties': {'state': {'enum': ['present', 'null', 'missing'], 'type': 'string'}, 'value': {}, 'anchor': {'type': 'object', 'required': ['page', 'bbox', 'snippet', 'page_dims'], 'properties': {'bbox': {'type': 'array', 'items': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}, {'type': 'number'}], 'description': 'Corner rectangle [x0,y0,x1,y1] â\x80\x94 NOT [x,y,w,h].'}, 'page': {'type': 'number'}, 'snippet': {'type': 'string'}, 'page_dims': {'type': 'object', 'required': ['width', 'height'], 'properties': {'width': {'type': 'number'}, 'height': {'type': 'number'}}, 'additionalProperties': {}}}, 'additionalProperties': {}}, 'reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conflict': {'type': 'boolean'}, 'confidence': {'type': 'number'}}, 'additionalProperties': {}}}}, 'additionalProperties': {}}
velrim_job_status
Poll an asynchronous extraction job by its job_id (from POST /v1/jobs on the Velrim API; velrim_extract itself is synchronous and never creates jobs). Returns the job status and, once complete, the same typed result as velrim_extract: per field a state (present, null, or missing), a calibrated confidence score, and an anchor (source page and bounding box). Confidence is calibrated against published reliability curves (https://velrim.com/reliability) — branch the same way: act on a field at or above your accept threshold, escalate the rest, and use each anchor to check a field against its source page.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'minLength': 1, 'description': 'The job_id returned by an asynchronous Velrim extraction job (created via the Velrim API or an SDK).'}}}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'error': {'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string'}, 'message': {'type': 'string'}, 'request_id': {'type': 'string'}, 'top_up_url': {'type': 'string'}, 'retry_after': {'type': 'number'}}, 'additionalProperties': {}}, 'job_id': {'type': 'string'}, 'result': {'type': 'object', 'required': ['data', 'fields', 'meta'], 'properties': {'data': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'meta': {'type': 'object', 'required': ['model', 'tier', 'batched', 'calibrator_version', 'routing_policy_version', 'pages', 'billed_pages', 'request_id', 'warnings'], 'properties': {'tier': {'type': 'string', 'description': 'Routing tier, e.g. "default" | "resampled" | "verify".'}, 'model': {'type': 'string'}, 'pages': {'type': 'number'}, 'batched': {'type': 'boolean'}, 'warnings': {'type': 'array', 'items': {}}, 'doc_class': {'type': 'string'}, 'request_id': {'type': 'string'}, 'billed_pages': {'type': 'number'}, 'calibrator_version': {'type': 'string'}, 'routing_policy_version': {'type': 'string'}}, 'additionalProperties': {}}, 'fields': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'required': ['state', 'reason'], 'properties': {'state': {'enum': ['present', 'null', 'missing'], 'type': 'string'}, 'value': {}, 'anchor': {'type': 'object', 'required': ['page', 'bbox', 'snippet', 'page_dims'], 'properties': {'bbox': {'type': 'array', 'items': [{'type': 'number'}, {'type': 'number'}, {'type': 'number'}, {'type': 'number'}], 'description': 'Corner rectangle [x0,y0,x1,y1] â\x80\x94 NOT [x,y,w,h].'}, 'page': {'type': 'number'}, 'snippet': {'type': 'string'}, 'page_dims': {'type': 'object', 'required': ['width', 'height'], 'properties': {'width': {'type': 'number'}, 'height': {'type': 'number'}}, 'additionalProperties': {}}}, 'additionalProperties': {}}, 'reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conflict': {'type': 'boolean'}, 'confidence': {'type': 'number'}}, 'additionalProperties': {}}}}, 'additionalProperties': {}}, 'status': {'type': 'string', 'description': '"running" | "succeeded" | "failed" (additive-tolerant).'}}, 'additionalProperties': {}}
Added
velrim_job_status
Sept. 17, 2026, 12:38 p.m.
Added
velrim_extract
Sept. 17, 2026, 12:38 p.m.