"""
AgentCPM-MCP Demo Script
This script demonstrates how to use AgentCPM-MCP for conversation and tool calling.
"""
import os
import sys
import asyncio
import json
import logging
import argparse
from pathlib import Path
from typing import List, Dict, Any
from datetime import datetime
script_dir = Path(__file__).resolve().parent
project_root = script_dir.parent
sys.path.insert(0, str(project_root))
sys.path.insert(0, str(script_dir))
from task import AgentTask
from client import MCPClient
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s | %(levelname)-8s | %(name)s | %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
logger = logging.getLogger("demo")
async def demo_conversation(args):
"""
Run demo conversation
Args:
args: Command line arguments
"""
try:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
result_dir = project_root / "gaia_results" / timestamp
os.makedirs(result_dir, exist_ok=True)
client = MCPClient(
model=args.model,
provider=args.provider,
api_key=args.api_key,
base_url=args.base_url,
is_api=True,
server_name=args.server,
config_file=args.config,
manager_url=args.manager_url,
result_dir=result_dir
)
if not await client.initialize():
logger.error("Client initialization failed")
return
conversation = [
{
"role": "system",
"content": "You are a smart assistant that can answer questions and use various tools to complete tasks."
},
{
"role": "user",
"content": args.prompt
}
]
task = AgentTask(
task_id="demo_task",
conversation_history=conversation
)
logger.info("Starting task execution...")
result = await client.solve_agent_task(task)
if result["success"]:
logger.info("Task execution successful!")
final_response = result.get("model_response", "")
if final_response:
print("\n====== Final Response ======")
print(final_response)
print("============================\n")
tool_calls = result.get("tool_calls", [])
if tool_calls:
print(f"\nUsed {len(tool_calls)} tool calls:")
for i, tool_call in enumerate(tool_calls):
print(f"{i+1}. {tool_call['function']['name']}")
print(f"\nConversation history saved at: {result.get('logs_path', 'Unknown')}")
else:
logger.error(f"Task execution failed: {result.get('error', 'Unknown error')}")
except Exception as e:
logger.error(f"Error running demo: {str(e)}")
import traceback
traceback.print_exc()
finally:
if 'client' in locals():
await client.close()
def main():
parser = argparse.ArgumentParser(description="AgentCPM-MCP Demo Script")
parser.add_argument("--prompt", type=str, default="What's the weather like today? Can you also introduce me to some tourist attractions in Beijing?",
help="User prompt")
parser.add_argument("--server", default="all", help="MCP server name to use")
parser.add_argument("--config", default="config.toml", help="MCP server configuration file path")
parser.add_argument("--manager-url", default="http://localhost:8000/mcpapi",
help="MCPManager API URL")
parser.add_argument("--provider", default="openai", help="LLM provider (openai, ollama, etc.)")
parser.add_argument("--model", default="gpt-4o-mini", help="Model name to use")
parser.add_argument("--api-key", help="API Key (uses env var by default)")
parser.add_argument("--base-url", help="API BASE URL (uses standard URL by default)")
args = parser.parse_args()
asyncio.run(demo_conversation(args))
if __name__ == "__main__":
main()