Skip to main content

PromptVault

Open-source prompt versioning, evaluation, and management as an MCP server.

Python 3.11+ License: MIT Docs

What is PromptVault?

PromptVault is a self-hosted tool for AI engineers and prompt engineers to:

  • Version prompts like code with immutable versions and rollback support
  • Evaluate prompts against datasets using LLM providers (OpenAI, Anthropic, Ollama)
  • Access everything through an MCP server, CLI, or REST API

Quickstart

Install (no clone needed)

pip install pvlt

Or with uv/pipx:

uvx --from git+https://github.com/KrishBnsl/promptVault.git promptctl --help

Or with Docker:

docker run -p 8000:8000 -e GEMINI_API_KEY=your-key ghcr.io/krishbnsl/pvlt

From Source

git clone https://github.com/KrishBnsl/promptVault.git
cd promptVault
uv sync
cp .env.example .env
# Edit .env with your API keys

Create Your First Prompt

promptctl prompt create summarize \
  --content "Summarize the following article in {tone} style:\n\n{article}" \
  --description "Summarizes an article" \
  --variables '{"tone": "concise", "article": "string"}' \
  --model-config '{"provider": "openai", "model": "gpt-4o-mini", "temperature": 0.2}' \
  --tags "summarization,content"

Create a Dataset

echo '{"input": {"article": "AI is transforming..."}, "expected_output": "AI transforms..."}' > dataset.jsonl
promptctl dataset create article-summaries --file dataset.jsonl

Run Evaluation

promptctl eval run summarize --dataset article-summaries

Use with MCP (Claude Desktop)

Add to your Claude Desktop config:

{
  "mcpServers": {
    "pvlt": {
      "command": "promptctl",
      "args": ["serve"]
    }
  }
}

CLI Reference

promptctl prompt create <name> --content <text> [options]
promptctl prompt update <name> --content <text> [options]
promptctl prompt list [--tags TAGS] [--limit N]
promptctl prompt show <name> [--version N]
promptctl prompt versions <name>
promptctl prompt diff <name> <version-a> <version-b>
promptctl prompt rollback <name> --version N

promptctl dataset create <name> --file <jsonl-or-json>
promptctl dataset list

promptctl eval run <prompt-name> --dataset <dataset-name>
promptctl eval report <evaluation-id>

promptctl serve [--stdio|--http] [--port 8000]
promptctl web [--port 8080]

MCP Tools

Tool Description
prompt_create Create a new prompt with initial version
prompt_update Create the next immutable prompt version
prompt_get Retrieve a prompt version
prompt_list List all prompts
prompt_versions List all versions of a prompt
prompt_diff Diff two prompt versions
prompt_rollback Rollback to a previous version
dataset_create Create a dataset
dataset_list List datasets
dataset_get Get dataset with items
evaluation_run Run evaluation
evaluation_status Check evaluation status
evaluation_report Get evaluation report
evaluation_compare Compare two evaluations

REST API

Base URL: http://localhost:8000/api

# Create a prompt
curl -X POST http://localhost:8000/api/prompts \
  -H "Content-Type: application/json" \
  -d '{"name": "test", "content": "Hello {name}"}'

# List prompts
curl http://localhost:8000/api/prompts

# Get a prompt
curl http://localhost:8000/api/prompts/test

Configuration

Copy .env.example to .env and configure:

PROMPTVAULT_DB_PATH=./promptvault.db
PROMPTVAULT_DEFAULT_PROVIDER=openai
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GEMINI_API_KEY=...
OLLAMA_BASE_URL=http://localhost:11434

Architecture

┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│   MCP Client │   │     CLI     │   │  REST Client │
│ (Claude etc) │   │ (promptctl) │   │ (curl, apps) │
└──────┬──────┘   └──────┬──────┘   └──────┬──────┘
       │                 │                 │
       ▼                 ▼                 ▼
┌─────────────────────────────────────────────────┐
│              PromptVault Core                   │
│  ┌─────────────┐ ┌──────────────┐ ┌──────────┐ │
│  │ Versioning  │ │ Evaluation   │ │ Storage  │ │
│  │ Engine      │ │ Engine       │ │ Layer    │ │
│  └─────────────┘ └──────────────┘ └──────────┘ │
│  ┌──────────────────────────────────────────┐  │
│  │        SQLite Database (local)           │  │
│  └──────────────────────────────────────────┘  │
└─────────────────────────────────────────────────┘

Documentation

📖 Full docs: https://krishbnsl.github.io/promptVault/

License

MIT License - see LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pvlt-0.1.2.tar.gz (435.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pvlt-0.1.2-py3-none-any.whl (28.5 kB view details)

Uploaded Python 3

File details

Details for the file pvlt-0.1.2.tar.gz.

File metadata

  • Download URL: pvlt-0.1.2.tar.gz
  • Upload date:
  • Size: 435.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pvlt-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e640c0212b6d4f6e8433c65ba11a372867c60cce64db3c85385cc28238a14616
MD5 11f0a6f5ae1d25b5d0ac4871d640e2c9
BLAKE2b-256 3ed6fefa6d5ba00c4e5f28e0f4be36f429439281a85134b50170808705238bf6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pvlt-0.1.2.tar.gz:

Publisher: publish-pypi.yml on KrishBnsl/promptVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pvlt-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pvlt-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 28.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pvlt-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a65475e1b545acd0152a7cc64b80bec849aef140ea8eaccd81146e5c3e533d2c
MD5 877281dda18ec513e097c84bb5a4c0e3
BLAKE2b-256 ce154c4c14721f1f3e9b1a9d967007f5dba393c7a05b1d6153f04781266d3449

See more details on using hashes here.

Provenance

The following attestation bundles were made for pvlt-0.1.2-py3-none-any.whl:

Publisher: publish-pypi.yml on KrishBnsl/promptVault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page