Skip to main content
Glama
sparesparrow

MCP Prompts Server

by sparesparrow

mcp-prompts

A Model Context Protocol server that stores, searches and serves prompt templates and agent configurations to any MCP client (Claude Desktop, Claude Code, Cursor and others), plus a script that uses those templates to orchestrate Claude CLI agents over a whole project.

Listed on Glama, MCP Market and AIBASE. A Rust reimplementation focused on memory efficiency and concurrency lives in mcp-prompts-rs.

What It Does

  • Stores prompts as JSON files in data/prompts/

  • Exposes MCP tools for querying and managing prompts

  • Provides agent templates for project orchestration

  • Works with Claude Desktop, Cursor, and other MCP clients

Related MCP server: PromptingBox MCP Server

Packages

Both registries receive the same version from every v* tag (first together at 4.0.2); Docker images follow the same tag.

Quick Start

1. Install from GitHub Packages

GitHub Packages asks for a token even for public packages (without one the install fails with 401 Unauthorized). Create a personal access token with the read:packages scope (or, with the GitHub CLI, run gh auth refresh -h github.com -s read:packages), then add this to ~/.npmrc:

@sparesparrow:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=YOUR_TOKEN

Keep the token out of any file you commit. Then install:

npm install -g @sparesparrow/mcp-prompts
mcp-prompts   # starts the MCP server on stdio; stop it with Ctrl+C

The package ships the prompts in data/prompts, and the server finds them wherever an MCP client starts it from. Set PROMPTS_DIR to use your own directory instead.

To install from npm instead, skip the ~/.npmrc lines above and run npm install -g @sparesparrow/mcp-prompts. It is the same package, and npm needs no token.

2. Add the server to your MCP client

Claude Code, for every project:

claude mcp add -s user mcp-prompts -- mcp-prompts

Or for one project, commit a .mcp.json at its root (no paths or tokens in it). Claude Code asks you to approve it the first time:

{
  "mcpServers": {
    "mcp-prompts": {
      "command": "mcp-prompts",
      "args": []
    }
  }
}

Check it with claude mcp list. Use one of the two: registering the same name at both scopes gives you two servers.

Claude Desktop and other clients take the same command in their config (for Claude Desktop, claude_desktop_config.json), with the same mcpServers block as above. If the client does not find mcp-prompts on its PATH, use the full path from which mcp-prompts as the command.

Build from source

To run unreleased changes:

pnpm install
pnpm build
node dist/mcp-server-standalone.js    # or: pnpm start

and point your client at that file:

{
  "mcpServers": {
    "mcp-prompts": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-prompts/dist/mcp-server-standalone.js"],
      "env": { "PROMPTS_DIR": "/absolute/path/to/mcp-prompts/data/prompts" }
    }
  }
}

3. Use in Claude

Ask Claude:

  • "List all prompts tagged with orchestration"

  • "Get the claudepy-esp32-android-bridge-workflow prompt"

  • "Apply the claudepy-esp32-android-bridge-workflow template with esp32_firmware_path set to ./firmware"

  • "Add a prompt for Python FastAPI best practices"

Prompts added or changed through add_prompt / update_prompt live in memory and are lost when the server restarts. A prompt that must last is a JSON file under data/prompts/ with a stable id, added by pull request.

HTTP Mode

The same prompts are also available as a JSON API, for clients that don't speak MCP:

pnpm build
PORT=3003 PROMPTS_DIR=$PWD/data/prompts pnpm start:http
# or: npx mcp-prompts-http, or the default Docker image (port 3003)

Method and path

Does

GET /health, /ready, /version

Liveness, readiness, package version

GET /v1/prompts?tags=a,b&search=text

List prompt summaries

POST /v1/prompts

Add a prompt (same fields as add_prompt)

GET / PUT / DELETE /v1/prompts/:id

Read, update or delete one prompt

POST /v1/prompts/:id/apply

Fill a template: { "variables": { ... } } → { "result": "..." }

GET /v1/stats

Same counts as get_stats

GET /mcp/tools, POST /mcp/tools/:name

Call any MCP tool by name: { "arguments": { ... } }

curl -s -X POST localhost:3003/v1/prompts/claudepy-esp32-android-bridge-workflow/apply \
  -H 'Content-Type: application/json' -d '{"variables":{"esp32_firmware_path":"./firmware"}}'

Invalid input answers 400, unknown prompts 404. Set CORS_ORIGIN to allow browser clients. Changes made over HTTP live in memory, like those made over MCP; the files in data/prompts are not rewritten.

Orchestrating Projects

Use the orchestrate script to analyze entire projects:

