Problem
The .claude/ tooling still describes the legacy single-file server
(openproject-mcp.py with list_tools() / call_tool() dispatch). The real code is modular
FastMCP: tools self-register via @mcp.tool in src/tools/*.py, with HTTP in src/client.py
and the server assembled in src/server.py. Anyone following the .claude commands today is led to
the wrong architecture.
Scope — files to change
.claude/config.json
primaryFiles lists openproject-mcp.py → should point at openproject-mcp-fastmcp.py and
src/tools/*.py / src/client.py.
runCommand = uv run python openproject-mcp.py → uv run python openproject-mcp-fastmcp.py.
alwaysInclude references a non-existent .env.example → actual file is env_example.txt
(see also the README fixups issue).
.claude/commands/add-tool.md — rewrite steps 2–4 ("add to list_tools()", "implement in
call_tool()") to the real pattern: add a @mcp.tool function in the right
src/tools/<domain>.py, a Pydantic input model (subclassing CoercibleModel where wrapped), and
a client method in src/client.py. Drop "single-file architecture".
.claude/commands/review-tool.md — replace list_tools() / call_tool() language with the
decorator/module pattern.
Out of scope
- Any runtime Python change.
- Rewriting the
.claude/README.md wholesale.
Acceptance criteria
- The
.claude config and commands describe steps that actually work against the current src/
layout; no references to openproject-mcp.py, list_tools(), or call_tool() remain.
Type: docs/tooling, low risk. Label: backlog.
Problem
The
.claude/tooling still describes the legacy single-file server(
openproject-mcp.pywithlist_tools()/call_tool()dispatch). The real code is modularFastMCP: tools self-register via
@mcp.toolinsrc/tools/*.py, with HTTP insrc/client.pyand the server assembled in
src/server.py. Anyone following the.claudecommands today is led tothe wrong architecture.
Scope — files to change
.claude/config.jsonprimaryFileslistsopenproject-mcp.py→ should point atopenproject-mcp-fastmcp.pyandsrc/tools/*.py/src/client.py.runCommand=uv run python openproject-mcp.py→uv run python openproject-mcp-fastmcp.py.alwaysIncludereferences a non-existent.env.example→ actual file isenv_example.txt(see also the README fixups issue).
.claude/commands/add-tool.md— rewrite steps 2–4 ("add tolist_tools()", "implement incall_tool()") to the real pattern: add a@mcp.toolfunction in the rightsrc/tools/<domain>.py, a Pydantic input model (subclassingCoercibleModelwhere wrapped), anda client method in
src/client.py. Drop "single-file architecture"..claude/commands/review-tool.md— replacelist_tools()/call_tool()language with thedecorator/module pattern.
Out of scope
.claude/README.mdwholesale.Acceptance criteria
.claudeconfig and commands describe steps that actually work against the currentsrc/layout; no references to
openproject-mcp.py,list_tools(), orcall_tool()remain.Type: docs/tooling, low risk. Label: backlog.