# Verify Local MCP

Verify the OpenSEO MCP server end-to-end on a local dev server, protocol-level...

- Repository: https://github.com/every-app/open-seo (25988 stars)
- Category: Testing
- License: MIT
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add every-app/open-seo --skill verify-local-mcp -g -a claude-code -y`
Codex: `npx skills add every-app/open-seo --skill verify-local-mcp -g -a codex -y`
Cursor: `npx skills add every-app/open-seo --skill verify-local-mcp -g -a cursor -y`
Gemini CLI: `npx skills add every-app/open-seo --skill verify-local-mcp -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add every-app/open-seo`

## Description

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".

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 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.local` needs `AUTH_MODE=local_noauth` and `DATAFORSEO_API_KEY` (base64 of `login:password`). Never print the key.
- Start `pnpm dev:agents` in 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`, `/mcp` needs 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):

```bash
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":{...}}}
```

The rest: https://github.com/every-app/open-seo/blob/HEAD/.agents/skills/verify-local-mcp/SKILL.md
