Skip to main content
Glama
TESTING.md12.6 kB
# Testing Guide for ResilientDB MCP Server This guide provides individual commands to test the MCP server and GraphQL functionalities. ## Prerequisites 1. ResilientDB running with: - GraphQL server on port 8000 - HTTP/Crow server on port 18000 2. Python 3.11+ installed 3. Dependencies installed: `pip install -r requirements.txt` ## 1. Test GraphQL Server (Port 8000) ### Check if GraphQL server is running ```bash curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{"query": "{ __schema { queryType { name } } }"}' ``` Expected: Should return schema information without errors. ### Test getTransaction Query First, create a transaction using HTTP API to get a transaction ID: ```bash # Create a transaction via HTTP API curl -X POST -d '{"id":"test-tx-1","value":"test data"}' \ http://localhost:18000/v1/transactions/commit ``` Then query it via GraphQL (Note: This may not work if the transaction was created via HTTP, as GraphQL is for asset transactions): ```bash # Get transaction by ID curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{ "query": "{ getTransaction(id: \"YOUR_TRANSACTION_ID\") { id version amount uri type publicKey operation metadata asset signerPublicKey } }" }' ``` Replace `YOUR_TRANSACTION_ID` with an actual asset transaction ID from ResilientDB. ### Test postTransaction Mutation You'll need to generate cryptographic keys first. For testing, you can use the ResilientDB key generation tools or create keys manually. ```bash # Post a new asset transaction curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{ "query": "mutation PostTransaction($data: PrepareAsset!) { postTransaction(data: $data) { id } }", "variables": { "data": { "operation": "CREATE", "amount": 100, "signerPublicKey": "YOUR_SIGNER_PUBLIC_KEY", "signerPrivateKey": "YOUR_SIGNER_PRIVATE_KEY", "recipientPublicKey": "YOUR_RECIPIENT_PUBLIC_KEY", "asset": { "data": "test asset data" } } } }' ``` Replace the placeholder keys with actual cryptographic keys. ### Inspect GraphQL Schema ```bash # Get all available queries curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{ "query": "{ __type(name: \"Query\") { fields { name description args { name type { name kind ofType { name } } } type { name kind ofType { name } } } } }" }' | python3 -m json.tool # Get all available mutations curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{ "query": "{ __type(name: \"Mutation\") { fields { name description args { name type { name kind ofType { name } } } type { name kind ofType { name } } } } }" }' | python3 -m json.tool # Get PrepareAsset input type curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{ "query": "{ __type(name: \"PrepareAsset\") { inputFields { name type { name kind ofType { name } } } } }" }' | python3 -m json.tool ``` ## 2. Test HTTP REST API (Port 18000) ### Test set (Store key-value) ```bash # Store a key-value pair curl -X POST -d '{"id":"test-key-1","value":"test value 1"}' \ http://localhost:18000/v1/transactions/commit ``` Expected output: `id: test-key-1` ### Test get (Retrieve key-value) ```bash # Retrieve a value by key curl http://localhost:18000/v1/transactions/test-key-1 ``` Expected: Returns the stored value as JSON. ### Test multiple operations ```bash # Store multiple values curl -X POST -d '{"id":"user-1","value":"Alice"}' \ http://localhost:18000/v1/transactions/commit curl -X POST -d '{"id":"user-2","value":"Bob"}' \ http://localhost:18000/v1/transactions/commit # Retrieve them curl http://localhost:18000/v1/transactions/user-1 curl http://localhost:18000/v1/transactions/user-2 ``` ## 3. Test MCP Server (Debugging Only) **Important Note:** The MCP server is **automatically started by Claude Desktop** when you configure it. You do NOT need to start it manually for normal use. The commands below are **only for debugging purposes** to verify the server can start without errors: ### Verify Server Can Start (Debugging) ```bash # From the project directory # This will start the server and wait for input on stdio # Press Ctrl+C to stop it python server.py ``` **Expected:** Server should start without errors and wait for MCP protocol messages on stdio. If you see errors, check your configuration and dependencies. **Note:** In normal operation, Claude Desktop starts the server automatically. You only need to run this manually if you're debugging startup issues. ### Test with Python script Create a test script to call the MCP server tools: ```bash # Create a simple test script cat > test_mcp_tools.py << 'EOF' import asyncio import json from graphql_client import GraphQLClient async def test_tools(): client = GraphQLClient() # Test set operation print("Testing set operation...") result = await client.set_key_value("test-key", "test-value") print(f"Set result: {json.dumps(result, indent=2)}") # Test get operation print("\nTesting get operation...") result = await client.get_key_value("test-key") print(f"Get result: {json.dumps(result, indent=2)}") # Test getTransaction (requires valid transaction ID) # print("\nTesting getTransaction...") # result = await client.get_transaction("YOUR_TRANSACTION_ID") # print(f"GetTransaction result: {json.dumps(result, indent=2)}") if __name__ == "__main__": asyncio.run(test_tools()) EOF # Run the test script python test_mcp_tools.py ``` ## 4. Connect to Claude Desktop **Important:** The MCP server is **automatically started by Claude Desktop** when you configure it. You do NOT need to manually start `server.py`. Claude Desktop will launch it automatically when needed. ### Step 1: Locate Claude Desktop Configuration **macOS:** ```bash # Configuration file location ~/Library/Application Support/Claude/claude_desktop_config.json ``` **Windows:** ``` %APPDATA%\Claude\claude_desktop_config.json ``` **Linux:** ```bash ~/.config/Claude/claude_desktop_config.json ``` ### Step 2: Edit Configuration File Open the configuration file and add the MCP server configuration: ```bash # On macOS open ~/Library/Application\ Support/Claude/claude_desktop_config.json # Or edit with your preferred editor nano ~/Library/Application\ Support/Claude/claude_desktop_config.json ``` ### Step 3: Add MCP Server Configuration Add this configuration to the `mcpServers` section: ```json { "mcpServers": { "resilientdb": { "command": "python", "args": ["/absolute/path/to/ResilientDB-MCP/server.py"], "env": { "RESILIENTDB_GRAPHQL_URL": "http://localhost:8000/graphql", "RESILIENTDB_HTTP_URL": "http://localhost:18000" } } } } ``` **Important:** Replace `/absolute/path/to/ResilientDB-MCP/server.py` with the actual absolute path to your server.py file. **Example for macOS:** ```json { "mcpServers": { "resilientdb": { "command": "python", "args": ["/Users/rahul/data/workspace/kanagrah/ResilientDB-MCP/server.py"], "env": { "RESILIENTDB_GRAPHQL_URL": "http://localhost:8000/graphql", "RESILIENTDB_HTTP_URL": "http://localhost:18000" } } } } ``` ### Step 4: Find Your Absolute Path ```bash # Get the absolute path to server.py pwd # Output: /Users/rahul/data/workspace/kanagrah/ResilientDB-MCP # Full path to server.py realpath server.py # Or readlink -f server.py ``` ### Step 5: Restart Claude Desktop 1. **Quit Claude Desktop completely** (not just close the window) - macOS: Cmd+Q or right-click dock icon → Quit - Windows: Close all windows and exit from system tray - Linux: Close all windows 2. **Restart Claude Desktop** - Claude Desktop will **automatically start the MCP server** when it launches - The server runs as a subprocess managed by Claude Desktop 3. **Verify Connection** - Open Claude Desktop - Check if the MCP server is connected (usually shown in the status or settings) - Look for any error messages in the Claude Desktop logs - If there are errors, check that the path to `server.py` is correct and Python is accessible ### Step 6: Test in Claude Desktop Once connected, you can test the tools by asking Claude: 1. **Test set operation:** ``` Store a key-value pair with key "test" and value "hello world" ``` 2. **Test get operation:** ``` Get the value for key "test" ``` 3. **Test getTransaction:** ``` Get transaction details for transaction ID "YOUR_TRANSACTION_ID" ``` 4. **Test postTransaction:** ``` Post a new asset transaction with operation "CREATE", amount 100, and asset data {"data": "test"} ``` (Note: This will require you to provide the cryptographic keys) ## 5. Verify Server Configuration ### Check if server can start (Debugging Only) **Note:** This is only for debugging. In normal use, Claude Desktop starts the server automatically. ```bash # Run the server briefly to check for startup errors # Press Ctrl+C immediately after it starts timeout 2 python server.py 2>&1 || true ``` **Expected:** Server should start without import errors or configuration errors. If you see errors, fix them before configuring Claude Desktop. ### Check if dependencies are installed ```bash # Verify all dependencies are installed python -c "import mcp; import httpx; import dotenv; print('All dependencies OK')" ``` ### Check environment variables ```bash # Verify environment variables (if .env file exists) python -c "from config import Config; print(f'GraphQL URL: {Config.GRAPHQL_URL}'); print(f'HTTP URL: {Config.HTTP_URL}')" ``` ## 6. Troubleshooting ### Server won't start ```bash # Check Python version (should be 3.11+) python --version # Check if MCP SDK is installed pip list | grep mcp # Install missing dependencies pip install -r requirements.txt ``` ### GraphQL connection errors ```bash # Test GraphQL endpoint directly curl -v http://localhost:8000/graphql # Check if ResilientDB GraphQL server is running netstat -an | grep 8000 # Or on macOS/Linux lsof -i :8000 ``` ### HTTP connection errors ```bash # Test HTTP endpoint directly curl -v http://localhost:18000/v1/transactions/test # Check if ResilientDB HTTP server is running netstat -an | grep 18000 # Or on macOS/Linux lsof -i :18000 ``` ### Claude Desktop connection issues 1. **Check Claude Desktop logs:** - macOS: `~/Library/Logs/Claude/` - Windows: `%APPDATA%\Claude\logs\` - Linux: `~/.config/Claude/logs/` 2. **Verify configuration file syntax:** ```bash # Validate JSON syntax python -m json.tool ~/Library/Application\ Support/Claude/claude_desktop_config.json ``` 3. **Check file permissions:** ```bash # Make sure server.py is executable chmod +x server.py # Check if Python is in PATH which python ``` ## 7. Quick Test Checklist - [ ] GraphQL server responds on port 8000 - [ ] HTTP server responds on port 18000 - [ ] Can store key-value via HTTP API - [ ] Can retrieve key-value via HTTP API - [ ] MCP server can start without errors (for debugging) - [ ] Claude Desktop configuration file is valid JSON - [ ] Claude Desktop can connect to MCP server - [ ] Can use `set` tool in Claude Desktop - [ ] Can use `get` tool in Claude Desktop - [ ] Can use `getTransaction` tool in Claude Desktop (with valid transaction ID) - [ ] Can use `postTransaction` tool in Claude Desktop (with valid keys) ## Example Test Session ```bash # 1. Start ResilientDB (if not already running) # (Follow ResilientDB setup instructions) # 2. Test HTTP API curl -X POST -d '{"id":"demo-key","value":"demo value"}' \ http://localhost:18000/v1/transactions/commit curl http://localhost:18000/v1/transactions/demo-key # 3. Test GraphQL curl -X POST http://localhost:8000/graphql \ -H "Content-Type: application/json" \ -d '{"query": "{ __schema { queryType { name } } }"}' # 4. Configure Claude Desktop # (Edit claude_desktop_config.json as shown in section 4) # Claude Desktop will automatically start the server when you restart it # 5. Test in Claude Desktop # (Ask Claude to use the tools) ``` ## Additional Resources - [ResilientDB Documentation](https://resilientdb.incubator.apache.org/) - [MCP Protocol Documentation](https://modelcontextprotocol.io/) - [Claude Desktop Setup Guide](https://docs.anthropic.com/claude/docs/claude-desktop)

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/rahulkanagaraj786/ResilientDB-MCP'

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