Add client.py
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
"""Client script that connects to the MCP server via stdio and demonstrates tool usage.
|
||||
|
||||
Run this script after starting the server: ``python server.py``.
|
||||
In another terminal, execute ``python client.py``.
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import json
|
||||
|
||||
# Helper to send a request via stdin and read the JSON response
|
||||
|
||||
def invoke_tool(tool_name, **kwargs):
|
||||
# Build the JSON request payload
|
||||
payload = {
|
||||
"name": tool_name,
|
||||
"arguments": kwargs,
|
||||
}
|
||||
# Start a subprocess that runs the server in stdio mode
|
||||
proc = subprocess.Popen(
|
||||
["python", "server.py"],
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
text=True,
|
||||
)
|
||||
# Send the payload and close stdin to signal end of input
|
||||
stdout, stderr = proc.communicate(json.dumps(payload))
|
||||
if stderr:
|
||||
raise RuntimeError(f"Server error: {stderr.strip()}")
|
||||
# Parse the server's response
|
||||
return json.loads(stdout.strip())
|
||||
|
||||
# Demonstrate each tool
|
||||
if __name__ == "__main__":
|
||||
print("--- Saving key 'foo' with value 'bar' ---")
|
||||
print(invoke_tool("save", key="foo", value="bar"))
|
||||
|
||||
print("\n--- Getting key 'foo' ---")
|
||||
print(invoke_tool("get", key="foo"))
|
||||
|
||||
print("\n--- Listing keys ---")
|
||||
print(invoke_tool("list_keys"))
|
||||
|
||||
print("\n--- Saving namespaced key 'test:count' with value '1' ---")
|
||||
print(invoke_tool("save_with_namespace", namespace="test", key="count", value="1"))
|
||||
|
||||
print("\n--- Getting namespaced key 'test:count' ---")
|
||||
print(invoke_tool("get_by_namespace", namespace="test", key="count"))
|
||||
|
||||
print("\n--- Deleting key 'foo' ---")
|
||||
print(invoke_tool("delete", key="foo"))
|
||||
|
||||
print("\n--- Listing keys after deletion ---")
|
||||
print(invoke_tool("list_keys"))
|
||||
Reference in New Issue
Block a user