./scripts/orchestrate-project.sh ~/projects/mia analyze
./scripts/orchestrate-project.sh ~/projects/esp32-bpm-detector review

This automatically:

  1. Detects project type

  2. Loads appropriate main agent

  3. Spawns specialized subagents

  4. Runs comprehensive analysis

  5. Returns structured results

MCP Tools

Tool

Description

list_prompts

List prompts, filtered by tags or a search term

get_prompt

Retrieve a prompt by ID

add_prompt

Add a new prompt or template

update_prompt

Modify existing prompt

delete_prompt

Remove prompt

apply_template

Fill a template prompt's {{variables}}

get_stats

Repository statistics

Prompts Organization

data/prompts/
├── main-agents/          # 9 project orchestration templates
│   ├── main_agent_python_backend.json
│   ├── main_agent_cpp_backend.json
│   ├── main_agent_android_app.json
│   ├── main_agent_embedded_iot.json
│   ├── main_agent_web_frontend.json
│   └── ...                # also web backend, DevOps, multiplatform IoT, generic
│
├── subagents/            # architecture, security and test analysts
├── cognitive/            # 7 layers: perception, episodes, semantic, procedures,
│                         #   evaluation, meta, transfer
├── embedded/, cross-platform/, home-automation/, mia-car/, voice-intelligence/
│                         # domain knowledge
├── claudepy-workflows/, openclaw/
│                         # agent workflow and routing prompts
└── learned/              # prompts produced by the learning loop

Architecture

Two layers. The full server (src/mcp/mcp-server.ts) is hexagonal: the domain in src/core (entities, events, services and the repository and event-bus ports) knows nothing about storage or transport, and storage adapters plug in behind the ports — file and in-memory in src/adapters; the earlier DynamoDB, S3 and SQS adapters, Lambda handlers and CDK stack are kept in archive/aws and cdk/. The standalone server that pnpm start and the npm binary run is the small one below: it reads the JSON files in PROMPTS_DIR directly and speaks MCP over stdio.

