MCP framework: FastMCP 3 task surface + R33 9th cascade surface (Bible v19.1.7+)
Two reusable findings from Fivetran v19.1.5 → v19.1.7 upgrade — now canonical in Bible main (PR #19 squash 9c41f847 on ARJ999/MCP-God-Agent-Development-Bible).
1. FastMCP 3 task surface is tool.task_config.mode, NOT getattr(tool, "task")
When testing R24 backend-conditional task gating (Bible 09 Check 12.3.1), the task-primitive state lives at tool.task_config.mode:
"optional"→ Tasks primitive active (set by@mcp.tool(task=True))"forbidden"→ suppressed (default for non-task tools OR auto-suppressed by R24 on memory:// backend)
Test authors who assert on getattr(tool, "task", None) get None for BOTH enabled and disabled — silent-correctness trap. Fivetran’s reference 4-test pytest suite uses tool.task_config.mode correctly: tests/guardrails/test_check_12_3_1_r24_runtime.py on ARJ999/FiveTran-God-Agent-MCP master.
2. R13 cascade surface 9 — pyproject.toml header comment + description
Pre-v19.1.7, R13 enumerated 8 cascade surfaces. Fivetran’s pyproject.toml carried stale # Bible v19.1.1 compliant and description = "...Bible v19.1.1..." across 6 consecutive Bible cycles (v19.1.2 through v19.1.7) while all 8 other surfaces moved correctly. Root cause: structural adjacency to the SERVER version = "19.1.1" field caused visual-similarity cascade blindness — authors updated server version but left the Bible-version comment alone.
PR #19 added surface 9 (pyproject.toml header comment + description) to R33 in 14_FRAMEWORK_REFINEMENTS_v19.1.7.md, partitioned all 9 surfaces by scale (server-version vs framework-version), and added grep-checks for cascade-check.sh.
Apply to
Every MCP pair upgrade going forward (Snowflake, Tableau, Salesforce next-cycle, etc.) inherits both refinements automatically. When writing R24 runtime-lint tests for any new pair, dual-assert pattern is the new minimum: (a) get_tasks() == [] AND (b) sample long-running tool has task_config.mode == "forbidden" on memory://. Single-assert (a) alone passes vacuously when pair declares zero task=True tools — doesn’t prove gate is wired.
Reference pilot: ARJ999/FiveTran-God-Agent-MCP commits 4e17419 (cascade) + 5451c2c (pairing-contract residual) on master. Pilot-learnings final-state block in docs/pilot-learnings.md § [2026-04-25].