Manage sign templates, requests, and documents in Odoo via MCP
Strong foundation with 15 well-named tools following verb_noun convention (list_, get_, create_, delete_, add_, remove_, search_, cancel_, resend_, download_). All tools have descriptions (avg ~120 chars, within 10-1024 baseline). Input schemas are comprehensive with proper JSON Schema types, enums, and constraints. Tool annotations present (readOnlyHint, destructiveHint, idempotentHint). Key gaps: output schemas not formally documented in code; error handling returns plain strings rather than structured objects; some parameter descriptions could be more prescriptive about formats and dependencies.
Add a signature, text, date, or other field to a sign template. Positions are relative (0.0 to 1.0) where (0,0) is top-left. Typical signature block: pos_x=0.35, pos_y=0.85, width=0.3, height=0.05.
Cancel a signature request. Signers will no longer be able to sign.
Create a signature request from a template and send it to signers. Each signer needs a role_id (matching template field roles) and partner_id. Use odoo_sign_search_partners to find partner IDs. Use odoo_sign_get_roles to see available roles. Note: To sign the document yourself, use odoo_sign_get to retrieve the signing URL.
Archive a sign template (soft delete). The template will no longer appear in active lists.
Download the signed PDF document from a completed signature request. Returns base64-encoded PDF.
Output schemas not formally documented. Tools return plain strings (markdown/json formatted) rather than structured objects with typed fields. LLMs cannot reliably parse unstructured text or plan downstream tool calls.
Error handling returns plain error strings without recovery guidance. Errors like 'Error: Unexpected error, <type>: <msg>' do not tell the LLM what to do next or whether to retry.
Parameter descriptions lack prescriptive format guidance. E.g., 'pdf_base64' says 'Base64-encoded PDF content' but does not specify max size, encoding validation, or what happens if invalid. 'pos_x' and 'pos_y' lack examples of typical values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Get detailed info about a signature request, including signer status and signing URLs.
List available signer roles. Optionally filter by template to see roles used in that template.
Get detailed info about a sign template including its signature fields.
List all signature fields configured on a template.
List signature requests with optional filtering by state or template.
List available sign templates. Optionally filter by name.
Remove a signature field from a template.
Resend signing emails to all pending signers on a request.
Search for Odoo contacts/partners by name, email, or phone. Use the returned partner_id when creating signature requests.
Upload a PDF as a new sign template. The pdf_base64 param must be a base64-encoded PDF. After uploading, use odoo_sign_add_field to add signature fields to the template.
Pagination limit defaults to 20 but max is 100. No guidance on when to use higher limits or how to handle large result sets. Response does not include 'has_more' or 'next_offset' to signal pagination state.
No dry-run or confirmation step for destructive operations (delete_template, remove_field, cancel_request). Agents cannot preview consequences before committing irreversible changes.