Setting Up Papergraph
lotchuazzz-crypto/papergraph-mcp
A skill your agent uses when a user has cloned PaperGraph MCP and asks to install, initialize, configure, set up, or start using it with an agent or MCP client.
Finalize documentation and project metadata for a ship-ready MCP server.
$ npx skills add cyanheads/pubmed-mcp-server --skill polish-docs-meta -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cyanheads/pubmed-mcp-server polish-docs-meta --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/polish-docs-meta .claude/skills/polish-docs-meta && 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 "polish-docs-meta" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/polish-docs-meta into .claude/skills/polish-docs-meta/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polish-docs-meta", 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/polish-docs-metaType 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 polish-docs-meta -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cyanheads/pubmed-mcp-server polish-docs-meta --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/polish-docs-meta .agents/skills/polish-docs-meta && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "polish-docs-meta" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/polish-docs-meta into .agents/skills/polish-docs-meta/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polish-docs-meta", 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 polish-docs-meta -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cyanheads/pubmed-mcp-server polish-docs-meta --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/polish-docs-meta .cursor/skills/polish-docs-meta && 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 "polish-docs-meta" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/polish-docs-meta into .cursor/skills/polish-docs-meta/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polish-docs-meta", 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/polish-docs-meta--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 polish-docs-meta -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cyanheads/pubmed-mcp-server polish-docs-meta --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/polish-docs-meta .gemini/skills/polish-docs-meta && 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 "polish-docs-meta" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/polish-docs-meta into .gemini/skills/polish-docs-meta/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polish-docs-meta", 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 polish-docs-metaInstalls 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 polish-docs-meta -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/polish-docs-meta .github/skills/polish-docs-meta && 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 "polish-docs-meta" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/polish-docs-meta into .github/skills/polish-docs-meta/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polish-docs-meta", 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 polish-docs-meta -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 polish-docs-meta --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/polish-docs-meta .opencode/skills/polish-docs-meta && 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 "polish-docs-meta" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/polish-docs-meta into .opencode/skills/polish-docs-meta/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "polish-docs-meta", 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.
polish-docs-metaFinalize documentation and project metadata for a ship-ready MCP server.
Polish Docs Meta is an agent skill from cyanheads/pubmed-mcp-server. Finalize documentation and project metadata for a ship-ready MCP server. Use after implementation is complete, tests pass, and devcheck is clean. Safe to run at any stage — each step checks current state and only acts on what still needs work.
Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/agent-protocol.md`, `references/package-meta.md` and `references/readme.md`).
It sits in Agent Workflows, covering MCP servers. 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.
12 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:
bunghnpxclaudeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
static.modelcontextprotocol.iojson.schemastore.orgAlso links to:
keepachangelog.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DEMO_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Polish Docs Meta loads about 5.6k tokens when it runs, and up to ~17k if it reads all its reference files. Until then it costs about 65 tokens; SKILL.md has 2,726 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,726 words, ~5,608 tokens.
.claude/skills/polish-docs-meta/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.bun run devcheck passes, tests passPrefer running after implementation is complete, but safe to re-run at any point — steps are idempotent.
Companion: pair with security-pass for a full pre-ship review — this skill polishes docs and metadata; security-pass audits handlers for MCP-specific security gaps.
bun run devcheck passesbun run test)If these aren't met, address them first.
Read all tool, resource, and prompt definitions. Build a mental model of what the server actually does — names, descriptions, input/output shapes, auth scopes. This inventory drives every document below.
Read:
src/index.ts (what's registered in createApp())src/mcp-server/tools/definitions/src/mcp-server/resources/definitions/src/mcp-server/prompts/definitions/src/services/ (if any)src/config/server-config.ts (if any)Capture: tool count, resource count, prompt count, service count, required env vars.
Read the gold standard first: the pubmed-mcp-server README — https://github.com/cyanheads/pubmed-mcp-server/blob/main/README.md (or ../pubmed-mcp-server/README.md when that repo is checked out beside this one). Mirror its structure, section order, heading forms, and density. Reuse its non-server-specific content as-is — the framework line under Features, and the Getting started / Configuration / Running the server / Development guide / Contributing boilerplate — and tune only what is server-specific: the header, the Overview description, the primitives and their Capability reference entries, the domain-specific and agent-friendly bullets, env vars, project structure. Then read references/readme.md for the conventions spelled out; where it and the pubmed README disagree, the README wins — note the discrepancy in your report rather than editing the reference.
If README.md doesn't exist, create it from scratch. If it exists, diff the current content against the audit — update tool/resource/prompt tables, env var lists, and descriptions to match the actual surface area. Don't restructure sections that are already accurate and already in the gold-standard shape.
Every run is also a concision pass. READMEs accrete: each release adds a bullet, and nobody removes one. Accurate is not the same as done — on every run, tighten what is already there, especially the Capability reference. Read references/readme.md § Concision for what to keep and what to cut. The bar is natural prose a human reads once, that still carries every fact a caller needs before the first call, and where every retained claim has been checked against the definition it describes.
The bold header tagline (the <b> text inside the first <p>) must match the package.json description. The surface count is a nested <div> inside the same <p>, separated by •.
Update the project's agent protocol file to reflect the actual server. Scope is the project-root CLAUDE.md / AGENTS.md only — do not edit framework-skills/*/SKILL.md or their references/ files. Those are external skill files synced from @cyanheads/mcp-ts-core and get overwritten on the next maintenance refresh.
Read references/agent-protocol.md for the full update checklist, then review the current file and address what's stale or missing:
searchItems, itemData), replace with real definitions from this serverpackage.json, update the commands table.env.exampleCompare .env.example against the server config Zod schema. Add any missing server-specific vars with a comment and default (if any). Remove vars for features that no longer exist. Group by category. Preserve existing framework vars that are still relevant.
package.json MetadataCheck for empty or placeholder metadata fields. Read references/package-meta.md for which fields matter and why. Fill in anything still missing — skip fields that are already correct.
Key fields: name, description, repository, author, homepage, bugs, keywords.
name must communicate the server's domain at a glance. See references/package-meta.md for the naming convention — ambiguous abbreviations and acronym-only names fail the scannability test for humans and agents alike.
name and title in createApp() / createWorkerHandler() must match the unscoped package.json name — display identity is the machine name on every surface; lint:packaging (run by devcheck) enforces the match and warns when the pair is partial. description is never duplicated into the entrypoint — package.json is the canonical source (the framework derives the served description from it). Adopting the pair also seeds OTEL_SERVICE_NAME when unset, so telemetry's service.name switches to the machine name on first boot — expect a one-time series split in backends keyed on the old scoped label.
description is the canonical source. Every other surface (README header, server.json, Dockerfile OCI label, GitHub repo description) derives from it. Write it here first, then propagate.
server.jsonRead references/server-json.md for the official MCP server manifest schema. If server.json doesn't exist, create it from the surface area audit. If it exists, diff against current state and update stale fields.
Key sync points:
$schema set to https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.jsonname matches mcpName from package.json (reverse-domain: io.github.{owner}/{repo})version matches package.json version (in all three places: top-level + each package entry)description matches package.json descriptionenvironmentVariables reflect the server config Zod schema — server-specific required vars in both entries, transport vars only in HTTP entryruntimeHint: "npx" and no packageArguments — a registry client runs the package's bin, which ignores run start:* arguments; the HTTP entry fixes MCP_TRANSPORT_TYPE as "value": "http", never as a default. lint:packaging fails the arguments and a missing or wrong transport valueSync the GitHub repo with package.json using the gh CLI. Skip if the repo isn't hosted on GitHub or gh isn't available.
Description:
gh repo edit <owner>/<repo> --description "<package.json description>"Topics ↔ Keywords:
Compare GitHub topics (gh repo view --json repositoryTopics) against package.json keywords. They should be the union — add any that exist in one but not the other:
gh repo edit --add-topic <topic>package.json → add to keywords arrayCommon keywords shared across MCP servers (e.g., mcp, mcp-server, model-context-protocol, typescript) should appear in both. Domain-specific keywords should also be present in both.
bunfig.tomlVerify a bunfig.toml exists at the project root. If not, create one:
[install]
auto = "fallback"
frozenLockfile = false
[run]
bun = trueTwo patterns are supported — pick one and stay consistent.
| Pattern | Best for |
|---|---|
| Directory-based (template default) | Published libraries, or servers whose consumers run the maintenance skill against them — per-version files ship inside node_modules/<pkg>/changelog/<minor>.x/<version>.md for direct agent inspection. |
Monolithic CHANGELOG.md | Runtime-only consumer servers where nobody imports types and nobody runs maintenance against the package — skips the build step and devcheck drift gate. |
Both are acceptable. The template scaffolds the directory-based structure by default; collapse to monolithic only if the rollup tooling is pure ceremony for this project.
Directory-based — per-version files live at changelog/<major.minor>.x/<version>.md (e.g. changelog/0.1.x/0.1.0.md), and CHANGELOG.md is a rollup regenerated by bun run changelog:build. Devcheck's Changelog Sync step enforces drift protection. changelog/template.md is a pristine format reference — never edited, never moved, never renamed. Read it to remember the frontmatter + section layout when scaffolding a new per-version file.
If the structure doesn't exist yet:
changelog/ directorychangelog/template.md once from the template (frontmatter stub + H1 # <version> — YYYY-MM-DD placeholder + empty Added/Changed/Fixed sections) — this file is a format reference only and stays as-is after creationchangelog/0.1.x/0.1.0.md with H1 # 0.1.0 — YYYY-MM-DD, concrete version and date — do not rename or move template.md to create the version file; author the per-version file directlybun run changelog:build to generate CHANGELOG.mdPer-version file format:
---
summary: One-line headline for the rollup index — ≤350 chars, no markdown
breaking: false
---
# 0.1.0 — YYYY-MM-DD
Optional narrative intro (1-3 sentences).
## Added
- [list tools, resources, prompts, key capabilities]Frontmatter: summary is required (powers the CHANGELOG.md index), breaking is optional and defaults to false (set true for releases requiring consumer code changes).
Never hand-edit CHANGELOG.md when using this pattern — it's a build artifact. Never edit changelog/template.md — it's the format reference. Never use [Unreleased] as a version header in a released file.
Monolithic — maintain CHANGELOG.md directly in Keep a Changelog format. To collapse from the template default: delete the changelog/ directory, remove changelog:build and changelog:check from package.json scripts (and from devcheck.config.json if referenced), and drop "changelog/" from the files array. The release skill's directory-specific steps then don't apply — just edit CHANGELOG.md and bump version at release time.
lint:packaging (run by devcheck) now enforces the high-value subset automatically when these manifests are present: non-empty descriptions, version equal to package.json's, identity/install correctness — display fields (name, server key, interface.displayName) must be the unscoped machine name, while the npx -y install arg must be the full package.json name (scoped if scoped) — and the env contract below (no "" values; every ${user_config.*} reference declared). Opt out per project with "packaging": { "pluginManifests": false } in devcheck.config.json. The checks below cover the fields the gate doesn't (repository / license sync, category, the wording of each option).
How user-supplied values reach the server. Neither client passes the user's shell environment through untouched, so an env entry of "KEY": "" is not a hint — it is the value the server receives, and the framework reads an empty string as unset. Claude Code prompts for values declared under userConfig at enable time and substitutes ${user_config.<option>} into env (sensitive values go to the Keychain). Codex starts stdio servers with a whitelisted environment and forwards only the host variables named in env_vars. Mirror manifest.json's user_config block: same options, same titles and descriptions.
If .codex-plugin/plugin.json exists, verify it's populated and in sync with package.json and server.json:
name is the unscoped package.json name (display identity is the machine name on every surface)version matches package.json versiondescription matches package.json descriptionrepository matches package.json repository.urllicense matches package.json licenseinterface.displayName is the unscoped package.json nameinterface.shortDescription matches package.json descriptioninterface.category is set to a meaningful categoryIf .codex-plugin/mcp.json exists, verify the server-name key is the unscoped package.json name, the npx -y install arg is the full package.json name, env carries only fixed values (MCP_TRANSPORT_TYPE), and env_vars lists every user-supplied variable from the server config schema (API keys, contact emails, instance URLs) so Codex forwards it from the user's environment.
If .claude-plugin/plugin.json exists, apply the same checks: name (unscoped), version, description, author, repository, license, keywords from package.json, $schema set to https://json.schemastore.org/claude-code-plugin-manifest.json. Verify the inline mcpServers entry key is the unscoped name and its npx -y install arg is the full package.json name. Every user-supplied variable is declared under userConfig — type: "string", title, description, sensitive: true for keys and tokens, and either required: true or default: "" so a blank answer reaches the server as empty rather than as the literal placeholder — and referenced from env as "KEY": "${user_config.<option>}". Run claude plugin validate . after editing; the CLAUDE.md-at-root warning is expected, anything else is not.
If the project ships as an .mcpb bundle for Claude Desktop (check for manifest.json at the project root), verify the full artifact set is present and consistent. If the project doesn't ship .mcpb bundles, skip this step.
Files that must exist:
manifest.json — MCPB manifest with mcp_config.env, user_config, and metadata.mcpbignore — controls what's excluded from the bundlepackage.json scripts:
bundle — builds the .mcpb (mcpb pack, then scripts/clean-mcpb.ts prunes dev deps and strips dependency-shipped agent docs)lint:packaging — validates manifest.json ↔ server.json env var consistency, version parity for manifest.json, the plugin manifests, and the README badge, the launch shape of server.json npm entries (no run start:* arguments; a streamable-http entry sets MCP_TRANSPORT_TYPE to "value": "http"), and the Dockerfile's stages: a stage not pinned to $BUILDPLATFORM must not run JavaScript while building — no bun run build, bun -e, or script, and no bun install once bunfig.toml is in the stage (run by devcheck, which gates the step on manifest.json, a plugin manifest, .mcpbignore, README.md, Dockerfile, or server.json)Cross-file consistency:
manifest.json version matches package.json version — lint:packaging enforces thismanifest.json (mcp_config.env + user_config) match server.json environmentVariables — lint:packaging enforces this, but verify the set is completemanifest.json name matches package.json name without the npm scope prefix (e.g. bls-mcp-server, not @cyanheads/bls-mcp-server); description matches package.jsonmanifest.json author is { "name": "<publisher handle>" } — the same handle as the .claude-plugin / .codex-plugin author.name and the GitHub owner (e.g. { "name": "cyanheads" }), not the LICENSE copyright holder's person object; package.json author is where the full Name <email> (url) identity livesmanifest.json user_config entries must include title and type fields — mcpb pack validates theseuser_config entry is referenced from mcp_config.env as "X": "${user_config.X}", and mcp_config carries no other ${…} besides MCPB's own path placeholders (${__dirname}, ${HOME}, …). The host substitutes nothing else: a declared option that is never referenced is collected and dropped, and "X": "${X}" reaches the server as that literal string. lint:packaging enforces bothuser_config entry referenced as ${user_config.X} in mcp_config.env: if it's not required: true, set "default": "". MCPB hosts (Claude Desktop included) pass the literal placeholder string through to the process when an optional field is left blank without a default — the default keeps that string out of the process. Server-side, the framework already treats a whole-value ${…} placeholder the same as an empty string — unset — in both its own config and parseEnvConfig, so an optional field falls through to its default and a required one fails as missing rather than as a format error; a per-field z.preprocess guard for placeholders is redundant and can be dropped.server.json env var isRequired must match the upstream API's actual requirement — if the API works without the value (rate-limited, DEMO_KEY fallback, polite pool), mark isRequired: false and describe the tradeoff in the descriptionpackage.json, manifest.json, server.json (condensed, hard 100-char limit), README header <p><b>, and GitHub repo description (gh repo edit --description)package.json keywords include baseline terms: mcp, mcp-server, model-context-protocol, typescript, bun, stdio, streamable-http, plus data-domain terms. GitHub repo topics (gh repo edit --add-topic) should match.README badges:
img.shields.io/badge/Version-<x.y.z>-) must carry the package.json version — lint:packaging enforces the match, and errors on a badge whose segment is not a readable version. shields.io escapes a literal - as --, so a prerelease is written Version-0.14.0--rc.1-. A live img.shields.io/npm/v/<pkg> badge cannot drift and is skippedmanifest.json exists, the README should include the Claude Desktop install badge linking to releases/latest/download/<name>.mcpbreferences/readme.md for badge format and config generation commandsLICENSEConfirm a license file exists. If not, ask the user which license to use (default: Apache-2.0, matching the scaffolded package.json). Create the file.
DockerfileIf a Dockerfile exists, verify the OCI labels and runtime config match the actual server:
org.opencontainers.image.title matches the package nameorg.opencontainers.image.description matches package.json descriptionorg.opencontainers.image.source points to the real repository URL (add if missing)mkdir and LOGS_DIR uses the correct server nameIf no Dockerfile exists and the server is deployed via HTTP transport, consider scaffolding one — the template is available via npx @cyanheads/mcp-ts-core init.
docs/tree.mdRegenerate the directory structure:
bun run treeReview the output for anything unexpected (leftover files, missing directories).
Run the full check suite one last time:
bun run devcheck
bun run testBoth must pass clean.
README.md accurate — mirrors the pubmed-mcp-server gold-standard structure; Overview tables, Capability reference entries, config, and descriptions match actual codeREADME.md concise — Capability reference entries are contract-shaped and within the bullet budget; nothing narrates mechanism the schema already carries; every retained claim verified against its definition.env.example in sync with server config schemapackage.json metadata complete (description, mcpName, repository, author, keywords, engines, packageManager)server.json matches official MCP schema, versions synced, env vars current; npm entries launch through npx with no arguments, and the HTTP entry fixes MCP_TRANSPORT_TYPE as "value": "http"package.json description; topics ↔ keywords in syncbunfig.toml presentCHANGELOG.md (hand-edited, Keep a Changelog) or directory-based (changelog/<minor>.x/<version>.md + rollup regenerated and in sync).codex-plugin/plugin.json populated and in sync with package.json (if present).codex-plugin/mcp.json server name current; user-supplied variables in env_vars, none as "" in env (if present).claude-plugin/plugin.json populated and in sync with package.json; every user-supplied variable declared in userConfig and referenced as ${user_config.<option>}, none as "" in env (if present)manifest.json present) — version synced, env vars match server.json, bundle + lint:packaging scripts exist, README install badges presentLICENSE file presentDockerfile OCI labels and runtime config accurate (if present)docs/tree.md regeneratedbun run devcheck passesbun 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
SKILL.md and 4 other files (references) in framework-skills/polish-docs-meta of cyanheads/pubmed-mcp-server.
Open the folder on GitHubat commit 5a417fb
Polish Docs Meta 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 |
|---|---|---|---|---|---|---|
| Polish Docs Meta this skillcyanheads/pubmed-mcp-server | 156 | — | ~5.6k | Automated safety check: Pass | Apache-2.0 | |
| Setting Up Papergraphlotchuazzz-crypto/papergraph-mcp | 285 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Just PRs MCPClawBio/ClawBio | 1.2k | — | ~3.5k | Automated safety check: Pass | MIT | |
| Patsnap Current Awarenesspatsnap/mcp | 113 | — | ~671 | Automated safety check: Pass | Apache-2.0 | |
| Patsnap Scientific Translational Evidencepatsnap/mcp | 113 | — | ~728 | Automated safety check: Pass | Apache-2.0 | |
| Peer Review Loophashgraph-online/awesome-codex-plugins | 1.3k | — | ~2.3k | Automated safety check: Pass | Apache-2.0 |
lotchuazzz-crypto/papergraph-mcp
A skill your agent uses when a user has cloned PaperGraph MCP and asks to install, initialize, configure, set up, or start using it with an agent or MCP client.
ClawBio/ClawBio
Compute evidence-aware polygenic risk scores from a local VCF or WGS file through the validated just-prs engine and a pinned local just-prs MCP server.
patsnap/mcp
Patsnap Current Awareness MCP for AI agents. An agent skill from patsnap/mcp.
patsnap/mcp
Patsnap Scientific & Translational Evidence MCP for AI agents.
hashgraph-online/awesome-codex-plugins
Peer Review Ralph Loop — combines Cavekit kits with a Ralph Loop and true cross-model peer review using Codex (OpenAI).
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
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
Finalize documentation and project metadata for a ship-ready MCP server. Polish Docs Meta is an agent skill from cyanheads/pubmed-mcp-server. Finalize documentation and project metadata for a ship-ready MCP server.
Polish Docs Meta fits situations like: tasks that involve MCP servers.
Run `npx skills add cyanheads/pubmed-mcp-server --skill polish-docs-meta -a claude-code`. Or copy the skill folder (framework-skills/polish-docs-meta in cyanheads/pubmed-mcp-server) into .claude/skills/polish-docs-meta in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cyanheads/pubmed-mcp-server --skill polish-docs-meta -a codex`. Or copy the skill folder (framework-skills/polish-docs-meta in cyanheads/pubmed-mcp-server) into .agents/skills/polish-docs-meta 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 polish-docs-meta -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/polish-docs-meta, .gemini/skills/polish-docs-meta, .github/skills/polish-docs-meta and .opencode/skills/polish-docs-meta in your project.
Going by SKILL.md and its folder, Polish Docs Meta needs the command-line tools its instructions call (bun, gh, npx and claude) and credentials named DEMO_KEY. Our summary lists: Node.js.
SKILL.md names 3 domains. In commands or code: static.modelcontextprotocol.io and json.schemastore.org; the agent is likely to contact these when it follows the instructions. As links in the text: keepachangelog.com. 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.
Polish Docs Meta 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.6k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 12k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Polish Docs Meta: Setting Up Papergraph (lotchuazzz-crypto/papergraph-mcp, 285 stars), Just PRs MCP (ClawBio/ClawBio, 1.2k stars), Patsnap Current Awareness (patsnap/mcp, 113 stars) and Patsnap Scientific Translational Evidence (patsnap/mcp, 113 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 156 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.