feat(mcp): project + milestone CRUD tools

Seven tools matching existing fable-mcp contracts:
  - fable_list/get/create/update_project (no delete; archive via status)
  - fable_list/create/update_milestone (no get; no delete)

LLM-era similarity-check / 'confirmed' guard for create_project is
NOT replicated — Claude doesn't need it. The service's auto-summary
regeneration side effect (services.projects.update_project) stays
for now; gets removed in Phase 7 along with all other LLM code.

Notable sentinels:
  - update_milestone: order_index=-1 means "leave unchanged" (0 is valid)
  - create_milestone: description="" becomes None at the service layer

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-26 20:24:07 -04:00
parent d086c9b606
commit 4d6bae77b4
5 changed files with 414 additions and 1 deletions
+5 -1
View File
@@ -4,7 +4,9 @@ Each tool module exposes a `register(mcp)` function that attaches its tools
to a FastMCP instance. `register_all(mcp)` is the single entry point called
from `mcp.server.build_mcp_server`.
"""
from fabledassistant.mcp.tools import notes, search, tasks
from fabledassistant.mcp.tools import (
milestones, notes, projects, search, tasks,
)
def register_all(mcp) -> None:
@@ -12,3 +14,5 @@ def register_all(mcp) -> None:
search.register(mcp)
notes.register(mcp)
tasks.register(mcp)
projects.register(mcp)
milestones.register(mcp)