AWS Cost Operations
Microck/ordinary-claude-skills
This skill provides AWS cost optimization, monitoring, and operational best practices with integrated MCP servers for billing analysis, cost estimation, observability, and security assessment.
Read-only audit of MCP definition language across an existing surface — tools, resources, prompts, server instructions.
$ npx skills add cyanheads/pubmed-mcp-server --skill tool-defs-analysis -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cyanheads/pubmed-mcp-server tool-defs-analysis --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/tool-defs-analysis .claude/skills/tool-defs-analysis && 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 "tool-defs-analysis" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/tool-defs-analysis into .claude/skills/tool-defs-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tool-defs-analysis", 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/tool-defs-analysisType 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 tool-defs-analysis -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cyanheads/pubmed-mcp-server tool-defs-analysis --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/tool-defs-analysis .agents/skills/tool-defs-analysis && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tool-defs-analysis" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/tool-defs-analysis into .agents/skills/tool-defs-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tool-defs-analysis", 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 tool-defs-analysis -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cyanheads/pubmed-mcp-server tool-defs-analysis --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/tool-defs-analysis .cursor/skills/tool-defs-analysis && 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 "tool-defs-analysis" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/tool-defs-analysis into .cursor/skills/tool-defs-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tool-defs-analysis", 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/tool-defs-analysis--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 tool-defs-analysis -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cyanheads/pubmed-mcp-server tool-defs-analysis --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/tool-defs-analysis .gemini/skills/tool-defs-analysis && 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 "tool-defs-analysis" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/tool-defs-analysis into .gemini/skills/tool-defs-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tool-defs-analysis", 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 tool-defs-analysisInstalls 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 tool-defs-analysis -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/tool-defs-analysis .github/skills/tool-defs-analysis && 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 "tool-defs-analysis" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/tool-defs-analysis into .github/skills/tool-defs-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tool-defs-analysis", 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 tool-defs-analysis -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 tool-defs-analysis --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/tool-defs-analysis .opencode/skills/tool-defs-analysis && 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 "tool-defs-analysis" agent skill from https://github.com/cyanheads/pubmed-mcp-server/tree/main/framework-skills/tool-defs-analysis into .opencode/skills/tool-defs-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tool-defs-analysis", 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.
tool-defs-analysisRead-only audit of MCP definition language across an existing surface — tools, resources, prompts, server instructions.
Tool Defs Analysis is an agent skill from cyanheads/pubmed-mcp-server. Read-only audit of MCP definition language across an existing surface — tools, resources, prompts, server instructions. Walks every definition file and checks 16 categories the LLM reads to decide whether and how to call: voice & tense, internal leaks, audience leaks, defaults, recovery hints, field descriptions, cross-references, sparsity, examples, structure, mutator observability, unit-bearing numeric names, validator-enforced constraints, annotations truthfulness, single-line strings, exclusive modes in the…
Its SKILL.md is about 4.8k 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 Security, covering Citation management, Security review and Refactoring. 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.
4 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Tool Defs Analysis loads about 4.8k tokens when it runs. Until then it costs about 220 tokens; SKILL.md has 2,389 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,389 words, ~4,817 tokens.
.claude/skills/tool-defs-analysis/SKILL.md (or your agent's skills folder).Every string in a tool/resource/prompt definition is part of an LLM-facing API contract. The model reads the description, every parameter .describe(), the output schema, the recovery hints — and decides what to call and how. Definition language drifts: an internal mapping leaks into a parameter doc during a fix, a self-referential output description survives a refactor, a default that suited the developer at scaffold time stays after the typical call shape changes.
This skill is the review-time pass for that drift. Read each definition the way a mid-tier model with no project context would — can it pick the tool, fill the fields, and recover from errors using only the rendered schema?
| Skill | Lens |
|---|---|
design-mcp-server | Authoring rules at write-time |
field-test | Behavior testing + a narrow 3-category leak audit |
security-pass | Injection, scopes, input sinks |
tool-defs-analysis (this) | LLM-facing language across the existing surface |
field-test already audits descriptions for implementation leaks, meta-coaching, and consumer-aware phrasing during its catalog step — that's a fast shallow pass alongside live tool calls. This skill is the deeper review: 16 categories, every field, every recovery hint, every default value, with file:line citations — plus a cross-surface pass for the drift no single file shows.
Read-only. This skill produces a report; the maintainer applies fixes. While running it, do not run git, do not stage or commit, do not update the changelog, do not run devcheck, do not invoke wrapup or release workflows. Fixes flow through the normal authoring path (edit the definition, then re-run this skill if you want to verify).
polish-docs-meta and security-passSkip during initial authoring — add-tool and design-mcp-server cover that. Skip diff-only review — read each file in full so drift across the whole definition surfaces.
Gather before starting. Ask if unclear:
find src/mcp-server/tools/definitions -type f -name "*tool.ts" 2>/dev/null | sort
find src/mcp-server/resources/definitions -type f -name "*resource.ts" 2>/dev/null | sort
find src/mcp-server/prompts/definitions -type f -name "*.prompt.ts" 2>/dev/null | sortThe *tool.ts / *resource.ts patterns also catch *.app-tool.ts / *.app-resource.ts. If the server's definitions live elsewhere (examples/, a packages workspace, …), audit those paths too. Also locate the server-level instructions string if the server sets one (the createApp option — grep -rn "instructions" src/ --include="*.ts"); it's audited in the cross-surface pass.
Use TaskCreate — one task per file. Mark each complete after its findings are captured.
Read each definition file in full. Apply every category — most files trip more than one. Capture each hit with file:line, the offending excerpt, and a one-line fix.
Look in: tool / resource / prompt description.
Check: imperative present-tense. "Search for trials" beats "Searches for trials" or "This tool will search trials".
Smell: "Allows you to…", "This tool…", "Provides functionality to…", "Searches for…", "Fetches…", "Will return…".
(Parameter .describe() text describes the value, not the tool — it doesn't need imperative voice.)
Look in: every description and .describe().
Check: internal API routes, endpoint paths, API call counts, internal parameter mappings, sibling service names, version notes, TODOs.
Smell: "/api/v2/by-state", "Adds a second API call", "API requires two_year_period", "(deprecated; use bar_v2)", "TODO: support batch mode", "Used internally by FooService".
Look in: every description and .describe().
Check: reader-naming or meta-coaching directed at the LLM rather than describing the tool.
Smell: "suitable for LLM consumption", "Treat the returned ID as the canonical Y", "Agents should…", "Callers should…", "When you call this tool…", any reference to "LLM", "agent", "Claude", "the model".
Field-test catches this in its leak audit; this skill is the more thorough pass.
Look in: every .default(...) call in input schemas.
Check: the default matches the typical caller's case. A default that suited the developer at scaffold time often skews real calls — limit: 1 makes default-args searches useless, verbose: true floods context, dryRun: false on a destructive op invites an irreversible accident.
Smell: dev-convenience values that survived the schema's first draft, dangerous defaults on destructive operations, defaults that contradict the description's framing of typical use.
Look in: errors: [{ recovery: '…' }] arrays, data.recovery.hint at throw sites in handler bodies.
Check: the hint directs the agent to its next action, not the developer to debugging. "Call pubmed_search with a narrower query" beats "Verify the configuration is correct" or "Internal error".
Smell: "Check the logs", "See documentation", "Contact admin", "Try again later" (with no condition), generic non-actionable text, hints that name internal classes or files.
Look in: every field in input and output schemas; resource URI template variables.
Check: every field carries a .describe(), and it tells the agent what the value is — not just the field name restated, not silent on dynamic shapes. Enum variants — especially operation discriminators — are explained.
Smell:
.describe() at allname: z.string().describe('Name') — tautologyoperation: z.enum([...]) whose variants are never explainedmetadata: z.record(z.string(), z.unknown()).describe('Metadata') — opaque dynamic shape with no hint about keys/valuestotal, hasMore, nextCursor) with semantics unstated — or a limit param that doesn't say whether it caps the page or the whole result{cid}) never described anywhereLook in: tool descriptions, prompt content, recovery hints.
Check: when one tool/resource is mentioned, when to reach for it is explained — and the references cover the relevant siblings, not a partial sample.
Smell: "Use foo_search to find IDs" (no when); a prompt naming 3 of 7 landscape-relevant tools; a tool description listing one sibling but not the others that fit the same workflow.
Look in: output schemas (especially fields wrapping external API data), format() rendering.
Check: optional upstream fields are acknowledged as such — not implied to always be present. format() doesn't print fabricated values for missing fields.
Smell:
pmid: z.string().describe('PubMed ID') when only ~60% of records have one (should be .optional() and noted)format() printing **PMID:** undefinedoutput for an upstream value the API doesn't always returnLook in: parameter .describe() text containing "e.g.,", "(e.g. ...)", .example(...) calls.
Check: examples are domain-realistic — real-shaped IDs, real query strings, real values from the upstream domain. One example is usually enough.
Smell: .describe('Item ID (e.g., "abc123")') when real IDs have structure (NCT12345678); toy values ("foo", "bar"); padding multiple toy examples instead of one realistic one.
Look in: tool / resource / prompt description.
Check: single cohesive paragraph, written as one string literal in source. No bullet lists, no blank-line-separated sections, no markdown headers inside the description; no +-joined fragments in the file — a description assembled one sentence per line reads as a list of disconnected claims and grows a line at a time until it is several times its siblings' length.
Smell: blank lines (\n\n) inside a description string, - bullet lines, ## Header lines, "Operations:\n- foo: …" duplicating an enum's .describe() text, '…' + continuation lines under description:.
Look in: mutator tools — any tool that writes, updates, deletes, appends, or patches (i.e., definitions without annotations.readOnlyHint: true).
Check: output carries a state-change discriminator (created, updated, mutated, unchanged) or before/after observable state the agent can use to confirm intent-effect match. The server reports what it observed; the agent decides whether it matches what it meant.
Smell: mutator output is { path, ok } or { success: true } — no pre/post state, no discriminator. Server-side defensive throws on synthetic deltas (file shrunk, count decreased) the server can't authoritatively classify as bugs.
Look in: every z.number() field in output schemas.
Check: the field name carries a unit when not pinned by context — sizeInBytes, durationInMs, priceInCents, latencyInMs. The .describe() drops in summarization or gets truncated; the field name persists into the JSON the agent reads. Scores, ratios, and percentages carry their range the same way — in the name or as the first thing in the describe (0–1).
Smell: size, duration, price, latency — bare names that force the agent to guess units; score/confidence with no stated range (0.87 and 87 both pass the schema). Exempt: index, position, page, offset, limit, totalCount, itemCount (dimensionless).
Look in: input schemas — every field whose .describe() states a format, range, length, or pattern.
Check: stated constraints are machine-enforced in the schema (.regex(), .min()/.max(), .int(), .length(), an enum) so they emit into the JSON Schema the client renders — a constraint living only in prose reaches a weaker model unreliably and burns retries on malformed input. Opaque-ID params also say how to obtain the value (which sibling tool returns it), not just its shape. When the prose promises a normalization ("case-insensitive", "whitespace trimmed", "a trailing .json is stripped"), the schema performs it before the pattern check (z.string().trim().toUpperCase().regex(…), or a pattern that admits the raw form) — a normalization that lives only in the handler runs after validation has already rejected the input it was meant to accept.
Smell: .describe('Date in YYYY-MM-DD format') on a bare z.string(); "max 100" in prose with no .max(100); an ID param whose describe gives the format but never the tool that produces it; "case-insensitive" in the describe with a case-sensitive .regex() and a .toUpperCase() in the handler.
Look in: the annotations block on every tool.
Check: hints match what the handler actually does — clients gate confirmation prompts and retry policy on them. A purely-read tool carries readOnlyHint: true; deletes and overwrites aren't marked destructiveHint: false; retry-safe mutators carry idempotentHint: true; tools calling external services carry openWorldHint: true. If annotations.title is set, it still matches the tool's current name and behavior.
Smell: readOnlyHint: true on anything that writes; a read-only tool with no readOnlyHint (clients assume it can mutate); destructiveHint: false on a delete; a stale title surviving a rename.
Look in: every description, .describe(), and error recovery / when string in a definition file.
Check: each is a single-line string literal. NEVER split one across lines with + concatenation ('part one ' + 'part two'), and never line-wrap a description into a \n-bearing template literal. The formatter does not break string literals, so a long single-line string passes formatting untouched — the line-width limit is not a reason to concatenate.
Why it's not cosmetic: +-concatenation forces every fragment to hand-carry its boundary whitespace, and a dropped trailing space silently fuses two words in the rendered schema the model reads ('…table_name. ' + 'Columns…' renders as table_name.Columns). Correct output is byte-identical to the single-line form, so the concatenation buys nothing and adds a class of silent contract corruption.
Smell: a string literal ending in ' + or " + at end of line; a description: value spanning multiple quoted fragments; a multi-line template literal inside a description (also a Structure finding, #10).
Fix: collapse to one single-line string literal.
Look in: input schemas where two or more optional fields are alternatives rather than additions — the describes say "provide either X or Y", "ignored when Z is set", "one of".
Check: the exclusivity is in the schema, as a z.discriminatedUnion on a mode literal, so each branch advertises its own required list and the model reads which arguments go together. A mutex that lives only in prose reaches a weaker model unreliably: it fills both, or neither, and the handler answers with a validation error for a rule the schema said nothing about.
Smell: every field optional with a describe explaining when to omit it; a handler opening with if (!a && !b) throw / if (a && b) throw; a mode/kind/by enum whose value decides which other fields are required.
Fix: input: z.discriminatedUnion('mode', [...]) — see the add-tool skill. Not every all-optional schema qualifies: fields that genuinely compose (independent filters, pagination) stay flat.
The per-file walk misses drift that only shows between files. After it, sweep the whole surface:
search_ / find_ / get_ / list_ / lookup_); the same verb carrying different semantics on different tools is a finding.query vs q, limit vs maxResults, nctId vs nct_id on sibling tools is a finding.instructions: every tool it names exists, workflow guidance reflects the current surface (new tools that belong in it, renamed or removed ones purged), and nothing contradicts a per-tool description. Shape is a finding too: two to three cohesive sentences in one string literal (no +-joined fragments, no one-line-per-tool inventory — the catalog already carries that), written for the calling agent only. Operator configuration (*_BASE_URL, API keys, ports) belongs in the README and .env.example, not here — the agent cannot act on it.Cross-surface findings use the same finding format, cited at the file:line you'd change (the instructions string is a citable location).
Three sections.
Definitions reviewed, categories with findings, total finding count. One sentence on the single most material finding.
Group by category. Within each category, list each finding:
**<file>:<line> — <category> — (material|nit)**
Excerpt: `<the offending text>`
Issue: <one line: what's wrong>
Fix: <one line: what to change to>Excerpts are verbatim copy-paste from the file as read, line numbers from that read — re-verify any finding written from memory before it enters the report.
Two-level severity:
Skip categories with no findings — don't list empty headers.
Numbered, cherry-pickable. Map each item to a concrete change in a single file.
1. Tighten `metadata` description in `pubmed_fetch.tool.ts:42` — explain the dynamic shape (finding #3, material)
2. Drop bullet list from `clinicaltrials_get_field_definitions.tool.ts:18` description — single paragraph (finding #5, material)
3. Replace toy "abc123" example in `inventory_search.tool.ts:27` with real shape (finding #8, nit)End with:
Pick by number (e.g. "do 1, 3, 5" or "expand on 2").
*.tool.ts, *.app-tool.ts, *.resource.ts, *.app-resource.ts, *.prompt.ts listed; server instructions located if setdevcheck, no wrapup invoked during the audit© 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/tool-defs-analysis of cyanheads/pubmed-mcp-server.
Open the folder on GitHubat commit 5a417fb
Tool Defs Analysis 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 |
|---|---|---|---|---|---|---|
| Tool Defs Analysis this skillcyanheads/pubmed-mcp-server | 156 | — | ~4.8k | Automated safety check: Pass | Apache-2.0 | |
| AWS Cost OperationsMicrock/ordinary-claude-skills | 404 | 1 repos | ~2.5k | Automated safety check: Pass | Custom licence | |
| Ecs Operation Reviewaws/tools-for-devops-agent | 102 | — | ~4.8k | Automated safety check: Pass | Apache-2.0 | |
| Security Reviewktnyt/cclsp | 675 | — | ~565 | Automated safety check: Pass | MIT | |
| Ripwire Security Scanredhat-et/ripwire | 2.4k | — | ~2.8k | Automated safety check: Warn | Apache-2.0 | |
| Flow SwarmLeoYeAI/openclaw-master-skills | 2.2k | — | ~5.3k | Automated safety check: Pass | MIT |
Microck/ordinary-claude-skills
This skill provides AWS cost optimization, monitoring, and operational best practices with integrated MCP servers for billing analysis, cost estimation, observability, and security assessment.
aws/tools-for-devops-agent
Performs a comprehensive Amazon ECS operations review across the 6 review pillars (Resiliency & HA, Observability, Security, Operations, Performance, Additional Analysis) using read-only AWS APIs…
ktnyt/cclsp
Request a security expert assessment for code changes that touch child process spawning, file system access, configuration loading, or environment variable handling.
redhat-et/ripwire
Security review: (1) vet an untrusted SKILL.md or .mcp.json BEFORE installing it — the injection/exfiltration scanner; CRITICAL blocks the install; (2) audit code on an untrusted-input path (a…
LeoYeAI/openclaw-master-skills
Multi-agent swarm orchestration via RuFlo + Claude Code. An agent skill from LeoYeAI/openclaw-master-skills.
kubeshark/kubeshark
Investigates past Kubernetes incidents from Kubeshark traffic snapshots: takes captures, dissects API calls, extracts PCAPs and compares traffic over time.
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
Read-only audit of MCP definition language across an existing surface — tools, resources, prompts, server instructions. Tool Defs Analysis is an agent skill from cyanheads/pubmed-mcp-server. Read-only audit of MCP definition language across an existing surface — tools, resources, prompts, server instructions.
Tool Defs Analysis fits situations like: tasks that involve Citation management; tasks that involve Security review; tasks that involve Refactoring.
Run `npx skills add cyanheads/pubmed-mcp-server --skill tool-defs-analysis -a claude-code`. Or copy the skill folder (framework-skills/tool-defs-analysis in cyanheads/pubmed-mcp-server) into .claude/skills/tool-defs-analysis in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cyanheads/pubmed-mcp-server --skill tool-defs-analysis -a codex`. Or copy the skill folder (framework-skills/tool-defs-analysis in cyanheads/pubmed-mcp-server) into .agents/skills/tool-defs-analysis 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 tool-defs-analysis -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tool-defs-analysis, .gemini/skills/tool-defs-analysis, .github/skills/tool-defs-analysis and .opencode/skills/tool-defs-analysis in your project.
SKILL.md names no scripts, command-line tools or credentials: Tool Defs Analysis is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Tool Defs Analysis 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 4.8k tokens (SKILL.md is roughly 19k 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 Tool Defs Analysis: AWS Cost Operations (Microck/ordinary-claude-skills, 404 stars), Ecs Operation Review (aws/tools-for-devops-agent, 102 stars), Security Review (ktnyt/cclsp, 675 stars) and Ripwire Security Scan (redhat-et/ripwire, 2.4k 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.