Add task plugin as an extension

Adds tools and skills for the task plugin into the extension framework
as a sibling package. `register()` wires up the tools `get_task_tree`
and `get_actionable_tasks` via `@requires_plugin("task")` so they
auto-route to hosts with the task plugin or raise a RuntimeError when
no host has it.

Both tools return a TypedDict (`_TaskTreeResult`,
`_ActionableTasksResult`) so the MCP SDK auto-generates an output_schema
and emits structured content alongside the text fallback. Error paths
raise exceptions rather than returning text/JSON-string error payloads.

Wire the sibling package into the build via a uv workspace: declare
`gerrit_mcp_server_task` as a workspace member and add it to the core
project's dependencies. Listing it as a plain dependency (rather than
relying on `uv sync --all-packages`) is what guarantees a plain
`uv sync` installs it, so its `gerrit_mcp_server.extensions` entry
point is discovered at startup and survives the `uv run` launch path.
The `gerrit-mcp-server = { workspace = true }` source is required for
the member to resolve its own dependency on the core package.

Update the build-and-run integration test to copy the new sibling
package into its clean-build temp dir; without it the workspace build
fails on the missing member.

Includes a gerrit-task-query skill and 15 unit tests covering
`_find_actionable` traversal and both registered tools.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Change-Id: I8c1bc9745962dbc7b355a1cb1220ffb07a141533
12 files changed
tree: 371f9ec9be399fd7af6bed8d344cd2813b641a9f
  1. .claude/
  2. .claude-plugin/
  3. .gemini/
  4. docs/
  5. gerrit_mcp_server/
  6. gerrit_mcp_server_task/
  7. hooks/
  8. skills/
  9. tests/
  10. .gitignore
  11. .mcp.json
  12. AGENTS.md
  13. build-gerrit.sh
  14. gemini-cli-config.template.json
  15. gemini-extension.json
  16. LICENSE
  17. OWNERS
  18. pyproject.toml
  19. README.md
  20. server.sh
  21. uv.lock
README.md

🐍 Gerrit MCP Server

An MCP (Model Context Protocol) server for interacting with the Gerrit code review system. This server allows a language model like Gemini to query changes, retrieve details, and manage reviews by executing curl commands against the Gerrit REST API.

This server can be run as a persistent HTTP server or on-demand via STDIO.

📚 Documentation

For detailed information, please see the documents in the docs/ directory:

  • Configuration: A detailed guide to the gerrit_config.json file and all authentication methods.
  • Testing Guide: Instructions on how to run the unit, integration, and E2E tests.
  • Gemini CLI Setup: How to configure the Gemini CLI to use this server.
  • Claude Code Setup: How to use this server as a Claude Code plugin.
  • Best Practices: Tips for using the server effectively.
  • Contributing: Guidelines for contributing to the project.
  • Available Tools: A list of all available tools and their descriptions.
  • Extensions: How to register additional MCP tools without modifying the core server.
  • Example Use Cases: Scenarios demonstrating how to use the server.

🚀 Getting Started

1. Prerequisites

Before you begin, ensure you have the following tools installed and available in your system's PATH.

  • Python 3.12+: Required by the server.
  • uv: Used for dependency management and running the server. Optional — the build script will install it via pip if absent.
  • curl: The standard command-line tool for transferring data with URLs.

2. Build the Environment

Run the build script from the root of the gerrit-mcp-server project directory. This will create a virtual environment in .venv via uv sync and install all dependencies.

./build-gerrit.sh

3. Configure the Server

You will need to create a gerrit_config.json file inside the gerrit_mcp_server directory. Copy the provided sample file gerrit_mcp_server/gerrit_config.sample.json and customize it for your environment. See the Configuration Guide for details on all available options.

cp gerrit_mcp_server/gerrit_config.sample.json gerrit_mcp_server/gerrit_config.json

Alternatively, if your harness supports skills (tested with Claude Code), the /gerrit:setup skill can create or repair this file for you interactively. See Interactive Setup.

4. Run the Server (HTTP Mode)

To run the server as a persistent background process, use the server.sh script:

  • Start the server:
    ./server.sh start
    
  • Check the status:
    ./server.sh status
    
  • Stop the server:
    ./server.sh stop
    

For on-demand STDIO mode, please see the Gemini CLI Setup Guide or, to use this server as a Claude Code plugin, the Claude Code Setup Guide.

Security

This is not an officially supported Google product. This project is not eligible for the Google Open Source Software Vulnerability Rewards Program.