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.

Une précision de vocabulaire : ce que vous installez est un serveur MCP (@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

connexion
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 read

Le 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 :

shell
pnpm --filter @promptflow/engine build && pnpm --filter @promptflow/mcp-server build
VS Code / Copilot: .vscode/mcp.json
{
  "servers": {
    "promptflow": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/checkout/packages/mcp-server/dist/bin.js"]
    }
  }
}
Claude Desktop, Cursor et autres clients
{
  "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’environnementValeur par défautRôle
PROMPTFLOW_MCP_MAX_PROMPT_CHARS100000Nombre maximal de caractères par argument texte (plafond absolu 2 000 000).
PROMPTFLOW_MCP_LOGnon définiedebug é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)

OutilDescription
optimize_promptOptimize 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_pipelineRun 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_promptRemove exact duplicate sentences and extra whitespace without rewriting any wording.
validate_promptCheck 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_tokensCount 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_promptDetect intent, task type, technical domain, requested output, requirements, and entities (languages, frameworks, file paths, identifiers).
extract_entitiesExtract languages, frameworks, libraries, cloud platforms, services, technologies, file paths, identifiers, URLs, and commands.
summarize_contextExtractive summary: the first N unique, non-empty sentences of a context block, in order. Does not rank or rewrite.
score_promptScore 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_promptFull 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_promptsCompare two prompts: token and estimated cost delta, quality delta per dimension, and which findings were resolved or introduced.
scan_prompt_securityPrompt-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_dataScan text for credentials, cloud secrets, and PII with local deterministic detectors. Returns offsets and per-category counts, never the sensitive values.
sanitize_promptReplace 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_promptTurn 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_payloadConvert 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_costSimulate 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_budgetMeasure 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_testsRun 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 :

vous
Use promptflow to restructure this before you start:
"fix login issue and make google login work and don't break anything"
tools/call envoyé par le client
{
  "name": "restructure_prompt",
  "arguments": { "prompt": "fix login issue and make google login work and don't break anything" }
}
résultat (abrégé)
{
  "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 :

shell
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.js

Erreurs 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-prompt l’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.