┌──────────────────────────────┐
│   MCP Server (stdio)         │
│   ├── list_prompts           │
│   ├── get_prompt             │
│   ├── add_prompt             │
│   └── ...                    │
├──────────────────────────────┤
│   File Storage               │
│   └── data/prompts/*.json    │
└──────────────────────────────┘

Orchestration:
  orchestrate-project.sh
    ↓ loads prompts
    ↓ builds agent config
    ↓ calls claude CLI
  Actual agent execution

Development

pnpm install       # Install dependencies
pnpm build         # Build TypeScript
pnpm dev           # Watch mode
pnpm test          # Run tests
pnpm orchestrate   # Test orchestration

Enterprise Deployment

For enterprise features (AWS, multi-tenant, payments), see archive/aws/README.md.

Most users don't need this - the local MCP server is sufficient.

License

MIT

Available Tools

7 tools
add_promptB

Add a new prompt. Set isTemplate and variables to make it a template that apply_template can fill.

NameRequiredDescriptionDefault
nameYes
tagsNo
contentYes
metadataNo
variablesNo
isTemplateNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. For a creation/mutation tool it discloses nothing about uniqueness constraints on name, error behavior, or persistence side effects, only the template flag's effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the primary action is front-loaded ahead of the template hint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 6-parameter creation tool with a nested variables structure, no annotations, and no output schema needs far more disclosure about required inputs and mutation behavior than this two-sentence description provides.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, so the description must compensate. It only explains 2 of them (isTemplate, variables) and says nothing about name, content, tags, or the nested metadata object, leaving required fields and variable object shape undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Add a new prompt") and clarifies the template-creation mode by naming the sibling consumer, apply_template. This distinguishes it from read/list siblings, though it does not explicitly contrast with update_prompt.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies when to use the template path ("Set isTemplate and variables... that apply_template can fill"), but gives no explicit when-to-use vs update_prompt guidance, and no mention of duplicate-name behavior or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_templateB

Fill a template prompt's {{variables}} and return the resulting text.

NameRequiredDescriptionDefault
idYesID of a template prompt
variablesYesValues for the template variables, by name

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and only partially discharges it: 'return the resulting text' hints at a non-mutating render, but nothing states whether this is read-only, how missing or extra variable names are handled (error vs. leftover placeholders), or whether the template must already exist. These are the key behavioral questions for a template-rendering tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler, front-loading the action and ending with the return value. Nothing is wasted or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Two fully documented parameters and no output schema mean the description needn't explain return values, and it does state that rendered text comes back. However, for a nested-object input with no annotations, the silence on variable-mismatch behavior leaves a real gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented, giving a baseline of 3. The description adds a small amount of meaning by tying the 'variables' object to the {{placeholder}} syntax, but supplies no format, naming, or completeness rules beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource combination ('Fill a template prompt's {{variables}}') and discloses the outcome ('return the resulting text'), which cleanly separates it from the CRUD siblings like get_prompt, add_prompt, and update_prompt. It doesn't explicitly name a sibling it is not, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to reach for this versus get_prompt, which presumably returns the raw unrendered template. An agent must infer that distinction from the verb alone. No prerequisites, exclusions, or alternatives are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_promptC

Delete a prompt by its ID.

NameRequiredDescriptionDefault
idYesPrompt ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden for a destructive operation, and it says nothing about irreversibility, whether deletion is soft or permanent, required permissions, or what happens if the ID doesn't exist. A single clause on permanence would materially change agent behavior here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb, zero padding. Its brevity is appropriate in form but leaves no room for the behavioral context this destructive tool needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no annotations and no output schema, the description omits everything an agent would want before invoking it: permanence, error semantics, and post-delete state. Sibling tools in the same family (update_prompt, get_prompt) suggest a lifecycle the definition never acknowledges.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single required 'id' string described as "Prompt ID," so the schema already does the work. The description's "by its ID" restates rather than extends that, and adds no format or sourcing detail (e.g., where IDs come from).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb plus resource ("Delete a prompt") with the identifier-based selection made explicit, which cleanly separates it from add_prompt, get_prompt, and update_prompt. It stops short of stating any scope or side effects, so it is clear but not maximally distinctive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus update_prompt or how to recover a deleted prompt, and no prerequisites or confirmation requirements are stated. The agent must infer everything about the call context from the verb alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_promptC

Get a prompt by its ID.

NameRequiredDescriptionDefault
idYesPrompt ID, as returned by list_prompts

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing. It implies a read but never confirms it, and says nothing about permissions, behavior for a missing or deleted ID, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the identifier constraint front-loaded and zero padding. It is efficient, though the brevity edges toward under-specification rather than deliberate concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter lookup tool with full schema coverage and no output schema, the description is minimally viable. It still leaves the return shape and not-found behavior unstated, which an agent must discover by calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter at 100% schema coverage, the schema already defines the ID and its provenance. The description's 'by its ID' adds no format, validation, or sourcing detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a prompt') plus the lookup key ('by its ID'), which is enough to separate it from list_prompts. It does not explicitly name the siblings it is not (update_prompt, delete_prompt), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites, and no alternatives. The only workflow hint ('as returned by list_prompts') lives in the schema, not the description, so an agent reading the description alone gets no routing advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statsB

Counts of prompts and templates, with the tags and categories in use.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose that the response is aggregate counts plus the tags/categories currently in use — useful since no output schema exists. However, it says nothing about scope (all users vs. current user/workspace), permissions, or freshness/rate limits. For a low-risk read tool the omission is tolerable but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact clause with no filler, front-loaded on what is counted. It is a noun phrase rather than a full sentence, which slightly reduces clarity about the action, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is the only source of information about the response, yet it only gestures at 'counts, tags, categories' without shape, naming, or scope. Given the tool's whole value is the data it returns, this is thin; a sentence on the structure and scope of the stats would be needed to be complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema takes zero parameters, so there is nothing for the description to explain and the baseline is 4. No parameter-related confusion is possible here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (counts of prompts and templates) and even the dimensions it aggregates (tags, categories in use), so an agent knows this is an aggregate-stats endpoint rather than a record fetch. It does not explicitly contrast itself with siblings like list_prompts, though the name makes the distinction fairly obvious. Clear verb-of-sorts plus resource, no real sibling differentiation text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of alternatives, and no exclusions. The agent must infer from the name that this is the aggregate-counts call and that list_prompts should be used for actual records. No conditional or routing information is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_promptsA

List prompts, optionally filtered by tags (any match) or a search term.

NameRequiredDescriptionDefault
tagsNoReturn prompts carrying any of these tags
searchNoText to look for in the name, description or content

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. 'List' implies a non-destructive read, and '(any match)' clarifies OR-semantics for tags, which is genuinely useful. However, it says nothing about ordering, pagination, truncation, or permissions for a tool that could return an unbounded collection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero waste, front-loading the verb and resource before the optional qualifiers. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter read tool with no output schema, the description covers invocation adequately. The remaining gap is the return shape: it never says what a listed prompt contains or whether the full set is returned at once.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents both parameters in near-identical wording ('any of these tags', 'name, description or content'). The description's '(any match)' reinforces the OR semantics but adds no syntax, format, or edge-case detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (prompts), plus the two optional filter modes. It is distinguishable from get_prompt (single fetch) by the verb, though it never names or contrasts any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the word 'optionally' signals that calling with no arguments lists everything and filters are additive. There is no explicit when-to-use guidance, no statement of when to prefer get_prompt for a specific prompt, and no mention of result limits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_promptC

Update fields of an existing prompt; its version is incremented.

NameRequiredDescriptionDefault
idYesPrompt ID
updatesYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It adds one useful fact—that the prompt's version is incremented—but omits critical mutation details such as whether updates are partial or full, what permissions are required, whether changes are reversible, and what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with the key operation and versioning behavior front-loaded. It is concise, though arguably too terse given the nested updates object and mutation semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a nested updates object, no annotations, no output schema, and only 50% schema description coverage, the description is incomplete. It does not explain partial-update behavior, versioning implications, or field-level semantics that an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, with the entire nested 'updates' object lacking property descriptions. The description says only 'Update fields' and does not enumerate or clarify the meaning of name, tags, content, metadata, variables, or isTemplate, leaving the agent to infer semantics from the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('existing prompt'), making the operation immediately identifiable. It does not explicitly contrast with siblings like add_prompt or get_prompt, but the verb and resource are distinct enough that an agent can differentiate it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as add_prompt, get_prompt, or apply_template. The implied usage is updating an existing prompt, but no conditions, prerequisites, or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv4.0.2
    • Changedadd_prompt3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / metadata / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / variables / items / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "description": {
        -        "type": "string"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "required": {
        -        "default": true,
        -        "type": "boolean"
        -      },
        -      "type": {
        -        "default": "string",
        -        "enum": [
        -          "string",
        -          "number",
        -          "boolean"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "name"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "properties": {
        +      "description": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "required": {
        +        "default": true,
        +        "type": "boolean"
        +      },
        +      "type": {
        +        "default": "string",
        +        "enum": [
        +          "string",
        +          "number",
        +          "boolean"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedapply_template2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / variables / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changeddelete_prompt1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_prompt1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_prompts1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedupdate_prompt6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / updates / additionalProperties
        Removed value: -false
      • removedInput schema / properties / updates / properties / isTemplate / default
        Removed value: -false
      • addedInput schema / properties / updates / properties / metadata / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / updates / properties / tags / default
        Removed value: -[]
      • changedInput schema / properties / updates / properties / variables / items / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "description": {
        -        "type": "string"
        -      },
        -      "name": {
        -        "type": "string"
        -      },
        -      "required": {
        -        "default": true,
        -        "type": "boolean"
        -      },
        -      "type": {
        -        "default": "string",
        -        "enum": [
        -          "string",
        -          "number",
        -          "boolean"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "name"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "properties": {
        +      "description": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "required": {
        +        "default": true,
        +        "type": "boolean"
        +      },
        +      "type": {
        +        "default": "string",
        +        "enum": [
        +          "string",
        +          "number",
        +          "boolean"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name"
        +    ],
        +    "type": "object"
        +  }
        +]
  2. 7 tool updatesv4.0.0
    • First observedadd_prompt
    • First observedapply_template
    • First observeddelete_prompt
    • First observedget_prompt
    • First observedget_stats
    • First observedlist_prompts
    • First observedupdate_prompt

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct action on the prompt resource: add, get, list, update, delete, apply_template, and get_stats. The only potential confusion is between get_prompt and apply_template, but the descriptions make the distinction between retrieving raw vs. rendered text clear.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (delete_prompt, add_prompt, get_prompt, list_prompts, update_prompt, apply_template, get_stats), with only a trivial pluralization difference in list_prompts. Conventions are predictable and readable.

Tool Count5/5

Seven tools is a well-scoped set for a prompt management server, covering exactly the CRUD lifecycle plus templating and stats. Every tool earns its place with no redundancy.

Completeness5/5

Full CRUD is present (add, get, list, update, delete), plus templating via apply_template and aggregate info via get_stats, and search/filter is folded into list_prompts. This covers the domain's lifecycle with no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables storage and reuse of prompt templates with variable substitution for LLMs. Supports creating, searching, and retrieving prompt templates to avoid repeating complex instructions across conversations.
    4
    14 npm
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Allows users to save, organize, and manage AI prompts, folders, and tags directly within MCP-compatible tools like Claude and Cursor. It supports version history tracking, prompt searching, and the ability to save public templates to a personal collection.
    20
    3 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to organize, search, and manage a shared library of prompts across AI tools via the Model Context Protocol. It supports hierarchical folder organization, tagging, and template variable substitution for dynamic prompt generation.
    MIT