diff --git a/src/tools.py b/src/tools.py new file mode 100644 index 0000000..e3bb057 --- /dev/null +++ b/src/tools.py @@ -0,0 +1,36 @@ +"""MCP‑style tool that fetches course metadata from a local JSON file. + +The function `fetch_course_meta` performs a GET request to the mock MCP server +and returns the JSON content. It is wrapped with LangChain's `tool` decorator +so that the agent can call it. +""" + +import json +from pathlib import Path +from typing import Dict + +import httpx +from langchain.tools import tool +from .config import MCP_SERVER_URL + +@tool("fetch_course_meta") +def fetch_course_meta(query: str) -> Dict: + """Return course metadata that matches *query*. + + The mock server simply returns the full JSON; the agent decides whether + the query is about metadata. The function is intentionally simple to + keep the focus on routing logic. + """ + try: + response = httpx.get(MCP_SERVER_URL, timeout=5.0) + response.raise_for_status() + data = response.json() + except Exception as exc: # pragma: no cover – network errors + raise RuntimeError(f"Failed to fetch metadata: {exc}") + + # Basic filtering – return the whole object if the query contains a + # known keyword. In a real system this would be more sophisticated. + if any(k.lower() in query.lower() for k in data.keys()): + return data + # If nothing matches, return an empty dict + return {"message": "No metadata found for the query."} \ No newline at end of file