Agent skill

Tool Defs Analysis

by cyanheads in cyanheads/pubmed-mcp-server

Read-only audit of MCP definition language across an existing surface — tools, resources, prompts, server instructions.

Apache-2.0Auto-check passedSecurity

Install Tool Defs Analysis

skills CLI
$ npx skills add cyanheads/pubmed-mcp-server --skill tool-defs-analysis -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cyanheads/pubmed-mcp-server tool-defs-analysis --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
tool-defs-analysis
GitHub stars
156
Token cost
~4.8k tokens
SKILL.md length
2,389 words
Files
1
Skills in repo
30
Repo updated
First seen
Licence
Apache-2.0

At a glance

Read-only audit of MCP definition language across an existing surface — tools, resources, prompts, server instructions.

  • Works in 4 steps: Build the inventory → Walk the 16 categories per file → Cross-surface pass → …
  • Tasks that involve Citation management
  • SKILL.md covers Context, When to Use, Inputs and Steps, plus 1 more section
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

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.

When your agent uses it

  • Tasks that involve Citation management
  • Tasks that involve Security review
  • Tasks that involve Refactoring

Example prompts

  • “/tool-defs-analysis”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Build the inventory
  2. Walk the 16 categories per file
  3. Cross-surface pass
  4. Report

What it can do on your machine

Read from SKILL.md and the folder at commit 5a417fb. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    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.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~220
When it runs · the whole SKILL.md, loaded when a task matches
~4.8k

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.

Safety

Auto-check passed

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.

SKILL.md

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.

Download SKILL.mdSave it as .claude/skills/tool-defs-analysis/SKILL.md (or your agent's skills folder).
name
tool-defs-analysis
description
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 schema — then a cross-surface pass: naming taxonomy, parameter vocabulary, tool overlap, instructions drift, length outliers. Produces grouped findings with file:line citations and a numbered options list. Use during polish, after a refactor, or before a release. Complements `field-test` (behavior testing) and `security-pass` (security audit).
metadata.author
cyanheads
metadata.version
1.7
metadata.audience
external
metadata.type
audit

Context

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?

SkillLens
design-mcp-serverAuthoring rules at write-time
field-testBehavior testing + a narrow 3-category leak audit
security-passInjection, 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).

When to Use

  • After a polish session or refactor that touched definitions
  • Before a release, alongside polish-docs-meta and security-pass
  • When the user says "review my tool definitions", "audit descriptions", "are my tool descriptions any good"
  • After scaffolding a new server but before it ships

Skip 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.

Inputs

Gather before starting. Ask if unclear:

  1. Scope — whole server, specific definitions, or a single directory?
  2. Severity floor — all findings (default), or skip nits?
  3. Known concerns — anything the user already wants emphasized?

Steps

1. Build the inventory
bash
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 | sort

The *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.

2. Walk the 16 categories per file

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.

1. Voice & tense

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.)

2. Internal leaks

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".

3. Audience leaks

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.

4. Defaults

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.

5. Recovery hints

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.

6. Field descriptions

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:

  • An input field with no .describe() at all
  • name: z.string().describe('Name') — tautology
  • operation: z.enum([...]) whose variants are never explained
  • metadata: z.record(z.string(), z.unknown()).describe('Metadata') — opaque dynamic shape with no hint about keys/values
  • Optional fields with no note on when they're absent
  • Paging fields (total, hasMore, nextCursor) with semantics unstated — or a limit param that doesn't say whether it caps the page or the whole result
  • A URI template variable ({cid}) never described anywhere
7. Cross-references

Look 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.

8. Sparsity

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:** undefined
  • A required field in output for an upstream value the API doesn't always return
9. Examples

Look 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.

10. Structure

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:.

11. Mutator observability

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.

12. Unit-bearing numeric names

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).

Show full SKILL.md (1,034 more words)Show less
13. Constraints in validators

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.

14. Annotations truthfulness

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.

15. Single-line strings

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.

16. Exclusive modes in the schema

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.

3. Cross-surface pass

The per-file walk misses drift that only shows between files. After it, sweep the whole surface:

  • Naming taxonomy — verb prefixes mean one thing each across the surface (search_ / find_ / get_ / list_ / lookup_); the same verb carrying different semantics on different tools is a finding.
  • Parameter vocabulary — one name per concept everywhere: query vs q, limit vs maxResults, nctId vs nct_id on sibling tools is a finding.
  • Tool overlap — for any pair with adjacent scope, the two descriptions alone must answer "when X vs Y." If an agent can't pick, that's material.
  • Instructions drift — if the server sets 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.
  • Length outliers — a description several times longer than its siblings (attention drag), or a one-liner that underspecifies (selection risk).

Cross-surface findings use the same finding format, cited at the file:line you'd change (the instructions string is a citable location).

4. Report

Three sections.

Summary (1 paragraph)

Definitions reviewed, categories with findings, total finding count. One sentence on the single most material finding.

Findings

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:

  • material — affects agent decisions (will mis-select tool, mis-fill input, mis-handle output, swallow an irrecoverable error)
  • nit — polish (style, voice consistency, minor phrasing)

Skip categories with no findings — don't list empty headers.

Options

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").

