Skip to content

v3.6.0

Choose a tag to compare

@github-actions github-actions released this 18 Apr 04:00
· 68 commits to main since this release

Added

  • LM_MCP_CATEGORIES env var: filter the visible tool surface by logical category. Categories: read, write, delete, export, import, session, workflow. Composes by intersection with LM_ENABLED_TOOLS/LM_DISABLED_TOOLS -- only narrows, never expands. Useful for clients with tool-count limits (e.g., Cursor's 40-tool cap) and for restricting agent surface to read-only or workflow operations. Default behavior unchanged when env var is unset.
  • update_logicmodule(type, id, changes, mode='preview') workflow tool: safe partial update for LogicMonitor source types (configsource, datasource, eventsource, logsource, propertysource, topologysource). Exports the current full definition, deep-merges your changes onto it, validates required fields, and returns a dry-run diff (mode='preview', default) or applies the merged definition (mode='apply'). Prevents the full-replace blanking footgun that has caused two prior production incidents.

Changed

  • The 6 raw update_<source> tools (update_configsource, update_datasource, update_eventsource, update_logsource, update_propertysource, update_topologysource) now require confirm=true to proceed. Without confirmation they return CONFIRMATION_REQUIRED with a pointer to update_logicmodule for safe partial updates. This is a soft-breaking change for direct API users who relied on the old default; the rationale is that two prior incidents wiped Groovy scripts via these tools, and LLM-driven callers cannot be relied upon to read docstrings about full-replace semantics.
  • handle_error now logs unexpected exceptions via logger.exception() before returning the sanitized response. Previously, JSONDecodeError / KeyError / ValueError and other non-LMError exceptions were silently swallowed without leaving a stack trace, making debugging impossible. LMError instances continue to propagate without logging (they're expected).

Internal

  • New module src/lm_mcp/categories.py with annotation-driven categorization plus a curated WORKFLOW_TOOLS frozenset.
  • _filter_tools (server.py), execute_tool rejection (server.py), and check_required_tools (workflows.py) all honor the new categories filter.
  • Tool count: 235 -> 236 (added update_logicmodule).