88 lines
3.6 KiB
Python
88 lines
3.6 KiB
Python
# Scenario 1: Simple query to Docs MCP
|
|
# This script demonstrates how to connect to the Microsoft Learn Docs MCP server,
|
|
# send a query, and print the result.
|
|
|
|
import asyncio
|
|
import logging
|
|
import sys
|
|
from mcp.client.streamable_http import streamablehttp_client
|
|
from mcp import ClientSession
|
|
|
|
import json
|
|
|
|
# Microsoft Docs MCP Server Endpoint
|
|
MCP_SERVER_URL = "https://learn.microsoft.com/api/mcp"
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
)
|
|
logger = logging.getLogger('mcp_client')
|
|
|
|
def prompt_user():
|
|
"""Prompt user for a search query."""
|
|
print("Type your Microsoft Docs search query (or 'exit' to quit):")
|
|
try:
|
|
return input("> ").strip()
|
|
except (KeyboardInterrupt, EOFError):
|
|
print("\nDetected exit signal.")
|
|
return "exit"
|
|
|
|
async def main():
|
|
logger.info("Connecting to Microsoft Docs MCP Server at: %s", MCP_SERVER_URL)
|
|
try:
|
|
async with streamablehttp_client(MCP_SERVER_URL) as (read_stream, write_stream, _):
|
|
logger.info("Connection established. Initializing MCP session.")
|
|
async with ClientSession(read_stream, write_stream) as session:
|
|
await session.initialize()
|
|
logger.info("Session initialized successfully.")
|
|
print("\n=== Microsoft Docs MCP Client ===")
|
|
print("Tool: microsoft_docs_search")
|
|
print("Enter documentation queries to search Microsoft Learn docs.")
|
|
print("Type 'exit' or 'quit' to end the session.\n")
|
|
|
|
while True:
|
|
user_query = prompt_user()
|
|
if not user_query:
|
|
print("Query cannot be empty. Please try again.")
|
|
continue
|
|
if user_query.lower() in ("exit", "quit"):
|
|
print("Exiting client. Goodbye!")
|
|
break
|
|
|
|
try:
|
|
logger.info("Executing query: %s", user_query)
|
|
result = await session.call_tool("microsoft_docs_search", {"question": user_query})
|
|
# print("RESULT:", result)
|
|
print("\n--- Search Result ---")
|
|
if hasattr(result, 'content'):
|
|
# print(result.content)
|
|
for item in result.content:
|
|
my_list = json.loads(item.text)
|
|
for doc in my_list:
|
|
print(f"[Title]: {doc.get('title', 'No title')}")
|
|
print(f"[Content]: {doc.get('content', 'No content')}")
|
|
print("---")
|
|
|
|
else:
|
|
print("No content returned from the search.")
|
|
print("---------------------\n")
|
|
except Exception as e:
|
|
logger.error("Query failed: %s", e)
|
|
print(f"Error: {e}. Please try a different query or check your connection.\n")
|
|
|
|
except Exception as e:
|
|
logger.error("Connection error: %s", e)
|
|
print(f"Failed to connect to Microsoft Docs MCP Server: {e}")
|
|
print("Please check your internet connection and try again.")
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
print("Starting Microsoft Docs MCP Client...")
|
|
try:
|
|
asyncio.run(main())
|
|
except KeyboardInterrupt:
|
|
print("\nApplication terminated by user.")
|
|
sys.exit(0) |