← MCP servers · minipuft

claude-prompts-mcp

BLOCKgrade F · trust 44/100

MCP server for reusable prompt templates, multi-step workflow chains, and quality gates. Compose agentic workflows with an operator syntax; export as native skills to Claude Code, Cursor, OpenCode, and Gemini CLI.

agentic workflowsai automationai developmentai workflowsclaudeclaude codellmllm tools

Overview

From the repository's own README, as read at the audited commit.

<!-- maintainers: this README is governed by docs/portfolio/readme-charter.md — run `cd server && npm run validate:readme` before committing changes --><div align="center"><img src="assets/brand/claude-prompts-avatar.svg" alt="Claude Prompts mascot, an asymmetric curled creature forming a C-shaped counter with two directional eyes" width="160" /><h1>Claude Prompts</h1>**The portable workflow layer beside your AI coding harness.**<p>Your client executes with its own tools, agents, and context.<br>Claude Prompts adds reusable prompt resources, composable chains, validation gates, and client-native skill export.</p><p><a href="#claude-code-recommended"><img src="https://img.shields.io/badge/Claude_Code-Set_up_plugin-D97757?style=flat-square&amp;logo=anthropic&amp;logoColor=white&amp;labelColor=111715" alt="Set up the Claude Code plugin"></a><a href="#codex-install"><img src="https://img.shields.io/badge/Codex-Set_up_experimental-2A8F83?style=flat-square&amp;logo=openai&amp;logoColor=white&amp;labelColor=111715" alt="Set up the experimental Codex plugin"></a></p><p><a href="https://www.npmjs.com/package/claude-prompts"><img src="https://img.shields.io/npm/v/claude-prompts.svg?style=flat-square&amp;logo=npm&amp;logoColor=white&amp;labelColor=111715&amp;color=2A8F83" alt="npm version"></a><a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-555E5A.svg?style=flat-square&amp;labelColor=111715" alt="MIT license"></a></p>[Quick Start](#quick-start) · [What You Get](#what-you-get) · [Compose Workflows](#compose-workflows) · [Run Anywhere](#run-anywhere) · [Docs](#documentation)</div>### What your AI client gives you — and what this server adds| Your client already does   | This server adds                                                                      || -------------------------- | ------------------------------------------------------------------------------------- || Run a prompt               | Compose prompts with validati

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 claude-prompts -- npx -y [email protected]

Exposed tools (77) 75 read · 2 write · 0 destructive

ToolRiskDescription
AnalysisreadAnalytical prompts
AnalyticalreadStructured style
AnalyzereadUnderstand the problem
AnalyzerreadAnalyzes content
BADEXITreadInvalid exit argument
CAGEERFreadContext-Analysis-Goals framework
Clobberreadshould not land either
ConverterreadConverts data
Demoread
DesignreadPlan the solution
DocsreadEnsure documentation
DraftreadDraft from prior work
EscapedreadShould never be written
FormatterreadFormats content
G1readD
GeneralreadGeneral prompts
ImplementreadBuild the solution
Inlineread
MinimalreadA minimal gate
NOPERMreadCommand not executable (check permissions)
NOTFOUNDreadCommand not found (check PATH or spelling)
Onereadfirst
P1readD
Plainreadsecond step
PreviewreadPreview test
ProbereadThe only phase
Promptreaddesc
ReACTreadTest
ResearchreadResearch a topic
ReviewwriteReview the whole run
SCAMPERreadCreative framework
SIGABRTreadAbort
SIGALRMreadAlarm
SIGFPEreadFloating-point exception
SIGHUPreadHangup
SIGILLreadIllegal instruction
SIGINTreadInterrupt (Ctrl+C)
SIGKILLreadKilled (likely OOM)
SIGPIPEreadBroken pipe
SIGQUITreadQuit
SIGSEGVreadSegmentation fault
SIGTERMreadTerminated
SIGXCPUreadCPU time limit exceeded
Samplereadtest
Scriptedreadcarries a prompt-local tool
Sharedreadregistry description
SummarizereadSummarize content
SummarizerreadSummarize findings
SynthesizereadSynthesize from a named output
TestreadTest
ValidatorreadValidates input
Workflowread
argreadtest arg
contentreadContent
custom-checkreadVerify edge cases
datareadInput
demoreadDemo prompt
inputreadOther input
json_promptreadJSON payloads
multireadAllow multi-line payloads
not_a_real_argumentreadx
production-readyreadInclude tests and error handling
prompt_engineread
red-teamreadConfirm exfil path
referencesreadEnsure references included
securityreadCheck for vulnerabilities
snippetready
target_thingreadwhat to act on
taskwriteWork to execute
teamreadTeam or org name
testreadtest prompt
test-coveragereadInclude unit tests
textreadText to analyze
thingreadthe thing
topicreadoptional, undefaulted
unused_argreaddeclared, never used
work_kindreadkind of work

