Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

llmshift

PYPI · LLMSHIFT

Find retiring LLM calls in code and test the replacement model on real traffic before switching.

Available components

+3 this week 67 Trust /100

Last scanned (3 hours ago)

Scores higher than 63% of PyPI servers

Category AI and Machine Learning

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 0 of 1 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to DeChuks-hub/llmshift). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 6 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability57
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 2815 tokens (~281/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management40
  • Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 94% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 4 Nov 26 +16
    • Malware scan: unverified → pass ▲ security
  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 29 Oct 26 +1
    • Malware scan: unverified → pass ▲ security
    • Package version: 0.1.6 → 0.1.7 functional
  • 28 Oct 26 −13
    • Malware scan: pass → unverified ▼ security
    • Stability: unverified → 0.13 ▲ functional
    • Security disclosure: fail → pass ▲ functional
    • Package version: 0.1.4 → 0.1.6 functional
    • Package version: 0.1.4 → 0.1.5 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/llmshift@0.1.7

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo DeChuks-hub/llmshift
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/DeChuks-hub/llmshift/.github/workflows/release.yml@refs/tags/v0.1.7
Rekor log index 3568706144
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:5d3ff25f35b11a7cab348a9d2664a24b61fcb1a9d5816e44780498ce0ae49db0

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 1 package
Packages resolved 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 10 exposed · ~2,637 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
llmshift_check ~221

Test edited prompts: finds the system prompts that changed since a git base (default origin/main) and runs only their test cases, with the edited text, on the model in production. Tells you whether a prompt edit changes how the model answers. Use it after editing a prompt in the code. Calls the model once per affected test case.

NameTypeReqDescription
allboolean–Run every prompt template, not only the edited ones.
basestring–Git ref to compare against (default: origin/main).
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
filesarray–Only look at these changed files.
min_pass_ratenumber––
modelstring–Model to test with (default: baseline in llmshift.yaml, else candidate).
no_cacheboolean––
testsstring–Test file or directory (default: tests in llmshift.yaml, usually .llmshift/tests.jsonl).

No output schema declared.

No examples provided.

llmshift_compare ~426

Run the project's test set (made by llmshift_snapshot) on a model and report exactly what changed versus the current model's recorded answers: broken formats (invalid JSON, code fences), wrong or missing facts and numbers, tone and length changes, tool-call differences and refusals. Returns the pass rate, whether it meets the threshold, the changed cases with their failing checks, and HTML/JSON report files. Use it after changing a model ID or a prompt to prove nothing broke. It calls the model once per test case (cached on re-runs).

NameTypeReqDescription
baseline_modelstring–Also run the old model live; failures it shares are treated as noise.
case_idsarray–Only these case IDs.
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
drop_paramsarray–Leave these settings out of every test request (e.g. temperature, once the code no longer sends a setting the model rejects).
groupsarray–Only these prompt templates (substring match).
judgestring–Model for LLM-judged checks (default: judge in llmshift.yaml).
limitinteger–Only the first N cases.
max_cases_showninteger–Changed cases included in the result (default 10).
min_pass_ratenumber–Threshold for passed_threshold (default: min_pass_rate in llmshift.yaml).
no_cacheboolean–Call the model even for requests answered before.
repeatinteger–Run each case N times to find flaky cases and narrow the pass-rate range (default 1).
tagsarray–Only cases with these tags.
testsstring–Test file or directory (default: tests in llmshift.yaml, usually .llmshift/tests.jsonl).
tostring–The model to test, e.g. openai:gpt-5.6-sol (default: candidate in llmshift.yaml).

No output schema declared.

No examples provided.

llmshift_doctor ~100

Check the llmshift setup: version, the config file in use, which provider credential environment variables are set (names only, never values), whether the test set exists, and whether the configured baseline, candidate and judge models resolve. Use it when another llmshift tool fails with a configuration or credentials error.

NameTypeReqDescription
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).

No output schema declared.

No examples provided.

llmshift_fix ~329

Search for system-prompt changes that make a new model reproduce the current model's behaviour on the test set, validated by re-running the tests on the new model. Returns, per prompt template, the instructions to add or the full suggested prompt, where that prompt lives in the code (file:line), and the pass rate before and after. It never edits code: apply the prompts you agree with, then call llmshift_compare again.

NameTypeReqDescription
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
groupsarray–Only these prompt templates (substring match).
judgestring–Model for LLM-judged checks.
limitinteger–Only the first N cases.
no_cacheboolean––
optimizerstring–Optional model that rewrites prompts, e.g. openai:gpt-5.6-sol (rule-based fixes work without it).
roundsinteger–Improvement rounds per prompt template (default 3).
sourcearray–Where to look for the prompts in the code (default: the project).
testsstring–Test file or directory (default: tests in llmshift.yaml, usually .llmshift/tests.jsonl).
tostring–The new model, e.g. openai:gpt-5.6-sol (default: candidate in llmshift.yaml).
write_testsstring–Also write a copy of the test set with the suggested prompts to this new file.

No output schema declared.

No examples provided.

llmshift_models ~239

Look up retirement dates and replacements in llmshift's model lifecycle registry (OpenAI, Anthropic, Google, Mistral, Cohere, xAI, DeepSeek). Pass `model` for one exact ID (Bedrock, Vertex, Azure and OpenRouter forms are understood) or `query` to search, optionally filtered by provider, status or days until retirement.

NameTypeReqDescription
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
limitinteger–Maximum models returned (default 50).
modelstring–One model ID to look up exactly, e.g. gpt-4o-2024-05-13.
providerstring–openai, anthropic, google, google-vertex, mistral, cohere, xai or deepseek.
querystring–Substring of model IDs to search for, e.g. gpt-4o or claude-3.
retiring_within_daysinteger–Only models retiring within this many days.
statusstring––

