# Keep MCP Evidence

> Capture reproducible real-use evidence for keep-mcp features and fixes through an MCP client and the Google Keep interface. Use when preparing PR screenshots or verifying a Keep workflow end to end.

- Skill: `feuerdev/keep-mcp-evidence` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add feuerdev/keep-mcp-evidence`
- Raw SKILL.md: https://api.skillmd.com/api/skills/feuerdev/keep-mcp-evidence/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: feuerdev (https://skillmd.com/u/feuerdev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/feuerdev/keep-mcp-evidence

---


# keep-mcp evidence

Prove the action through the actual MCP client and verify its effect independently
in Google Keep. Test output belongs in code blocks, never screenshot substitutes.
Prefer a CLI-based MCP client when available. Use the current agent's connected
MCP tools if they target the verified build, otherwise use a bounded CLI invocation
such as Codex exec or Cursor CLI. Honour the user's client choice and record its
name/version. A desktop client is a fallback, not a requirement.

Save the exact prompt and actual MCP call/result events as text. CLI transcripts
belong in code blocks; client screenshots are optional. Google Keep screenshots
still provide the independent visual evidence. Read [cli-runs.md](references/cli-runs.md)
when using a CLI client.

## Preflight

- Read the diff and choose concrete visible outcomes. Read
  [scenarios.md](references/scenarios.md) for the checklist scenarios from PR #19.
- Verify the client's keep-mcp launch command resolves to the checkout/build under
  test. Record commit, dirty status, interpreter, SDK version and transport without
  logging environment values. Restart/reconnect the server after changes. A checked
  out commit alone does not establish which server an already-running client uses.
- If multiple Keep servers are configured, target the exact server under test and
  inspect every invocation. Do not silently fall back to another server.
- Open Google Keep in an isolated authenticated browser session when available.
  Confirm it is the same account as the configured server, without publishing the
  account identifier. Prefer a dedicated test account. If login is needed, leave
  the page open and ask the user to sign in. Continue independent preparation while
  waiting. Never request tokens/passwords in chat or copy browser credentials.
- Use `UNSAFE_MODE=false`. Operate only on fixtures created for this run, with names
  `keep-mcp-evidence-<UTC timestamp>-<random suffix>-<scenario>`. Record returned note
  IDs immediately. Keep a local manifest of IDs and cleanup status. Never delete
  unrelated notes or the shared `keep-mcp` label.

## Run and capture

1. Write down the exact prompt, expected MCP operation/arguments, expected visible
   state and timeout. Use a fresh fixture per scenario. Fixture setup also goes
   through the client when feasible; identify any separate setup method explicitly.
2. Plan only the Keep checkpoints needed to prove the visible outcome. Use the
   client transcript for intermediate checks. Batch independent final fixture
   checks into one scoped Keep view when readable. Capture a before state when
   needed to demonstrate a change; do not take a screenshot after every tool call.
3. Submit the saved prompt through the real MCP client. With a CLI, retain its
   structured tool-call events and results. With a desktop client, expand the tool
   details and capture them. An assistant's success message alone is insufficient.
4. Match actual arguments and returned note ID against the scenario. If the model
   corrects invalid input, substitutes another tool, or refuses to call, mark that
   negative case **not exercised**. One clarified retry is reasonable; don't keep
   creating notes or replace the invocation with a Python call to manufacture proof.
5. In Keep, find/open the exact fixture and wait for synchronization, refreshing
   when necessary. Assert the visible title, item text and checked state. Bound the
   wait, for example to 60 seconds. A timeout is inconclusive, not proof of absence.
   For failed updates, also make a benign supported update and reload: this helps
   expose unintended cached mutations that could be synced on a later request.
   Keep the rejected update and follow-up sync in the same server process; a fresh
   CLI invocation can discard the very cached mutation this scenario tests.
6. Capture the resulting Keep state. Capture before-build evidence on separate
   fixtures when practical; don't confuse a starting state with reproduction on an
   old build. Never stage expected UI using browser edits or mock pages.
7. Inspect every image for legibility and private content. Frame the fixture and
   client exchange tightly, excluding unrelated notes, conversations, account menus
   and credentials. Cropping/redaction may hide private content, but must not alter
   the behavior shown. Never publish browser storage, tokens or raw private logs.
8. Clean up only recorded fixture IDs, preferably by moving them to recoverable
   trash through the client. Verify cleanup and record any leftover IDs. If a call
   times out, search for the unique title before retrying creation or cleanup.

Use browser/computer tools for Keep checkpoints and screenshot capture, not to
drive a client that has a usable CLI. Stop inspecting once a checkpoint is clear.
Use screenshots from supported browser/native capture tools. Load the relevant
browser skill when available. No generated screenshots, reconstructed conversations,
or screenshots of pytest/terminal output in place of real use.

## Delivery and reproducibility

Use [evidence-template.md](references/evidence-template.md). Keep captures and raw
observations in an ignored local `testing-evidence/<PR>/<run-id>/` directory. The
manifest records client/build, fixture IDs, prompts, actual calls, timestamps,
assertions, screenshot filenames, coverage gaps and cleanup. Never include secrets.
Publish only reviewed screenshots and selected non-sensitive facts to the requested
PR when authorized. Attach screenshots directly to the PR and quote decisive CLI
output in collapsible code blocks in its description or a comment. Keep run-specific
screenshots, transcripts and reports out of version control unless the user explicitly
requests otherwise. Do not create a repository evidence folder as an upload workaround.
If attachments are blocked, preserve the files locally and report the blocker.
Offer the files for manual attachment instead of escalating into desktop automation.
Reusable recipes belong in the skill; individual run results belong in the PR.

If login, client access or build provenance is unavailable, report the exact blocker,
leave the PR draft, and preserve the recipe for resumption. Do not mark the screenshot
requirement satisfied or substitute automated tests. A skill passing static validation
is not evidence that the live workflow has passed.

