{"serverId":"mcp-registry/com.sumoffice/office","tools":[{"name":"document_describe","fixed":{"name":"document_describe","description":"Name, pages, paragraphs, words, number of comments and tracked changes, whether track changes is on. For documents; call first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"What the document is"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":76,"tokensAfter":76},{"name":"document_export_pdf","fixed":{"name":"document_export_pdf","description":"Lay out the document as it is now in this session's cabin (after applied proposals, or as opened) and return a PDF download link valid for 24 hours, plus the page count. Documents only; for workbooks use document_save_copy.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Render the document to PDF"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"document_find","fixed":{"name":"document_find","description":"Paragraphs containing the text (case-insensitive), with snippets around the match.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"query":{"type":"string","maxLength":200,"minLength":2}}},"annotations":{"readOnlyHint":true},"title":"Find in the document"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"document_read","fixed":{"name":"document_read","description":"Paragraph text as a window: from = index of the first paragraph (0-based), count = how many (max 40). The answer carries next — where to continue, null at the end. A missing paragraph is a refusal, not an invention.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["from"],"properties":{"from":{"type":"integer","maximum":9007199254740991,"minimum":0},"count":{"type":"integer","maximum":40,"minimum":1}}},"annotations":{"readOnlyHint":true},"title":"Read paragraphs"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"macro_list","fixed":{"name":"macro_list","description":"List VBA modules and runnable macros (entry points) in this workbook with their route and blockers. Runs nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"macro_read_source","fixed":{"name":"macro_read_source","description":"Read the source text of one procedure (module + procedure name from macro_list). Read-only; runs nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["module","procedure"],"properties":{"module":{"type":"string"},"procedure":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"query_explain","fixed":{"name":"query_explain","description":"Explain one Power Query query by name: its steps in order, where it loads, its connection. Reads only; refreshes nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"query_list","fixed":{"name":"query_list","description":"List Power Query queries in this workbook: names, step chain, load target, connections. Reads only; refreshes nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":72,"tokensAfter":72},{"name":"sheet_describe","fixed":{"name":"sheet_describe","description":"Workbook overview: every sheet tab with its used range, the current revision, and the header row of the sheet that is open. Call this first, then pass the tab name you need as \"sheet\" to sheet_read and sheet_find.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"sheet_find","fixed":{"name":"sheet_find","description":"Find cells whose value or formula contains the text (case-insensitive) in the used range of a sheet. ALWAYS pass \"sheet\" with the exact tab name when the workbook has more than one sheet: without it only the sheet that happens to be open is searched.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"query":{"type":"string","maxLength":100,"minLength":1},"sheet":{"type":"string","description":"Exact tab name. Required when the workbook has more than one sheet."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"sheet_read","fixed":{"name":"sheet_read","description":"Read a rectangular range like A1:F20 (max 60 rows × 26 columns): values and formulas. Empty cells are omitted. ALWAYS pass \"sheet\" with the exact tab name when the workbook has more than one sheet — without it you read whichever sheet happens to be open, and the answer will quietly be about the wrong sheet. Call sheet_describe first if you do not know the tab names.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["range"],"properties":{"range":{"type":"string"},"sheet":{"type":"string","description":"Exact tab name, e.g. \"Logical\". Required when the workbook has more than one sheet."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":190,"tokensAfter":190}],"toolsChanged":11,"tokensSaved":0,"todo":[{"tool":"document_apply","params":["proposal_id"]},{"tool":"document_find","params":["query"]},{"tool":"document_open","params":["slug"]},{"tool":"document_open_file","params":["url","name","path","base64"]},{"tool":"document_propose_replacement","params":["text","reason","paragraph_index"]},{"tool":"document_read","params":["from","count"]},{"tool":"macro_plan","params":["active_sheet"]},{"tool":"macro_read_source","params":["module","procedure"]},{"tool":"query_explain","params":["name"]},{"tool":"sheet_apply","params":["proposal_id"]},{"tool":"sheet_find","params":["query"]},{"tool":"sheet_propose_edits","params":["edits","sheet","reason"]},{"tool":"sheet_read","params":["range"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}