Checklist

  • Scope confirmed (whole server / module / specific files)
  • Severity floor applied — nits suppressed if user requested
  • Inventory built — every *.tool.ts, *.app-tool.ts, *.resource.ts, *.app-resource.ts, *.prompt.ts listed; server instructions located if set
  • Each file walked through all 16 categories (per-file, not 16 separate passes)
  • Cross-surface pass run — naming taxonomy, parameter vocabulary, tool overlap, instructions drift, length outliers
  • Read-only: no git, no commits, no changelog edits, no devcheck, no wrapup invoked during the audit
  • Findings carry file:line citation, excerpt, issue, fix — excerpts verbatim, line numbers verified
  • Report: summary → grouped-by-category findings → numbered options
  • Options section produced — numbered, each single-file-scoped, severity tagged, cherry-pickable
  • If no findings: summary states "no findings"; Findings and Options sections omitted

© 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

Files

Just SKILL.md in framework-skills/tool-defs-analysis of cyanheads/pubmed-mcp-server.

Open the folder on GitHubat commit 5a417fb

Compare with similar skills

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.

Tool Defs Analysis compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tool Defs Analysis this skillcyanheads/pubmed-mcp-server156—~4.8kAutomated safety check: PassApache-2.0
AWS Cost OperationsMicrock/ordinary-claude-skills4041 repos~2.5kAutomated safety check: PassCustom licence
Ecs Operation Reviewaws/tools-for-devops-agent102—~4.8kAutomated safety check: PassApache-2.0
Security Reviewktnyt/cclsp675—~565Automated safety check: PassMIT
Ripwire Security Scanredhat-et/ripwire2.4k—~2.8kAutomated safety check: WarnApache-2.0
Flow SwarmLeoYeAI/openclaw-master-skills2.2k—~5.3kAutomated safety check: PassMIT

Similar skills

  • 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.

    404 GitHub starsUsed in 1 repo~2.5k tokens
    DevOps & CloudAuto-check passed
  • Ecs Operation Review

    aws/tools-for-devops-agent

    Official

    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…

    102 GitHub stars~4.8k tokensUpdated 2 days ago
    SecurityAuto-check passed
  • Security Review

    ktnyt/cclsp

    Request a security expert assessment for code changes that touch child process spawning, file system access, configuration loading, or environment variable handling.

    675 GitHub stars~565 tokensUpdated 7 mo ago
    SecurityAuto-check passed
  • Ripwire Security Scan

    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…

    2.4k GitHub stars~2.8k tokensUpdated today
    SecurityAuto-check: warnings
  • Flow Swarm

    LeoYeAI/openclaw-master-skills

    Multi-agent swarm orchestration via RuFlo + Claude Code. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~5.3k tokensUpdated 2 mo ago
    Agent WorkflowsAuto-check passed
  • Investigates past Kubernetes incidents from Kubeshark traffic snapshots: takes captures, dissects API calls, extracts PCAPs and compares traffic over time.

    12k GitHub stars~5.3k tokensUpdated 2 days ago
    DevOps & CloudAuto-check passed

More from cyanheads/pubmed-mcp-server

All 30 skills in this repo
  • Add App Tool

    cyanheads/pubmed-mcp-server

    Scaffold an MCP App tool + UI resource pair. An agent skill from cyanheads/pubmed-mcp-server.

    156 GitHub stars~3.2k tokensUpdated 5 days ago
    Auto-check passed
  • Add Prompt

    cyanheads/pubmed-mcp-server

    Scaffold a new MCP prompt template. An agent skill from cyanheads/pubmed-mcp-server.

    156 GitHub stars~1.6k tokensUpdated 5 days ago
    Auto-check passed
  • Add Resource

    cyanheads/pubmed-mcp-server

    Scaffold a new MCP resource definition. An agent skill from cyanheads/pubmed-mcp-server.

    156 GitHub stars~3k tokensUpdated 5 days ago
    Auto-check passed
  • Add Service

    cyanheads/pubmed-mcp-server

    Scaffold a new service integration. An agent skill from cyanheads/pubmed-mcp-server.

    156 GitHub stars~3.6k tokensUpdated 5 days ago
    Auto-check passed
  • Add Test

    cyanheads/pubmed-mcp-server

    Scaffold a test file for an existing tool, resource, or service.

    156 GitHub stars~4.1k tokensUpdated 5 days ago
    Auto-check passed
  • API Auth

    cyanheads/pubmed-mcp-server

    Authentication, authorization, and multi-tenancy patterns for @cyanheads/mcp-ts-core.

    156 GitHub stars~2.7k tokensUpdated 5 days ago
    Auto-check passed

Questions about Tool Defs Analysis

What does Tool Defs Analysis do?

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.

When should I use Tool Defs Analysis?

Tool Defs Analysis fits situations like: tasks that involve Citation management; tasks that involve Security review; tasks that involve Refactoring.

How do I install Tool Defs Analysis in Claude Code?

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.

How do I install Tool Defs Analysis in Codex?

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.

Can I use Tool Defs Analysis in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Tool Defs Analysis need to run?

SKILL.md names no scripts, command-line tools or credentials: Tool Defs Analysis is instructions for the agent only.

Does Tool Defs Analysis access the network?

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.

Is Tool Defs Analysis safe to install?

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.

What licence does Tool Defs Analysis use?

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.

How many tokens does Tool Defs Analysis use?

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.

What are the alternatives to Tool Defs Analysis?

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.

Who maintains Tool Defs Analysis?

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.