No output schema declared.

No examples provided.

llmshift_pick ~292

Find the cheapest model that still passes the project's test set: runs the tests on several candidate models at once and reports each one's pass rate (with a 95% range), cost per 1,000 requests and latency, then recommends the cheapest that meets the quality bar, with the saving against today's model (per month when `volume` is given). Calls every candidate once per test case (cached on re-runs).

NameTypeReqDescription
baselinestring–The model used today, for its cost (default: baseline in llmshift.yaml, else the recorded model).
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
groupsarray–Only these prompt templates (substring match).
limitinteger–Only the first N cases.
min_pass_ratenumber–Quality bar (default: min_pass_rate in llmshift.yaml).
modelsarrayyesCandidate models, e.g. openai:gpt-6-luna, anthropic:claude-haiku-5-5.
no_cacheboolean–Call the models even for requests answered before.
testsstring–Test file or directory (default: tests in llmshift.yaml, usually .llmshift/tests.jsonl).
volumeinteger–Requests per month, to state the monthly saving.

No output schema declared.

No examples provided.

llmshift_safety ~231

Check whether a new model is riskier than the current one: refusals on the project's real requests, prompt-injection probes (hidden instructions in messages, quoted documents or tool results) and leaks of confidential data from the system prompt, all built from the project's own test cases and run on both models. Reports old vs new rates, the change, a paired significance test and examples. Calls both models.

NameTypeReqDescription
baseline_modelstring–The current model (default: baseline in llmshift.yaml).
categoriesarray–Which checks to run (default all).
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
no_cacheboolean–Call the models even for requests answered before.
probesinteger–Probes per category (default 20).
testsstring–Test file or directory (default: tests in llmshift.yaml, usually .llmshift/tests.jsonl).
tostring–The new model (default: candidate in llmshift.yaml).

No output schema declared.

No examples provided.

llmshift_scan ~232

Find every AI model ID the code in this project calls (Python, JS/TS, Go, Java, configs, .env, notebooks) and report each one's lifecycle: retired, retiring (date and days left), deprecated or active, the recommended replacement, and every file:line where it is used. Use it first when asked to migrate off a model, to find all the places to change, and again afterwards to confirm that no retired model remains.

NameTypeReqDescription
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
excludearray–Glob patterns to skip, e.g. tests/fixtures or **/*.min.js.
fail_onstring–Which states make would_fail_ci true (default retired).
include_docsboolean–Also scan Markdown and text files.
pathsarray–Files, directories or globs to scan (default: scan.paths in llmshift.yaml, else the project).
warn_daysinteger–Models retiring within this many days are urgent (default 180).

No output schema declared.

No examples provided.

llmshift_snapshot ~305

Turn LLM usage logs (JSONL, JSON or CSV, optionally .gz: OpenAI chat/responses/batch, Anthropic, Gemini, Helicone, Langfuse/LangSmith exports, llmshift.record logs) into a regression test set: real requests, the current model's answers, and checks inferred from them. Run it once before switching models; llmshift_compare and llmshift_fix use it.

NameTypeReqDescription
baseline_modelstring–Generate answers with this model for logs that have none (makes model calls).
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
max_casesinteger––
modestring–create (default) refuses to replace an existing file; append adds new cases only.
modelsarray–Only calls to these models (globs, e.g. gpt-4o*).
outputstring–Test file to write (default: tests in llmshift.yaml).
per_groupinteger–Maximum cases per prompt template.
redact_piiboolean–Also replace e-mails, phone and card numbers with placeholders.
sincestring–Only calls on/after this date (YYYY-MM-DD or ISO-8601).
sourcesarrayyesLog files, directories or globs.
untilstring–Only calls on/before this date.

No output schema declared.

No examples provided.

llmshift_upgrade ~262

Plan (and optionally apply) the code changes that move this project off a retiring model: swaps the model ID exactly where llmshift_scan finds it, renames max_tokens to max_completion_tokens where OpenAI's newer models need it, and lists settings to check by hand. Returns a unified diff. Nothing is written unless apply is true. Use `auto` for every retiring model that has a known replacement.

NameTypeReqDescription
applyboolean–Write the changes to the files (default false: only the diff). A file git cannot restore is first copied to NAME.bak, listed in `backups`.
autoboolean–Every retired or retiring model found that has a replacement.
cwdstring–Project directory to work in, absolute or relative to where the server started (default: that directory).
forceboolean–Allow swaps across providers (the calling code is never rewritten).
fromstring–The model to move off, e.g. gpt-4o-2024-05-13.
pathsarray–Where to look (default: scan.paths in llmshift.yaml, else the project).
tostring–The replacement (default: the registry's recommended replacement).

No output schema declared.

No examples provided.

Install

How do I install the llmshift MCP server?

llmshift runs locally as a PyPI package, launched with uvx llmshift. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · llmshift

# add to Claude Code
claude mcp add dechuks-hub-llmshift -- uvx llmshift
Common questions

What is the llmshift MCP server?

llmshift is an MCP server listed in the public MCP registry as io.github.DeChuks-hub/llmshift. Find retiring LLM calls in code and test the replacement model on real traffic before switching. This page covers its PyPI package (llmshift).

Is the llmshift MCP server safe to use?

llmshift scores 67 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the llmshift MCP server expose?

llmshift exposes 10 tools: llmshift_scan, llmshift_models, llmshift_snapshot, llmshift_compare, llmshift_fix, and 5 more. Their descriptions and schemas cost roughly 2,637 tokens of context every time the server is loaded.

Is the llmshift MCP server still maintained?

llmshift is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the llmshift MCP server under?

llmshift declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.