MCP Server Evaluations Skill
Systematically evaluate MCP servers to ensure they function correctly, handle errors gracefully, and meet quality standards.
Workflow
Phase 1: Environment Verification
- Verify MCP server is running
curl -s http://localhost:3030/health
# Expected: 200 OK
curl -s -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"ping"}'
# Expected: {"jsonrpc":"2.0","id":1,"result":{}}
Phase 2: Tool Discovery
List all available tools
curl -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Verify tool completeness
Document discovered tools — Create inventory of tools for systematic testing.
Phase 3: Functional Testing
For each discovered tool:
Basic functionality test
curl -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "<tool_name>",
"arguments": { <valid_arguments> }
},
"id": 2
}'
Verify response structure
Error handling test — Call with invalid/missing arguments:
curl -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "<tool_name>",
"arguments": {}
},
"id": 3
}'
Verify error response quality
Phase 4: Question-Based Evaluation
Generate and test with realistic user questions:
Generate 10+ test questions covering:
- Simple single-tool queries
- Multi-step workflows requiring multiple tools
- Edge cases (empty results, large datasets)
- Error scenarios (invalid IDs, unauthorized access)
Execute each question through MCP client or Inspector
Score responses using evaluation criteria:
- Correctness: Does the answer match expected result?
- Completeness: Is all relevant information included?
- Clarity: Is the response well-structured?
- Performance: Response time within acceptable limits?
Phase 5: Quality Scoring
Calculate overall quality score:
| Category |
Weight |
Criteria |
| Tool Discovery |
20% |
All operations exposed, proper naming |
| Basic Functionality |
30% |
Valid inputs return correct responses |
| Error Handling |
20% |
Graceful errors with actionable messages |
| Question Accuracy |
20% |
Test questions answered correctly |
| Performance |
10% |
Response times < 5s for standard ops |
Pass threshold: 80% overall score
Quick Evaluation Checklist
Run this minimal check for fast validation:
# 1. Health check
curl -s http://localhost:3030/health | grep -q "" && echo "✓ Health OK" || echo "✗ Health FAILED"
# 2. MCP ping
curl -s -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"ping"}' | jq -e '.jsonrpc == "2.0" and .result' > /dev/null && echo "✓ Ping OK" || echo "✗ Ping FAILED"
# 3. Tools list
curl -s -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}' | jq '.result.tools | length' | xargs -I {} echo "✓ {} tools discovered"
# 4. Sample tool call (adjust tool name and args)
curl -s -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"listPets","arguments":{}},"id":2}' | jq '.result' > /dev/null && echo "✓ Tool call OK" || echo "✗ Tool call FAILED"
Test Question Templates
Use these patterns to generate effective test questions:
- List/Query: "Show me all [resources] that match [criteria]"
- Get Details: "What are the details of [resource] with ID [id]?"
- Create: "Create a new [resource] with [properties]"
- Update: "Update [resource] [id] to change [field] to [value]"
- Delete: "Remove [resource] with ID [id]"
- Aggregate: "How many [resources] exist with [status]?"
- Search: "Find [resources] where [field] contains [term]"
- Workflow: "Create a [resource], then update it, then list all"
References
For detailed documentation:
- references/mcp-inspector-guide.md — Inspector setup & usage
- references/evaluation-criteria.md — Quality metrics & scoring
- references/question-templates.md — Test question generation
Example: Petstore API Evaluation
# 1. Run health checks
curl -s http://localhost:3030/health
curl -s -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"ping"}' | jq -e '.jsonrpc == "2.0" and .result' > /dev/null && echo "✓ Ping OK" || echo "✗ Ping FAILED"
# 2. Tool discovery
curl -s -X POST http://localhost:3030/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}' | jq '.result.tools'
# 3. Test questions:
# - "List all available pets"
# - "Show details of pet with ID 1"
# - "Find pets with status 'available'"
# - "Create a new pet named 'Fluffy'"
1---2name: mcp-server-evaluations3description: Evaluate MCP servers for quality and reliability. Verify tool functionality, test error handling, generate tests, and assess response quality with no dependencies other than curl. Use this when validating MCP server implementations, testing OpenAPI-to-MCP conversions, or assessing API tool quality.4license: MIT5---6
7# MCP Server Evaluations Skill
8
9Systematically evaluate MCP servers to ensure they function correctly, handle errors gracefully, and meet quality standards.
10
11## Workflow
12
13### Phase 1: Environment Verification
14
151. **Verify MCP server is running**
16 ```bash
17 curl -s http://localhost:3030/health
18 # Expected: 200 OK
19
20 curl -s -X POST http://localhost:3030/mcp \
21 -H "Content-Type: application/json" \
22 -d '{"jsonrpc":"2.0","id":1,"method":"ping"}'
23 # Expected: {"jsonrpc":"2.0","id":1,"result":{}}
24 ```
25
26### Phase 2: Tool Discovery
27
281. **List all available tools**
29 ```bash
30 curl -X POST http://localhost:3030/mcp \
31 -H "Content-Type: application/json" \
32 -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
33 ```
34
352. **Verify tool completeness**
36 - [ ] All OpenAPI operations exposed as tools
37 - [ ] Tool names follow consistent convention (e.g., `getUsers`, `createOrder`)
38 - [ ] Descriptions are clear and actionable
39 - [ ] Required vs optional parameters clearly marked
40 - [ ] Parameter types match OpenAPI schema
41
423. **Document discovered tools** — Create inventory of tools for systematic testing.
43
44### Phase 3: Functional Testing
45
46For each discovered tool:
47
481. **Basic functionality test**
49 ```bash
50 curl -X POST http://localhost:3030/mcp \
51 -H "Content-Type: application/json" \
52 -d '{
53 "jsonrpc": "2.0",
54 "method": "tools/call",
55 "params": {
56 "name": "<tool_name>",
57 "arguments": { <valid_arguments> }
58 },
59 "id": 2
60 }'
61 ```
62
632. **Verify response structure**
64 - [ ] Response contains expected data
65 - [ ] Data types match schema
66 - [ ] No unexpected null values
67 - [ ] Pagination works (if applicable)
68
693. **Error handling test** — Call with invalid/missing arguments:
70 ```bash
71 curl -X POST http://localhost:3030/mcp \
72 -H "Content-Type: application/json" \
73 -d '{
74 "jsonrpc": "2.0",
75 "method": "tools/call",
76 "params": {
77 "name": "<tool_name>",
78 "arguments": {}
79 },
80 "id": 3
81 }'
82 ```
83
844. **Verify error response quality**
85 - [ ] Error message is actionable
86 - [ ] Missing required parameters identified
87 - [ ] HTTP status codes propagated correctly
88
89### Phase 4: Question-Based Evaluation
90
91Generate and test with realistic user questions:
92
931. **Generate 10+ test questions** covering:
94 - Simple single-tool queries
95 - Multi-step workflows requiring multiple tools
96 - Edge cases (empty results, large datasets)
97 - Error scenarios (invalid IDs, unauthorized access)
98
992. **Execute each question** through MCP client or Inspector
100
1013. **Score responses** using evaluation criteria:
102 - **Correctness**: Does the answer match expected result?
103 - **Completeness**: Is all relevant information included?
104 - **Clarity**: Is the response well-structured?
105 - **Performance**: Response time within acceptable limits?
106
107### Phase 5: Quality Scoring
108
109Calculate overall quality score:
110
111| Category | Weight | Criteria |
112|----------|--------|----------|
113| Tool Discovery | 20% | All operations exposed, proper naming |
114| Basic Functionality | 30% | Valid inputs return correct responses |
115| Error Handling | 20% | Graceful errors with actionable messages |
116| Question Accuracy | 20% | Test questions answered correctly |
117| Performance | 10% | Response times < 5s for standard ops |
118
119**Pass threshold**: 80% overall score
120
121## Quick Evaluation Checklist
122
123Run this minimal check for fast validation:
124
125```bash
126# 1. Health check
127curl -s http://localhost:3030/health | grep -q "" && echo "✓ Health OK" || echo "✗ Health FAILED"
128
129# 2. MCP ping
130curl -s -X POST http://localhost:3030/mcp \
131 -H "Content-Type: application/json" \
132 -d '{"jsonrpc":"2.0","id":1,"method":"ping"}' | jq -e '.jsonrpc == "2.0" and .result' > /dev/null && echo "✓ Ping OK" || echo "✗ Ping FAILED"
133
134# 3. Tools list
135curl -s -X POST http://localhost:3030/mcp \
136 -H "Content-Type: application/json" \
137 -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' | jq '.result.tools | length' | xargs -I {} echo "✓ {} tools discovered"
138
139# 4. Sample tool call (adjust tool name and args)
140curl -s -X POST http://localhost:3030/mcp \
141 -H "Content-Type: application/json" \
142 -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"listPets","arguments":{}},"id":2}' | jq '.result' > /dev/null && echo "✓ Tool call OK" || echo "✗ Tool call FAILED"
143```
144
145## Test Question Templates
146
147Use these patterns to generate effective test questions:
148
1491. **List/Query**: "Show me all [resources] that match [criteria]"
1502. **Get Details**: "What are the details of [resource] with ID [id]?"
1513. **Create**: "Create a new [resource] with [properties]"
1524. **Update**: "Update [resource] [id] to change [field] to [value]"
1535. **Delete**: "Remove [resource] with ID [id]"
1546. **Aggregate**: "How many [resources] exist with [status]?"
1557. **Search**: "Find [resources] where [field] contains [term]"
1568. **Workflow**: "Create a [resource], then update it, then list all"
157
158## References
159
160For detailed documentation:
161- [references/mcp-inspector-guide.md](references/mcp-inspector-guide.md) — Inspector setup & usage
162- [references/evaluation-criteria.md](references/evaluation-criteria.md) — Quality metrics & scoring
163- [references/question-templates.md](references/question-templates.md) — Test question generation
164
165## Example: Petstore API Evaluation
166
167```bash
168# 1. Run health checks
169curl -s http://localhost:3030/health
170curl -s -X POST http://localhost:3030/mcp \
171 -H "Content-Type: application/json" \
172 -d '{"jsonrpc":"2.0","id":1,"method":"ping"}' | jq -e '.jsonrpc == "2.0" and .result' > /dev/null && echo "✓ Ping OK" || echo "✗ Ping FAILED"
173
174# 2. Tool discovery
175curl -s -X POST http://localhost:3030/mcp \
176 -H "Content-Type: application/json" \
177 -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' | jq '.result.tools'
178
179# 3. Test questions:
180# - "List all available pets"
181# - "Show details of pet with ID 1"
182# - "Find pets with status 'available'"
183# - "Create a new pet named 'Fluffy'"
184```