@rhofkens/mcp-quotes-server-claude-code
Version:
Model Context Protocol (MCP) server for managing and serving quotes
267 lines (220 loc) • 6.93 kB
Markdown
# Manual Test Validation Checklist
Use this checklist to validate the MCP Quotes Server before release or deployment. Each section must pass completely before proceeding.
**Test Date:** _______________
**Tester:** _______________
**Version:** _______________
## Pre-Test Setup ✓
- [ ] Node.js version >= 18.0.0 confirmed (`node --version`)
- [ ] Fresh build completed (`npm run build`)
- [ ] All unit tests pass (`npm test`)
- [ ] SERPER_API_KEY is set and valid
- [ ] Logs directory exists and is writable
## 1. Basic Functionality Tests ✓
### 1.1 getQuotes Tool - STDIO Mode
- [ ] Start server: `node dist/index.js`
- [ ] Launch MCP Inspector: `npx @modelcontextprotocol/inspector dist/index.js`
- [ ] Navigate to Tools section
- [ ] Execute getQuotes with:
```json
{
"person": "Albert Einstein",
"numberOfQuotes": 3
}
```
- [ ] ✅ Returns exactly 3 quotes
- [ ] ✅ Each quote has text, author, and source
- [ ] ✅ Response time < 2 seconds
### 1.2 getQuotes with Topic Filter
- [ ] Execute getQuotes with:
```json
{
"person": "Maya Angelou",
"numberOfQuotes": 2,
"topic": "courage"
}
```
- [ ] ✅ Returns 2 quotes related to courage
- [ ] ✅ Quotes are from Maya Angelou
### 1.3 getResilientQuotes Tool
- [ ] Execute getResilientQuotes with:
```json
{
"person": "Steve Jobs",
"numberOfQuotes": 5
}
```
- [ ] ✅ Returns quotes with metadata
- [ ] ✅ Metadata includes cacheHit status
- [ ] ✅ First call: cacheHit = false
- [ ] Execute same request again immediately
- [ ] ✅ Second call: cacheHit = true
- [ ] ✅ Second response faster than first
### 1.4 Resource Access
- [ ] Navigate to Resources section
- [ ] Access `quote-prompt://list`
- [ ] ✅ Returns list of 3 templates
- [ ] Access `quote-prompt://default`
- [ ] ✅ Returns complete template with metadata
## 2. Error Handling Tests ✓
### 2.1 Invalid Parameters
- [ ] Test numberOfQuotes > 10:
```json
{
"person": "Einstein",
"numberOfQuotes": 15
}
```
- [ ] ✅ Returns clear error message
- [ ] ✅ Error mentions 1-10 constraint
### 2.2 Missing Required Parameters
- [ ] Test without person parameter:
```json
{
"numberOfQuotes": 5
}
```
- [ ] ✅ Returns error about missing person
### 2.3 Unknown Person
- [ ] Test with fictional person:
```json
{
"person": "Fictional Person XYZ123",
"numberOfQuotes": 3
}
```
- [ ] ✅ Returns empty array or appropriate message
- [ ] ✅ No server crash
## 3. HTTP Transport Tests ✓
### 3.1 Server Startup
- [ ] Stop any running server
- [ ] Start with HTTP transport:
```bash
MCP_TRANSPORT=http node dist/index.js
```
- [ ] ✅ Logs show: "MCP HTTP Server listening at http://localhost:3000/mcp"
- [ ] ✅ No duplicate startup messages
### 3.2 Health Check
- [ ] Execute: `curl http://localhost:3000/health`
- [ ] ✅ Returns JSON with status "ok"
- [ ] ✅ Shows transport as "http"
### 3.3 Session Management
- [ ] Initialize session:
```bash
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "test", "version": "1.0"}
}
}' -i
```
- [ ] ✅ Returns 200 status
- [ ] ✅ Contains Mcp-Session-Id header
- [ ] ✅ Response includes serverInfo
### 3.4 Tool Execution via HTTP
- [ ] Use session ID from above
- [ ] List tools:
```bash
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: SESSION_ID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
```
- [ ] ✅ Returns 2 tools (getQuotes, getResilientQuotes)
## 4. Resilience Tests ✓
### 4.1 Invalid API Key Handling
- [ ] Restart server with invalid key:
```bash
SERPER_API_KEY="invalid" node dist/index.js
```
- [ ] Test getResilientQuotes
- [ ] ✅ Returns error but doesn't crash
- [ ] ✅ Error message is user-friendly
### 4.2 Pre-warmed Cache
- [ ] Restart with valid API key
- [ ] Immediately test getResilientQuotes for "Albert Einstein"
- [ ] ✅ Response time < 500ms (from pre-warmed cache)
## 5. Performance Validation ✓
### 5.1 Response Times
- [ ] Cold start getQuotes: ✅ < 2 seconds
- [ ] Cached getResilientQuotes: ✅ < 200ms
- [ ] Resource access: ✅ < 100ms
### 5.2 Concurrent Requests
- [ ] Send 5 simultaneous requests
- [ ] ✅ All complete successfully
- [ ] ✅ No errors or timeouts
### 5.3 Memory Usage
- [ ] Monitor server for 5 minutes of use
- [ ] ✅ Memory stays under 300MB
- [ ] ✅ No memory leaks observed
## 6. Integration Tests ✓
### 6.1 MCP Inspector Compatibility
- [ ] All tools visible in Inspector
- [ ] All resources accessible
- [ ] ✅ No console errors in Inspector
### 6.2 Claude Desktop Integration (if available)
- [ ] Configure in Claude Desktop
- [ ] ✅ Server starts without errors
- [ ] ✅ Tools callable from Claude
## 7. Security & Configuration ✓
### 7.1 API Key Security
- [ ] API key not logged in console
- [ ] ✅ API key not in error messages
- [ ] ✅ Logs don't contain sensitive data
### 7.2 Environment Variables
- [ ] Test with minimal config (only SERPER_API_KEY)
- [ ] ✅ Server uses sensible defaults
- [ ] Test with all optional variables set
- [ ] ✅ All configurations respected
## 8. Documentation Validation ✓
### 8.1 README Accuracy
- [ ] Installation instructions work
- [ ] ✅ All examples execute correctly
- [ ] ✅ Troubleshooting steps are accurate
### 8.2 API Documentation
- [ ] All endpoints documented
- [ ] ✅ Examples match actual responses
- [ ] ✅ Error codes are accurate
## Final Validation
### Summary
- [ ] Total Tests: _____
- [ ] Passed: _____
- [ ] Failed: _____
### Critical Issues
List any issues that must be fixed before release:
1. _________________________________
2. _________________________________
3. _________________________________
### Non-Critical Issues
List any minor issues for future improvement:
1. _________________________________
2. _________________________________
3. _________________________________
### Sign-off
- [ ] All critical tests passed
- [ ] No blocking issues identified
- [ ] Ready for release/deployment
**Approved by:** _______________ **Date:** _______________
## Quick Test Commands Reference
```bash
# Unit tests
npm test
# Start STDIO mode
node dist/index.js
# Start HTTP mode
MCP_TRANSPORT=http node dist/index.js
# MCP Inspector
npx @modelcontextprotocol/inspector dist/index.js
# Health check
curl http://localhost:3000/health
# Quick quote test
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: SESSION_ID" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"getQuotes","arguments":{"person":"Einstein","numberOfQuotes":1}}}'
```