SpyNet
Session-based mock server for client application development with AI integration.
Features
- REST API Mocking with sequential response support
- WebSocket Support for both mock data and app control
- Session Isolation for concurrent testing
- MCP Integration for AI-driven development with Claude Desktop
Quick Start
# Install dependencies
npm install
# Start server
npm run dev
# Server runs on http://localhost:8675 (default)
# Or configure with PORT=8080 npm run dev
Usage
Configure Mock Endpoint
curl -X POST http://localhost:8675/_mock/sessions/test-1/endpoints \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"path": "/api/users",
"responses": [
{ "status": 200, "body": [{"id": 1, "name": "Test User"}] }
]
}'
Request via Data Plane
curl http://localhost:8675/session/test-1/api/users
# Returns: [{"id": 1, "name": "Test User"}]
Send WebSocket Message
curl -X POST http://localhost:8675/_mock/sessions/test-1/socket/action \
-H "Content-Type: application/json" \
-d '{"action": "logout", "params": {"reason": "timeout"}}'
Using with Claude Desktop
SpyNet can be controlled by AI assistants via the Model Context Protocol (MCP).
Setup
-
Build SpyNet:
npm run build -
Add to Claude Desktop config:
macOS: Edit
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows: Edit
%APPDATA%\Claude\claude_desktop_config.json{ "mcpServers": { "spynet": { "command": "node", "args": ["/absolute/path/to/spynet/dist/mcp.js"] } } } -
Restart Claude Desktop
Usage with Claude
Ask Claude to configure your mocks:
- "Set up GET /api/users to return 3 test users"
- "Configure login to fail first, then succeed"
- "Send a WebSocket logout action to session demo"
- "Show me the request history for session test-1"
Your app connects to http://localhost:8675 as usual.
Available MCP Tools
configure_endpoint- Set up mock API responses with sequential behaviorlist_sessions- View all active sessionsdelete_session- Clean up a sessionlist_endpoints- See configured endpoints and call countsclear_endpoints- Remove mock configurationsget_request_history- Inspect request logssend_websocket_action- Trigger app actions via WebSocketsend_websocket_data- Send real-time data via WebSocket
Troubleshooting
Check if SpyNet is running:
curl http://localhost:8675/_mock/sessions
View MCP server logs: MCP logs go to stderr. Check Claude Desktop's logs or run directly:
node dist/mcp.js
Port already in use:
# Check what's using port 8675
lsof -ti:8675
# Use different port
PORT=9000 node dist/mcp.js
Using with Claude Code
SpyNet can also be used with Claude Code (CLI) via MCP.
Setup
-
Build SpyNet:
npm run build -
Add to Claude Code:
# Add for current user (stored in ~/.claude.json) claude mcp add --transport stdio spynet -- node /absolute/path/to/spynet/dist/mcp.js # Or add for your team (creates .mcp.json in project) cd /path/to/spynet claude mcp add --transport stdio spynet --scope project -- node ./dist/mcp.js -
Verify it's configured:
claude mcp list
Usage
Same as Claude Desktop - just ask Claude to configure your mocks naturally:
- "Set up GET /api/users to return 3 test users"
- "Configure login to fail first, then succeed"
- "Send a WebSocket logout action to session demo"
The same 8 MCP tools are available. Your app connects to http://localhost:8675 as usual.
API Reference
See Design Document for complete API documentation.
Development
# Run tests
npm test
# Build
npm run build
# Type check
npm run typecheck
License
MIT