103 lines
3.7 KiB
Python
103 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
MCP Ollama Query Tool — patch for homelab-mcp/server.py
|
|
|
|
HOW TO APPLY:
|
|
Copy the ollama_query function below and paste it into
|
|
scripts/homelab-mcp/server.py AFTER the existing tool definitions
|
|
(before the `if __name__` block or the mcp.run() call).
|
|
|
|
PREREQUISITES:
|
|
The server already imports httpx and has the @_safe decorator defined.
|
|
No additional imports are needed — the function uses httpx.Client inline
|
|
(matching the existing pattern in server.py).
|
|
|
|
LOCATION: Add after the last @mcp.tool() function in server.py.
|
|
"""
|
|
|
|
# ─── CUT HERE ─── paste everything below into server.py ─────────────────────
|
|
|
|
# @mcp.tool()
|
|
# @_safe
|
|
# def ollama_query(prompt: str, model: str = "qwen3-coder:latest",
|
|
# max_tokens: int = 2000, temperature: float = 0.3) -> str:
|
|
# """Query the local Ollama LLM for homelab-specific analysis.
|
|
#
|
|
# Useful for: analyzing logs, explaining configs, generating commands,
|
|
# summarizing infrastructure state, or any homelab question.
|
|
#
|
|
# Args:
|
|
# prompt: The question or analysis prompt.
|
|
# model: Ollama model name (default: qwen3-coder:latest).
|
|
# max_tokens: Maximum response tokens.
|
|
# temperature: Sampling temperature (0.0-1.0, lower = more focused).
|
|
# """
|
|
# import re
|
|
#
|
|
# OLLAMA_URL = "http://192.168.0.145:31434"
|
|
# with httpx.Client(timeout=120) as client:
|
|
# resp = client.post(
|
|
# f"{OLLAMA_URL}/api/generate",
|
|
# json={
|
|
# "model": model,
|
|
# "prompt": prompt,
|
|
# "stream": False,
|
|
# "options": {
|
|
# "temperature": temperature,
|
|
# "num_predict": max_tokens,
|
|
# },
|
|
# },
|
|
# )
|
|
# resp.raise_for_status()
|
|
# raw = resp.json().get("response", "").strip()
|
|
# return re.sub(r"<think>.*?</think>", "", raw, flags=re.DOTALL).strip()
|
|
|
|
# ─── END CUT ────────────────────────────────────────────────────────────────
|
|
|
|
|
|
# The same function without comment markers, for easy copy-paste:
|
|
|
|
PATCH_CODE = '''
|
|
@mcp.tool()
|
|
@_safe
|
|
def ollama_query(prompt: str, model: str = "qwen3-coder:latest",
|
|
max_tokens: int = 2000, temperature: float = 0.3) -> str:
|
|
"""Query the local Ollama LLM for homelab-specific analysis.
|
|
|
|
Useful for: analyzing logs, explaining configs, generating commands,
|
|
summarizing infrastructure state, or any homelab question.
|
|
|
|
Args:
|
|
prompt: The question or analysis prompt.
|
|
model: Ollama model name (default: qwen3-coder:latest).
|
|
max_tokens: Maximum response tokens.
|
|
temperature: Sampling temperature (0.0-1.0, lower = more focused).
|
|
"""
|
|
import re
|
|
|
|
OLLAMA_URL = "http://192.168.0.145:31434"
|
|
with httpx.Client(timeout=120) as client:
|
|
resp = client.post(
|
|
f"{OLLAMA_URL}/api/generate",
|
|
json={
|
|
"model": model,
|
|
"prompt": prompt,
|
|
"stream": False,
|
|
"options": {
|
|
"temperature": temperature,
|
|
"num_predict": max_tokens,
|
|
},
|
|
},
|
|
)
|
|
resp.raise_for_status()
|
|
raw = resp.json().get("response", "").strip()
|
|
return re.sub(r"<think>.*?</think>", "", raw, flags=re.DOTALL).strip()
|
|
'''
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("This file is a patch reference — not meant to be executed directly.")
|
|
print("Copy the ollama_query function into homelab-mcp/server.py.")
|
|
print()
|
|
print(PATCH_CODE)
|