Produit
Intégration avec un client MCP
PromptFlowEngine parle le Model Context Protocol : n’importe quel client MCP (mode agent de GitHub Copilot, Claude Desktop, Claude Code, Cursor ou votre propre agent) peut donc appeler le moteur comme des outils. Votre assistant peut alors vérifier, restructurer et nettoyer un prompt comme une étape de son propre travail, au lieu que vous le fassiez à la main.
@promptflow/mcp-server v2.1.0, nom de serveur promptflow-engine). Votre outil d’IA est le client MCP qui s’y connecte.Configuration de Claude Code, Windsurf et Gemini CLI, exemple de client TypeScript et dépannage : Connecter PromptFlowEngine.
Comment la connexion s’établit
MCP client (Copilot, Claude, Cursor, your agent)
│ spawns a local process and talks JSON-RPC over stdio
▼
promptflow-mcp (node packages/mcp-server/dist/bin.js)
│ validates arguments, runs the engine in-process
▼
@promptflow/engine no network, no model calls, no files readLe transport est stdio uniquement. Le serveur s’exécute sur votre machine comme processus enfant du client, ne lit que les arguments qu’on lui transmet et ne fait aucun appel réseau.
Authentification
Aucune n’est nécessaire ni prise en charge : pas de clé API, de compte ni de token. L’accès est contrôlé par votre système d’exploitation, puisque seul un processus que vous lancez peut communiquer avec le serveur via son entrée et sa sortie standard. Il n’existe aucun point d’accès MCP hébergé ou HTTP ; pour un usage à distance, appelez plutôt l’API HTTP.
Configurer
Compilez-le depuis une copie du dépôt PromptFlowEngine (la publication sur npm est en attente), puis faites pointer votre client vers dist/bin.js :
pnpm --filter @promptflow/engine build && pnpm --filter @promptflow/mcp-server build{
"servers": {
"promptflow": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/checkout/packages/mcp-server/dist/bin.js"]
}
}
}{
"mcpServers": {
"promptflow": { "command": "node", "args": ["/absolute/path/to/checkout/packages/mcp-server/dist/bin.js"] }
}
}L’extension VS Code intègre le même serveur et écrit la première entrée pour vous.
| Variable d’environnement | Valeur par défaut | Rôle |
|---|---|---|
PROMPTFLOW_MCP_MAX_PROMPT_CHARS | 100000 | Nombre maximal de caractères par argument texte (plafond absolu 2 000 000). |
PROMPTFLOW_MCP_LOG | non définie | debug écrit sur stderr le nom de l’outil, la taille de l’entrée, le résultat et la durée. Jamais le contenu. |
Fonctionnalités : outils (19)
| Outil | Description |
|---|---|
optimize_prompt | Optimize a prompt with deterministic, verified transforms (duplicates, filler, optional sections). Every candidate is checked to preserve all sentences, requirements, code, and variables; the original is kept if nothing is better. Returns the selected prompt, token savings, quality score, and what changed. |
optimize_prompt_pipeline | Run the optimization pipeline and return per-stage results plus token and estimated cost metrics, in the result shape used by the PromptFlow VS Code extension. |
compress_prompt | Remove exact duplicate sentences and extra whitespace without rewriting any wording. |
validate_prompt | Check a prompt for missing objective or output format, ambiguity, conflicting instructions, duplicates, prompt-injection patterns, secrets, and undelimited variables. isValid is false only when a critical issue exists. |
estimate_tokens | Count tokens and estimate input cost for a model. "exact" is true only for OpenAI models with a loaded tokenizer; other providers are approximate. Costs are estimates from a reference price table. |
analyze_prompt | Detect intent, task type, technical domain, requested output, requirements, and entities (languages, frameworks, file paths, identifiers). |
extract_entities | Extract languages, frameworks, libraries, cloud platforms, services, technologies, file paths, identifiers, URLs, and commands. |
summarize_context | Extractive summary: the first N unique, non-empty sentences of a context block, in order. Does not rank or rewrite. |
score_prompt | Score prompt quality 0-100: 100 minus a penalty per issue (critical 30, warning 10, info 3; capped at 50 with any critical issue), with per-dimension scores and suggestions. |
evaluate_prompt | Full quality report: overall score, grade, eight quality dimensions with the checks that failed, and every finding with why it matters and how to fix it. |
compare_prompts | Compare two prompts: token and estimated cost delta, quality delta per dimension, and which findings were resolved or introduced. |
scan_prompt_security | Prompt-injection risk (0-100, signature-based, with threat ids), sensitive-data counts by category, undelimited template variables, and destructive operations. Never returns detected secret values. |
scan_sensitive_data | Scan text for credentials, cloud secrets, and PII with local deterministic detectors. Returns offsets and per-category counts, never the sensitive values. |
sanitize_prompt | Replace detected sensitive data with placeholders such as [REDACTED_API_KEY]. Returns the sanitized text and counts, never the original values. Use before sending a prompt to an external model. |
restructure_prompt | Turn a loosely written request into a sectioned engineering prompt: Role, Objective, Context, Requirements, Constraints, Edge cases, Testing, Acceptance criteria, Expected output. Only sections with content appear. The author's clauses are kept and reordered; for software tasks, fixed engineering guidance chosen by intent and topic is added, and every line is labeled "prompt" or "engine" so additions can be reviewed. Set scaffold=false to reorganize without adding guidance. |
convert_structured_payload | Convert a JSON payload to TOON (Token-Oriented Object Notation) and say whether to use it. Returns token counts for pretty JSON, compact JSON and TOON, a round-trip check (the TOON must decode back to the same value), and the recommendation: "toon" only when it round-trips and saves at least 5 % over compact JSON, otherwise "json". Lossless or it keeps JSON. |
simulate_cost | Simulate what a prompt costs across models at a request volume, from catalog list prices (labelled simulated, never a bill). Optionally optimizes the prompt first and reports hypothetical savings. Flags models whose context window is too small. |
analyze_context_budget | Measure the context sources you intend to send with a prompt: tokens and share per source, context-window usage with an output reserve, sensitive data (categories and counts only), instruction-like text in retrieved sources, and duplicates. Reads only the text passed in; never reads files. |
run_prompt_tests | Run a regression suite against a prompt. Assertions check the prompt (contains, not_contains, matches, max_tokens, min_quality, no_finding, max_severity, has_variables, max_injection_risk, no_sensitive_data, output_format) and, when a case carries a recorded model response, the response (response_valid_json, response_has_keys, response_contains, response_max_chars). With baseline_prompt, also runs the suite on the baseline and lists cases that regressed. No model is called. |
Tous les outils sont annotés en lecture seule et idempotents. Les onze premiers conservent exactement les champs de résultat qu’ils avaient dans l’extension 1.5.x, si bien que les configurations d’agents existantes continuent de fonctionner.
Ressources et prompts
promptflow://rules: le catalogue de règles, les dimensions et les pénalités de notation.promptflow://models: modèles, encodages de tokens et prix de référence.- Prompt
review-prompt: demande à l’assistant d’évaluer et d’optimiser un prompt, celui-ci étant entouré de balises comme donnée.
Exemple
Dans un chat avec un agent, demandez en langage courant et le client choisit l’outil :
Use promptflow to restructure this before you start:
"fix login issue and make google login work and don't break anything"{
"name": "restructure_prompt",
"arguments": { "prompt": "fix login issue and make google login work and don't break anything" }
}{
"restructuredPrompt": "## Role\nAct as a senior software engineer.\n\n## Objective\nFix login issue and make Google login work.\n…",
"intent": "debugging",
"topics": ["authentication"],
"counts": { "prompt": 4, "engine": 20, "codebase": 0 }
}Pour l’essayer sans client, envoyez du JSON-RPC au processus par un tube :
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"cli","version":"1"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"estimate_tokens","arguments":{"prompt":"Hello, world!","model":"gpt-4o"}}}' \
| node packages/mcp-server/dist/bin.jsErreurs et sécurité
- Les arguments sont validés par un schéma. Des arguments invalides ou trop volumineux renvoient une erreur d’outil (
isError) avec la raison, et non une erreur de protocole, pour que les agents puissent corriger et réessayer. - Aucun outil ne renvoie les valeurs secrètes détectées : les résultats de données sensibles ne contiennent que des catégories et des positions.
- Le texte de prompt transmis à un outil est traité comme une donnée. Le serveur ne l’exécute jamais, et le modèle
review-promptl’entoure de balises pour le modèle de langage. - Le serveur n’a aucun outil de fichiers, de shell ou de réseau : un agent victime d’une injection de prompt ne peut donc s’en servir pour atteindre quoi que ce soit.