Feat : MCP agent
This commit is contained in:
@@ -17,6 +17,8 @@ class BashInterpreter(Tools):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.tag = "bash"
|
||||
self.name = "Bash Interpreter"
|
||||
self.description = "This tool allows the agent to execute bash commands."
|
||||
|
||||
def language_bash_attempt(self, command: str):
|
||||
"""
|
||||
|
||||
@@ -15,6 +15,8 @@ class CInterpreter(Tools):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.tag = "c"
|
||||
self.name = "C Interpreter"
|
||||
self.description = "This tool allows the agent to execute C code."
|
||||
|
||||
def execute(self, codes: str, safety=False) -> str:
|
||||
"""
|
||||
|
||||
@@ -15,6 +15,8 @@ class GoInterpreter(Tools):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.tag = "go"
|
||||
self.name = "Go Interpreter"
|
||||
self.description = "This tool allows you to execute Go code."
|
||||
|
||||
def execute(self, codes: str, safety=False) -> str:
|
||||
"""
|
||||
|
||||
@@ -15,6 +15,8 @@ class JavaInterpreter(Tools):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.tag = "java"
|
||||
self.name = "Java Interpreter"
|
||||
self.description = "This tool allows you to execute Java code."
|
||||
|
||||
def execute(self, codes: str, safety=False) -> str:
|
||||
"""
|
||||
|
||||
@@ -16,6 +16,8 @@ class PyInterpreter(Tools):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.tag = "python"
|
||||
self.name = "Python Interpreter"
|
||||
self.description = "This tool allows the agent to execute python code."
|
||||
|
||||
def execute(self, codes:str, safety = False) -> str:
|
||||
"""
|
||||
|
||||
@@ -15,6 +15,8 @@ class FileFinder(Tools):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.tag = "file_finder"
|
||||
self.name = "File Finder"
|
||||
self.description = "Finds files in the current directory and returns their information."
|
||||
|
||||
def read_file(self, file_path: str) -> str:
|
||||
"""
|
||||
|
||||
@@ -16,6 +16,8 @@ class FlightSearch(Tools):
|
||||
"""
|
||||
super().__init__()
|
||||
self.tag = "flight_search"
|
||||
self.name = "Flight Search"
|
||||
self.description = "Search for flight information using a flight number via AviationStack API."
|
||||
self.api_key = None
|
||||
self.api_key = api_key or os.getenv("AVIATIONSTACK_API_KEY")
|
||||
|
||||
@@ -24,7 +26,7 @@ class FlightSearch(Tools):
|
||||
return "Error: No AviationStack API key provided."
|
||||
|
||||
for block in blocks:
|
||||
flight_number = block.strip()
|
||||
flight_number = block.strip().lower().replace('\n', '')
|
||||
if not flight_number:
|
||||
return "Error: No flight number provided."
|
||||
|
||||
|
||||
+18
-16
@@ -3,11 +3,10 @@ import requests
|
||||
from urllib.parse import urljoin
|
||||
from typing import Dict, Any, Optional
|
||||
|
||||
from sources.tools.tools import Tools
|
||||
|
||||
if __name__ == "__main__": # if running as a script for individual testing
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
||||
|
||||
from sources.tools.tools import Tools
|
||||
|
||||
class MCP_finder(Tools):
|
||||
"""
|
||||
@@ -15,7 +14,9 @@ class MCP_finder(Tools):
|
||||
"""
|
||||
def __init__(self, api_key: str = None):
|
||||
super().__init__()
|
||||
self.tag = "mcp"
|
||||
self.tag = "mcp_finder"
|
||||
self.name = "MCP Finder"
|
||||
self.description = "Find MCP servers and their tools"
|
||||
self.base_url = "https://registry.smithery.ai"
|
||||
self.headers = {
|
||||
"Authorization": f"Bearer {api_key}",
|
||||
@@ -61,11 +62,7 @@ class MCP_finder(Tools):
|
||||
for mcp in mcps.get("servers", []):
|
||||
name = mcp.get("qualifiedName", "")
|
||||
if query.lower() in name.lower():
|
||||
details = {
|
||||
"name": name,
|
||||
"description": mcp.get("description", "No description available"),
|
||||
"params": mcp.get("connections", [])
|
||||
}
|
||||
details = self.get_mcp_server_details(name)
|
||||
matching_mcp.append(details)
|
||||
return matching_mcp
|
||||
|
||||
@@ -79,7 +76,7 @@ class MCP_finder(Tools):
|
||||
try:
|
||||
matching_mcp_infos = self.find_mcp_servers(block_clean)
|
||||
except requests.exceptions.RequestException as e:
|
||||
output += "Connection failed. Is the API in environement?\n"
|
||||
output += "Connection failed. Is the API key in environement?\n"
|
||||
continue
|
||||
except Exception as e:
|
||||
output += f"Error: {str(e)}\n"
|
||||
@@ -88,10 +85,12 @@ class MCP_finder(Tools):
|
||||
output += f"Error: No MCP server found for query '{block}'\n"
|
||||
continue
|
||||
for mcp_infos in matching_mcp_infos:
|
||||
output += f"Name: {mcp_infos['name']}\n"
|
||||
output += f"Description: {mcp_infos['description']}\n"
|
||||
output += f"Params: {', '.join(mcp_infos['params'])}\n"
|
||||
output += "-------\n"
|
||||
if mcp_infos['tools'] is None:
|
||||
continue
|
||||
output += f"Name: {mcp_infos['displayName']}\n"
|
||||
output += f"Usage name: {mcp_infos['qualifiedName']}\n"
|
||||
output += f"Tools: {mcp_infos['tools']}"
|
||||
output += "\n-------\n"
|
||||
return output.strip()
|
||||
|
||||
def execution_failure_check(self, output: str) -> bool:
|
||||
@@ -107,13 +106,16 @@ class MCP_finder(Tools):
|
||||
Not really needed for this tool (use return of execute() directly)
|
||||
"""
|
||||
if not output:
|
||||
return "No output generated."
|
||||
return output.strip()
|
||||
raise ValueError("No output to interpret.")
|
||||
return f"""
|
||||
The following MCPs were found:
|
||||
{output}
|
||||
"""
|
||||
|
||||
if __name__ == "__main__":
|
||||
api_key = os.getenv("MCP_FINDER")
|
||||
tool = MCP_finder(api_key)
|
||||
result = tool.execute(["""
|
||||
news
|
||||
stock
|
||||
"""], False)
|
||||
print(result)
|
||||
@@ -14,6 +14,8 @@ class searxSearch(Tools):
|
||||
"""
|
||||
super().__init__()
|
||||
self.tag = "web_search"
|
||||
self.name = "searxSearch"
|
||||
self.description = "A tool for searching a SearxNG for web search"
|
||||
self.base_url = base_url or os.getenv("SEARXNG_BASE_URL") # Requires a SearxNG base URL
|
||||
self.user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
|
||||
self.paywall_keywords = [
|
||||
|
||||
@@ -33,6 +33,8 @@ class Tools():
|
||||
"""
|
||||
def __init__(self):
|
||||
self.tag = "undefined"
|
||||
self.name = "undefined"
|
||||
self.description = "undefined"
|
||||
self.client = None
|
||||
self.messages = []
|
||||
self.logger = Logger("tools.log")
|
||||
|
||||
Reference in New Issue
Block a user