Emboss
by edwinorange · remote · no sign-in to list tools · v1.8.1 · published by GitHub user edwinorange
Make any PDF form fillable, fill it from data or documents, read it back, and fax the result.
28 tools: 2 can delete or cancel things, 2 do something that can't be undone, 15 change things and 9 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone2Claude Code: ask: see these tools
- Changes things15Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http emboss https://api.getemboss.ai/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnread_form
The server marks "read_form" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "read_form" says "read": a word for reading.
- Warndelete_pages
The server marks "delete_pages" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "delete_pages" says "delete": a word for removing or ending something.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
28 tools
Deletes or cancels 2Claude Code: deny
delete_formPermanently removes a form and its PDFs from the user's library.No findings
Why it is in this group
- The name "delete_form" says "delete": a word for removing or ending something.
- The description says "Permanently removes".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Permanently removes a form and its PDFs from the user's library.
Annotations the server declares
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: false
- title: Delete a form
delete_pagesFree.1 finding
Why it is in this group
- The name "delete_pages" says "delete": a word for removing or ending something.
- The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.
Findings
- Warn
The server marks "delete_pages" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "delete_pages" says "delete": a word for removing or ending something.
Description, as the server wrote it Free. Remove the pages you name from a PDF and keep the rest in order. Remove the pages named in pages (1-based, like 1-2,17) from artifact_id; every other page stays in order. Returns the new artifact_id and a download_url (a link that works for about an hour).
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Delete pages
Can't be undone 2Claude Code: ask
merge_pdfFree.No findings
Why it is in this group
- The name "merge_pdf" says "merge": a word for a change that another call does not undo.
Description, as the server wrote it Free. Join whole PDFs into one file in the order given. Join whole PDFs in order: sources is a list of {artifact_id}. Returns the new artifact_id and a download_url (a link that works for about an hour). For page selections use compose_pdf.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Merge PDFs
send_faxSend a PDF to a fax number and track delivery, priced per transmitted page.No findings
Why it is in this group
- The name "send_fax" says "send": a word for sending, and what is sent cannot be taken back.
- The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it Send a PDF to a fax number and track delivery, priced per transmitted page. Give a destination in E.164 form (for example +15025551212; US, Canadian and Mexican numbers only) and the PDF: an artifact_id from any earlier result, a job_id from fill_form_from_context or commit_proposal once get_job reports ready, a form_id for the fillable form, or one PDF by pdf_url or pdf_base64, or a sources list of artifact ids (each with an optional pages range such as 1-3,7) faxed together as one packet. Returns a job id at once; poll get_fax for delivery. Billed per page at delivery; a failed fax is not charged. Needs a payment method on the account; get_usage reports fax_ready.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
- title: Send a PDF by fax
Changes things 15Claude Code: ask
add_attachmentPrepare a form from documents: a proposal of every answer with its source, what is missing, and where documents disagree, before writing, plus attachments for a package.No findings
Why it is in this group
- The name "add_attachment" says "add": a word for a change.
Description, as the server wrote it Prepare a form from documents: a proposal of every answer with its source, what is missing, and where documents disagree, before writing, plus attachments for a package. Attach one document (file_url: public https link, or file_base64) to a proposal from prepare_form. PDF, PNG and JPEG only, at most 20 per proposal. requirement: the name of an entry in the form's attachments_required list to satisfy it; uploading a second document for the same requirement replaces the first. Free: attachments are part of the already-billed prepare.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Attach a document to a proposal
commit_proposalWrite or confirm the answers, render the form with text that fits, check it, and return the PDF with a report and a receipt, or one submission package.No findings
Why it is in this group
- The name "commit_proposal" says "commit": a word for a change.
Description, as the server wrote it Write or confirm the answers, render the form with text that fits, check it, and return the PDF with a report and a receipt, or one submission package. Give the proposal_id from prepare_form; confirm is a list of field ids whose proposed value is accepted as it is (the ids get_proposal lists under confirmations); plus any values the agent decided for fields still open (field_id, value, and an optional note), and a policy (safe or strict) to override the proposal's own. Set package to true to also receive one submission package: the filled form, the attachments added to this proposal in the order the form asks for them, and the receipt embedded in the file; that is billed as one package. Returns a job_id; poll get_job about every 20 seconds for the download link, report, receipt and, when asked for, package_url. Free within the proposal's already-billed prepare, up to 10 commits per proposal. Checkboxes take yes or no; yes ticks that box. In a Yes/No pair, say yes to the box you want; two yeses in one pair are refused.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Commit a proposal and produce the PDF
compose_pdfFree.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Free. Build one PDF from pages of several artifacts, in the order and rotation you name. Build one PDF from several artifacts: sources is a list of {artifact_id, pages, rotate}; pages is a selection like 1-3,7 (omit for every page), rotate is 90, 180 or 270. Returns the new artifact_id and a download_url (a link that works for about an hour). Page selections: https://getemboss.ai/docs/artifacts.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Compose a PDF from artifacts
create_formTurn a flat or scanned PDF form into a fillable PDF with detected fields.No findings
Why it is in this group
- The name "create_form" says "create": a word for a change.
Description, as the server wrote it Turn a flat or scanned PDF form into a fillable PDF with detected fields. Upload a PDF (pdf_url: public https link, or pdf_base64) and detect its fields. Returns when detection finishes (usually under two minutes). Give library=<slug> from find_form to start from a form Emboss already keeps. Billed as one form creation; the first 5 each month are free. Optional retention: ephemeral or account_default (default: the account's own setting). Ephemeral processing: source and output documents are deleted 60 to 70 minutes after the last activity on a form.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Create a fillable form from a PDF
extract_pagesFree.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Free. Keep only the pages you name from a PDF, in the order you name them. Keep only the pages named in pages (1-based, like 2,5-9, repeats and any order allowed) from artifact_id. Returns the new artifact_id and a download_url (a link that works for about an hour).
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Extract pages
fill_batchFill one copy of a PDF form for every row of a spreadsheet.No findings
Why it is in this group
- The name "fill_batch" says "fill": a word for a change.
Description, as the server wrote it Fill one copy of a PDF form for every row of a spreadsheet. Fill a form for every row of a CSV (csv_text or csv_url, up to 1000 rows). mapping is {column: field_id}; omit it to use the suggested mapping. If mapping is omitted, suggest_mapping runs first and is billed as one context fill. Batches up to 50 rows finish before this returns; larger ones keep running, poll get_batch. Each row is billed as one fill. retention (ephemeral or account_default) is accepted but changes nothing: the form keeps the setting it was created with.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Fill the form once per spreadsheet row
fill_formFill a PDF form from structured data such as JSON or key-value answers.No findings
Why it is in this group
- The name "fill_form" says "fill": a word for a change.
Description, as the server wrote it Fill a PDF form from structured data such as JSON or key-value answers. Fill a ready form with values keyed by field id or field label. Checkboxes take yes or no; choice fields need one of their options. To lock the filled PDF, call flatten_pdf with its artifact_id; fill_form itself never flattens. Returns a download link plus any labels that did not match (ask the user about those). Billed as one fill; the first 5 each month are free. retention (ephemeral or account_default) is accepted but changes nothing: the form keeps the setting it was created with.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Fill a form from values
fill_form_from_contextFill a PDF form using facts found in supporting documents.No findings
Why it is in this group
- The name "fill_form_from_context" says "fill": a word for a change.
Description, as the server wrote it Fill a PDF form using facts found in supporting documents. Emboss reads the answers out of context_text and/or context_urls (public https links to PDFs, Word, spreadsheets, images, or text) and fills the form. Give form_id for a form already in the library, or pdf_url/pdf_base64 for a new one. Give library=<slug> from find_form to start from a form Emboss already keeps. policy is safe (write high and medium confidence) or strict (high only). Returns a job_id; poll get_job about every 20 seconds. Billed as one context fill; the first 5 each month are free. Optional retention: ephemeral or account_default (default: the account's own setting); it applies only when this call creates the form (pdf_url, pdf_base64 or library), since an existing form keeps the setting it was created with. Ephemeral processing: source and output documents are deleted 60 to 70 minutes after the last activity on a form.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Fill a form from documents or notes
flatten_pdfFree.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Free. Lock a filled form: draw every field's value and every comment into the page so nothing can be edited. Lock artifact_id, usually the filled PDF from fill_form: every field's value, checkbox and comment becomes part of the page, no fields stay editable, links keep working, and the original stays as it is. Returns the new artifact_id, a download_url (a link that works for about an hour) and a report: fields_locked, annotations_locked, pages, and calculated_left_blank (the labels of boxes the form totals itself that were empty). A locked form can't be read back or checked, so run read_form or verify_form first. Refuses a digitally signed PDF (pdf_signed) and a dynamic XFA form (xfa_dynamic).
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Lock a filled form
prepare_formPrepare a form from documents: a proposal of every answer with its source, what is missing, and where documents disagree, before writing, plus attachments for a package.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Prepare a form from documents: a proposal of every answer with its source, what is missing, and where documents disagree, before writing, plus attachments for a package. Same inputs as fill_form_from_context (form_id for a form already in the library, or pdf_url/pdf_base64 for a new one, plus context_text and/or context_urls), but nothing is written into the PDF: read the proposal, answer what is missing, then commit. policy is safe (write high and medium confidence) or strict (high only). Returns a job_id and a proposal_id; poll get_job about every 20 seconds. Billed as one context fill; the first 5 each month are free. Optional retention: ephemeral or account_default (default: the account's own setting); it applies only when this call creates the form (pdf_url, pdf_base64 or library), since an existing form keeps the setting it was created with. Ephemeral processing: source and output documents are deleted 60 to 70 minutes after the last activity on a form.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Prepare a form from documents
read_formRead the values out of a filled PDF form, labelled by field, with a completeness verdict when the form is known.1 finding
Why it is in this group
- The name "read_form" says "read": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "read_form" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "read_form" says "read": a word for reading.
Description, as the server wrote it Read the values out of a filled PDF form, labelled by field, with a completeness verdict when the form is known. Give the filled PDF (pdf_url: public https link, or pdf_base64) and, when you know it, form_id. Returns every form box in the file with its value and whether it is filled; when the form is recognised, each value also carries its label and whether it was required, plus a completeness verdict. Nothing is stored: read-back never keeps your file. Billed as one read; the first 5 each month are free.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: false
- title: Read a filled form back
reorder_pagesFree.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Free. Put a PDF's pages in a new order you give, every page exactly once. Reorder artifact_id's pages: order lists every page number exactly once, in the new order. Returns the new artifact_id and a download_url (a link that works for about an hour).
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Reorder pages
rotate_pagesFree.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Free. Rotate the pages you name by 90, 180 or 270 degrees. Rotate pages of artifact_id: rotations is a list of {pages, degrees} with degrees 90, 180 or 270, added clockwise to each page's current rotation. Returns the new artifact_id and a download_url (a link that works for about an hour).
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Rotate pages
suggest_mappingPropose which spreadsheet columns fill which PDF form fields.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Propose which spreadsheet columns fill which PDF form fields. Given a CSV (csv_text or csv_url), proposes which column fills which field. Only the header row matters. Billed as one context fill (5 free each month).
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: false
- title: Map spreadsheet columns to form fields
verify_formCheck a filled form: required fields, allowed options, consistent choices, text that fits, empty signature boxes; returns complete, review required or incomplete.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Check a filled form: required fields, allowed options, consistent choices, text that fits, empty signature boxes; returns complete, review required or incomplete. Give a form_id and the filled PDF (pdf_url: public https link, or pdf_base64). Billed as one verify; the first 5 each month are free.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
- title: Check a filled form
Only reads 9Claude Code: allow
find_formFind a blank government form in the Emboss library by name or number, ready to fill.No findings
Why it is in this group
- The name "find_form" says "find": a word for reading.
Description, as the server wrote it Find a blank government form in the Emboss library by name or number, ready to fill. Search the library of blank US federal forms by name, number or alias (w9, W-9, form w 9 and taxpayer identification all find the same form). Returns each match's slug, title, agency, revision and page count. Send the whole query once, and do not search as the user types: each search spends one of the account's rate-limit slots. Pass a slug as create_form's library argument to start from that form. Free.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Find a blank government form
get_batchProgress of a fill_batch run with a download link per finished row (first 100) and a zip link when done.No findings
Why it is in this group
- The name "get_batch" says "get": a word for reading.
Description, as the server wrote it Progress of a fill_batch run with a download link per finished row (first 100) and a zip link when done.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Check a batch fill
get_faxDelivery status and receipt of a send_fax job.No findings
Why it is in this group
- The name "get_fax" says "get": a word for reading.
Description, as the server wrote it Delivery status and receipt of a send_fax job. status is queued, working, delivered, failed or expired; keep checking about every 20 seconds until it is delivered, failed or expired. A busy, unanswered or dropped call is retried automatically up to three more times over about 17 minutes while the status stays working; attempts, max_attempts and next_attempt_at say where it is. A failed or expired fax carries failure_category, failure_reason, retryable, refund and a plain failure_message saying what happened.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Check a fax
get_formStatus of one form.No findings
Why it is in this group
- The name "get_form" says "get": a word for reading.
Description, as the server wrote it Status of one form. When ready, returns every field (id, label, kind, options, required) and a download link for the fillable PDF.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Get a form and its fields
get_jobStatus of a fill_form_from_context, prepare_form, or commit_proposal job.No findings
Why it is in this group
- The name "get_job" says "get": a word for reading.
Description, as the server wrote it Status of a fill_form_from_context, prepare_form, or commit_proposal job. When ready, returns the download link, how many fields were filled, and for a commit, the result, receipt_url and, when one was asked for, package_url.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Check a context fill job
get_proposalPrepare a form from documents: a proposal of every answer with its source, what is missing, and where documents disagree, before writing, plus attachments for a package.No findings
Why it is in this group
- The name "get_proposal" says "get": a word for reading.
Description, as the server wrote it Prepare a form from documents: a proposal of every answer with its source, what is missing, and where documents disagree, before writing, plus attachments for a package. Read a proposal by its proposal_id: every field's state, its candidate values with evidence, and the questions still open. No charge to read it.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Read a proposal
get_usageThis month's usage and how many free operations remain, plus the billing page link.No findings
Why it is in this group
- The name "get_usage" says "get": a word for reading.
Description, as the server wrote it This month's usage and how many free operations remain, plus the billing page link. It also says whether a payment method is on file (payment_method_on_file) and whether the account can send a fax today (fax_ready). Faxes need a payment method: check fax_ready before send_fax.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Check free tier and usage
inspect_pdfFree.No findings
Why it is in this group
- The name "inspect_pdf" says "inspect": a word for reading.
Description, as the server wrote it Free. Report a PDF's structure: page count, page sizes and rotations, encryption, form fields, annotations. Structural facts about artifact_id: page count, page sizes and rotations, whether it is encrypted, has form fields, annotations, outlines, embedded files or JavaScript. No text, no field values.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: Inspect a PDF
list_formsForms in the user's Emboss library.No findings
Why it is in this group
- The name "list_forms" says "list": a word for reading.
Description, as the server wrote it Forms in the user's Emboss library. state: ready (default), processing, failed, or all. Paginate with cursor.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
- title: List your forms
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.8.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http emboss https://api.getemboss.ai/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__emboss__list_forms",
"mcp__emboss__get_form",
"mcp__emboss__find_form",
"mcp__emboss__get_usage",
"mcp__emboss__get_job",
"mcp__emboss__get_batch",
"mcp__emboss__get_proposal",
"mcp__emboss__get_fax",
"mcp__emboss__inspect_pdf"
],
"ask": [
"mcp__emboss__create_form",
"mcp__emboss__fill_form",
"mcp__emboss__fill_form_from_context",
"mcp__emboss__prepare_form",
"mcp__emboss__suggest_mapping",
"mcp__emboss__fill_batch",
"mcp__emboss__commit_proposal",
"mcp__emboss__verify_form",
"mcp__emboss__read_form",
"mcp__emboss__add_attachment",
"mcp__emboss__send_fax",
"mcp__emboss__compose_pdf",
"mcp__emboss__merge_pdf",
"mcp__emboss__extract_pages",
"mcp__emboss__reorder_pages",
"mcp__emboss__rotate_pages",
"mcp__emboss__flatten_pdf"
],
"deny": [
"mcp__emboss__delete_form",
"mcp__emboss__delete_pages"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as emboss. Review it before you use it.
