feat(mcp)!: add serve/list-tools/call subcommands to taiga-mcp-server - #272
Open
yakky wants to merge 10 commits into
Open
feat(mcp)!: add serve/list-tools/call subcommands to taiga-mcp-server#272yakky wants to merge 10 commits into
yakky wants to merge 10 commits into
Conversation
Analysis comparing this repo's hand-implemented, SDK-driven MCP tool set against ring-mcp-server's dynamic OpenAPI-generated one, and an approved design closing the CLI/invocation-method gap: add serve, list-tools, and call <tool> --json subcommands to taiga-mcp-server via a Typer rewrite of cli.py, without touching tool architecture. Breaking change flagged: bare 'taiga-mcp-server' will require an explicit 'serve' subcommand going forward. GitHub issue: 14039
Step-by-step TDD plan executing the approved design: Typer rewrite of cli.py adding serve/list-tools/call subcommands, docs updates, and towncrier changelog fragments. GitHub issue: 14039
BREAKING CHANGE: bare 'taiga-mcp-server' with no subcommand no longer starts the MCP server. Existing MCP client configs invoking the binary with no arguments must add ' serve'. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## feature/issue-267-add-mcp #272 +/- ##
=============================================================
- Coverage 96.93% 96.73% -0.21%
=============================================================
Files 12 12
Lines 1271 1315 +44
Branches 90 95 +5
=============================================================
+ Hits 1232 1272 +40
- Misses 22 26 +4
Partials 17 17
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
- Correct spec/plan wording: bare taiga-mcp-server invocation exits 2 (Click's usage-error path for Typer's no_args_is_help), not 0 as previously (incorrectly) documented; verified against the installed click/typer in .tox/py313. - Pin the bare-invocation exit code in test_bare_invocation_no_longer_serves (exit_code != 0). - Fix docs/mcp.rst uvx install example so it no longer implies running the bare (now-erroring) command; use --help instead. - Import ValidationError from the public pydantic package instead of the internal pydantic_core (same class, stable import path). - Surface the --token/--password process-list warning on the root --help and call --help, not just serve --help. - Document the taiga.mcp_server.cli.main() signature change (argv: list[str] | None = None) -> int to () -> None in the 14039.removal changelog fragment. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdNTA2ZXdKMYs1MBCF4uB4
yakky
force-pushed
the
feature/issue-14039-taiga-mcp-cli-parity
branch
from
August 31, 2026 12:29
e45e411 to
468615c
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
Adds explicit MCP CLI subcommands while retaining existing server tools.
Changes:
- Adds
serve,list-tools,call, and--version. - Adds Typer, tests, documentation, and changelog entries.
- Updates MCP registration examples and artifact handling.
Reviewed changes
Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
taiga/mcp_server/cli.py |
Implements the Typer CLI. |
tests/test_mcp_server_cli.py |
Tests commands and errors. |
setup.cfg |
Adds Typer dependency. |
docs/mcp.rst |
Documents CLI usage. |
AGENTS.md |
Updates registration commands. |
changes/14039.feature |
Records new commands. |
changes/14039.removal |
Records breaking invocation change. |
.gitignore |
Ignores artifacts. |
artifacts/activity-log.md |
Removes prior activity log. |
artifacts/evaluations/2026-08-24-mcp-sdk-rewrite.md |
Removes prior evaluation. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+141
to
+145
| try: | ||
| parsed_arguments = json.loads(arguments) | ||
| except json.JSONDecodeError as exc: | ||
| typer.echo(f"Invalid JSON in --json: {exc}", err=True) | ||
| raise typer.Exit(1) from exc |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Gives
taiga-mcp-serverthe same CLI verb shape and invocation method as thesibling
ring-mcp-serverproject, without changing this repo's architecture:every Taiga operation stays a hand-implemented
@mcp.tool()function intaiga/mcp_server/server.py— nothing there was touched.taiga/mcp_server/cli.pyis rewritten fromargparsetotyper, adding:taiga-mcp-server serve— the existing behavior, now behind an explicitsubcommand instead of the bare invocation.
taiga-mcp-server list-tools [--verbose/-v]— lists all tools directlyfrom a shell, without an MCP client.
taiga-mcp-server call <tool_name> --json/-j '<json>'— calls a singletool directly, with full error handling (unknown tool, invalid JSON,
argument validation failure, tool-internal exceptions).
Breaking change: bare
taiga-mcp-server(no subcommand) no longerstarts the server — it now requires the explicit
servesubcommand. Anyexisting MCP client config invoking the binary with no arguments needs
serveappended. Seechanges/14039.removalfor the full changelog entry.Full design rationale and the step-by-step implementation plan are included
in this PR under
artifacts/specs/2026-08-31-mcp-cli-parity-design.mdandartifacts/plans/2026-08-31-mcp-cli-parity.md.This PR is based on
feature/issue-267-add-mcp(rather thanmaster)since
taiga/mcp_server/doesn't exist onmasteryet — it should berebased onto
masteronce that branch merges, before this one does.AI assistance disclosure: implemented via Claude Code using a
subagent-driven-development workflow (fresh implementer + reviewer per
task, TDD, a final whole-branch review, one fix round). All commits,
test runs, and lint checks are real and independently reviewed; nothing
here is unverified.
References
No corresponding GitHub issue exists in this repository. This work
originates from Nephila Taiga ticket us-14039 (tracked on the
ring-mcp-serverside, where the comparative design analysis began).Checklist
inv lint(verified viatox -e ruff,black,isort, clean)changesfile included (changes/14039.feature,changes/14039.removal)docs/mcp.rst,AGENTS.md)