Details

Source
minipuft/claude-prompts-mcp
npm
claude-prompts@4.0.1
Transports
sse · stdio · streamable-http
Credentials it reads
AWS_SECRET_ACCESS_KEYGITHUB_TOKENMY_SECRET_KEY
License
MIT
Stars
186 · pushed 0d ago

Trust audit

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)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

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

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/scripts/generate-gate-index.js:34
const data = yaml.load(readFileSync(yamlPath, 'utf-8'));
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/scripts/lib/semantic-module-descriptors.ts:163
parsed = yaml.load(readFileSync(descriptorPath, 'utf8'));
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/scripts/validate-conformance-coverage.js:140
const doc = yaml.load(yamlText);
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/scripts/validate-frameworks.ts:52
data = yaml.load(readFileSync(yamlPath, 'utf-8')) as Record<string, unknown>;
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
server/scripts/validate-frameworks.ts:76
const phasesData = yaml.load(readFileSync(phasesPath, 'utf-8'));
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/hook-harness.mjs:167
/^sh -c 'echo "[^"]*" >> \S+; export CLAUDE_PLUGIN_DATA="[^"]*"; exec (.*)'$/;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
server/src/modules/chains/manager.ts:996
this.logger.info(`[Handoff] Minted token for session ${sessionId} (${session.chainId})`);
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
server/src/mcp/metadata/definitions/prompt-engine.ts:122
'    { "name": "red-team", "description": "Confirm exfil path" },  // Simple check',
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
server/scripts/capture-tool-schemas.mjs:296
const baseUrl = `http://127.0.0.1:${port}`;
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
server/scripts/verify-handoff.mjs:136
await waitHealth(`http://127.0.0.1:${PORT_A}`);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
server/scripts/verify-handoff.mjs:138
await waitHealth(`http://127.0.0.1:${PORT_B}`);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
server/scripts/verify-handoff.mjs:139
const a = client(`http://127.0.0.1:${PORT_A}`);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
server/scripts/verify-handoff.mjs:140
const b = client(`http://127.0.0.1:${PORT_B}`);
LOWInventory / provenance · inv.hidden_file · CWE-1104
.ignore
.ignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.node-version
.node-version
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierrc.json
.prettierrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
server/tests/integration/database/sqlite-wal-checkpoint.test.ts:92
const rawDb = (engine as unknown as { db: { exec(sql: string): void } }).db;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
server/tests/unit/scripts/pr-conventions-merge-settings.test.ts:76
return new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
scripts/request-renovate-run.js:44
.createHash("sha1")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cli/tests/integration/cli.test.ts:7
const CLI = join(__dirname, '../../dist/cpm.js');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cli/tests/integration/cli.test.ts:8
const SERVER_PACKAGE = join(__dirname, '../../../server/package.json');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cli/tests/integration/new-commands.test.ts:7
const CLI = join(__dirname, '../../dist/cpm.js');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cli/tests/integration/structural-commands.test.ts:7
const CLI = join(__dirname, '../../dist/cpm.js');

Gates applied: no_behavioural_pass.

Audited 2026-09-16 · audit v0.4.0 · source sha 5068214c526d · full audit: observations/trust-audit/mcp-server/minipuft__claude-prompts-mcp.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-165068214c526dBLOCKF44first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the claude-prompts-mcp MCP server?

MCP server for reusable prompt templates, multi-step workflow chains, and quality gates. Compose agentic workflows with an operator syntax; export as native skills to Claude Code, Cursor, OpenCode, and Gemini CLI.

What tools does claude-prompts-mcp expose?

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

Is claude-prompts-mcp safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (44/100) and found 6 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 claude-prompts-mcp need?

It reads AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN and MY_SECRET_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 claude-prompts-mcp run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as claude-prompts at 4.0.1.

How current is this page?

The grade is for one exact copy of the source (5068214c526d), read on 2026-09-16. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-16 · job trust-audit-2026-09-16