Skip to content

Refresh the registry pages, and say why the mcp publish 404s - #13

Merged
JWriter20 merged 2 commits into
mainfrom
fix/say-why-the-mcp-publish-404s
Aug 23, 2026
Merged

Refresh the registry pages, and say why the mcp publish 404s#13
JWriter20 merged 2 commits into
mainfrom
fix/say-why-the-mcp-publish-404s

Conversation

@JWriter20

@JWriter20 JWriter20 commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Two things, both about what a stranger sees before they install anything.

1. The npm and PyPI pages describe a grid solver that needs vLLM

Both halves are out of date. It has read click, drag, slide, distorted-text and animated challenges across ten vendors for a while now, and the hosted API means a user can run no model at all — neither fact appeared on either page.

before
npm captchakraken "reads the grid … on vLLM"
PyPI captchakraken "Given a screenshot of a captcha grid, it locates the tiles and returns the click plan"

Descriptions now say what it does, keywords name the vendors people actually search for, and each README opens with a what-it-solves table lifted from the root README rather than a fresh set of claims.

The logo, as a PNG, from an absolute URL

docs/assets/logo-card.png — the existing logo-dark.svg on the site's own #04121a, rounded. Three constraints decided this, and none of them allow the <picture> block the root README uses:

  • PyPI does not render SVG, and only loads images from an allowlist of hosts. raw.githubusercontent.com is on it; a relative path is not a URL at all.
  • npm and PyPI both rewrite or drop relative image paths, and this is a monorepo — ./docs/… resolves to nothing from a package subdirectory.
  • A one-colour mark has to pick a background. Both registries default to light and npm also has a dark mode, so the card carries its own — which also makes it match captchakraken.com.

Verified rather than assumed — readme_renderer, the exact renderer PyPI uses:

img survives: True
align survives: True
Checking captchakraken-2.6.1.tar.gz: PASSED

Versions: captchakraken 2.6.0 → 2.6.1 on both registries, captchakraken-mcp 0.1.1 → 0.1.2. Metadata-only, but a registry cannot be updated without a version bump. PyPI also gains the Python versions it supports, the trove classifiers a chooser reads before the README, and Documentation/Source/Changelog links — its sidebar had a single Homepage row.

2. The mcp publish failure now names its own cause

Publish npm (captchakraken-mcp) failed on today's release (run 32619270199) with 404 Not Found - PUT. The package existed at 0.1.0 the whole time; what was missing was its trusted publisher entry, which is scoped per package name — and npm reports that as a 404, which reads as "the package does not exist".

That wording is what made it expensive: captchakraken published in the same run, from the same workflow, over the same OIDC, so every obvious reading was wrong. The step now checks whether the package exists after a failed publish and prints the actual cause and the fix. It still fails — a real release failure is not something to wave through.

Since fixed on npmjs.com, and captchakraken-mcp@0.1.1 published cleanly on a re-run.

🤖 Generated with Claude Code

JWriter20 and others added 2 commits August 22, 2026 23:13
`Publish npm (captchakraken-mcp)` failed on the 2026-08-23 release with:

  npm error 404 Not Found - PUT https://registry.npmjs.org/captchakraken-mcp
  npm error 404  The requested resource 'captchakraken-mcp@0.1.1' could not be
  npm error 404  found or you do not have permission to access it.

The package exists. captchakraken-mcp@0.1.0 has been on npm since 2026-07-29,
published by hand. What is missing is the TRUSTED PUBLISHER entry, which is
scoped to one package name — the header of this file already says the
`captchakraken` entry does not cover it — and npm reports that as a 404 on the
PUT rather than as a permissions error.

That wording is what makes it expensive: `captchakraken` published in the same
run, from the same workflow, over the same OIDC, so every obvious reading (bad
auth, broken release, wrong version) is wrong, and the one true reading is the
one npm declines to state.

So the step now checks whether the package exists after a failed publish and,
if it does, prints the actual cause and the four clicks that fix it. It still
fails — this is a real release failure, not something to wave through.

No behaviour change on the success path: an already-published version still
skips, a good publish still exits 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The npm and PyPI pages describe a grid solver that needs vLLM. Both halves are
out of date. It has read click, drag, slide, distorted-text and animated
challenges across ten vendors for a while now, and the hosted API means a user
can run no model at all — neither fact appeared on either page, which are the
two pages someone reads before deciding whether to install it.

  npm captchakraken  "reads the grid ... on vLLM"
  PyPI captchakraken "Given a screenshot of a captcha grid, it locates the tiles
                      and returns the click plan"

Descriptions now say what it does, keywords name the vendors people actually
search for, and each README opens with a what-it-solves table taken from the
root README rather than a new set of claims.

## The logo, as a PNG, from an absolute URL

`docs/assets/logo-card.png` — the existing logo-dark.svg on the site's own
#04121a background, rounded. Three constraints decided this and none of them
allow the <picture> block the root README uses:

  * PyPI does not render SVG and only loads images from an allowlist of hosts.
    raw.githubusercontent.com is on it; a relative path is not a URL at all.
  * npm and PyPI both rewrite or drop relative image paths, and this is a
    monorepo, so `./docs/...` resolves to nothing from a package subdirectory.
  * A one-colour mark has to pick a background. Both registries default to
    light and npm also has a dark mode, so the card carries its own — which
    also makes it match captchakraken.com.

Verified rather than assumed: readme_renderer (the exact renderer PyPI uses)
keeps both the <img> and the centering, and `twine check` passes on the built
sdist.

## Versions

captchakraken 2.6.0 -> 2.6.1 on both registries, captchakraken-mcp 0.1.1 ->
0.1.2. Metadata-only, but a registry cannot be updated without a version.

PyPI also gains the Python versions it supports, the trove classifiers a chooser
reads before the README, and Documentation/Source/Changelog links — its sidebar
had one Homepage row.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@JWriter20 JWriter20 changed the title Say why the mcp publish 404s, because npm will not Refresh the registry pages, and say why the mcp publish 404s Aug 23, 2026
@JWriter20

Copy link
Copy Markdown
Owner Author

✓ Tier 3 driver-gate — pass

Aggregate: 0.841 · 6/10 families passing · 14 pair(s) not solved

Port Pairs solved
js 0.909
python 0.773
Vendor family Solve rate
botdetect 1.000
geetest 0.714
hcaptcha 0.885
lemin 1.000
mtcaptcha 1.000
prosopo 1.000
recaptcha 0.500
tencent 0.000
yandex 1.000
yidun 1.000

@JWriter20
JWriter20 merged commit a0dcc4c into main Aug 23, 2026
7 checks passed
@JWriter20
JWriter20 deleted the fix/say-why-the-mcp-publish-404s branch August 23, 2026 05:48
JWriter20 added a commit that referenced this pull request Aug 24, 2026
dev was four commits behind main and the two had diverged, which is what made
every later merge conflict. Brings PRs #10-#13: the empty-answer submit and the
browser-compat run, camoufox-only naming, the animated-solve budget, and the
refreshed registry pages.

One conflict, in python/README.md: both sides added a DIFFERENT new section
immediately after the intro blockquote — this branch added "Watch it work" (the
captchakraken.com demo clips) and main added "What it solves" (the 44-type
vendor table). They answer different questions, so both are kept, clips first.
README.md and js/README.md took both automatically.

Verified after the merge: the three-vendor detection work is intact on both
ports (tencent/yandex/mtcaptcha selectors, VENDOR_URL_MARKERS,
TEXT_INPUT_VENDOR_SELECTORS all present), tsc builds, and 458 tests pass.
python/README.md still renders through readme_renderer with all three demo
images surviving sanitization.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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