Files
pi_mcps/.roo/rules-mcp-builder/00-mcp-builder-behavior.md
Patrick Plate 9c2422d0a7 chore(roo): document git-based wiki workflow in rules, skill, and README
- mcp-builder rules: add wiki/ to structure diagram, add Wiki Update
  Workflow section (MANDATORY), update After Building a Server checklist
- gitea-push skill: add wiki deploy as a valid use case
- README.md: add wiki section with deploy_wiki.sh pointer, add
  mcp-image-gen to MCP servers table
2026-04-05 09:53:05 +02:00

4.0 KiB

MCP Builder Mode Behavior — Roo Code

Active Persona: Craftsman Patrick

Patrick is in MCP Builder mindset. He is building or extending MCP servers in the pi_mcps monorepo. Consistency and testability are the highest values — every server should feel like it belongs in the same ecosystem.

pi_mcps Structure (always active in this mode)

~/pi_mcps/
  mcp/
    {server-name}/          ← one dir per server
      src/
        server.py           ← FastMCP server (single file)
        __init__.py
      tests/
        conftest.py         ← sys.path + shared fixtures
        test_server.py      ← 100% mock coverage
      pyproject.toml        ← name=mcp-{name}, uv-managed
      README.md
  java/                     ← Java projects (not MCP servers)
  plans/                    ← architecture plans
  docs/
    wiki/
      pages/                ← wiki source (tracked in pi_mcps)
        Home.md, _Sidebar.md, ...
      deploy_wiki.sh        ← copies pages → wiki/ → git push
  wiki/                     ← gitignored: persistent clone of pi_mcps.wiki.git

Wiki Update Workflow (MANDATORY after adding/changing a server)

Wiki source lives in docs/wiki/pages/*.md — real Markdown files, tracked in the main repo.

# 1. Edit the relevant page(s) in docs/wiki/pages/
# 2. Deploy to Gitea wiki:
./docs/wiki/deploy_wiki.sh "docs: describe your change"

First-time setup (wiki/ clone, done once):

TOKEN=8bf0c734ebda3e61d9c9068489ce58a2bf8d33db
git clone http://pplate:${TOKEN}@192.168.188.119:30008/pplate/pi_mcps.wiki.git wiki/

FastMCP Pattern (non-negotiable)

from fastmcp import FastMCP

mcp = FastMCP("server-name")

@mcp.tool()
def tool_name(param: str) -> str:
    """Tool description."""
    ...

if __name__ == "__main__":
    mcp.run()

Before Starting Any MCP Build

  1. Search Existing Patterns: memory_search_facts("pi_mcps server") + memory_search_chunks("FastMCP pattern")
  2. Check Gitea: Does a similar server already exist in pi_mcps?
  3. Create a branch (MANDATORY — never work on main):
    git checkout -b feat/mcp/{server-name}
    # or fix/mcp/{server-name} for a bug fix
    
  4. Write PLAN.md: Purpose, tools list with signatures, tech stack, v1 scope boundaries
  5. Announce Focus: memory_announce_focus(session_id, "MCP Builder: new server X on branch feat/mcp/X", files=["mcp/X/src/server.py"], ide_hint="VS Code")
  6. Form Hypothesis: memory_add_hypothesis(session_id, "Server X will need N tools and Y authentication pattern")

Standard Build Sequence

  1. mcp/{name}/PLAN.md — purpose, tools, tech stack
  2. mcp/{name}/src/__init__.py — empty
  3. mcp/{name}/src/server.py — FastMCP server with all tools
  4. mcp/{name}/tests/conftest.py — sys.path + fixtures
  5. mcp/{name}/tests/test_server.py — full mock coverage
  6. mcp/{name}/pyproject.toml — uv + fastmcp + deps
  7. mcp/{name}/README.md — usage, env vars, tool list

pyproject.toml Conventions

[project]
name = "mcp-{name}"
requires-python = ">=3.11"
dependencies = ["fastmcp>=0.1.0", ...]

[project.optional-dependencies]
test = ["pytest", "pytest-mock", "pytest-cov"]

Test Conventions

  • Mock ALL external calls (HTTP, filesystem, subprocess)
  • Use monkeypatch for env vars and module-level state
  • conftest.py: sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
  • Aim for 100% tool function coverage
  • Run: uv run pytest tests/ -v

After Building a Server

  1. Store Fact: memory_store_fact("codebase", "mcp/{name} has N tools: [list]. Stack: X. Env vars: Y.")
  2. Wire into .roo/mcp.json: Add the server entry with correct uv path
  3. Update root README.md: Add to MCPs table
  4. Update wiki: Create or update docs/wiki/pages/{server-name}.md + update MCP-Servers-Overview.md, then run ./docs/wiki/deploy_wiki.sh
  5. Push to Gitea: Conventional commit: feat(mcp-{name}): add initial server with N tools
  6. Resolve Hypothesis: Was the tool count and auth pattern as predicted?