fix(hub): correct tool calling logic

This commit is contained in:
Chris Christiansen 2026-09-05 11:20:45 +00:00
parent 278a1cf6b9
commit 727b431d4b
2 changed files with 34 additions and 5 deletions

View File

@ -9,6 +9,7 @@ import os
import logging import logging
import uuid import uuid
import httpx import httpx
import json
import google.auth import google.auth
import google.auth.transport.requests import google.auth.transport.requests
from typing import Literal from typing import Literal
@ -93,15 +94,26 @@ def _mcp_headers() -> dict:
} }
import json
...
def _call_tool(tool: str, params: dict = None) -> dict: def _call_tool(tool: str, params: dict = None) -> dict:
req_id = str(uuid.uuid4())
resp = httpx.post( resp = httpx.post(
f"{_OPAX_MCP_URL}/tools/call", f"{_OPAX_MCP_URL}/",
headers=_mcp_headers(), headers=_mcp_headers(),
json={"tool": tool, "params": params or {}}, json={
"jsonrpc": "2.0",
"id": req_id,
"method": "tools/call",
"params": {"name": tool, "arguments": params or {}},
},
timeout=30, timeout=30,
) )
resp.raise_for_status() resp.raise_for_status()
return resp.json() rpc_resp = resp.json()
if "error" in rpc_resp:
raise Exception(f"Tool call error: {rpc_resp['error']}")
return json.loads(rpc_resp["result"]["content"][0]["text"])
def get_billing_summary() -> dict: def get_billing_summary() -> dict:

View File

@ -9,6 +9,7 @@ import os
import logging import logging
import uuid import uuid
import httpx import httpx
import json
import google.auth import google.auth
import google.auth.transport.requests import google.auth.transport.requests
from typing import Literal from typing import Literal
@ -73,10 +74,26 @@ def _identity_token() -> str:
def _mcp_headers() -> dict: def _mcp_headers() -> dict:
return {"Authorization": f"Bearer {_identity_token()}", "X-MCP-Secret": _MCP_SECRET, "Content-Type": "application/json"} return {"Authorization": f"Bearer {_identity_token()}", "X-MCP-Secret": _MCP_SECRET, "Content-Type": "application/json"}
import json
...
def _call_tool(tool: str, params: dict = None) -> dict: def _call_tool(tool: str, params: dict = None) -> dict:
resp = httpx.post(f"{_OPAX_MCP_URL}/tools/call", headers=_mcp_headers(), json={"tool": tool, "params": params or {}}, timeout=30) req_id = str(uuid.uuid4())
resp = httpx.post(
f"{_OPAX_MCP_URL}/",
headers=_mcp_headers(),
json={
"jsonrpc": "2.0",
"id": req_id,
"method": "tools/call",
"params": {"name": tool, "arguments": params or {}},
},
timeout=30,
)
resp.raise_for_status() resp.raise_for_status()
return resp.json() rpc_resp = resp.json()
if "error" in rpc_resp:
raise Exception(f"Tool call error: {rpc_resp['error']}")
return json.loads(rpc_resp["result"]["content"][0]["text"])
def get_billing_summary() -> dict: def get_billing_summary() -> dict:
"""Hent billing-oversikt for OSVauco (GCP-kostnader, token-forbruk).""" """Hent billing-oversikt for OSVauco (GCP-kostnader, token-forbruk)."""