Parseo MCP by usefulapi

Upload invoices for OCR; read, export and correct extracted invoices in Parseo.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
84%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,910Tokens (tool definitions)
~1.6 KBTypical response size
Significant attention impact (3.84% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "parseo": {
      "url": "https://parseo.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://parseo.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (23)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢parseo_get_key_info

Show the team, plan, scopes and rate limit of the API key in use. Good first call to check that the key works. Parseo: GET /me.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_credit_balance

Show the credit balance, the low-balance threshold and this billing cycle's usage. Jobs with awaiting_credits wait for this balance to rise. Parseo: GET /me/credits.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_quota

Show credits, plan limits and current usage in one reply. Parseo: GET /me/quota.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_usage(days)

Show invoice usage per day for the last N days (1-90). Parseo: GET /usage.

Input Schema

{
  "type": "object",
  "properties": {
    "days": {
      "description": "Trailing days to aggregate (1-90).",
      "type": "integer",
      "minimum": 1,
      "maximum": 90
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_list_invoices(status, direction, exported, changed_since_export, is_export_valid, ...)

List invoices of the client in use, with filters for status, direction, export state, dates, amounts and names. The list omits line items: fetch one invoice for its full content. Requires invoice:read. Parseo: GET /invoices.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Processing status.",
      "type": "string",
      "enum": [
        "queued",
        "awaiting_credits",
        "processing",
        "processed",
        "failed"
      ]
    },
    "direction": {
      "description": "purchase = incoming bill, sale = outgoing invoice.",
      "type": "string",
      "enum": [
        "purchase",
        "sale"
      ]
    },
    "exported": {
      "description": "false = invoices nobody has exported yet (an import queue).",
      "type": "boolean"
    },
    "changed_since_export": {
      "description": "true = exported invoices corrected after their export.",
      "type": "boolean"
    },
    "is_export_valid": {
      "description": "true = only invoices that pass export validation.",
      "type": "boolean"
    },
    "created_from": {
      "description": "Created at or after this time.",
      "type": "string",
      "minLength": 10,
      "maxLength": 40
    },
    "created_to": {
      "description": "Created at or before this time.",
      "type": "string",
      "minLength": 10,
      "maxLength": 40
    },
    "contact_id": {
      "description": "Only invoices with this contact (con_...).",
      "type": "string",
      "pattern": "^con_[A-Za-z0-9_-]{1,80}$"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$",
      "description": "ISO 4217 code, for example EUR."
    },
    "total_min": {
      "description": "Total amount at or above this value.",
      "type": "number"
    },
    "total_max": {
      "description": "Total amount at or below this value.",
      "type": "number"
    },
    "invoice_number": {
      "description": "Exact invoice number, or 'prefix:ABC' for a prefix match.",
      "type": "string",
      "maxLength": 200
    },
    "seller_name": {
      "description": "Part of the seller name (case-insensitive).",
      "type": "string",
      "maxLength": 200
    },
    "buyer_name": {
      "description": "Part of the buyer name (case-insensitive).",
      "type": "string",
      "maxLength": 200
    },
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "createdAt:asc",
        "createdAt:desc",
        "invoiceDate:asc",
        "invoiceDate:desc",
        "totalAmount:asc",
        "totalAmount:desc"
      ]
    },
    "expand": {
      "description": "'seller', 'buyer' or 'seller,buyer': replace contact ids with contact objects.",
      "type": "string",
      "maxLength": 20
    },
    "limit": {
      "description": "Items per page (1-200).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "Cursor from the previous page (pagination.nextCursor).",
      "type": "string",
      "maxLength": 2000
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_invoice(invoice_id, fields, expand, client_id)

Get one invoice with its extracted data, line items, export block and assignment status. Use it after a job completes (invoiceId). Requires invoice:read. Parseo: GET /invoices/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "pattern": "^inv_[A-Za-z0-9_-]{1,80}$",
      "description": "Invoice id (inv_...), from the job or the list."
    },
    "fields": {
      "description": "Comma-separated top-level fields to return, for example id,status,totalAmount.",
      "type": "string",
      "maxLength": 500
    },
    "expand": {
      "description": "'seller', 'buyer' or 'seller,buyer': replace contact ids with contact objects.",
      "type": "string",
      "maxLength": 20
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_invoice_status(invoice_id, client_id)

Get the processing status of one invoice (queued, processing, processed or failed). Requires invoice:read. Parseo: GET /invoices/{id}/status.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "pattern": "^inv_[A-Za-z0-9_-]{1,80}$",
      "description": "Invoice id (inv_...)."
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_export_invoice(invoice_id, format, client_id)

Export one invoice as JSON (default), XML, or an accounting-system format (for example rivile, odoo, b1). Non-JSON formats return the text in 'body'. Fetching does not mark the invoice as exported. Requires invoice:export. Parseo: GET /invoices/{id}/export.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "pattern": "^inv_[A-Za-z0-9_-]{1,80}$",
      "description": "Invoice id (inv_...)."
    },
    "format": {
      "description": "Export format. Default json.",
      "type": "string",
      "enum": [
        "json",
        "xml",
        "rivile",
        "finvalda",
        "centas",
        "agnum",
        "pragma_4",
        "b1",
        "directo",
        "odoo",
        "optimum"
      ]
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_list_jobs(status, client_id, created_from, created_to, limit, ...)

List upload jobs with their status (processing, awaiting_credits, completed, failed). Use it to find a job that has no invoice yet. Parseo: GET /jobs.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "processing",
        "awaiting_credits",
        "completed",
        "failed"
      ]
    },
    "client_id": {
      "description": "Only jobs of this client (cl_... id).",
      "type": "string",
      "maxLength": 100
    },
    "created_from": {
      "type": "string",
      "minLength": 10,
      "maxLength": 40,
      "description": "ISO 8601 timestamp, for example 2026-10-01T00:00:00Z."
    },
    "created_to": {
      "type": "string",
      "minLength": 10,
      "maxLength": 40,
      "description": "ISO 8601 timestamp, for example 2026-10-01T00:00:00Z."
    },
    "limit": {
      "description": "Items per page (1-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "Cursor from the previous page (pagination.nextCursor).",
      "type": "string",
      "maxLength": 2000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_job(job_id)

Get one upload job. Poll it until status is completed (invoiceId is set), failed (error is set) or awaiting_credits (parked until credits arrive, not an error). Parseo: GET /jobs/{jobId}.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "pattern": "^job_[A-Za-z0-9_-]{1,80}$",
      "description": "Job id (job_...), from the upload reply."
    }
  },
  "required": [
    "job_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_list_clients(limit, cursor)

List the clients (end customers) of the team. Each client has an id (cl_...) for X-Client-Id. Requires client:read. Parseo: GET /clients.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Items per page (1-200).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "Cursor from the previous page (pagination.nextCursor).",
      "type": "string",
      "maxLength": 2000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_client(client_id)

Get one client with its company details. Requires client:read. Parseo: GET /clients/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "client_id": {
      "type": "string",
      "pattern": "^cl_[A-Za-z0-9_-]{1,80}$",
      "description": "Client id (cl_...)."
    }
  },
  "required": [
    "client_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_list_contacts(client_id, limit, cursor)

List buyer and supplier contacts, optionally for one client. Requires contact:read. Parseo: GET /contacts.

Input Schema

{
  "type": "object",
  "properties": {
    "client_id": {
      "description": "Only contacts of this client (cl_... id).",
      "type": "string",
      "maxLength": 100
    },
    "limit": {
      "description": "Items per page (1-200).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "Cursor from the previous page (pagination.nextCursor).",
      "type": "string",
      "maxLength": 2000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_get_contact(contact_id)

Get one contact (buyer or supplier). Requires contact:read. Parseo: GET /contacts/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "pattern": "^con_[A-Za-z0-9_-]{1,80}$",
      "description": "Contact id (con_...)."
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢parseo_list_audit_logs(api_key_id, action, resource_type, created_from, created_to, ...)

Query the team audit log: who did what, and when (for example invoice.created or api_key.rotated). Requires audit:read. Parseo: GET /audit-logs.

Input Schema

{
  "type": "object",
  "properties": {
    "api_key_id": {
      "description": "Only actions of this API key (ak_... id).",
      "type": "string",
      "maxLength": 100
    },
    "action": {
      "description": "Exact action name, for example invoice.created.",
      "type": "string",
      "maxLength": 100
    },
    "resource_type": {
      "type": "string",
      "enum": [
        "invoice",
        "contact",
        "api-key",
        "webhook",
        "client"
      ]
    },
    "created_from": {
      "type": "string",
      "minLength": 10,
      "maxLength": 40,
      "description": "ISO 8601 timestamp, for example 2026-10-01T00:00:00Z."
    },
    "created_to": {
      "type": "string",
      "minLength": 10,
      "maxLength": 40,
      "description": "ISO 8601 timestamp, for example 2026-10-01T00:00:00Z."
    },
    "limit": {
      "description": "Items per page (1-200).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "Cursor from the previous page (pagination.nextCursor).",
      "type": "string",
      "maxLength": 2000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴parseo_upload_invoice(filename, file_base64, direction, partner_invoice_id, idempotency_key, ...)

Upload one invoice file (PDF, PNG, JPG or WebP, up to 7.5 MB) for OCR. It returns a job at once (HTTP 202); the invoice exists only after the job completes. Uses credits. Pass the same idempotency_key to retry safely. Requires invoice:write. Parseo: POST /invoices.

Input Schema

{
  "type": "object",
  "properties": {
    "filename": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "pattern": "^[^/\\\\\\x00-\\x1f]+$"
    },
    "file_base64": {
      "type": "string",
      "minLength": 4,
      "maxLength": 10000000,
      "description": "The file's bytes, base64-encoded."
    },
    "direction": {
      "description": "purchase = incoming bill, sale = outgoing invoice. Leave it out to use Parseo's default.",
      "type": "string",
      "enum": [
        "purchase",
        "sale"
      ]
    },
    "partner_invoice_id": {
      "description": "Your own id for this invoice, stored in metadata.partnerInvoiceId.",
      "type": "string",
      "maxLength": 200
    },
    "idempotency_key": {
      "description": "Retry key: send the same key on a retry of the same upload. Parseo keeps the first result for 24 hours.",
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]{1,200}$"
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "required": [
    "filename",
    "file_base64"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴parseo_upload_invoices_batch(files, idempotency_key, client_id)

Upload up to 10 invoice files in one call (PDF, PNG, JPG or WebP, up to 7.5 MB each). Each result has its own jobId and status. Uses credits. Pass the same idempotency_key to retry safely. Requires invoice:write. Parseo: POST /invoices/batch.

Input Schema

{
  "type": "object",
  "properties": {
    "files": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "filename": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "pattern": "^[^/\\\\\\x00-\\x1f]+$"
          },
          "file_base64": {
            "type": "string",
            "minLength": 4,
            "maxLength": 10000000,
            "description": "The file's bytes, base64-encoded."
          }
        },
        "required": [
          "filename",
          "file_base64"
        ]
      },
      "description": "1-10 files."
    },
    "idempotency_key": {
      "description": "Retry key: send the same key on a retry of the same upload. Parseo keeps the first result for 24 hours.",
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]{1,200}$"
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "required": [
    "files"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡parseo_update_invoice(invoice_id, invoice_number, invoice_series, invoice_date, due_date, ...)

Correct the extracted fields of one invoice. Send only the fields to change; a changed exported invoice shows changedSinceExport. Requires invoice:write. Parseo: PATCH /invoices/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "pattern": "^inv_[A-Za-z0-9_-]{1,80}$",
      "description": "Invoice id (inv_...)."
    },
    "invoice_number": {
      "type": "string",
      "maxLength": 200
    },
    "invoice_series": {
      "type": "string",
      "maxLength": 100
    },
    "invoice_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "due_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$",
      "description": "ISO 4217 code, for example EUR."
    },
    "direction": {
      "type": "string",
      "enum": [
        "purchase",
        "sale"
      ]
    },
    "subtotal": {
      "type": "number"
    },
    "total_amount": {
      "type": "number"
    },
    "amount_due": {
      "type": "number"
    },
    "seller_contact_id": {
      "type": "string",
      "pattern": "^con_[A-Za-z0-9_-]{1,80}$"
    },
    "buyer_contact_id": {
      "type": "string",
      "pattern": "^con_[A-Za-z0-9_-]{1,80}$"
    },
    "metadata": {
      "description": "Your own key-value data, stored with the invoice.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡parseo_mark_invoice_exported(invoice_id, external_reference, client_id)

Record that your system imported this invoice, so it leaves the export queue (exported=false). Repeat calls do not add exports. Use it only after your import succeeded. Requires invoice:export. Parseo: POST /invoices/{id}/exported.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "pattern": "^inv_[A-Za-z0-9_-]{1,80}$",
      "description": "Invoice id (inv_...)."
    },
    "external_reference": {
      "description": "Your own id for the imported document, for example ERP-2026-00412.",
      "type": "string",
      "maxLength": 200
    },
    "client_id": {
      "description": "Client id (cl_...) for a team-wide key. Omit it to use the client set at login.",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴parseo_create_client(name, description, company_registration_number, vat_number, address, ...)

Create a client (an end customer of your team). Use its id (cl_...) as client_id on invoice calls. Requires client:write. Parseo: POST /clients.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Client name."
    },
    "description": {
      "type": "string",
      "maxLength": 1000
    },
    "company_registration_number": {
      "type": "string",
      "maxLength": 100
    },
    "vat_number": {
      "type": "string",
      "maxLength": 100
    },
    "address": {
      "type": "string",
      "maxLength": 500
    },
    "email": {
      "type": "string",
      "maxLength": 200
    },
    "phone": {
      "type": "string",
      "maxLength": 100
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡parseo_update_client(client_id, name, description, company_registration_number, vat_number, ...)

Change the details of one client. Send only the fields to change. Requires client:write. Parseo: PATCH /clients/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "client_id": {
      "type": "string",
      "pattern": "^cl_[A-Za-z0-9_-]{1,80}$",
      "description": "Client id (cl_...)."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "description": {
      "type": "string",
      "maxLength": 1000
    },
    "company_registration_number": {
      "type": "string",
      "maxLength": 100
    },
    "vat_number": {
      "type": "string",
      "maxLength": 100
    },
    "address": {
      "type": "string",
      "maxLength": 500
    },
    "email": {
      "type": "string",
      "maxLength": 200
    },
    "phone": {
      "type": "string",
      "maxLength": 100
    }
  },
  "required": [
    "client_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴parseo_create_contact(client_id, name, company_id, vat_id, email, ...)

Create a buyer or supplier contact for one client. Requires contact:write. Parseo: POST /contacts.

Input Schema

{
  "type": "object",
  "properties": {
    "client_id": {
      "type": "string",
      "pattern": "^cl_[A-Za-z0-9_-]{1,80}$",
      "description": "The client this contact belongs to (cl_...)."
    },
    "name": {
      "type": "string",
      "maxLength": 200
    },
    "company_id": {
      "description": "Company registration id.",
      "type": "string",
      "maxLength": 100
    },
    "vat_id": {
      "type": "string",
      "maxLength": 100
    },
    "email": {
      "type": "string",
      "maxLength": 200
    },
    "phone": {
      "type": "string",
      "maxLength": 100
    },
    "address": {
      "type": "string",
      "maxLength": 500
    },
    "party_type": {
      "type": "string",
      "enum": [
        "individual",
        "company"
      ]
    }
  },
  "required": [
    "client_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡parseo_update_contact(contact_id, name, company_id, vat_id, email, ...)

Change the details of one contact. Send only the fields to change. Requires contact:write. Parseo: PATCH /contacts/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "string",
      "pattern": "^con_[A-Za-z0-9_-]{1,80}$",
      "description": "Contact id (con_...)."
    },
    "name": {
      "type": "string",
      "maxLength": 200
    },
    "company_id": {
      "description": "Company registration id.",
      "type": "string",
      "maxLength": 100
    },
    "vat_id": {
      "type": "string",
      "maxLength": 100
    },
    "email": {
      "type": "string",
      "maxLength": 200
    },
    "phone": {
      "type": "string",
      "maxLength": 100
    },
    "address": {
      "type": "string",
      "maxLength": 500
    },
    "party_type": {
      "type": "string",
      "enum": [
        "individual",
        "company"
      ]
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded23 tools