mirror of
https://github.com/tcsenpai/agenticSeek.git
synced 2025-06-03 01:30:11 +00:00
73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
import os
|
|
import asyncio
|
|
|
|
from sources.utility import pretty_print, animate_thinking
|
|
from sources.agents.agent import Agent
|
|
from sources.tools.mcpFinder import MCP_finder
|
|
from sources.memory import Memory
|
|
|
|
# NOTE MCP agent is an active work in progress, not functional yet.
|
|
|
|
class McpAgent(Agent):
|
|
|
|
def __init__(self, name, prompt_path, provider, verbose=False):
|
|
"""
|
|
The mcp agent is a special agent for using MCPs.
|
|
MCP agent will be disabled if the user does not explicitly set the MCP_FINDER_API_KEY in environment variable.
|
|
"""
|
|
super().__init__(name, prompt_path, provider, verbose, None)
|
|
keys = self.get_api_keys()
|
|
self.tools = {
|
|
"mcp_finder": MCP_finder(keys["mcp_finder"]),
|
|
# add mcp tools here
|
|
}
|
|
self.role = "mcp"
|
|
self.type = "mcp_agent"
|
|
self.memory = Memory(self.load_prompt(prompt_path),
|
|
recover_last_session=False, # session recovery in handled by the interaction class
|
|
memory_compression=False,
|
|
model_provider=provider.get_model_name())
|
|
self.enabled = True
|
|
|
|
def get_api_keys(self) -> dict:
|
|
"""
|
|
Returns the API keys for the tools.
|
|
"""
|
|
api_key_mcp_finder = os.getenv("MCP_FINDER_API_KEY")
|
|
if not api_key_mcp_finder or api_key_mcp_finder == "":
|
|
pretty_print("MCP Finder disabled.", color="warning")
|
|
self.enabled = False
|
|
return {
|
|
"mcp_finder": api_key_mcp_finder
|
|
}
|
|
|
|
def expand_prompt(self, prompt):
|
|
"""
|
|
Expands the prompt with the tools available.
|
|
"""
|
|
tools_str = self.get_tools_description()
|
|
prompt += f"""
|
|
You can use the following tools and MCPs:
|
|
{tools_str}
|
|
"""
|
|
return prompt
|
|
|
|
async def process(self, prompt, speech_module) -> str:
|
|
if self.enabled == False:
|
|
return "MCP Agent is disabled."
|
|
prompt = self.expand_prompt(prompt)
|
|
self.memory.push('user', prompt)
|
|
working = True
|
|
while working == True:
|
|
animate_thinking("Thinking...", color="status")
|
|
answer, reasoning = await self.llm_request()
|
|
exec_success, _ = self.execute_modules(answer)
|
|
answer = self.remove_blocks(answer)
|
|
self.last_answer = answer
|
|
self.status_message = "Ready"
|
|
if len(self.blocks_result) == 0:
|
|
working = False
|
|
return answer, reasoning
|
|
|
|
if __name__ == "__main__":
|
|
pass |