{"server":"io.github.sunholo-data/parse","count":32,"changes":[{"tool":"mcpConvert","kind":"changed","observed_at":"2026-10-19T19:19:50.950Z","fields":["description"],"description_before":"Create a document in another format: docx, pptx, xlsx, odt, odp, ods, html,\nmd or qmd. To write a new document, write Markdown and send it as content\nwith filename \"notes.md\" (headings become slides in pptx). To convert an\nexisting document, give it ONE way:\n  fileRef: a file the user uploaded (mcp-file://docparse/file_...).\n  file: in ChatGPT, the file the user attached (ChatGPT fills it in).\n  content + filename: the document itself; binary files base64-encoded with\n    contentEncoding=\"base64\", text as plain text.\n  input: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats.\nWhich way to send a file:\n  a file in your sandbox or workspace: call createUpload (one token PER\n    FILE; set count for several) and run its curl line, then pass the\n    fileRef here.\n  curl fails with a network error, or the user wants to pick a file: call\n    uploadDocument (the user chooses it in the AILANG Parse card). The card\n    parses the file; it does not convert or edit it.\n  a public https:// link; short text as content. In ChatGPT, file.\n  Never parse the file yourself (your own script, or your own reading of\n  it) and present that as this tool's result: if the file cannot be sent,\n  tell the user.\nThe result carries download_url, a link to the generated file valid for one\nhour: give it to the user. It also carries the file as base64 in content\n(encoding \"base64\"; text formats come back as utf8).","description_after":"Create a document in another format: docx, pptx, xlsx, odt, odp, ods, html,\nmd or qmd. To write a new document, write Markdown and send it as content\nwith filename \"notes.md\" (headings become slides in pptx). To convert an\nexisting document, give it ONE way:\n  fileRef: a file the user uploaded (mcp-file://docparse/file_...).\n  file: in ChatGPT, the file the user attached (ChatGPT fills it in).\n  content + filename: the document itself; binary files base64-encoded with\n    contentEncoding=\"base64\", text as plain text.\n  input: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats.\nWhich way to send a file:\n  a file in your sandbox or workspace: call createUpload (one token PER\n    FILE; set count for several) and run its curl line, then pass the\n    fileRef here.\n  curl fails with a network error, or the user wants to pick a file: call\n    uploadDocument (the user chooses it in the AILANG Parse card). The card\n    parses the file; it does not convert or edit it.\n  a public https:// link; short text as content. In ChatGPT, file.\n  Never parse the file yourself (your own script, or your own reading of\n  it) and present that as this tool's result: if the file cannot be sent,\n  tell the user.\nThe result carries download_url, a link to the generated file valid for one\nhour: give it to the user. It also carries the file as base64 in content\n(encoding \"base64\"; text formats come back as utf8). Leave outputPath\nempty: the server cannot write to your filesystem.","description_similarity":0.962,"before_hash":"020ea7d5204a44183470f3c6024a32f0","after_hash":"f7503fc3e6604c3d4995788a01b3dc50"},{"tool":"uploadDocument","kind":"changed","observed_at":"2026-10-08T14:02:03.464Z","fields":["description"],"description_before":"Let the user pick a file to parse: shows the AILANG Parse card with a\nChoose file button. The card uploads the file and parses it into blocks\nautomatically, then hands you the result. Use it when the user wants to\npick a file, or when createUpload's curl fails with a network error. For a\nfile already in your sandbox or workspace, use createUpload + curl instead.\nNever parse the file yourself.","description_after":"Let the user pick a file to parse: shows the AILANG Parse card with a\nChoose file button. The card uploads the file and tries to summarise it\nfor you; either way you get its fileRef. Then call mcpParse with that\nfileRef for the content (the same user can reuse it for 30 minutes; a large\ndocument comes in parts). Use this when the user wants to pick a file, or\nwhen createUpload's curl fails with a network error. For a file already in\nyour sandbox or workspace, use createUpload + curl instead.\nNever parse the file yourself.","description_similarity":0.585,"before_hash":"cfe035308777f483d277d1136a44d9d2","after_hash":"8333c98689bb68d87b55ec2d86d5959d"},{"tool":"mcpParse","kind":"changed","observed_at":"2026-10-08T14:02:03.464Z","fields":["description","inputSchema"],"description_before":"Parse a document into structured blocks, Markdown, HTML or A2UI.\nGive the document ONE way:\n  fileRef: an uploaded file (mcp-file://docparse/file_...). Each works once.\n  file: in ChatGPT, the file the user attached (ChatGPT fills it in).\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\n  content + filename: short text only (Markdown, HTML, CSV); the\n    filename's extension picks the parser.\noutputFormat: blocks (default), markdown, html, a2ui.\nWhich way to send a file:\n  a file in your sandbox or workspace: call createUpload (one token PER\n    FILE; set count for several) and run its curl line, then call this\n    tool with the fileRef the upload prints.\n  curl fails with a network error, or the user wants to pick a file: call\n    uploadDocument; the user chooses it in the AILANG Parse card, which\n    uploads and parses it automatically.\n  a public https:// link: filepath. Short text: content.\n  Never parse the file yourself (your own script, or your own reading of\n  it) and present that as this tool's result: if the file cannot be sent,\n  tell the user.","description_after":"Parse a document into structured blocks, Markdown, HTML or A2UI, or a short\nsummary of it.\nGive the document ONE way:\n  fileRef: an uploaded file (mcp-file://docparse/file_...). The same user can\n    use it again for 30 minutes after the first use (more parts, another\n    format), then it is deleted.\n  file: in ChatGPT, the file the user attached (ChatGPT fills it in).\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\n  content + filename: short text only (Markdown, HTML, CSV); the\n    filename's extension picks the parser.\noutputFormat: blocks (default), markdown, html, a2ui, or summary (counts,\n  the first 50 headings, warnings: a few KB). Look with summary first when\n  a document may be large.\nLarge documents come in parts: when the result has page.nextCursor, call\n  mcpParse again with the same fileRef/filepath and cursor=<nextCursor> for\n  the next part; read every part before answering about the whole document.\n  maxChars sets the part size as a string of digits (default \"80000\",\n  \"2000\"..\"120000\").\nWhich way to send a file:\n  a file in your sandbox or workspace: call createUpload (one token PER\n    FILE; set count for several) and run its curl line, then call this\n    tool with the fileRef the upload prints.\n  curl fails with a network error, or the user wants to pick a file: call\n    uploadDocument; the user chooses it in the AILANG Parse card, which\n    uploads it and gives you its fileRef.\n  a public https:// link: filepath. Short text: content.\n  Never parse the file yourself (your own script, or your own reading of\n  it) and present that as this tool's result: if the file cannot be sent,\n  tell the user.","description_similarity":0.65,"before_hash":"8d24254913ab64a0913779c3b7798c5b","after_hash":"463a9dc0562f5479f01ef7656ee3d4e9"},{"tool":"uploadViaHost","kind":"added","observed_at":"2026-10-07T19:50:34.088Z","fields":[],"description_before":null,"description_after":"Receive a file from the AILANG Parse upload widget, relayed by the host as\nbase64. Only the widget calls this; ticket is the upload token it holds.","description_similarity":null,"before_hash":null,"after_hash":"23262de3483a9dc1063b26517ab20baa"},{"tool":"uploadDocument","kind":"added","observed_at":"2026-10-07T19:50:34.088Z","fields":[],"description_before":null,"description_after":"Let the user pick a file to parse: shows the AILANG Parse card with a\nChoose file button. The card uploads the file and parses it into blocks\nautomatically, then hands you the result. Use it when the user wants to\npick a file, or when createUpload's curl fails with a network error. For a\nfile already in your sandbox or workspace, use createUpload + curl instead.\nNever parse the file yourself.","description_similarity":null,"before_hash":null,"after_hash":"cfe035308777f483d277d1136a44d9d2"},{"tool":"mcpParse","kind":"changed","observed_at":"2026-10-07T19:50:34.088Z","fields":["description","inputSchema"],"description_before":"Parse a document into structured blocks, Markdown, HTML or A2UI.\nGive the document ONE way:\n  content + filename: the document itself. Text formats (Markdown, HTML,\n    CSV) as plain text; binary files (DOCX, PDF, PPTX, XLSX, ODT, EPUB, ...)\n    base64-encoded with contentEncoding=\"base64\". The filename's extension\n    picks the parser, e.g. \"report.docx\".\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\noutputFormat: blocks (default), markdown, html, a2ui.","description_after":"Parse a document into structured blocks, Markdown, HTML or A2UI.\nGive the document ONE way:\n  fileRef: an uploaded file (mcp-file://docparse/file_...). Each works once.\n  file: in ChatGPT, the file the user attached (ChatGPT fills it in).\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\n  content + filename: short text only (Markdown, HTML, CSV); the\n    filename's extension picks the parser.\noutputFormat: blocks (default), markdown, html, a2ui.\nWhich way to send a file:\n  a file in your sandbox or workspace: call createUpload (one token PER\n    FILE; set count for several) and run its curl line, then call this\n    tool with the fileRef the upload prints.\n  curl fails with a network error, or the user wants to pick a file: call\n    uploadDocument; the user chooses it in the AILANG Parse card, which\n    uploads and parses it automatically.\n  a public https:// link: filepath. Short text: content.\n  Never parse the file yourself (your own script, or your own reading of\n  it) and present that as this tool's result: if the file cannot be sent,\n  tell the user.","description_similarity":0.325,"before_hash":"e8464b6409577d9742f8a92d348183f8","after_hash":"8d24254913ab64a0913779c3b7798c5b"},{"tool":"mcpConvert","kind":"changed","observed_at":"2026-10-07T19:50:34.088Z","fields":["description","inputSchema"],"description_before":"Create a document in another format: docx, pptx, xlsx, odt, odp, ods, html,\nmd or qmd. To write a new document, write Markdown and send it as content\nwith filename \"notes.md\" (headings become slides in pptx). To convert an\nexisting document, give it ONE way:\n  content + filename: the document itself; binary files base64-encoded with\n    contentEncoding=\"base64\", text as plain text.\n  input: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats.\nThe result carries download_url, a link to the generated file valid for one\nhour: give it to the user. It also carries the file as base64 in content\n(encoding \"base64\"; text formats come back as utf8).","description_after":"Create a document in another format: docx, pptx, xlsx, odt, odp, ods, html,\nmd or qmd. To write a new document, write Markdown and send it as content\nwith filename \"notes.md\" (headings become slides in pptx). To convert an\nexisting document, give it ONE way:\n  fileRef: a file the user uploaded (mcp-file://docparse/file_...).\n  file: in ChatGPT, the file the user attached (ChatGPT fills it in).\n  content + filename: the document itself; binary files base64-encoded with\n    contentEncoding=\"base64\", text as plain text.\n  input: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats.\nWhich way to send a file:\n  a file in your sandbox or workspace: call createUpload (one token PER\n    FILE; set count for several) and run its curl line, then pass the\n    fileRef here.\n  curl fails with a network error, or the user wants to pick a file: call\n    uploadDocument (the user chooses it in the AILANG Parse card). The card\n    parses the file; it does not convert or edit it.\n  a public https:// link; short text as content. In ChatGPT, file.\n  Never parse the file yourself (your own script, or your own reading of\n  it) and present that as this tool's result: if the file cannot be sent,\n  tell the user.\nThe result carries download_url, a link to the generated file valid for one\nhour: give it to the user. It also carries the file as base64 in content\n(encoding \"base64\"; text formats come back as utf8).","description_similarity":0.563,"before_hash":"3e8d29762523925421e901850f1f254e","after_hash":"020ea7d5204a44183470f3c6024a32f0"},{"tool":"editDocument","kind":"changed","observed_at":"2026-10-07T19:50:34.088Z","fields":["description","inputSchema"],"description_before":"Edit a document: parse it, apply a JSON array of edit deltas, and return\nthe modified blocks (same shape as mcpParse with outputFormat \"blocks\").\ndeltas \"\" or \"[]\" returns the document unchanged. Office formats only:\ndocx, pptx, xlsx, odt, odp, ods. Give the document ONE way:\n  content + filename: the file base64-encoded, contentEncoding=\"base64\",\n    e.g. filename \"contract.docx\".\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\nTo get a file back, pass the edited blocks' Markdown to mcpConvert.","description_after":"Edit a document: parse it, apply a JSON array of edit deltas, and return\nthe modified blocks (same shape as mcpParse with outputFormat \"blocks\").\ndeltas \"\" or \"[]\" returns the document unchanged. Office formats only:\ndocx, pptx, xlsx, odt, odp, ods. Give the document ONE way:\n  fileRef: a file the user uploaded (mcp-file://docparse/file_...).\n  file: in ChatGPT, the file the user attached (ChatGPT fills it in).\n  content + filename: the file base64-encoded, contentEncoding=\"base64\",\n    e.g. filename \"contract.docx\".\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\nTo get a file back, pass the edited blocks' Markdown to mcpConvert.\nWhich way to send a file:\n  a file in your sandbox or workspace: call createUpload (one token PER\n    FILE; set count for several) and run its curl line, then pass the\n    fileRef here.\n  curl fails with a network error, or the user wants to pick a file: call\n    uploadDocument (the user chooses it in the AILANG Parse card). The card\n    parses the file; it does not convert or edit it.\n  a public https:// link; short text as content. In ChatGPT, file.\n  Never parse the file yourself (your own script, or your own reading of\n  it) and present that as this tool's result: if the file cannot be sent,\n  tell the user.","description_similarity":0.512,"before_hash":"05f14328aebac6a1c7ae93e094e7a133","after_hash":"5119992da42000d98aaa136621a9095d"},{"tool":"createUpload","kind":"added","observed_at":"2026-10-07T19:50:34.088Z","fields":[],"description_before":null,"description_after":"Get one-time upload links for files in your sandbox or workspace, when you\ncan run shell commands with network access (Claude Code, Codex, a code\nsandbox). One token PER FILE: a token uploads exactly one file. For several\nfiles set count (1..20) to get that many descriptors in one call. Each\ndescriptor has a curl line: run it where the file is (replace <path>); it\nprints a receipt with a fileRef. Then call mcpParse, mcpConvert or\neditDocument with that fileRef. Tokens work once, for 10 minutes.\nIf curl fails with a network error, or the user wants to pick a file,\ncall uploadDocument instead, or ask for an https:// link. Never parse the\nfile yourself.","description_similarity":null,"before_hash":null,"after_hash":"9e71099af6037b47077867defef0994d"},{"tool":"getUploadUrl","kind":"removed","observed_at":"2026-10-06T19:42:14.867Z","fields":[],"description_before":"Request a pre-authenticated GCS upload URL for direct file upload.\nBusiness tier only. The returned URL allows the client to PUT file content\ndirectly to GCS, bypassing the 32MB Cloud Run request limit.\nAfter upload, pass the gcs_ref to POST /api/v1/parse.","description_after":null,"description_similarity":null,"before_hash":"dd215824e9aba07f2e029ef8f81ae3a4","after_hash":null},{"tool":"mcpParse","kind":"changed","observed_at":"2026-10-06T19:42:14.867Z","fields":["description","inputSchema"],"description_before":"Parse a document. Accepts a file path or sample_id (e.g. \"sample_docx_formatting\").\nThe hosted server requires a valid dp_ API key — get one via mcpAuth.\napiKey may be omitted when the request sends Authorization: Bearer <key>\nor X-API-Key: <key>.\nOutput formats: blocks (default), markdown, html, a2ui.\nrequestId is reserved for future replay support.","description_after":"Parse a document into structured blocks, Markdown, HTML or A2UI.\nGive the document ONE way:\n  content + filename: the document itself. Text formats (Markdown, HTML,\n    CSV) as plain text; binary files (DOCX, PDF, PPTX, XLSX, ODT, EPUB, ...)\n    base64-encoded with contentEncoding=\"base64\". The filename's extension\n    picks the parser, e.g. \"report.docx\".\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\noutputFormat: blocks (default), markdown, html, a2ui.","description_similarity":0.207,"before_hash":"4bc09fc2955fc30062ef80669e7d60b4","after_hash":"e8464b6409577d9742f8a92d348183f8"},{"tool":"mcpFormats","kind":"changed","observed_at":"2026-10-06T19:42:14.867Z","fields":["description"],"description_before":"Supported formats, samples, and service capabilities. No auth required.\nDelegates to package implementation. Single source of truth lives in\npkg/sunholo/ailang_parse/services/mcp/tools — since ailang_parse 0.39.x the\nresponse carries a runtime capability block (state, not intent), which is\nwhy this is no longer pure: it reads env and probes the runtime (Process).","description_after":"What AILANG Parse can read and write, how to send it a document, and the\nsample documents you can try without one. No sign-in needed.","description_similarity":0.136,"before_hash":"fddf3d3a777e118926f74328bf4c51e6","after_hash":"128c103cf69cfcd7c6b3d07b6be0afb5"},{"tool":"mcpConvert","kind":"changed","observed_at":"2026-10-06T19:42:14.867Z","fields":["description","inputSchema"],"description_before":"Convert a document to another format. Targets: html, md, qmd, docx, pptx,\nxlsx, odt, odp, ods. `input` is a file path, a sample_id, an https:// URL,\nor a gs:// ref (Business tier). apiKey may be omitted when the request\nsends Authorization: Bearer <key> or X-API-Key: <key>.\n\nThe converted file comes back as base64 in the JSON response rather than\nwritten to disk, so decode `content` to get the bytes. `outputPath` is\naccepted but ignored; it stays in the signature because removing it would\nchange the auto-generated MCP tool schema for existing clients.","description_after":"Create a document in another format: docx, pptx, xlsx, odt, odp, ods, html,\nmd or qmd. To write a new document, write Markdown and send it as content\nwith filename \"notes.md\" (headings become slides in pptx). To convert an\nexisting document, give it ONE way:\n  content + filename: the document itself; binary files base64-encoded with\n    contentEncoding=\"base64\", text as plain text.\n  input: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats.\nThe result carries download_url, a link to the generated file valid for one\nhour: give it to the user. It also carries the file as base64 in content\n(encoding \"base64\"; text formats come back as utf8).","description_similarity":0.28,"before_hash":"1e36815c385732f3c59d6836374ceead","after_hash":"3e8d29762523925421e901850f1f254e"},{"tool":"mcpAccount","kind":"changed","observed_at":"2026-10-06T19:42:14.867Z","fields":["description"],"description_before":"View account info, pricing, entitlements, or list keys.\nActions:\n  \"status\"  (default) → tier, quota, usage from /me/entitlements\n  \"pricing\"           → public pricing tiers (no auth required)\n  \"keys\"              → list user's API keys with per-key usage\n  \"usage\"             → alias for \"keys\" (per-key usage is shown there)\n  \"history\"           → whether request history (parsed output kept for\n                        replay) is on for this account\n  \"history_on\" / \"history_off\" → change it for the account and all its keys\napiKey may be omitted when the request sends Authorization: Bearer <key>\nor X-API-Key: <key>.\nDeleting history is deliberately not an MCP action: it stays on\nPOST /api/v1/requests/delete and the dashboard.","description_after":"Your AILANG Parse account: plan, monthly usage and limits, your keys, and\nwhether request history is kept.\nActions:\n  \"status\"  (default) → plan, usage this month and remaining allowance\n  \"keys\"              → your keys with per-key usage (\"usage\" is an alias)\n  \"history\"           → whether request history (parsed output kept for\n                        replay) is on for your account\n  \"history_on\" / \"history_off\" → change it for the account and all its keys","description_similarity":0.372,"before_hash":"e90eff9f119ce1a7744312630b14ec69","after_hash":"1ac9dce82a08be24401435b3a3aa2458"},{"tool":"editDocument","kind":"changed","observed_at":"2026-10-06T19:42:14.867Z","fields":["description","inputSchema","annotations"],"description_before":"Parse a document, apply JSON edit deltas, and return the modified blocks\nas JSON (same format as POST /api/v1/parse with outputFormat=blocks).\n\nfilepath: uploaded file path (multipart upload).\ndeltas:   JSON array of edit operations — see edit_apply.ail for format.\n          Empty array or \"\" → round-trip (parse + return unchanged blocks).\napiKey:   dp_ API key.\n\nResponse: modified blocks JSON. Use the AILANG SDK or CLI to generate a\nfile from the returned blocks (e.g. ailang run ... --convert output.docx).\n\nOnly deterministic office formats are supported (docx, pptx, xlsx, odt, odp, ods).\nAI-required formats (pdf, image, audio, video) are rejected.","description_after":"Edit a document: parse it, apply a JSON array of edit deltas, and return\nthe modified blocks (same shape as mcpParse with outputFormat \"blocks\").\ndeltas \"\" or \"[]\" returns the document unchanged. Office formats only:\ndocx, pptx, xlsx, odt, odp, ods. Give the document ONE way:\n  content + filename: the file base64-encoded, contentEncoding=\"base64\",\n    e.g. filename \"contract.docx\".\n  filepath: an https:// URL of a publicly reachable document, or a sample id\n    from mcpFormats such as \"sample_docx_formatting\".\nTo get a file back, pass the edited blocks' Markdown to mcpConvert.","description_similarity":0.343,"before_hash":"a41811ea7126b3bef35167b8435eab0b","after_hash":"05f14328aebac6a1c7ae93e094e7a133"},{"tool":"mcpParse","kind":"changed","observed_at":"2026-10-06T08:12:23.981Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"bce86a7d8548299899c30084b041fbd8","after_hash":"4bc09fc2955fc30062ef80669e7d60b4"},{"tool":"mcpFormats","kind":"changed","observed_at":"2026-10-06T08:12:23.981Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"ff8e1587b9af914eb24391a2e0c22af6","after_hash":"fddf3d3a777e118926f74328bf4c51e6"},{"tool":"mcpEstimate","kind":"changed","observed_at":"2026-10-06T08:12:23.981Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"9a2d047d96d69117b3c000559618245f","after_hash":"dd9e0bf329c857e316c1bc9b3767ef21"},{"tool":"mcpConvert","kind":"changed","observed_at":"2026-10-06T08:12:23.981Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"8375d12cd01411f95aed305407bfa945","after_hash":"1e36815c385732f3c59d6836374ceead"},{"tool":"mcpAuthPoll","kind":"changed","observed_at":"2026-10-06T08:12:23.981Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"50f0b2ad2cc550351ea9371e51b4002d","after_hash":"965e7f19865e7101323bae1cb64d49e6"},{"tool":"editDocument","kind":"changed","observed_at":"2026-10-06T08:12:23.981Z","fields":["annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"cfef39ed8b06f018e721c2d563af8f6b","after_hash":"a41811ea7126b3bef35167b8435eab0b"},{"tool":"submit_feedback","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"ec56145227f3fedd2af9856343564664","after_hash":"f67e39844f8873002c0a6d6b08891e1a"},{"tool":"mcpParse","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","description","inputSchema","annotations"],"description_before":"Parse a document. Accepts a file path or sample_id (e.g. \"sample_docx_formatting\").\nThe hosted server requires a valid dp_ API key — get one via mcpAuth.\nOutput formats: blocks (default), markdown, html, a2ui.\nrequestId is reserved for future replay support.","description_after":"Parse a document. Accepts a file path or sample_id (e.g. \"sample_docx_formatting\").\nThe hosted server requires a valid dp_ API key — get one via mcpAuth.\napiKey may be omitted when the request sends Authorization: Bearer <key>\nor X-API-Key: <key>.\nOutput formats: blocks (default), markdown, html, a2ui.\nrequestId is reserved for future replay support.","description_similarity":0.796,"before_hash":"e781af6bb22e49114510f74e5c3d66e9","after_hash":"bce86a7d8548299899c30084b041fbd8"},{"tool":"mcpFormats","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","inputSchema","annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"e43f53fa8429256518d1fd1026a35ebf","after_hash":"ff8e1587b9af914eb24391a2e0c22af6"},{"tool":"mcpEstimate","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"6c23372c33a8f65442a5df5b1ce4138a","after_hash":"9a2d047d96d69117b3c000559618245f"},{"tool":"mcpConvert","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","description","inputSchema","annotations"],"description_before":"Convert a document to another format. Targets: html, md, qmd, docx, pptx,\nxlsx, odt, odp, ods. `input` is a file path, a sample_id, an https:// URL,\nor a gs:// ref (Business tier).\n\nThe converted file comes back as base64 in the JSON response rather than\nwritten to disk, so decode `content` to get the bytes. `outputPath` is\naccepted but ignored; it stays in the signature because removing it would\nchange the auto-generated MCP tool schema for existing clients.","description_after":"Convert a document to another format. Targets: html, md, qmd, docx, pptx,\nxlsx, odt, odp, ods. `input` is a file path, a sample_id, an https:// URL,\nor a gs:// ref (Business tier). apiKey may be omitted when the request\nsends Authorization: Bearer <key> or X-API-Key: <key>.\n\nThe converted file comes back as base64 in the JSON response rather than\nwritten to disk, so decode `content` to get the bytes. `outputPath` is\naccepted but ignored; it stays in the signature because removing it would\nchange the auto-generated MCP tool schema for existing clients.","description_similarity":0.848,"before_hash":"093ec19d2440aa219c50a3a598b40def","after_hash":"8375d12cd01411f95aed305407bfa945"},{"tool":"mcpAuthPoll","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"914a009ea70ba8ba000cca92d1df52d5","after_hash":"50f0b2ad2cc550351ea9371e51b4002d"},{"tool":"mcpAuth","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"bf24400ab2b216b9cc1238ea30ee3991","after_hash":"bf80cae8658faa43bdebb72e9948ea1a"},{"tool":"mcpAccount","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","description","inputSchema","annotations"],"description_before":"View account info, pricing, entitlements, or list keys.\nActions:\n  \"status\"  (default) → tier, quota, usage from /me/entitlements\n  \"pricing\"           → public pricing tiers (no auth required)\n  \"keys\"              → list user's API keys with per-key usage\n  \"usage\"             → alias for \"keys\" (per-key usage is shown there)\n  \"history\"           → whether request history (parsed output kept for\n                        replay) is on for this account\n  \"history_on\" / \"history_off\" → change it for the account and all its keys\nDeleting history is deliberately not an MCP action: it stays on\nPOST /api/v1/requests/delete and the dashboard.","description_after":"View account info, pricing, entitlements, or list keys.\nActions:\n  \"status\"  (default) → tier, quota, usage from /me/entitlements\n  \"pricing\"           → public pricing tiers (no auth required)\n  \"keys\"              → list user's API keys with per-key usage\n  \"usage\"             → alias for \"keys\" (per-key usage is shown there)\n  \"history\"           → whether request history (parsed output kept for\n                        replay) is on for this account\n  \"history_on\" / \"history_off\" → change it for the account and all its keys\napiKey may be omitted when the request sends Authorization: Bearer <key>\nor X-API-Key: <key>.\nDeleting history is deliberately not an MCP action: it stays on\nPOST /api/v1/requests/delete and the dashboard.","description_similarity":0.87,"before_hash":"c0a940d5b02adedde560ff5e0bf2efb8","after_hash":"e90eff9f119ce1a7744312630b14ec69"},{"tool":"getUploadUrl","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","inputSchema","annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"a259e219c163484d5500de3b5ba3408b","after_hash":"dd215824e9aba07f2e029ef8f81ae3a4"},{"tool":"editDocument","kind":"changed","observed_at":"2026-10-01T19:20:14.589Z","fields":["title","inputSchema","annotations"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"b0fa193ea9da30f65b8672c861289f77","after_hash":"cfef39ed8b06f018e721c2d563af8f6b"},{"tool":"mcpAccount","kind":"changed","observed_at":"2026-09-25T19:07:38.884Z","fields":["description"],"description_before":"View account info, pricing, entitlements, or list keys.\nActions:\n  \"status\"  (default) → tier, quota, usage from /me/entitlements\n  \"pricing\"           → public pricing tiers (no auth required)\n  \"keys\"              → list user's API keys with per-key usage\n  \"usage\"             → alias for \"keys\" (per-key usage is shown there)","description_after":"View account info, pricing, entitlements, or list keys.\nActions:\n  \"status\"  (default) → tier, quota, usage from /me/entitlements\n  \"pricing\"           → public pricing tiers (no auth required)\n  \"keys\"              → list user's API keys with per-key usage\n  \"usage\"             → alias for \"keys\" (per-key usage is shown there)\n  \"history\"           → whether request history (parsed output kept for\n                        replay) is on for this account\n  \"history_on\" / \"history_off\" → change it for the account and all its keys\nDeleting history is deliberately not an MCP action: it stays on\nPOST /api/v1/requests/delete and the dashboard.","description_similarity":0.533,"before_hash":"0fc6dab52e97a09b67d9e7cfad2867a4","after_hash":"c0a940d5b02adedde560ff5e0bf2efb8"}],"next_before":null,"next_actions":[]}