
Verify Local MCP
Verify the OpenSEO MCP server end-to-end on a local dev server, protocol-level...
Install
npx skills add every-app/open-seo --skill verify-local-mcp -g -a claude-code -y- Repository
- every-app/open-seo26k
- Category
- Testing
- Updated
- 5d ago
- License
- MIT
- Context cost
- Lightabout 1,231 tokens
- Runs scripts
- No, instructions only
What it does
Verify the OpenSEO MCP server end-to-end on a local dev server, protocol-level correctness against real DataForSEO, then a headless-agent consumer probe that tests tool ergonomics (descriptions, schemas, output size, errors, async flows) without the maintainer manually driving an MCP client. Use after adding or changing MCP tools, or when asked to check that the MCP "works" or "is ergonomic".
Verify local MCP
Two layers, in order. The protocol layer proves the server and provider behave; the consumer layer proves an agent that has never seen the code can use the tools well. They catch different bugs, protocol testing found DataForSEO quirks (zoom-dependent empty SERPs), the consumer probe found ergonomics failures (9KB provider rows overflowing client token budgets, fractional inputs rejected upstream with raw provider errors). Do both.
1. Boot
.env.localneedsAUTH_MODE=local_noauthandDATAFORSEO_API_KEY(base64 oflogin:password). Never print the key.- Start
pnpm dev:agentsin the background. The server URL is branch-prefixed:http://<branch-suffix>.open-seo.localhost:1355(the exact URL is printed on boot; logs tee to.logs/dev-server.log). - With
local_noauth,/mcpneeds no token. Vite hot-reloads server code, so fix → re-call without restarting. - After changing a tool's input or output schema, refresh the client's tool discovery (
tools/list) or reconnect the MCP client before calling it again. Clients can cache validators from the previous tool list and reject valid results after the provider call has already incurred a charge.
2. Protocol smoke (cheap, deterministic)
Raw JSON-RPC against /mcp, the layer for asserting exact shapes and driving edge cases (resume taskIds, empty results, invalid inputs):
curl -sS http://<url>/mcp \
-H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# tools/call: {"method":"tools/call","params":{"name":"<tool>","arguments":{...}}}


