Skip to main content

Just Prompt - A lightweight MCP server for LLM providers

just-prompt is a Model Control Protocol (MCP) server that provides a unified interface to various Large Language Model (LLM) providers including OpenAI, Anthropic, Google Gemini, Groq, DeepSeek, and Ollama. It's like having a universal remote for all your AI models - pretty neat, right?

Just Prompt Logo Just Prompt Logo

Tools

The following MCP tools are available in the server:

  • prompt: Send a prompt to multiple LLM models

    • Parameters:
      • text: The prompt text
      • models_prefixed_by_provider (optional): List of models with provider prefixes. If not provided, uses default models.
  • prompt_from_file: Send a prompt from a file to multiple LLM models

    • Parameters:
      • file: Path to the file containing the prompt
      • models_prefixed_by_provider (optional): List of models with provider prefixes. If not provided, uses default models.
  • prompt_from_file_to_file: Send a prompt from a file to multiple LLM models and save responses as markdown files

    • Parameters:
      • file: Path to the file containing the prompt
      • models_prefixed_by_provider (optional): List of models with provider prefixes. If not provided, uses default models.
      • output_dir (default: "."): Directory to save the response markdown files to
  • ceo_and_board: Send a prompt to multiple 'board member' models and have a 'CEO' model make a decision based on their responses

    • Parameters:
      • file: Path to the file containing the prompt
      • models_prefixed_by_provider (optional): List of models with provider prefixes to act as board members. If not provided, uses default models.
      • output_dir (default: "."): Directory to save the response files and CEO decision
      • ceo_model (default: "openai:o3"): Model to use for the CEO decision in format "provider:model"
  • list_providers: List all available LLM providers

    • Parameters: None
  • list_models: List all available models for a specific LLM provider

    • Parameters:
      • provider: Provider to list models for (e.g., 'openai' or 'o')

Provider Prefixes

every model must be prefixed with the provider name

use the short name for faster referencing

  • o or openai: OpenAI
    • o:gpt-4o-mini
    • openai:gpt-4o-mini
  • a or anthropic: Anthropic
    • a:claude-3-5-haiku
    • anthropic:claude-3-5-haiku
  • g or gemini: Google Gemini
    • g:gemini-2.5-pro-exp-03-25
    • gemini:gemini-2.5-pro-exp-03-25
  • q or groq: Groq
    • q:llama-3.1-70b-versatile
    • groq:llama-3.1-70b-versatile
  • d or deepseek: DeepSeek
    • d:deepseek-coder
    • deepseek:deepseek-coder
  • l or ollama: Ollama
    • l:llama3.1
    • ollama:llama3.1

Features

  • Unified API for multiple LLM providers
  • Support for text prompts from strings or files
  • Run multiple models in parallel
  • Automatic model name correction using the first model in the --default-models list
  • Ability to save responses to files
  • Easy listing of available providers and models

Installation

# Clone the repository
git clone https://github.com/delorenj/just-prompt.git
cd just-prompt

# Install dependencies using mise and uv
mise install
uv sync

Environment Variables

Create a .env file with your API keys (you can copy the .env.sample file):

cp .env.sample .env

Then edit the .env file to add your API keys (or export them in your shell):

OPENAI_API_KEY=your_openai_api_key_here
ANTHROPIC_API_KEY=your_anthropic_api_key_here
GEMINI_API_KEY=your_gemini_api_key_here
GROQ_API_KEY=your_groq_api_key_here
DEEPSEEK_API_KEY=your_deepseek_api_key_here
OLLAMA_HOST=http://localhost:11434

Claude Code Installation

In all these examples, replace the directory with the path to the just-prompt directory.

Default models set to openai:o3:high, openai:o4-mini:high, anthropic:claude-3-7-sonnet-20250219:4k, gemini:gemini-2.5-pro-preview-03-25, and gemini:gemini-2.5-flash-preview-04-17.

If you use Claude Code right out of the repository you can see in the .mcp.json file we set the default models to...

