#!/bin/env vpython3 # Copyright 2025 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """The MCP server that provides tools""" from collections.abc import Sequence import pathlib import os import sys sys.path.insert( 0, os.path.abspath( pathlib.Path(__file__).resolve().parent.parent.joinpath( pathlib.Path('infra_lib')))) from absl import app from mcp.server import fastmcp # pylint: disable=import-self import telemetry import buildbucket import resultdb import git_cl mcp = fastmcp.FastMCP('chrome-infra-mcp') def main(argv: Sequence[str]) -> None: if len(argv) > 1: raise app.UsageError('Too many command-line arguments.') # Only initialize telemetry if the user is opted in. The MCP does not # currently have the ability to show the banner so we need to rely on other # tools to get consent if telemetry.opted_in(): telemetry.initialize('chromium.mcp') mcp.add_tool(buildbucket.get_build) mcp.add_tool(buildbucket.get_build_from_build_number) mcp.add_tool(buildbucket.get_build_from_id) mcp.add_tool(buildbucket.get_build_status) mcp.add_tool(buildbucket.get_recent_builds) mcp.add_tool(buildbucket.get_recent_failed_builds) mcp.add_tool(resultdb.expand_summary_html) mcp.add_tool(resultdb.get_non_exonerated_unexpected_results_from_build) mcp.add_tool(resultdb.get_test_level_text_artifact) mcp.add_tool(git_cl.try_builder_results) mcp.add_tool(git_cl.get_current_changes) mcp.add_tool(git_cl.format_checkout) mcp.add_tool(git_cl.upload_change_list) mcp.run() if __name__ == '__main__': app.run(main)