160 lines
5.4 KiB
Python
Executable File
160 lines
5.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Example client to test the DOCX MCP Server.
|
|
This demonstrates how to interact with the server using JSON-RPC.
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
import asyncio
|
|
import websockets
|
|
|
|
async def call_tool(websocket, tool_name, arguments):
|
|
"""Call a tool on the MCP server"""
|
|
request = {
|
|
"jsonrpc": "2.0",
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": tool_name,
|
|
"arguments": arguments
|
|
},
|
|
"id": 1
|
|
}
|
|
|
|
await websocket.send(json.dumps(request))
|
|
response = await websocket.recv()
|
|
return json.loads(response)
|
|
|
|
async def main():
|
|
# Connect to the MCP server (adjust the URI as needed)
|
|
uri = "ws://localhost:3000" # Default MCP server port
|
|
|
|
async with websockets.connect(uri) as websocket:
|
|
print("Connected to DOCX MCP Server")
|
|
|
|
# Example 1: Create a new document
|
|
print("\n1. Creating new document...")
|
|
result = await call_tool(websocket, "create_document", {})
|
|
doc_id = result["result"]["document_id"]
|
|
print(f" Document created with ID: {doc_id}")
|
|
|
|
# Example 2: Add a heading
|
|
print("\n2. Adding heading...")
|
|
result = await call_tool(websocket, "add_heading", {
|
|
"document_id": doc_id,
|
|
"text": "Sample Document",
|
|
"level": 1
|
|
})
|
|
print(" Heading added")
|
|
|
|
# Example 3: Add a paragraph with styling
|
|
print("\n3. Adding styled paragraph...")
|
|
result = await call_tool(websocket, "add_paragraph", {
|
|
"document_id": doc_id,
|
|
"text": "This is a sample paragraph with custom styling.",
|
|
"style": {
|
|
"font_size": 14,
|
|
"bold": True,
|
|
"color": "#0066CC",
|
|
"alignment": "center"
|
|
}
|
|
})
|
|
print(" Styled paragraph added")
|
|
|
|
# Example 4: Add a table
|
|
print("\n4. Adding table...")
|
|
result = await call_tool(websocket, "add_table", {
|
|
"document_id": doc_id,
|
|
"rows": [
|
|
["Product", "Price", "Quantity"],
|
|
["Widget A", "$10.99", "100"],
|
|
["Widget B", "$15.99", "75"],
|
|
["Widget C", "$8.99", "150"]
|
|
]
|
|
})
|
|
print(" Table added")
|
|
|
|
# Example 5: Add a numbered list
|
|
print("\n5. Adding numbered list...")
|
|
result = await call_tool(websocket, "add_list", {
|
|
"document_id": doc_id,
|
|
"items": [
|
|
"First item in the list",
|
|
"Second item with more text",
|
|
"Third and final item"
|
|
],
|
|
"ordered": True
|
|
})
|
|
print(" Numbered list added")
|
|
|
|
# Example 6: Set header and footer
|
|
print("\n6. Setting header and footer...")
|
|
result = await call_tool(websocket, "set_header", {
|
|
"document_id": doc_id,
|
|
"text": "Sample Document Header"
|
|
})
|
|
result = await call_tool(websocket, "set_footer", {
|
|
"document_id": doc_id,
|
|
"text": "Page 1 | Confidential"
|
|
})
|
|
print(" Header and footer set")
|
|
|
|
# Example 7: Save the document
|
|
print("\n7. Saving document...")
|
|
result = await call_tool(websocket, "save_document", {
|
|
"document_id": doc_id,
|
|
"output_path": "./sample_output.docx"
|
|
})
|
|
print(" Document saved to sample_output.docx")
|
|
|
|
# Example 8: Convert to PDF
|
|
print("\n8. Converting to PDF...")
|
|
result = await call_tool(websocket, "convert_to_pdf", {
|
|
"document_id": doc_id,
|
|
"output_path": "./sample_output.pdf"
|
|
})
|
|
if result["result"]["success"]:
|
|
print(" Document converted to PDF")
|
|
else:
|
|
print(f" PDF conversion failed: {result['result'].get('error', 'Unknown error')}")
|
|
|
|
# Example 9: Convert to images
|
|
print("\n9. Converting to images...")
|
|
result = await call_tool(websocket, "convert_to_images", {
|
|
"document_id": doc_id,
|
|
"output_dir": "./images/",
|
|
"format": "png",
|
|
"dpi": 150
|
|
})
|
|
if result["result"]["success"]:
|
|
print(f" Document converted to images: {result['result']['images']}")
|
|
else:
|
|
print(f" Image conversion failed: {result['result'].get('error', 'Unknown error')}")
|
|
|
|
# Example 10: Extract text
|
|
print("\n10. Extracting text...")
|
|
result = await call_tool(websocket, "extract_text", {
|
|
"document_id": doc_id
|
|
})
|
|
text = result["result"]["text"]
|
|
print(f" Extracted text (first 100 chars): {text[:100]}...")
|
|
|
|
# Example 11: Get metadata
|
|
print("\n11. Getting metadata...")
|
|
result = await call_tool(websocket, "get_metadata", {
|
|
"document_id": doc_id
|
|
})
|
|
metadata = result["result"]["metadata"]
|
|
print(f" Document metadata: {json.dumps(metadata, indent=2)}")
|
|
|
|
# Example 12: Close the document
|
|
print("\n12. Closing document...")
|
|
result = await call_tool(websocket, "close_document", {
|
|
"document_id": doc_id
|
|
})
|
|
print(" Document closed")
|
|
|
|
print("\n✅ All tests completed successfully!")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main()) |