OSVauco/agents/mcp_server/README.md
Chris Christiansen 73b03dff0e
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
docs(opax): document staged MCP rollout workflow
2026-09-23 05:38:30 +00:00

113 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OPAX-MCP — Vauco sin CI/CD-kanal mot GCP
**CI1a** | **Service:** `opax-mcp` | **Region:** `us-central1`
Vauco sin egen MCP-server som erstatter GitHub Actions som CI/CD-trigger.
Jason og Emma kaller denne direkte for å deploye, pushe statiske filer og hente status.
## Arkitektur
```
Chris / Jason (Cloud Run) / Emma (Gemma GPU-VM) / Perplexity (stand-in)
POST /mcp/call {tool: "push_static", params: {...}}
OPAX-MCP (Cloud Run opax-mcp, IAP-beskyttet)
GCP APIs: GCS · Cloud Build · Cloud Run · Cloud Logging
Resultat returneres til kalleren
```
## Tilgjengelige verktøy
| Tool | Endepunkt | Beskrivelse |
|------|-----------|-------------|
| `push_static` | `POST /tools/push_static` | Last opp HTML/CSS/JS til GCS |
| `get_build_status` | `GET /tools/get_build_status` | Hent siste Cloud Build-status |
| `deploy_service` | `POST /tools/deploy_service` | Trigger Cloud Build → Cloud Run deploy |
| `get_logs` | `GET /tools/get_logs` | Hent Cloud Run-logger |
Alle verktøy er også tilgjengelig via det unifiserte endepunktet:
```
POST /mcp/call
{"tool": "push_static", "params": {"file_path": "static/jason.html", "content": "..."}}
```
## Auth
- **Utvikling:** `X-MCP-Key` header (Secret Manager: `mcp-server-key`)
- **Produksjon:** Cloud Run er `--no-allow-unauthenticated` + IAP
- **Jason/Emma:** Kaller via ADK tool med service-account `jason.vauger@vauco.no`
## Deploy
```bash
# Første gang: opprett secret
echo -n "$(openssl rand -hex 32)" | \
gcloud secrets create mcp-server-key \
--data-file=- \
--project=propane-will-491900-m5
# Deploy opax-mcp
gcloud builds submit \
--config agents/mcp_server/cloudbuild.yaml \
--project=propane-will-491900-m5 \
.
```
### Observed Staged Rollout Behavior (2026-09-23)
During the 2026-09-23 rollout, the `opax-mcp` service traffic configuration was
explicitly pinned to a single production revision. Observations from that rollout
include:
- Candidate revisions created outside the tagged staged flow were observed to
retire before a later promotion decision.
- A candidate deployed with both `--no-traffic` and a unique `--tag` remained
active and addressable for a health check.
- Promotion required a separate, explicit `gcloud run services update-traffic`
command.
These are observations from a specific rollout, not general Cloud Run
guarantees. The staged workflow observed to succeed is documented in
`docs/runbooks/opax-live-deploy.md`.
## CI1e — ADK-integrasjon (neste steg)
Når `opax-mcp` er live, legges det til som ADK-tool i `agents/core-logic/agent.py`:
```python
# agents/core-logic/tools/mcp_tools.py
from google.adk.tools import FunctionTool
import httpx
MCP_BASE = "https://opax-mcp-<hash>.run.app"
async def push_static(file_path: str, content: str) -> dict:
"""Last opp statisk fil til GCS via OPAX-MCP."""
async with httpx.AsyncClient() as client:
r = await client.post(f"{MCP_BASE}/mcp/call",
json={"tool": "push_static", "params": {"file_path": file_path, "content": content}},
headers={"X-MCP-Key": os.environ["MCP_SECRET"]},
timeout=30,
)
return r.json()
push_static_tool = FunctionTool(func=push_static)
```
Deretter registreres `push_static_tool` i `root_agent` → Jason kan deploye direkte fra chat.
## Planlagte verktøy (CI1bd)
| Tool | Status |
|------|--------|
| `run_query` | 🔮 CI1b |
| `write_secret` | 🔮 CI1c |
| `update_dns` | 🔮 CI1d |
| `create_service` | 🔮 Fase C |
---
*OPAX-MCP · CI1a · 2026-06-10 · propane-will-491900-m5*