{
  "mcpServers": {
    "just-prompt": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "--directory",
        ".",
        "run",
        "just-prompt",
        "--default-models",
        "openai:o3:high,openai:o4-mini:high,anthropic:claude-3-7-sonnet-20250219:4k,gemini:gemini-2.5-pro-preview-03-25,gemini:gemini-2.5-flash-preview-04-17"
      ],
      "env": {}
    }
  }
}

The --default-models parameter sets the models to use when none are explicitly provided to the API endpoints. The first model in the list is also used for model name correction when needed. This can be a list of models separated by commas.

When starting the server, it will automatically check which API keys are available in your environment and inform you which providers you can use. If a key is missing, the provider will be listed as unavailable, but the server will still start and can be used with the providers that are available.

Using mcp add-json

Copy this and paste it into claude code with BUT don't run until you copy the json

claude mcp add just-prompt "$(pbpaste)"

JSON to copy

{
    "command": "uv",
    "args": ["--directory", ".", "run", "just-prompt"]
}

With a custom default model set to openai:gpt-4o.

{
    "command": "uv",
    "args": ["--directory", ".", "run", "just-prompt", "--default-models", "openai:gpt-4o"]
}

With multiple default models:

{
    "command": "uv",
    "args": ["--directory", ".", "run", "just-prompt", "--default-models", "openai:o3:high,openai:o4-mini:high,anthropic:claude-3-7-sonnet-20250219:4k,gemini:gemini-2.5-pro-preview-03-25,gemini:gemini-2.5-flash-preview-04-17"]
}

Using mcp add with project scope

# With default models
claude mcp add just-prompt -s project \
  -- \
    uv --directory . \
    run just-prompt

# With custom default model
claude mcp add just-prompt -s project \
  -- \
  uv --directory . \
  run just-prompt --default-models "openai:gpt-4o"

# With multiple default models
claude mcp add just-prompt -s user \
  -- \
  uv --directory . \
  run just-prompt --default-models "openai:o3:high,openai:o4-mini:high,anthropic:claude-3-7-sonnet-20250219:4k,gemini:gemini-2.5-pro-preview-03-25,gemini:gemini-2.5-flash-preview-04-17:4k"

mcp remove

claude mcp remove just-prompt

Running Tests

Want to make sure everything's working? Just run:

mise run test
# or if you prefer the direct approach:
uv run pytest

Codebase Structure

.
├── ai_docs/                   # Documentation for AI model details
│   ├── extending_thinking_sonny.md
│   ├── llm_providers_details.xml
│   ├── openai-reasoning-effort.md
│   └── pocket-pick-mcp-server-example.xml
├── example_outputs/           # Example outputs from different models
├── list_models.py             # Script to list available LLM models
├── prompts/                   # Example prompt files
├── pyproject.toml             # Python project configuration
├── specs/                     # Project specifications
│   ├── init-just-prompt.md
│   ├── new-tool-llm-as-a-ceo.md
│   └── oai-reasoning-levels.md
├── src/                       # Source code directory
│   └── just_prompt/
│       ├── __init__.py
│       ├── __main__.py
│       ├── atoms/             # Core components
│       │   ├── llm_providers/ # Individual provider implementations
│       │   │   ├── anthropic.py
│       │   │   ├── deepseek.py
│       │   │   ├── gemini.py
│       │   │   ├── groq.py
│       │   │   ├── ollama.py
│       │   │   └── openai.py
│       │   └── shared/        # Shared utilities and data types
│       │       ├── data_types.py
│       │       ├── model_router.py
│       │       ├── utils.py
│       │       └── validator.py
│       ├── molecules/         # Higher-level functionality
│       │   ├── ceo_and_board_prompt.py
│       │   ├── list_models.py
│       │   ├── list_providers.py
│       │   ├── prompt.py
│       │   ├── prompt_from_file.py
│       │   └── prompt_from_file_to_file.py
│       ├── server.py          # MCP server implementation
│       └── tests/             # Test directory
│           ├── atoms/         # Tests for atoms
│           │   ├── llm_providers/
│           │   └── shared/
│           └── molecules/     # Tests for molecules
│               ├── test_ceo_and_board_prompt.py
│               ├── test_list_models.py
│               ├── test_list_providers.py
│               ├── test_prompt.py
│               ├── test_prompt_from_file.py
│               └── test_prompt_from_file_to_file.py
└── ultra_diff_review/         # Diff review outputs

