Skip to content

feat: stop logging docs questions from package connections - #12

Open
z4o4z wants to merge 2 commits into
evgeny/release-automationfrom
evgeny/docs-no-logging
Open

z4o4z wants to merge 2 commits into
evgeny/release-automationfrom
evgeny/docs-no-logging

Conversation

@z4o4z

@z4o4z z4o4z commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

Do not merge yet. This needs the docs server change in voiceflow/voiceflow-website#617. It is approved and waiting to be deployed. Merge order: #14, then this PR, then #13.

What changes

Every docs MCP connection this package creates now adds logging=off to the URL. With that flag, the docs server keeps only an anonymous count of each call. A connection the user added by hand logs as before.

  • Both bundled configs, voiceflow/.mcp.json and voiceflow/mcp.json, use https://www.voiceflow.com/docs/mcp?logging=off.
  • The standalone setup commands for Claude Code, Codex, and Cursor use the same URL. Shell commands quote it, because ? is a wildcard in zsh.
  • The setup guide, docs workflow, data-handling page, measurement page, and provenance say what the server records in each mode. A docs connection the user added by hand is reused as it is.

The skills now leave the docs why field out when the tool marks it optional. When a tool still requires it, they send only the tag vf-agent-plugin/<version> skill=<skill> stage=<stage>, with no task, symptom, or setup state. initiator, purpose, intent: error, and the question are unchanged.

What the docs server does with logging=off

This is the behaviour that voiceflow/voiceflow-website#617 ships.

  • why is optional and ignored. The server drops it before validation and never logs or refuses it. Tool descriptions, initialize instructions, and prompts in this mode no longer ask for it.
  • Each call writes one anonymous count line: tool name, logging: off, caller label (public for this package), error code, duration, and cold start.
  • It never logs the question, search terms, why, initiator, purpose, client name, session, result URLs, or confidence.
  • Outside this code, Vercel request logs and firewall analytics still record method, path with query, IP, user agent, status, and timing. So ?logging=off is visible there. They do not record the POST body, where the question travels. The in-memory rate limiter holds the IP for its window and never logs it.
  • A connection without the flag, such as a manual install, logs exactly as before. There why is still required, at 3 to 200 characters.

Why

Anthropic's directory policy does not allow collecting "extraneous conversation data, even for logging purposes." The old why sentence sent a summary of the user's task to the docs logs. Package connections now send no task summary, and the server does not log their questions.

What this costs measurement

Package traffic now shows only as anonymous counts with caller public. Any other client that sends the flag lands in the same counts, so the tag no longer separates package traffic. docs/measurement.md says this. We measure the package with controlled evaluations instead. The signal "questions after an account read" is gone.

Changelog and version

The two changelog lines sit under ## Unreleased. This PR changes no version field. When it merges after #14, the release bot sets 1.1.0.

This branch is rebased onto #14. It keeps main's account MCP pin, ?version=3.

The URL lives in one place

scripts/validate.py holds the one accepted docs URL in DOCS_MCP_URL. To change the URL, change that value. Validation then prints every file and line that still uses the old URL. A test covers this check.

Verification

  • python3 scripts/validate.py: passed.
  • python3 -m unittest discover -s tests -v: 136 tests ran, 135 passed, 1 skipped.
  • python3 scripts/build.py: passed.
  • The ci: bump plugin versions from conventional PR titles #14 title rules, run locally against evgeny/release-automation: no problems, no version edits, and two new lines under ## Unreleased.
  • From the first version of this PR, not rerun after the rebase: claude plugin validate ./voiceflow (Claude Code 2.1.322) passed with a missing-icon warning that feat: add listing metadata for plugin and skill directories #13 tracks. python3 scripts/verify_hosts.py installed the plugin in disposable Codex and Claude configs.
  • Read-only probe of the public docs MCP on 2026-11-12, server 2.1.2, before #617: why is required, 3 to 200 characters. A tag-only why returned a normal answer.
  • Not run: python3 scripts/scan_secrets.py, because Gitleaks is not installed locally; CI runs it. No live model evaluations were run.

Stacked on #14.

🤖 Generated with Claude Code

z4o4z and others added 2 commits November 13, 2026 21:19
Every docs MCP connection the package creates now uses
https://www.voiceflow.com/docs/mcp?logging=off: both bundled MCP configs,
the standalone setup commands, and the setup guide. The parameter name is
provisional until the docs server ships the option; validate.py holds the
one accepted URL and reports every file that differs.

The docs `why` field now carries only the package, skill, and stage tag,
with no task, symptom, or setup-state sentence. Measurement, data handling,
eval cases, and the changelog describe the new behavior.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
voiceflow/voiceflow-website#617 defines what logging=off does. Each call
writes one anonymous count line with caller `public`. The question, search
terms, why, initiator, purpose, client name, and session are never logged.
Vercel request logs still record the path with query and the IP address, but
not the POST body. Connections without the flag log as before and still
require why.

The docs workflow now leaves an optional why out and sends only the package
tag when a tool requires it. Data handling, measurement, provenance, setup
guides, eval cases, and the changelog describe this behaviour and name #617 as
the deploy dependency instead of calling the parameter provisional.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@z4o4z
z4o4z force-pushed the evgeny/docs-no-logging branch from 6aafac1 to fb0ffc2 Compare November 13, 2026 20:24
@z4o4z
z4o4z changed the base branch from evgeny/mcp-v3-names to evgeny/release-automation November 13, 2026 20:25
@z4o4z z4o4z changed the title feat: turn off docs MCP logging for package connections feat: stop logging docs questions from package connections Nov 13, 2026

z4o4z commented Nov 13, 2026

Copy link
Copy Markdown
Member Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant