2.0 KiB
2.0 KiB
Style And Conventions
General:
- Python 3.14,
src/layout, Pydantic v2 where external/boundary validation is useful. - Prefer explicit dataclasses for runtime/internal models and Pydantic for config/wire-ish boundary validation.
- Async-first for MCP calls and workflow runtime interactions.
- Keep MCP proxy concepts separate from workflow-specific concepts like
outcome. - Do not leak workflow-only fields into MCP
tools/list.
MCP/proxy conventions:
- Transparent proxy mode is the product path; old broker mode is secondary/debug/admin-oriented.
- Admin tools live under the reserved namespace
wf.mcp_*. - Upstream FastMCP names use Namespace behavior:
<connection_id>_<local_tool_name>, e.g.everything.default_echo. - Keep name parsing and unmangling in
names.py; do not scatter string slicing across modules. - Keep cursor mechanics in
pagination.py; use opaque cursors andnextCursorto mirror MCP pagination style. - Keep config disk writes in
config_manager.py; transparent proxy code should expose/administer behavior, not own JSON mutation details. wf_mcp.config.jsonis user-owned live config. Do not edit/revert it unless explicitly asked.
Code style:
- Use precise type hints and modern Python collection syntax (
list[str],dict[str, Any]). - Keep modules layered by responsibility; avoid stuffing everything into service/runtime files.
- Prefer small helper modules when behavior becomes a boundary (
config_models.py,config_manager.py,proxy_validation.py,names.py,pagination.py). - Validation should fail early with clear errors.
- Tests should exercise behavior through public APIs/MCP calls where practical.
- For MCP client
CallToolResult.structured_content, guard forNonein tests before subscripting; use helper assertions where useful.
Editing rules from repo collaboration:
- Use
apply_patchfor manual code edits. - Do not revert user-owned changes.
- Direct Serena MCP is available and can be used for semantic navigation/editing; onboarding is already complete.