promethic
Promethic is a prompt library: store versioned prompts where you set the model, switch models, and dial API-only settings (reasoning, verbosity, and other…
What it can do
- Promethic List Prompts: List the user's prompts (cursor-paginated). Returns each prompt's id, name, description (one-sentence capability summary of the current version), outputModality ("text" | "imag
- Promethic Get Prompt: Fetch a prompt by promptId, including its current version's promptText and modelSettingsJson. Treats the prompt as its current version (other versions are a user-facing GUI conce
- Promethic List Records: List finalized records (cursor-paginated). Filter by promptId and/or source. Most-recent-first. Records with images return imageStoredPaths as a typed array (not a JSON string)
What data it sees
Do you need an account
No: the server works without sign-in
Promethic is a prompt library: store versioned prompts where you set the model, switch models, and dial API-only settings (reasoning, verbosity, and other dials). Text, image, and JSON. Edit the output as you work; it tracks those edits and successful copy/download. Refine proposes the next version. Available as a Mac and Windows desktop app, iOS, web, and MCP tools. Standard $10/mo includes $10 at-cost across Grok, Claude, ChatGPT, and Gemini; BYOK for local storage. Hosted MCP: https://mcp.getpromethic.com/v1
Server tool list (26)
Raw names from tools/list. Only developers need these.
| promethic_list_prompts | List the user's prompts (cursor-paginated). Returns each prompt's id, name, description (one-sentence capability summary of the current version), outputModality ("text" | "image" | "json" — defaults to "text" when modelSettingsJson is absent/unparseable), folderId, archivedAtUtc, and updatedAtUtc. The description + outputModality together are enough to decide whether to invoke; agents can call run_prompt directly from a list_prompts response without an intermediate get_prompt. The response also carries folders[] — the folder catalog {folderId, name}, INCLUDING empty folders — so a folderId can be resolved to a name and any folder can be targeted by create_prompt/update_prompt. A key restricted to specific prompts sees only the folders those prompts sit in. ARCHIVED prompts are EXCLUDED unless includeArchived is true; an archived prompt is hidden from discovery but still fetchable and runnable by id. |
| promethic_get_prompt | Fetch a prompt by promptId, including its current version's promptText and modelSettingsJson. Treats the prompt as its current version (other versions are a user-facing GUI concern — use list_versions / switch_current_version when the user explicitly asks for a different version). Response also includes currentVersionStatus ('ok' or 'missing') so agents can detect orphaned currentVersionId without inferring from currentVersion === null. |
| promethic_list_records | List finalized records (cursor-paginated). Filter by promptId and/or source. Most-recent-first. Records with images return imageStoredPaths as a typed array (not a JSON string) and outputText is null (the model output for image runs is the image, retrievable via get_run_image during the run or the records image endpoint after). |
| promethic_get_record | Fetch a single record by recordId. Returns full detail: inputText, outputText, notes, promptName, modelId, token counts (inputTokens/outputTokens/reasoningTokens), costMilliCents, revisionCount, imageCount, isOneShot, and the complete turn-by-turn history (turns[]). turns[] reconstructed from the delta chain: turn kind='run' (original, index 0), 'revision' (each /revise call, index 1..N), 'edit' (user output correction, always last). outputText is null for image records (images are in imageStoredPaths). Use list_records to browse; use get_record when you have a specific recordId and need the full delta chain. |
| promethic_run_prompt | Call this when the user invokes a prompt by name. Distill the user's intent to its simplest direct expression as userInput — remove conversational scaffolding but do not prompt-engineer it. "Run Clay Cuties for a chameleon" → userInput "chameleon". "Clay Cuties: a stunning iridescent chameleon on a branch" → pass as-is. The Promethic prompt handles formatting and everything else. Image-modality prompts: inline image content blocks may not be visible in all MCP hosts (some place them inside a collapsed panel). To reliably surface the image, fetch the URL from promethic_image_urls and present it through your host's file, attachment, or display mechanism — the URL is valid 5 minutes and requires no auth header. Runs a prompt as a new conversation. Streams output server-side. Requires `execute` scope. |
| promethic_revise_run | Modify, refine, or add to the current output. Use when the user refines the existing result ("make it less formal", "add a section on Rome", "more vibrant colors"). Start a fresh run_prompt when the user replaces what they want — look for replacement signals like "no", "instead", "actually do X". Pass the revision instruction verbatim. Requires runId (active run). Finalized runs are reopened transparently. Streams output server-side. Requires `execute` scope. |
| promethic_finalize_run | Promote an active run to a saved record. Idempotent (returns the same record) if the run already auto-finalized. `tag` attaches to an EDIT delta (only valid when `finalText` differs from the model's output) and should be a GENERALIZABLE rule/vibe that applies to other inputs (e.g. 'Less formal'), not a description of this diff — it feeds prompt refinement; for record-level labels use `notes`. Requires `execute` scope. |
| promethic_get_run_image | Fetch an image from an active (non-finalized) run by 0-based index. Returns the image as a base64 PNG in the tool result's content. Note: run_prompt already returns inline image content blocks AND a `promethic_image_urls` block with signed short-lived URLs — prefer those for the happy path. Use get_run_image only when the inline block was elided or you need a single image by index. For finalized records, use GET /api/v2/records/{recordId}/image?index={n} instead. Requires `execute` scope. |
| promethic_patch_record | Update mutable fields on a record the caller owns. Only the caller that created the record may patch it. Requires `execute` scope. RECORD TYPE MATTERS: Manual records (source='Manual', created by create_record): `notes`, `input`, `output` are freely editable with no delta created. `tag` and `fromTurn` are not applicable (invalid_request) — manual records are pure (input, output) seed-data pairs. All other records (App/API/Headless — from run_prompt or client apps): Any `output` change automatically creates or updates the single edit delta. IntermediateOutput = original model/revision output, set ONCE and IMMUTABLE. FinalCopiedOutput = desired output, mutable. SPECIAL CASE: if `output` equals the model's last returned output (IntermediateOutput of the existing edit delta), the edit delta is removed — you are reverting the correction. EditCount returns to 0. If `tag` is also provided in that reverting patch, tag_would_be_lost_on_revert is returned (the delta is being removed, so the tag has nothing to anchor — omit tag to revert cleanly). `tag` is an optional, GENERALIZABLE rule for the edit — write the vibe or top-level change that would apply across other inputs (e.g. 'Less formal', 'Remove em-dashes', 'Lead with the action item'), NOT a restatement of this specific diff (the before/after already captures what changed). It feeds the Refine-Prompt function, which also sees the before/after, so a high-level rule the prompt could adopt is far more useful than describing this one change. Without `output`: if an edit delta already exists tag-only update is allowed; if no delta exists yet tag_requires_output is returned — provide an output value to create a delta first. With `output` unchanged: if an edit delta already exists tag-only update is allowed (relabeling the existing edit); if no delta exists yet tag_requires_distinct_output is returned — provide a distinct output value. Use `notes` for record-level labels with no edit correction. REVERT: `fromTurn` restores the record to its state at turn N — reads delta[N].IntermediateOutput as target output and soft-deletes later deltas. Turn 0 = state before the first surviving delta. Mutually exclusive with `output` and `tag`; can combine with `notes` and `input`. |
| promethic_create_prompt | Create a new prompt with its initial version. promptText + modelSettings are top-level (mirrors create_version). Requires `write` scope. |
| promethic_update_prompt | Patch a prompt's metadata (name, abbreviation, folderId, exposeAsMcpTool). Capability description lives on the version — use update_version. Each field is optional; omitted fields are unchanged. Requires `write` scope. |
| promethic_delete_prompt | Soft-delete a prompt. The prompt is marked deleted but kept in the DB; can be hard-deleted by sweep later. Requires `write` scope. |
| promethic_list_versions | List versions of a prompt (cursor-paginated). |
| promethic_get_version | Fetch a single prompt version by id. |
| promethic_create_version | Append a new version to an existing prompt. Set setAsCurrent=true for atomic create+switch. Requires `write` scope. If descriptionMode is omitted or 0 (Auto), description starts as "" and updates asynchronously once the capability-description worker fires (typically within a minute). To set description immediately and prevent the worker from overwriting it, pass description + descriptionMode:1. |
| promethic_update_version | Patch any mutable field on a version: promptText (the template body), settingsPatch (merge a model-settings fragment) or modelSettingsJson (replace the whole model config — see get_catalog for the schema), versionDescription (human label), description (agent-facing capability summary), descriptionMode. Versions are mutable by design — edit in place when iterating on a prompt; explicitly call create_version when you want a checkpoint for audit. RFC 7396 merge semantics — omitted fields are unchanged; explicit null clears nullable string fields (not modelSettingsJson — see field description). If promptText changes and the version is in Auto mode, the capability-description worker fires automatically. Requires `write` scope. |
| promethic_switch_current_version | Set the prompt's currentVersionId. The target version must already exist on the prompt. Requires `write` scope. |
| promethic_delete_version | Soft-delete a version. If it is the prompt's current version the server auto-switches `currentVersionId` to the lowest remaining versionNumber and returns `newCurrentVersionId` — no manual `switch_current_version` needed. Returns `cannot_delete_only_version` if it is the sole remaining version. Requires `write` scope. |
| promethic_delete_record | Delete an API-key-owned record (sweep job hard-deletes later). Only the API key that created the record may delete it. Requires `execute` scope (records are execute-axis, not write). |
| promethic_create_record | Create a finalized record on a prompt from agent-supplied input + output. No LLM call, no spend, no deltas — semantically equivalent to a desktop-UI manual record (Source = Manual). Use this to seed a prompt with training examples before running Generate Prompt on the desktop (e.g. accumulate ~10 user-edited drafts on a 'voice prompt' before generating). Per-prompt soft cap (default 1000). Text-modality only in V1 (image / json prompts return `manual_record_modality_not_supported`). Requires `execute` scope + per-prompt execute grant. For duplicate prevention on retries: check `list_records` for a matching input before retrying, or use the same `idempotencyKey` parameter. |
| promethic_upload_attachment | Upload a file as a prompt attachment via inline bytes_base64 (chunked uploads reserved for V2). Max 10 MB. Requires `write` scope. Dedup: if an identical file (same filename AND same content hash) already exists on this prompt, the existing record is returned — no duplicate is created. Same filename with different bytes creates a new entry (filename uniqueness is not enforced). Dedup is scoped to live rows only — re-uploading after delete creates a fresh entry. |
| promethic_list_attachments | List a prompt's attachments. |
| promethic_get_attachment | Fetch an attachment's content. Returns kind=text|image with inline content. |
| promethic_delete_attachment | Soft-delete an attachment + refund storage. Requires `write` scope. |
| promethic_get_catalog | Fetch the model catalog. Without model_id: returns a slim list of all models (model_id, display_name, capabilities, costs, deprecated_at) plus recommended_defaults — use this to pick a model. With model_id: returns that model's full resolved options array so you can build a custom modelSettingsJson. Response shape without model_id: { catalog: { models: [...], recommended_defaults: {...} } }. Response shape with model_id: { catalog: { model: { model_id, display_name, options: [...] } } }. Call once per session and cache — catalog changes only on backend deploys. |
| promethic_report_issue | Report a bug or unexpected behavior, or suggest a feature or improvement, directly to the Promethic development team. Submit one issue per call — if you have multiple bugs to report, call report_issue once for each. Use this proactively whenever you encounter confusing tool responses, missing capabilities, inconsistent behavior, or anything that would make Promethic more useful for agents. You don't need to wait to be asked — if something seems wrong or could be better, report it. All reports are ingested into a triage queue reviewed by automated agents and the development team. Describe issues in terms of tool names, parameter values, and expected vs. actual behavior — do not include prompt content, user inputs, or patient data. Specific reports with reproduction steps have the most impact. Requires `execute` scope. |