Aniruddha7's picture
Huggingface Deployment
de36225
Raw History Blame Contribute Delete
1.78 kB
"""Minimal MCP client for local MCP server.
Provides mcp_complete(prompt, timeout, context) -> str
Tries to POST to MCP server and return the completion text. Raises on errors so caller can fallback.
"""
import os
import json
import requests
from typing import Any, Dict, Optional
MCP_URL = os.environ.get("MCP_URL", "http://127.0.0.1:8701/complete")
def mcp_complete(prompt: str, timeout: float = 30.0, context: Optional[Dict[str, Any]] = None) -> str:
"""Send a completion request to the local MCP server and return text.
Raises requests.RequestException on transport errors or ValueError if MCP returns error.
"""
payload = {
"prompt": prompt,
"context": context or {},
"timeout": timeout
}
headers = {"Content-Type": "application/json"}
resp = requests.post(MCP_URL, data=json.dumps(payload), headers=headers, timeout=timeout)
resp.raise_for_status()
body = resp.json()
# Expecting {'text': '...'} from MCP server
if not isinstance(body, dict) or 'text' not in body:
raise ValueError(f"Unexpected MCP response: {body}")
return body['text']
def mcp_call_tool(prompt: str, timeout: float = 60.0, context: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
"""Call the MCP /complete endpoint and return the full JSON response.
This is useful when asking MCP to run a registered tool; the tool result will
appear under the `tool_result` key in the returned dict.
"""
payload = {
"prompt": prompt,
"context": context or {},
"timeout": timeout,
}
headers = {"Content-Type": "application/json"}
resp = requests.post(MCP_URL, data=json.dumps(payload), headers=headers, timeout=timeout)
resp.raise_for_status()
return resp.json()