# Verify Local Mcp > Verifica el servidor MCP de OpenSEO de punta a punta en un dev server local: corrección a nivel de protocolo contra DataForSEO real, y luego un probe con agente headless que prueba la ergonomía de las herramientas. Fuente: https://skillsagentes.com/skills/every-app/open-seo/verify-local-mcp Markdown: https://skillsagentes.com/skills/every-app/open-seo/verify-local-mcp.md Repositorio: https://github.com/every-app/open-seo Autor: every-app Licencia: MIT Actualizado: hace 14 días Coste de contexto: 100 tok instalada, 1.3k tok al activarse, 1.3k tok con todos los archivos del bundle Bundle: 1 archivo, 5 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add every-app/open-seo --skill verify-local-mcp --agent claude-code # Cursor npx -y skills add every-app/open-seo --skill verify-local-mcp --agent cursor # Codex npx -y skills add every-app/open-seo --skill verify-local-mcp --agent codex # Gemini CLI npx -y skills add every-app/open-seo --skill verify-local-mcp --agent gemini # Windsurf npx -y skills add every-app/open-seo --skill verify-local-mcp --agent windsurf # Cline npx -y skills add every-app/open-seo --skill verify-local-mcp --agent cline ``` ## Qué hace - Verifica el servidor MCP de OpenSEO de punta a punta en un dev server local, en dos capas. - Capa de protocolo: JSON-RPC crudo contra `/mcp` para afirmar formas exactas y forzar casos límite (reanudar `taskId`, resultados vacíos, entradas inválidas) con llamadas reales y facturadas a DataForSEO a profundidad 10-20. - Capa de consumidor: lanza un subproceso headless de Claude conectado como cliente MCP real y le da una tarea natural, sin nombrar las herramientas, para probar si las descripciones bastan. - Aplica una rúbrica de ergonomía: selección de herramienta a la primera, esquemas que documentan cada restricción, tamaño de salida por fila, errores accionables, copy de async y honestidad de créditos. - Itera: arreglar, el hot-reload recoge el cambio, re-verificar por curl lo tocado y relanzar el probe de consumidor una vez por ronda. ## Cuándo usarla - Después de añadir o cambiar herramientas MCP, o cuando se pide comprobar que el MCP "funciona" o "es ergonómico". ## Qué la activa - "Verifica el MCP local de OpenSEO de punta a punta" - "Comprueba que las herramientas MCP nuevas son ergonómicas para un agente" - "Prueba el ciclo de vida de las herramientas MCP en cola" ## Antes de instalar - Necesita `.env.local` con `AUTH_MODE=local_noauth` y `DATAFORSEO_API_KEY`, `pnpm dev:agents` en marcha y un binario `claude` para el probe de consumidor; las llamadas a DataForSEO se facturan. - Necesita en el PATH: curl - makes network requests ## Archivos - SKILL.md — 5 KB ## SKILL.md Reproducido tal cual desde every-app/open-seo bajo MIT. Esta sección es el documento original y está en inglés. # 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://.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. ## 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:///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":"","arguments":{...}}} ``` - Bootstrap: `list_projects`, then `create_project` if empty — most tools need a `projectId`. - Test the happy path AND at least one edge per changed tool: an empty result (obscure query), an invalid identifier, and for queued tools the full lifecycle including resuming with the returned `taskId`. - These are real, billed DataForSEO calls (metering itself short-circuits in `local_noauth` — billing needs unit tests, not this). Keep depths 10–20. ## 3. Consumer probe (the ergonomics test) Spawn a headless Claude subprocess connected as a real MCP client. Write a config: ```json { "mcpServers": { "openseo-local": { "type": "http", "url": "http:///mcp" } } } ``` Then run a NATURAL task — never name the tools; whether the model finds them from descriptions alone is the test: ```bash claude -p ". Keep spend minimal: depths 10-20, one 3x3 grid max, ~10 paid calls. Deliver two sections: 1. FINDINGS — the task result. 2. MCP FEEDBACK — critique the MCP as a first-time consumer: were descriptions enough to pick tools without trial and error? confusing schemas, surprising output shapes or sizes, unclear errors, credit-cost surprises? Did async/taskId flows behave as described? List anything that made you hesitate or retry." \ --mcp-config mcp-local.json --strict-mcp-config \ --allowedTools "mcp__openseo-local,mcp__openseo-local__*" \ --model sonnet --max-turns 30 ``` Use `--model sonnet` as the typical-client proxy — if sonnet navigates it cold, weaker clients likely can too. Read FINDINGS for correctness (did it get real, sensible data?) and MCP FEEDBACK for the rubric below. ## 4. Ergonomics rubric — what feedback to act on - **Tool selection**: the probe should pick the right tool first try. Retries or wrong-tool detours mean a description needs a sharper "use this when / not this" sentence. - **Schemas**: every constraint the provider enforces silently must be in the field's `.describe()` (units, whole-number requirements, defaults, what's ignored when). If the probe guessed-and-retried an input, encode the rule server-side (coerce/round) or document it — prefer coercing. - **Output size**: budget roughly a few KB per row. Provider rows carrying `popular_times`/attribute trees/photo URLs must be trimmed to the fields the tool's job needs; point to the single-entity tool for the full shape. - **Errors**: actionable, never a raw upstream field name without a hint at the fix. Failures after a billed step must keep the recovery handle (e.g. the taskId) in the message. - **Async copy**: descriptions must match typical latency ("usually completes within this call") and the resume path must actually work when driven by the probe, not just by curl. - **Credit honesty**: each description's credit sentence matches reality, including cache-hit and resume paths. ## 5. Iterate and clean up Fix findings → hot-reload picks them up → re-verify just the changed behavior via curl (cheap) → rerun the full consumer probe once per iteration round (it re-tests selection and flow, not just the fix). When done: stop the dev server background task, run the repo's tests/`ci:check`, and fold genuine provider quirks into code comments or tests so the next agent doesn't rediscover them. ## Dónde encaja - Categoría: [Testing y QA](https://skillsagentes.com/categorias/testing-qa.md) — Flujos de testing unitario, de integración y end-to-end. - Creador: [every-app](https://skillsagentes.com/creators/every-app.md) — 19 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Seo Coach](https://skillsagentes.com/skills/every-app/open-seo/seo-coach.md): Entra en un modo de coach de OpenSEO cercano que explica los flujos, recomienda los siguientes pasos y ayuda a usar bien agentes, búsqueda web, scraping y datos MCP. - [Seo Audit](https://skillsagentes.com/skills/every-app/open-seo/seo-audit.md): Audita un sitio y entrega un informe SEO de una página, en lenguaje llano, que cualquiera puede accionar, centrado en una única acción para esta semana. - [Create Repo Skill](https://skillsagentes.com/skills/every-app/open-seo/create-repo-skill.md): Crea o actualiza una skill en este repositorio de la forma correcta: hogar canónico en `.agents/skills`, marca interna o pública, symlinks en `.claude/skills` y registro en las docs públicas para las skills de producto. - [Seo Project Setup](https://skillsagentes.com/skills/every-app/open-seo/seo-project-setup.md): Rellena el contexto compartido de OpenSEO de un proyecto (alcance del sitio, objetivos, posicionamiento, competidores, páginas clave y preferencias), más comprobaciones de MCP y entrada de Search Console. - [Keyword Research](https://skillsagentes.com/skills/every-app/open-seo/keyword-research.md): Descubre oportunidades de palabras clave, evalúa métricas y SERPs y guarda o etiqueta los términos prometedores usando los datos MCP de OpenSEO. ## Skills relacionadas - [Webapp Testing](https://skillsagentes.com/skills/every-app/open-seo/webapp-testing.md): Toolkit para interactuar con y probar aplicaciones web locales con Playwright: verificar la funcionalidad del frontend, depurar el comportamiento de la UI, capturar pantallas del navegador y ver sus logs. - [Papercuts](https://skillsagentes.com/skills/every-app/open-seo/papercuts.md): Registra en `.agents/PAPERCUTS.md` la fricción real y recurrente del repositorio (setup confuso, comandos inestables, errores engañosos, archivos generados obsoletos) y también revisa, deduplica y resuelve las entradas existentes. - [Keyword Research](https://skillsagentes.com/skills/every-app/open-seo/keyword-research.md): Descubre oportunidades de palabras clave, evalúa métricas y SERPs y guarda o etiqueta los términos prometedores usando los datos MCP de OpenSEO. - [Openseo Release Notes](https://skillsagentes.com/skills/every-app/open-seo/openseo-release-notes.md): Corta una release de OpenSEO: sube la versión, redacta notas de versión para el usuario desde los commits del último tag, pasa una revisión con verificación por subagentes y abre un PR `release: vX.X.X`. - [Simple Issue Description](https://skillsagentes.com/skills/every-app/open-seo/simple-issue-description.md): Convierte un reporte de bug tosco, una petición de feature, una nota de soporte o un PR en un issue corto y en lenguaje llano, centrado en el problema y el comportamiento deseado. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)