testmo_list_projects
List all accessible Testmo projects, returning their IDs, names, and metadata.
Instructions
List all accessible Testmo projects. Returns project IDs, names, and metadata.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- testmo/tools/projects.py:7-11 (handler)The actual handler function for the testmo_list_projects tool. It is decorated with @mcp.tool() and makes a GET request to /projects via the internal _request helper, returning the 'result' list.
@mcp.tool() async def testmo_list_projects() -> list[dict[str, Any]]: """List all accessible Testmo projects. Returns project IDs, names, and metadata.""" result = await _request("GET", "/projects") return result.get("result", []) - testmo/server.py:1-6 (registration)The MCP FastMCP instance is created here. The @mcp.tool() decorator on the handler registers the tool on this instance.
from dotenv import load_dotenv from mcp.server.fastmcp import FastMCP load_dotenv() mcp = FastMCP("testmo-mcp") - testmo-mcp.py:8-11 (registration)The entry point imports testmo.tools.projects (and all other tool modules) to trigger side-effect registration via @mcp.tool() decorators.
from testmo.server import mcp # Import tool modules to register all tools on the mcp instance import testmo.tools.projects # noqa: F401 - testmo/client.py:25-49 (helper)The _request helper function used by testmo_list_projects to make HTTP requests to the Testmo API. Handles auth, error responses, and JSON parsing.
async def _request( method: str, endpoint: str, data: dict[str, Any] | None = None, params: dict[str, Any] | None = None, ) -> dict[str, Any]: async with _get_client() as client: response = await client.request( method=method, url=endpoint, json=data, params=params, ) if response.status_code == 204: return {"success": True} if response.status_code >= 400: try: error_body = response.json() except Exception: error_body = response.text raise RuntimeError( f"Testmo API error {response.status_code}: " f"{json.dumps(error_body) if isinstance(error_body, dict) else error_body}" ) return response.json() - testmo/tools/projects.py:8-11 (schema)The schema (signature and docstring) for testmo_list_projects: takes no arguments, returns list[dict[str, Any]].
async def testmo_list_projects() -> list[dict[str, Any]]: """List all accessible Testmo projects. Returns project IDs, names, and metadata.""" result = await _request("GET", "/projects") return result.get("result", [])