Skip to main content
Glama
test_mcp_service.py8.05 kB
import asyncio import argparse import json import sys from mcp.shared.memory import create_connected_server_and_client_session from mcp_scholar.server import mcp def custom_encoder(o): """自定义JSON编码器,处理不可序列化的对象""" if hasattr(o, "__dict__"): return o.__dict__ return str(o) async def run_tests(args) -> None: """运行MCP服务测试""" async with create_connected_server_and_client_session(mcp._mcp_server) as client: if args.test == "health": result = await client.call_tool("health_check") content = result.content[0] if hasattr(content, "text"): print(f"健康检查结果: {content.text}") else: print(f"健康检查结果: {content}") elif args.test == "search": result = await client.call_tool( "scholar_search", {"keywords": args.keywords, "count": args.count} ) content = result.content[0] if hasattr(content, "text"): try: data = json.loads(content.text) print(json.dumps(data, ensure_ascii=False, indent=2)) papers = data.get("papers", []) if papers: print(f"\n搜索结果共 {len(papers)} 条:") for idx, paper in enumerate(papers, 1): print(f"\n--- 论文 {idx} ---") print(f"标题: {paper.get('title', 'N/A')}") print(f"作者: {paper.get('authors', 'N/A')}") print(f"年份: {paper.get('year', 'N/A')}") print(f"摘要: {paper.get('abstract', 'N/A')}...") except json.JSONDecodeError: print(f"无法解析JSON结果: {content.text}") else: print(f"无法获取搜索结果: {content}") elif args.test == "detail": result = await client.call_tool("paper_detail", {"paper_id": args.paper_id}) print("论文详情:") content = result.content[0] if hasattr(content, "text"): try: data = json.loads(content.text) print(json.dumps(data, ensure_ascii=False, indent=2)) except json.JSONDecodeError: print(content.text) else: print(f"详情内容: {content}") elif args.test == "references": result = await client.call_tool( "paper_references", {"paper_id": args.paper_id, "count": args.count} ) print("论文引用:") content = result.content[0] if hasattr(content, "text"): try: data = json.loads(content.text) print(json.dumps(data, ensure_ascii=False, indent=2)) except json.JSONDecodeError: print(content.text) else: print(f"引用内容: {content}") elif args.test == "profile": result = await client.call_tool( "profile_papers", {"profile_url": args.profile_url, "count": args.count} ) print("学者论文:") content = result.content[0] if hasattr(content, "text"): try: data = json.loads(content.text) print(json.dumps(data, ensure_ascii=False, indent=2)) except json.JSONDecodeError: print(content.text) else: print(f"学者论文内容: {content}") elif args.test == "summarize": result = await client.call_tool( "summarize_papers", {"topic": args.keywords, "count": args.count} ) print("论文总结:") content = result.content[0] if hasattr(content, "text"): print(content.text) else: print(content) elif args.test == "all": # 健康检查 result = await client.call_tool("health_check") content = result.content[0] if hasattr(content, "text"): print(f"健康检查结果: {content.text}") else: print(f"健康检查结果: {content}") # 搜索论文 result = await client.call_tool( "scholar_search", {"keywords": args.keywords, "count": 1} ) content = result.content[0] if hasattr(content, "text"): try: data = json.loads(content.text) print(json.dumps(data, ensure_ascii=False, indent=2)) papers = data.get("papers", []) if papers: paper_id = papers[0].get("paper_id") if paper_id: # 获取论文详情 result = await client.call_tool( "paper_detail", {"paper_id": paper_id} ) print("\n论文详情:") content = result.content[0] if hasattr(content, "text"): try: data = json.loads(content.text) print( json.dumps(data, ensure_ascii=False, indent=2) ) except json.JSONDecodeError: print(content.text) else: print(f"详情内容: {content}") # 获取论文引用 result = await client.call_tool( "paper_references", {"paper_id": paper_id, "count": 2} ) print("\n论文引用:") content = result.content[0] if hasattr(content, "text"): try: data = json.loads(content.text) print( json.dumps(data, ensure_ascii=False, indent=2) ) except json.JSONDecodeError: print(content.text) else: print(f"引用内容: {content}") except json.JSONDecodeError: print(f"无法解析JSON结果: {content.text}") else: print(f"无法获取搜索结果: {content}") def main(): parser = argparse.ArgumentParser(description="MCP学术服务测试工具") parser.add_argument( "--test", choices=[ "health", "search", "detail", "references", "profile", "summarize", "all", ], default="search", help="要执行的测试类型", ) parser.add_argument("--keywords", default="人工智能", help="搜索关键词") parser.add_argument( "--paper-id", help="论文ID,用于详情和引用测试", default="10.1000/j.jss.2021.10.002", ) parser.add_argument("--count", type=int, default=5, help="结果数量限制") parser.add_argument("--profile-url", help="学者个人主页URL,用于学者论文测试") args = parser.parse_args() if args.test in ["detail", "references"] and not args.paper_id: print("错误: 详情和引用测试需要提供 --paper-id 参数") sys.exit(1) asyncio.run(run_tests(args)) if __name__ == "__main__": main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/renyumeng1/mcp_scholar'

If you have feedback or need assistance with the MCP directory API, please join our Discord server