Uh oh!
There was an error while loading. Please reload this page.
Prepare Screenly MCP for Claude Desktop marketplace listing - #304
Prepare Screenly MCP for Claude Desktop marketplace listing#304salmanfarisvp wants to merge 12 commits into
Conversation
Add tool annotations, an MCPB bundle manifest, release packaging for desktop platforms, and route logger output to stderr so the MCP stdio JSON-RPC stream stays clean.
salmanfarisvp
commented
Jul 29, 2026
Fork pull_request runs do not receive repository secrets, so SCREENLY_API_TOKEN is empty and `screen list` fails auth. The job also uses screenly/cli@master, so it never exercises the PR's own code.
vpetersson
commented
Jul 29, 2026
Love it! |
salmanfarisvp
commented
Jul 31, 2026
@renatgalimov, could you please request a review from Copilot? |
sergey-borovkov
commented
Aug 4, 2026
OverviewThis prepares the Screenly MCP server for Claude Desktop marketplace listing: MCP tool annotations on all 33 tools, an The core direction is right and the stdout fix is a genuine bug fix. Several things I verified directly:
High — should block marketplace submission1. The privacy policy in
2. No macOS code signing or notarization anywhere in Medium — annotation semantics3. 4. 5. Link/unlink idempotency is asymmetric. Medium — maintainability & packaging6. The 33-tool list now exists in four places ( 7. 8. No 9. 10. Conflicting token instructions in the same PR. Minor
VerdictThe stderr fix and the annotation pass are solid work. I'd hold merge on #1 (the privacy policy misstates both the API host and the Sentry telemetry) and #2 (unsigned macOS binary, untested through the actual download path) — both are submission blockers rather than code-quality nits. #3 and #4 are quick annotation corrections worth folding in at the same time. |
The listing text claimed api.screenly.io and no third-party telemetry; production uses api.screenlyapp.com and the CLI always initializes Sentry.
Prefer Settings → Extensions over GitHub sideloads, and guide macOS Gatekeeper blocks via Privacy & Security → Open Anyway instead of xattr.
Mark asset_create as open-world, treat updates as destructive, and mark link/share tools idempotent so hints match MCP spec meaning.
Keeps the duplicated 33-tool name/description catalog from drifting between mcpb/manifest.json and the #[tool] handlers.
Windows bundles ship screenly.exe; bake matching entry_point/command into each single-platform manifest instead of relying on a stale override.
The >=0.10.0 bound had no Screenly-specific source and could silently block installs; keep platform compatibility only.
Use the workspace screenlyapp.com Settings → Security → API tokens path in both places so install docs no longer conflict.
Gives Claude Desktop and the marketplace listing a proper brand mark; the release pack step and local build docs now include icon.png.
Pin @anthropic-ai/mcpb to 2.1.2 for reproducible releases, and publish screenly-macos-arm64/x64 and screenly-windows-x64 aliases alongside the rustc-target filenames.
salmanfarisvp
commented
Aug 5, 2026
Thanks for the detailed review, @sergey-borovkov , really helpful. I’ve addressed the High / Medium / Minor items in the latest pushes: High
Medium
Minor
Full Apple codesign / notarization for the binary is still an org-level follow-up (same as CLI releases today). Happy to adjust anything else you spot. |



Summary
Unblocks Anthropic Claude Desktop marketplace submission by finishing the remaining MCP listing prerequisites, and fixes a stdio bug that would have failed review on first launch.
title,readOnlyHint,destructiveHint,idempotentHint,openWorldHint) so clients can distinguish read-only vs destructive actionsmcpb/manifest.json+mcpb/README.mdwith privacy policy, 512×512 icon) and a release workflow step that builds.mcpbfor macOS and Windows (rustc-target names plus friendlier aliases likescreenly-macos-arm64.mcpb), injecting the version from the git tag and pinning@anthropic-ai/mcpb@2.1.2simple_logger'sstderrfeature — log lines were previously interleaved with JSON-RPC on stdout and caused Claude Desktop to fail withUnexpected non-whitespace character after JSON at position 4Review follow-ups
Addressed @sergey-borovkov's review on this PR:
High
api.screenlyapp.com, and disclosed unconditional Sentry initMedium
asset_createopenWorldHint, updates marked destructive, link/share tools idempotent (13 destructive)server.rsentry_point/commandin the release pack step (incl. win32)mcpb/icon.pngcompatibility.claude_desktopversion floor*.screenlyapp.com→ Settings → Security → API tokensMinor
@anthropic-ai/mcpb@2.1.2(latest under@2, as noted in review)screenly-macos-arm64,screenly-macos-x64,screenly-windows-x64Changes
src/mcp/server.rs— all 33 toolsmcpb/manifest.json,mcpb/README.md,mcpb/icon.png.github/workflows/release.yml.github/workflows/actions.yml— skipList screenson fork PRssrc/mcp/tests.rs— manifest tools match serverCargo.toml(simple_logger+stderr)README.md,.gitignore(*.mcpb)Test plan
cargo check --all-targetscargo fmt --checkcargo test(including MCPB manifest drift test).mcpbpack with@anthropic-ai/mcpb— manifest schema validation passed; executable bit preservedtools/listreturns annotations for all 33 tools (12 read-only, 13 destructive).mcpbin Claude Desktop locally — connects successfully with API token; tools work.mcpbartifacts (target names + aliases) attach to the GitHub release