github quazardous/nelson-mcp v0.10.0

latest releases: v0.14.4, v0.14.3, v0.14.2...
3 months ago

This release reworks the tool surface. No existing caller breaks: every
former tool name stays callable as an alias, it is simply no longer
advertised in tools/list. Custom endpoints and agent prompts configured
with old names keep working.

Changed

  • Redundant tools merged (#11) — 163 tools down to 140. Tools that differed only by verb now take an action: calc_sheet (was create/rename/delete/list/switch/summary), calc_chart (create/edit/delete/info/list), calc_condformat, calc_comment, calc_search (search/replace), gallery_query (list/search/get) and table_structure (add/delete rows or columns). image_list, frame_list and table_list absorbed their detail counterparts — pass a name to get one item's detail instead of the list. Nothing breaks: every former name stays callable, with the arguments its name implied pinned automatically (add_table_rows → table_structure with action=add, axis=rows). Measured: a Calc session drops from 63 tools / 10,467 tokens to 47 / 8,908 (-14.9%); Writer from 100 / 17,283 to 94 / 16,666
  • Tools renamed to a domain_verb convention (#11) — 156 of the 163 tools were inconsistently named (insert_image vs docs_gallery_list vs get_document_info), which made the set hard to scan and hard for an LLM to pick from. They now share a prefix per domain: image_*, text_*, table_*, nav_*, doc_*, calc_*, draw_*, shape_*, frame_*, style_*, comment_*, change_*, link_*, section_*, bookmark_*, header_footer_*, workflow_*, task_*, summary_*, batch_*, job_*, gallery_*/docgallery_*. Nothing breaks: every former name remains callable as an alias, it is simply no longer advertised in tools/list. Shape tools are prefixed shape_ rather than draw_ because they work on any document type with a drawing layer, not just Draw/Impress
  • tools/list payload cut by ~17% (#11) — the _document meta-parameter is injected on ~96 tools, so its description was repeated ~96 times and made up 31% of the entire schema payload; it is now terse. Multi-type tools also shipped their calc/draw option blocks to Writer sessions (and vice versa) even though only the block matching the active document type can apply — the inapplicable ones are now dropped (the full schema is still sent when no document is open). Measured on a Writer document: 20,767 → 17,281 tokens for the same 100 tools

Added

  • Tool aliases (#11) — a tool can declare aliases = [...]: former names stay callable but are never advertised in tools/list, so renaming a tool no longer breaks existing callers. Custom-endpoint tool filters and tools/call both resolve through the alias map, so an endpoint configured with a tool's old name keeps working

Fixed

  • make test is a usable gate again — the suite aborted during collection, so nothing was actually gated on it. tests/legacy/ (13 files) imported core.* and chatbot, packages removed in the framework rewrite; the two that did import contained no assertion at all. They are gone (git history keeps them). Five config tests still expected a nelson.json that has not existed since config moved to the LibreOffice registry, and three tool-registry tests asserted an error contract replaced by structured MCP errors. 77 tests pass, none fail
  • Config writes could vanish silently — ConfigService stores values in the LibreOffice configuration registry, and a write with no UNO context returned without storing anything and without a word in the log, so a later read quietly returned the default. It now warns, reports whether the value was stored, and accepts an in-memory store (which is what makes the service testable outside LibreOffice)
  • A logo inserted into a header no longer overlaps the body text (#18) — reported by @braklo on 0.9.4. The image was anchored AT_CHARACTER, so it floated above the text without contributing to the line height: the header kept its original height and the image spilled over the header text and down into the body. Images inserted into a header or footer are now anchored AS_CHARACTER (in the text flow) and the region is set to grow with its content, so it sizes itself to the image with no manual step. set_header_footer gains an auto_height parameter and get_header_footer now reports auto_height and height_mm; insert_image accepts writer.auto_height: false to opt out
  • HTTP server failed to start after a restart — relaunching LibreOffice raced the previous process releasing the port, so the bind failed with [Errno 98] Address already in use and the server never came up (the HTTP server ready line was never logged). The socket now sets allow_reuse_address and retries the bind briefly before giving up with a plain message naming the port. A failed start also no longer discards the handle to an already-running server, and the server is not started twice
  • Aliased calls were wrongly rejected when no document was open (#11) — the requires_doc pre-check bypassed alias resolution, so a tool invoked by a former name looked unknown and was treated as requiring an open document

Don't miss a new nelson-mcp release

NewReleases is sending notifications on new releases.