Coverage for gco_mcp / resources / iam_policies.py: 100.00%
19 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-09-14 22:07 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-09-14 22:07 +0000
1"""IAM policy resources (iam:// scheme) for the GCO MCP server."""
3from cli_runner import PROJECT_ROOT # runtime-resolved checkout root (uvx-safe)
4from server import mcp
6IAM_POLICIES_DIR = PROJECT_ROOT / "docs" / "iam-policies"
9@mcp.resource("iam://gco/policies/index")
10def iam_policies_index() -> str:
11 """List available IAM policy templates for GCO access control."""
12 lines = ["# IAM Policy Templates\n"]
13 for f in sorted(IAM_POLICIES_DIR.glob("*.json")):
14 lines.append(f"- `iam://gco/policies/{f.name}` — {f.stem}")
15 readme = IAM_POLICIES_DIR / "README.md"
16 if readme.is_file():
17 lines.append("\n- `iam://gco/policies/README.md` — policy documentation")
18 return "\n".join(lines)
21@mcp.resource("iam://gco/policies/{filename}")
22def iam_policy_resource(filename: str) -> str:
23 """Read an IAM policy template."""
24 path = IAM_POLICIES_DIR / filename
25 if not path.is_file():
26 available = sorted(f.name for f in IAM_POLICIES_DIR.glob("*") if f.is_file())
27 return f"Policy '{filename}' not found. Available:\n" + "\n".join(available)
28 return path.read_text()