Getting Your Bearings

When you're diving into this codebase, here's a quick way to get oriented:

  1. Check out this README (you're already here!)
  2. Peek at the pyproject.toml for dependencies
  3. Run git ls-files or mise run tree to see the full structure

It's actually pretty straightforward once you get the hang of it!

Reasoning Effort with OpenAI o‑Series

For OpenAI o‑series reasoning models (o4-mini, o3-mini, o3) you can control how much internal reasoning the model performs before producing a visible answer.

Append one of the following suffixes to the model name (after the provider prefix):

  • :low   – minimal internal reasoning (faster, cheaper)
  • :medium – balanced (default if omitted)
  • :high  – thorough reasoning (slower, more tokens)

Examples:

  • openai:o4-mini:low
  • o:o4-mini:high

When a reasoning suffix is present, just‑prompt automatically switches to the OpenAI Responses API (when available) and sets the corresponding reasoning.effort parameter. If the installed OpenAI SDK is older, it gracefully falls back to the Chat Completions endpoint and embeds an internal system instruction to approximate the requested effort level.

Thinking Tokens with Claude

The Anthropic Claude model claude-3-7-sonnet-20250219 supports extended thinking capabilities using thinking tokens. This allows Claude to do more thorough thought processes before answering.

You can enable thinking tokens by adding a suffix to the model name in this format:

  • anthropic:claude-3-7-sonnet-20250219:1k - Use 1024 thinking tokens
  • anthropic:claude-3-7-sonnet-20250219:4k - Use 4096 thinking tokens
  • anthropic:claude-3-7-sonnet-20250219:8000 - Use 8000 thinking tokens

Notes:

  • Thinking tokens are only supported for the claude-3-7-sonnet-20250219 model
  • Valid thinking token budgets range from 1024 to 16000
  • Values outside this range will be automatically adjusted to be within range
  • You can specify the budget with k notation (1k, 4k, etc.) or with exact numbers (1024, 4096, etc.)

Thinking Budget with Gemini

The Google Gemini model gemini-2.5-flash-preview-04-17 supports extended thinking capabilities using thinking budget. This allows Gemini to perform more thorough reasoning before providing a response.

You can enable thinking budget by adding a suffix to the model name in this format:

  • gemini:gemini-2.5-flash-preview-04-17:1k - Use 1024 thinking budget
  • gemini:gemini-2.5-flash-preview-04-17:4k - Use 4096 thinking budget
  • gemini:gemini-2.5-flash-preview-04-17:8000 - Use 8000 thinking budget

Notes:

  • Thinking budget is only supported for the gemini-2.5-flash-preview-04-17 model
  • Valid thinking budget range from 0 to 24576
  • Values outside this range will be automatically adjusted to be within range
  • You can specify the budget with k notation (1k, 4k, etc.) or with exact numbers (1024, 4096, etc.)

Resources

About the Author

Built with enthusiasm by Jarad DeLorenzo. If you're into AI-powered development and want to see more projects like this, drop by my site!

Metadata

Release files for just-prompt 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for just-prompt 1.0.0
File Size Uploaded Provenance
just_prompt-1.0.0.tar.gz 34.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for just-prompt 1.0.0
File Interpreter ABI Platform
just_prompt-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 81.8 kB

Release files / just_prompt-1.0.0.tar.gz

Download URL just_prompt-1.0.0.tar.gz
Size 34.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8b16b4f02cda752b754233eccc6103d56d6287ff251af14610eaf2788e0d8b60
BLAKE2b-256 checksum
How to use checksums
f7b523090405df9a8a88944dcaaf2d20e72a1bcf37ac11ffd7c96850af172cef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Release files / just_prompt-1.0.0-py3-none-any.whl

Download URL just_prompt-1.0.0-py3-none-any.whl
Size 47.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4c4334c3548dda7ae7772bc1641c1a774df4b3c03bb7d25f92de2b8185ad339b
BLAKE2b-256 checksum
How to use checksums
4a0bfc82f734b2c210b744ac253293a5408863850e54ee85e2919e8e1313a366
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Security for just-prompt 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page