feat: 1.0.0b8 — MCP registry metadata + --source attribution flag [INIT-2026-556]#163
Merged
SyncTekLLC merged 1 commit intoMay 27, 2026
Conversation
…IT-2026-556]
Feature A — MCP registry metadata
- Add `<!-- mcp-name: io.github.SyncTek-LLC/simdrive -->` HTML comment
to the top of README.md (root) and simdrive/README.md so the official
Anthropic MCP registry can verify ownership of the PyPI package.
- Add server.json at the repo root declaring canonical MCP metadata
(name, version, repo, license, runtime, packages, transport=stdio,
runtimeHint=uvx) per the modelcontextprotocol/registry schema.
Picked up automatically by Smithery, Glama, awesome-mcp-servers
ingestion crawlers, and PulseMCP mirror.
Feature B — `simdrive trial start --source <channel>` attribution
- New CLI flags `--source <utm-channel>` (opt-in marketing attribution)
and `--no-track` (per-invocation opt-out) on `simdrive trial start`.
- New module simdrive/license/telemetry.py: SHA-256 email hashing,
payload builder, opt-out config resolution, fire-and-forget POST.
- Network failure is non-fatal: the trial license still installs
locally and the CLI prints a single "telemetry skipped" notice.
- Raw email NEVER leaves the machine — only SHA-256(email.lower().strip())
is transmitted. Payload shape:
{hashed_email, source, ts, package_version, os}
- Persistent opt-out via ~/.simdrive/telemetry.toml (track = false) or
SIMDRIVE_TELEMETRY_OFF=1 env var. File-present-without-track-key is
treated as opt-out (fail-closed for privacy).
- POST contract negotiated with sibling agent building Worker /trial
endpoint on simdrive-license-api. Late-deploy Worker is acceptable —
CLI calls will fail silently per the non-fatal design.
Tests: 27 new unit + integration tests in test_trial_source_attribution.py
covering hash determinism, default source=direct, --no-track zero-network,
opt-out file/env resolution, exact contract shape, and all network-failure
non-fatal paths. Full suite: 1674 passed, 3 skipped, 0 failed.
Anti-overreach: no changes to license generation, JWT shape, paywall
enforcement, or any other existing trial behaviour.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
W1 launch foundations for INIT-2026-556 ($5K MRR in 90 days). Two coupled features:
Feature A — MCP registry metadata
Per M2 agentic-distribution audit: SimDrive is absent from every major MCP registry today. This PR unblocks ingestion by Anthropic's official MCP registry (and downstream Smithery / Glama / awesome-mcp-servers / PulseMCP mirrors).
<!-- mcp-name: io.github.SyncTek-LLC/simdrive -->HTML comment at the top ofREADME.md(root) andsimdrive/README.md— the convention Anthropic's registry uses to verify PyPI ownership.server.jsonat the repo root declaring canonical MCP metadata (name / version / repo / license / runtime / packages / transport=stdio / runtimeHint=uvx) per the modelcontextprotocol/registry schema.Feature B —
simdrive trial start --source <channel>attributionPer M4 pipeline math: we need to know which channel drove each trial to size $5K MRR funnel inputs. New CLI surface (opt-in by default, explicit opt-out available):
{hashed_email, source, ts, package_version, os}tohttps://api.simdrive.dev/trial. Contract negotiated with sibling W1-W agent building the Worker endpoint.sha256(email.lower().strip())is transmitted. OS field is the coarse family (darwin/linux/other), not a fingerprint."telemetry skipped"notice.~/.simdrive/telemetry.toml(track = false) orSIMDRIVE_TELEMETRY_OFF=1env var. File-present-without-key is treated as opt-out (fail-closed for privacy).Wave bump
simdrive/pyproject.toml:1.0.0b7→1.0.0b8simdrive/CHANGELOG.mdhead entry addedAnti-overreach (per task spec)
--no-trackand persisted opt-out config always win over defaults.Test plan
simdrive/tests/test_trial_source_attribution.py(hash determinism, default source = "direct",--no-trackzero-network, opt-out file/env resolution, exact contract shape, all network-failure non-fatal paths)test_trial_cli.py) — 9 passing, no regressionstests/packaging/test_publish_gates.py) — 9 passing, version-match contract satisfiedsimdrive trial start --email <x> --offline-dev --no-trackexits 0 with both license and telemetry noticesPost-merge
simdrive-v1.0.0b8, watch PyPI publish, watch downstream cascade tosimdrive-sitechangelog./trialendpoint onsimdrive-license-api.🤖 Generated with Claude Code