Release
PrefectHQ/fastmcp
Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.
Investigate, adopt, and verify dependency updates — with special handling for @cyanheads/mcp-ts-core.
$ npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cyanheads/pubmed-mcp-server maintenance --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cyanheads/pubmed-mcp-server.git skills-src && mkdir -p .claude/skills && cp -r skills-src/framework-skills/maintenance .claude/skills/maintenance && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "maintenance" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/maintenance into .claude/skills/maintenance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintenance", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/maintenanceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cyanheads/pubmed-mcp-server maintenance --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanheads/pubmed-mcp-server.git skills-src && mkdir -p .agents/skills && cp -r skills-src/framework-skills/maintenance .agents/skills/maintenance && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "maintenance" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/maintenance into .agents/skills/maintenance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintenance", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cyanheads/pubmed-mcp-server maintenance --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanheads/pubmed-mcp-server.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/framework-skills/maintenance .cursor/skills/maintenance && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "maintenance" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/maintenance into .cursor/skills/maintenance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintenance", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cyanheads/pubmed-mcp-server.git --path framework-skills/maintenance--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cyanheads/pubmed-mcp-server maintenance --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanheads/pubmed-mcp-server.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/framework-skills/maintenance .gemini/skills/maintenance && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "maintenance" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/maintenance into .gemini/skills/maintenance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintenance", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cyanheads/pubmed-mcp-server maintenanceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cyanheads/pubmed-mcp-server.git skills-src && mkdir -p .github/skills && cp -r skills-src/framework-skills/maintenance .github/skills/maintenance && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "maintenance" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/maintenance into .github/skills/maintenance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintenance", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cyanheads/pubmed-mcp-server maintenance --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cyanheads/pubmed-mcp-server.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/framework-skills/maintenance .opencode/skills/maintenance && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "maintenance" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/maintenance into .opencode/skills/maintenance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maintenance", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
maintenanceInvestigate, adopt, and verify dependency updates — with special handling for @cyanheads/mcp-ts-core.
Maintenance is an agent skill from cyanheads/pubmed-mcp-server. Investigate, adopt, and verify dependency updates — with special handling for @cyanheads/mcp-ts-core. Captures what changed, understands why, cross-references against the codebase, adopts framework improvements, syncs project skills, and runs final checks. Supports two entry modes: run the full flow end-to-end, or review updates you already applied.
Its SKILL.md is about 5.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Dependency management, MCP servers and Changelog and release notes. It works with Model Context Protocol. The repository describes itself as: Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms via MCP. STDIO or Streamable HTTP. The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5a417fb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bungitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Maintenance loads about 5.9k tokens when it runs. Until then it costs about 91 tokens; SKILL.md has 2,982 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cyanheads/pubmed-mcp-server at commit 5a417fb, republished under its Apache-2.0 licence (© cyanheads). 2,982 words, ~5,859 tokens.
.claude/skills/maintenance/SKILL.md (or your agent's skills folder).bun update --latest yourself and wanting to review the impact (Mode B — typical)| Mode | Starting Point | First Step |
|---|---|---|
| A — Full flow | Lockfile is current; want to update | Step 1 |
| B — Post-update review | User already ran bun update --latest + bun run rebuild + bun run test | Skip to Step 3 with the update output or a bun.lock diff |
Both modes converge at Step 3 and end at Step 8.
bun run devcheck --only outdatedWraps bun outdated with the project's devcheck.config.json allowlist applied, so intentionally-pinned packages don't surface as actionable. Plain bun outdated works too if you want the unfiltered view.
Note: bun update --latest crosses semver majors; bun update alone respects ranges. Use --latest unless a package is intentionally pinned.
bun update --latestCapture the ↑ package old → new lines from stdout — these feed Step 3. Alternatively, diff bun.lock to surface version deltas after the fact.
Invoke the changelog skill with the captured list of updated packages. It resolves each repo, fetches release notes (or CHANGELOG entries) between old and new versions, and cross-references changes against actual imports in src/. Output per package: what changed, impact on this project, action items.
Do not redo this investigation inline — the changelog skill handles tag-format detection, monorepo patterns, and fallbacks. If the skill cannot resolve a package (private repo, no tags, no CHANGELOG), note it in Step 8 under "Open decisions" and proceed.
@cyanheads/mcp-ts-core)Skill-version paradox. If node_modules/@cyanheads/mcp-ts-core/framework-skills/maintenance/SKILL.md's version exceeds the one running, run Step 5 Phase A first and re-invoke maintenance — otherwise feature-adoption rows added in the new version silently don't surface. After Phase A, confirm the running skill version matches the package before continuing. If the session still has the old skill loaded, exit and restart.
If @cyanheads/mcp-ts-core was updated, do a deeper pass beyond what the changelog skill covers. The framework ships a directory-based changelog grouped by minor series (.x semver-wildcard convention) — one file per released version at node_modules/@cyanheads/mcp-ts-core/changelog/<major.minor>.x/<version>.md. Read only the files between old and new rather than scanning a monolithic file.
Example — 0.5.2 → 0.5.4 means reading two new version files:
node_modules/@cyanheads/mcp-ts-core/changelog/0.5.x/0.5.3.mdnode_modules/@cyanheads/mcp-ts-core/changelog/0.5.x/0.5.4.mdCross-series updates span multiple directories — e.g., 0.4.1 → 0.5.2 reads 0.5.x/0.5.0.md, 0.5.x/0.5.1.md, 0.5.x/0.5.2.md. Enumerate the series directories under node_modules/@cyanheads/mcp-ts-core/changelog/ to find the relevant files.
If the per-version directory isn't present (pre-0.5.5 releases, or downstream package that hasn't adopted the convention), fall back to the monolithic rollup at node_modules/@cyanheads/mcp-ts-core/CHANGELOG.md and extract the relevant sections manually.
Scan specifically for:
| Area | Adoption Check |
|---|---|
New /errors surface — factories, typed contracts (errors[] + ctx.fail), httpErrorFromResponse | Replace ad-hoc new McpError(...) with factories; declare errors: [...] on tools that surface domain-specific failure modes; route declared throws through ctx.fail(reason, …) so the conformance lint is happy |
| Existing factory choice — semantic audit | Beyond factory-vs-new McpError: audit each throw factory(...) against intent. invalidParams (-32602) is for malformed JSON-RPC params (wrong-shape post-Zod is rare); semantic post-shape validation should use validationError (-32007). notFound for missing entities, conflict for state collisions, unauthorized vs forbidden for unauth vs scope-denied. Wrong codes degrade mcp_error_classified_code observability and break client retry logic — fix during this pass even if not adopting contracts yet. |
New utilities in /utils | Identify any that supersede local helper code |
| New context capabilities | Added ctx.* methods worth adopting |
| Provider/service APIs | Updates to OpenRouterProvider, SpeechService, GraphService, etc. |
| Deprecations | Migrate now, before the next breaking release |
| Config changes | New env vars, renamed keys, changed defaults |
| Linter rules | New definition-lint rules that may now flag existing tools/resources |
| New or materially-changed skills | Note new skills or workflow changes (renamed steps, new checklist items) worth surfacing at end-of-run. Don't auto-invoke — some skills (e.g. security-pass) are user-triggered. The per-version changelog entries (e.g. one calling out security-pass v1.0) name what changed. |
| New template-scaffolded files | Compare templates/ in the package against the project root. Files that init would create for a new project but don't exist in this project are adoption candidates — create them with project-specific values (version, name, description; user-supplied variables from server.json go into userConfig + ${user_config.<option>} for .claude-plugin/ and into env_vars for .codex-plugin/mcp.json, never as "" in env). Examples: manifest.json, .mcpbignore, .codex-plugin/, .claude-plugin/. Skip files the project has intentionally opted out of (documented in CLAUDE.md/AGENTS.md or a code comment). |
Changelog agent-notes | Read agent-notes frontmatter from each new per-version changelog file — these carry release-specific adoption instructions for downstream consumers (new files to create, fields to populate, one-time migration steps). Apply them alongside other adoption work in Step 6. |
Cross-reference each finding against the server's code. Collect adoption opportunities for Step 6.
Template review. The framework also ships templates/CLAUDE.md and templates/AGENTS.md as scaffolding for consumer agent protocol files. The consumer's CLAUDE.md/AGENTS.md was copied at init time and has since diverged (local customizations, echo replacements, server-specific sections). Read the upstream template fresh at node_modules/@cyanheads/mcp-ts-core/templates/CLAUDE.md.
Read the upstream template end-to-end and compare it against the current CLAUDE.md/AGENTS.md section by section — the skills table row by row, since a row whose wording changed (a skill's described behavior) drifts as silently as a missing one. Apply framework-authored updates directly — new or reworded skill references in the skills table, new entries in the "What's Next?" section, updated convention callouts, clarified patterns. These are factual updates, not taste decisions; the consumer's agent protocol file is meant to track the framework's. Only surface a decision when a template change conflicts with a section the consumer has intentionally customized — a section is "intentionally customized" when it contains server-specific domain context, bespoke checklists, or content that doesn't originate from the template. In that case, note the conflict and ask.
Skills flow in two hops: package → project framework-skills/ → agent directories. Framework scripts flow in one: package → project scripts/. Both drift silently unless resynced.
Phase A — Package → Project framework-skills/
node_modules/@cyanheads/mcp-ts-core/framework-skills/ (canonical source)framework-skills/ at project root (working copy; may contain local overrides or server-specific skills)One-time migration from skills/ (framework 0.13.0). Earlier releases scaffolded this tree at skills/. Claude Code and Codex auto-load a plugin's root skills/, so a server shipping .claude-plugin/ or .codex-plugin/ handed its development skills to every agent that installed it. If the project has skills/ and no framework-skills/: git mv skills framework-skills, then update every path reference — CLAUDE.md/AGENTS.md, .mcpbignore (/skills/ → /framework-skills/), .github/CONTRIBUTING.md — regenerate docs/tree.md, and continue below. bun run devcheck reports an unmigrated tree until this is done. The agent mirrors (.claude/skills/, .agents/skills/) keep their names; plugin hosts do not scan them.
Procedure:
node_modules/@cyanheads/mcp-ts-core/framework-skills/metadata.audience: external in its SKILL.md frontmatter:framework-skills/, copy the full directorymetadata.version — replace if the package version is newerframework-skills/ that lack metadata.audience: external untouched — they're server-specific or sourced elsewhere, not framework-managed.framework-skills/ that carries metadata.audience: external but is absent from the package was removed upstream (e.g. migrate-mcp-ts-template, removed in 0.9.12) and lingers because sync was previously add/update-only. Delete it from framework-skills/ (and from the agent mirrors in Phase B). The audience: external marker is the provenance: it scopes the prune to framework-managed skills, so a server's own skills — which never carry it — are never touched. Before deleting, scan the skill for local edits worth keeping; if any exist, reconcile or surface them rather than discarding silently.Skill diffs are adoption signal, not just sync output. After replacing files in framework-skills/, run git diff framework-skills/ to read what changed. Updated skill bodies describe new patterns, refined workflows, or new conventions — apply them to the codebase in Step 6 the same way you'd apply a framework API addition. The file copy is the trigger, not the work. The work is what the updated skill now says to do.
Phase B — Project framework-skills/ → Agent directories
The setup skill instructs consumers to copy framework-skills/* into their agent's skill directory at init time. Those copies go stale unless re-synced. Detect which agent directories exist and propagate:
| Agent | Directory |
|---|---|
| Claude Code | .claude/skills/ |
| Generic / shared | .agents/skills/ |
| Codex | .codex/skills/ |
| Cursor | .cursor/skills/ |
| Windsurf | .windsurf/skills/ |
For each agent directory that exists:
framework-skills/, copy it into the agent dir (overwrite on match, add if missing)framework-skills/ — they may be general-purpose skills sourced elsewhere (e.g., code-security, cloudflare, changelog). Exception: a framework skill pruned in Phase A step 4 — delete that same-named directory from each agent dir too. Match by the specific name you just removed, never by a blanket "absent from framework-skills/" sweep (which would catch the externally-sourced skills above).If no agent directory exists, skip Phase B — the project hasn't opted in to per-agent skill copies.
Phase C — Package framework files → Project
Two categories of framework-authored files ship into consumer projects and drift silently as the framework updates them. Both follow the same hash-compare-and-overwrite mechanic.
Scripts — init scaffolds a fixed set that underpin bun run build, bun run devcheck, bun run lint:mcp, bun run tree, and the changelog build. Iterate the package's shipped scripts directory:
for src in node_modules/@cyanheads/mcp-ts-core/scripts/*.ts; do
s=$(basename "$src")
dst="scripts/$s"
if [ ! -f "$dst" ]; then
cp "$src" "$dst"
echo "added: $s"
elif ! cmp -s "$src" "$dst"; then
cp "$src" "$dst"
echo "updated: $s"
fi
doneScripts in scripts/ that aren't present in the package directory are project-specific (custom deploy, codegen, etc.) — leave them alone. The package's files: field gates what ships into node_modules/.../scripts/, so enumerating that directory is the canonical "shipped scripts" set.
Pristine reference files — files explicitly documented as "never edit, rename, or move." The framework keeps the authoritative copy under templates/; the consumer's copy must track upstream as the format evolves (new frontmatter fields, section reorderings, etc.). Fixed src→dst mapping:
| Source (in package) | Destination (in project) |
|---|---|
templates/changelog/template.md | changelog/template.md |
Apply the same compare-and-overwrite logic. Add new entries here only when a template is explicitly documented as pristine in the framework's CLAUDE.md/AGENTS.md or its own header.
If the consumer customized a framework script or pristine reference (against guidance), the overwrite discards those changes. After the sync runs, diff scripts/ and the affected template paths to surface replacements — review before committing. If a specific local customization needs to be preserved, revert that file using your git tools.
Report which skills were added/updated in Phase A (with version deltas), which agent directories were refreshed in Phase B, and which scripts and pristine reference files were resynced in Phase C. The user needs to know what new guidance and tooling is now in play.
Apply the findings from Steps 3 and 4. Framework changes and third-party library changes have different adoption defaults — the asymmetry is deliberate.
Framework changes (@cyanheads/mcp-ts-core) — auto-adopt every applicable site, in this pass.
The consumer opted into the framework; its templates, skills, scripts, linter rules, conventions, and new APIs that supersede local code are authoritative. Adopt them now — not as a follow-up.
git diff framework-skills/ for every skill that was updated. Each updated body is new framework guidance; apply it to matching surfaces in this server. Examples: add-tool gains a section on output formatting → audit existing tool definitions against that section; api-errors documents a new contract pattern → adopt across error surfaces; security-pass adds a new check → run it against the surface; polish-docs-meta/references/readme.md changes → re-audit README.md against it section by section (structure, Features shape, hosted callout) and restructure what no longer matches. Skill updates aren't metadata.httpErrorFromResponse replacing a project-local throwForStatus: keep the per-route message map, but route it through the framework utility.).env.example, server config schema, server.json, and README if user-facing. A new Bun pin (the template's packageManager) moves three places together: package.json packageManager, the Dockerfile oven/bun base tags, and the README Bun badge.errors[] + ctx.fail) on tools that already throw domain-specific failures; factory adoption (notFound(), validationError(), …) replacing ad-hoc new McpError(...); new logging/observability hooks supplanting bespoke logging. If the framework added a pattern that fits N tools/services, do all N — partial adoption fragments the surface and rots faster.Hard rule — invalid framework deferrals.
| ❌ Not a valid reason to defer | ✅ Valid reason to defer |
|---|---|
| "Larger change than fits this pass" | Code-commented or CLAUDE.md/AGENTS.md-documented local override that intentionally diverges from the framework convention |
| "Marginal benefit / leaving as-is" | Breaking change with multiple migration paths that need user input |
| "Per-tool refactor — worth doing as a focused follow-up" | Feature genuinely doesn't apply (the surface doesn't exist in this server) |
| "Existing helper has rich domain messages we'd lose" | — (port the messages onto the framework path) |
| "Skill was synced, the file change is the adoption" | — (the file copy is the trigger; the adoption is applying the new guidance to the code) |
If you find yourself writing the left-column phrasing in Step 8's "Open decisions", stop and adopt it instead. Cost/benefit reasoning belongs to third-party changes only.
Third-party library changes — default cost/benefit.
src/.bun run rebuild
bun run devcheck
bun run testrebuild (clean + build) catches API surface and type-alignment issues that devcheck alone may miss — module resolution, path aliases, post-build processing. devcheck includes bun audit and bun outdated, so no separate audit step is needed.
In Mode B, the user already ran rebuild + test before invoking this skill, but run them again here — Step 6 made code changes that need re-verification.
Fix anything that fails. Re-run until clean.
Transitive advisory triage. When bun audit (inside devcheck) reports a vulnerability in a transitive dependency, fix it in place, most surgical option first:
bun run audit:fix (bun audit fix) — upgrades the vulnerable package to the lowest safe version that still satisfies every dependent's range; package.json changes only when an exact pin has to move. bun audit fix --dry-run previews; --latest also applies fixes the declared ranges exclude and rewrites package.json — the escalation, not the default.bun update <name> — bumps that one package wherever it appears in the lockfile, transitive entries included, when the advisory names a version audit fix left alone.bun dedupe — collapses duplicate versions of a package in the lockfile without touching package.json (bun dedupe --check lists them); the fix when the advisory sits on a stale extra copy rather than on the version the ranges resolve to.bun run audit:refresh — deletes bun.lock and reinstalls. Last resort only: every ^-ranged dependency re-resolves to latest-in-range, so an advisory check becomes an unreviewed dependency bump, and on Bun 1.4 the fresh lockfile is written as lockfileVersion: 2.If the advisory survives all four, it is real — pin the patched version in package.json overrides or nudge upstream.
Present a concise numbered summary to the user:
CLAUDE.md/AGENTS.md-documented local override, third-party adoptions where cost/benefit is close. Not valid: framework adoptions deferred for scope, effort, or marginal-benefit reasoning — those were already adopted in Step 6 and belong under "Features adopted." If this section is empty, that's the expected outcome of a clean framework upgrade.bun update --latest) — Mode A, or already done by user — Mode Bchangelog skill invoked for each updated package@cyanheads/mcp-ts-core was updatedCLAUDE.md/AGENTS.md template reviewed; applicable updates applied or conflicts surfacedframework-skills/ synced from package (Phase A), with a change report.claude/skills/, .agents/skills/, etc.) refreshed from project framework-skills/ (Phase B)scripts/ and pristine reference files resynced from package via content-hash compare (Phase C), with a change report; diffs reviewed before committingbun run rebuild succeeds (re-run after Step 6, even in Mode B)bun run devcheck passes (includes audit + outdated)bun run test passes© cyanheads, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in framework-skills/maintenance of cyanheads/pubmed-mcp-server.
Open the folder on GitHubat commit 5a417fb
Maintenance next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Maintenance this skillcyanheads/pubmed-mcp-server | 155 | — | ~5.9k | Automated safety check: Pass | Apache-2.0 | |
| ReleasePrefectHQ/fastmcp | 28k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Release Prepjohnhuang316/code-index-mcp | 1k | — | ~680 | Automated safety check: Pass | MIT | |
| MCP Apps Sync Docsapollographql/apollo-mcp-server | 311 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Reading Livekit Docslivekit-examples/agent-starter-python | 264 | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Project Docs Maintainerswimmwatch/cloakbrowser-mcp | 161 | — | ~569 | Automated safety check: Pass | MIT |
PrefectHQ/fastmcp
Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.
johnhuang316/code-index-mcp
A skill your agent uses when code-index-mcp implementation is complete and a version bump, release notes, tag, package publication, or GitHub release is being prepared.
apollographql/apollo-mcp-server
Syncs MCP Apps documentation with the @apollo/client-ai-apps changelog.
livekit-examples/agent-starter-python
Looks up current LiveKit facts (API signatures, CLI flags, config options, model and provider support, SDK changelogs, pricing) from the docs instead of answering from memory.
swimmwatch/cloakbrowser-mcp
Maintain, organize, consolidate, or audit the cloakbrowser-mcp documentation set only when the user explicitly requests project documentation maintenance or an authorized public change requires it.
enuno/unifi-mcp-server
Prepare a new release with version bump, changelog, and quality checks
cyanheads/pubmed-mcp-server
Scaffold an MCP App tool + UI resource pair. An agent skill from cyanheads/pubmed-mcp-server.
cyanheads/pubmed-mcp-server
Scaffold a new MCP prompt template. An agent skill from cyanheads/pubmed-mcp-server.
cyanheads/pubmed-mcp-server
Scaffold a new MCP resource definition. An agent skill from cyanheads/pubmed-mcp-server.
cyanheads/pubmed-mcp-server
Scaffold a new service integration. An agent skill from cyanheads/pubmed-mcp-server.
cyanheads/pubmed-mcp-server
Scaffold a test file for an existing tool, resource, or service.
cyanheads/pubmed-mcp-server
Authentication, authorization, and multi-tenancy patterns for @cyanheads/mcp-ts-core.
Works with
Categories
Investigate, adopt, and verify dependency updates — with special handling for @cyanheads/mcp-ts-core. Maintenance is an agent skill from cyanheads/pubmed-mcp-server. Investigate, adopt, and verify dependency updates — with special handling for @cyanheads/mcp-ts-core.
Maintenance fits situations like: tasks that involve Dependency management; tasks that involve MCP servers; tasks that involve Changelog and release notes.
Run `npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a claude-code`. Or copy the skill folder (framework-skills/maintenance in cyanheads/pubmed-mcp-server) into .claude/skills/maintenance in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a codex`. Or copy the skill folder (framework-skills/maintenance in cyanheads/pubmed-mcp-server) into .agents/skills/maintenance in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cyanheads/pubmed-mcp-server --skill maintenance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/maintenance, .gemini/skills/maintenance, .github/skills/maintenance and .opencode/skills/maintenance in your project.
Going by SKILL.md and its folder, Maintenance needs the command-line tools its instructions call (bun and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Maintenance is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.9k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Maintenance: Release (PrefectHQ/fastmcp, 28k stars), Release Prep (johnhuang316/code-index-mcp, 1k stars), MCP Apps Sync Docs (apollographql/apollo-mcp-server, 311 stars) and Reading Livekit Docs (livekit-examples/agent-starter-python, 264 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cyanheads (a GitHub user) maintains it in cyanheads/pubmed-mcp-server, which has 155 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 4, 2026.
Source: cyanheads/pubmed-mcp-server on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.