Atlas / MCP servers / cyanheads / Pubmed

PubmedBLOCK

mcp/cyanheads/pubmed-5

Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms via MCP. STDIO or Streamable HTTP.

Verdict
BLOCK
Grade
F
Trust score
40 /100
Exposed tools
1 0r · 1w · 0d
Transport
stdio · streamable-http
License
Apache-2.0
Stars
154
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

@cyanheads/pubmed-mcp-server Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms via MCP. STDIO or Streamable HTTP. 11 Tools • 1 Resource • 1 Prompt

[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/pubmed-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/pubmed-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)

[](https://github.com/cyanheads/pubmed-mcp-server/releases/latest/download/pubmed-mcp-server.mcpb) [](https://cursor.com/en/install-mcp?name=pubmed-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvcHVibWVkLW1jcC1zZXJ2ZXIiXX0=) [](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22pubmed-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cya

Read from source at commit 61789d23cbbeOBSERVED · 2026-10-07
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add pubmed-mcp-server -- npx -y @cyanheads/[email protected]
claude-code (npm)
claude mcp add pubmed-mcp-server -- npx -y @cyanheads/[email protected]
03

Exposed tools (1)

0 read · 1 write · 0 destructive.

ToolRiskDescription
database-infowritePubMed database metadata including field list, last update date, and record count.
04

Trust audit

BLOCKgrade F · trust 40/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (5 observation(s))
Shell
declared (8 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/build.ts:129
const tsc = await exec([join(ROOT_DIR, 'node_modules', '.bin', 'tsc'), '-p', project], 'tsc');
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/build.ts:133
const alias = await exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/devcheck.ts:158
exec(cmd: string[], options: { cwd: string }): Promise<ShellResult> {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/devcheck.ts:696
':(glob)**/.netrc',
Why it matters. touches a credential store
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
framework-skills/design-mcp-server/SKILL.md:439
| **Server credential** | The server's own upstream key is missing, or the upstream rejects it (401/403) | `ConfigurationError` — translated in the service, since the automatic status mapping yields `
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
framework-skills/release-and-publish/SKILL.md:218
Prereq: a GitHub PAT with `read:org` + `read:user` scopes stored in Keychain under the service name `mcp-publisher-github-pat`:
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
framework-skills/orchestrations/SKILL.md:55
2. **No `git stash`, no `git reset --hard`, no `git restore .`, no `git clean -f`, no `git checkout -- .`.** These bypass safety and risk silent data loss. Read-only git (`status`, `diff`, `log`, `sho
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
src/mcp-server/tools/definitions/fetch-articles.tool.ts:241
'NCBI\'s note on the link, e.g. what an erratum corrected ("Fuβer, Fabian [corrected to Fußer, Fabian]"). Absent unless NCBI supplies one.',
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/mcp-server/prompts/definitions/research-plan.prompt.test.ts:8
import { textMessages } from '../../../_helpers.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/mcp-server/tools/definitions/_fuzz-helpers.ts:40
} from '../../../services/ncbi/parsing/_book-fixtures.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/mcp-server/tools/definitions/_fuzz-helpers.ts:41
import { PUBLISHED_ERRATUM_XML } from '../../../services/ncbi/parsing/_comments-corrections-fixtures.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/mcp-server/tools/definitions/convert-ids-per-element.test.ts:19
import { textBlocks } from '../../../_helpers.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/mcp-server/tools/definitions/convert-ids.tool.test.ts:11
import { textBlocks } from '../../../_helpers.js';
LOWObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
tests/mcp-server/tools/definitions/fetch-articles.tool.test.ts:1380
note: 'Fuβer, Fabian [corrected to Fußer, Fabian]',
LOWObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
tests/mcp-server/tools/definitions/fetch-articles.tool.test.ts:1385
'- **ErratumIn:** PLoS One. 2013;8(6). doi:10.1371/annotation/df743c15-c50e-4d00-a24d-510e15f9a73b — Note: Fuβer, Fabian \\[corrected to Fußer, Fabian\\]',
LOWObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
tests/services/ncbi/parsing/article-parser.test.ts:940
note: 'Fuβer, Fabian [corrected to Fußer, Fabian]',
LOWObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
tests/services/ncbi/parsing/pmc-article-parser.test.ts:663
el('mml:math', [t('ηcrit')]),
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/mcp-server/tools/definitions/_visible-text.test.ts:18
['a zero-width space (U+200B)', ''],
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/mcp-server/tools/definitions/_visible-text.test.ts:19
['a word joiner (U+2060)', ''],
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/mcp-server/tools/definitions/_visible-text.test.ts:22
['zero-width non-joiner and joiner (U+200C, U+200D)', ''],
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/mcp-server/tools/definitions/_visible-text.test.ts:23
['a byte-order mark (U+FEFF)', ''],
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/mcp-server/tools/definitions/_visible-text.test.ts:24
['format characters between spaces', '  \u0085 '],
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@cyanheads/mcp-ts-core, defuddle, fast-xml-parser, linkedom, pino-pretty, sanitize-html, unpdf, zod
Why it matters. 19 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
AGENTS.md:431
- [ ] `.codex-plugin/mcp.json` updated — server name key is the unscoped repo name; every user-supplied variable (API key, contact email, instance URL) is listed in `env_vars` so Codex forwards it fro
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-07 · audit v0.4.1 · source sha 61789d23cbbefull audit observations/trust-audit/mcp-server/cyanheads__pubmed-5.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0761789d23cbbeBLOCKF40first audit
06

Questions

What is the Pubmed MCP server?

Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms via MCP. STDIO or Streamable HTTP.

What tools does Pubmed expose?

1 in total: 0 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Pubmed safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (40/100) and found 7 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Pubmed need?

It reads NCBI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Pubmed run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @cyanheads/pubmed-mcp-server at 2.10.20.

How current is this page?

The grade is for one exact copy of the source (61789d23cbbe), read on 2026-10-07. The repository is watched and re-audited when it changes.

Advertisement