Продукт

Интеграция с клиентами MCP

PromptFlowEngine поддерживает Model Context Protocol, поэтому любой клиент MCP (режим агента GitHub Copilot, Claude Desktop, Claude Code, Cursor или ваш собственный агент) может вызывать движок как инструмент. Ваш ассистент сам проверяет, реструктурирует и маскирует промпты как часть своей работы, а не вы вручную.

О терминах: вы устанавливаете сервер MCP (@promptflow/mcp-server v2.1.0, имя сервера promptflow-engine). Подключающийся к нему AI-инструмент — клиент MCP.

Настройка Claude Code, Windsurf и Gemini CLI, пример клиента на TypeScript и разбор неполадок: Подключение PromptFlowEngine.

Как подключиться

Подключение
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

Транспорт — только stdio. Сервер работает как дочерний процесс клиента на вашем компьютере, читает только полученные аргументы и не выполняет сетевых вызовов.

Аутентификация

Не требуется и не поддерживается: нет ключей API, учётных записей и токенов. Доступ определяется вашей операционной системой, потому что с сервером по стандартным вводу и выводу может общаться только запущенный вами процесс. Размещённого или HTTP-эндпоинта MCP нет; для удалённого использования вызывайте HTTP API.

Настройка

Соберите из клона репозитория PromptFlowEngine (публикация в npm ещё впереди) и укажите клиенту 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 и другие клиенты
{
  "mcpServers": {
    "promptflow": { "command": "node", "args": ["/absolute/path/to/checkout/packages/mcp-server/dist/bin.js"] }
  }
}

Расширение для VS Code поставляется с тем же сервером и записывает первую конфигурацию за вас.

ПеременнаяПо умолчаниюНазначение
PROMPTFLOW_MCP_MAX_PROMPT_CHARS100000Максимум символов в каждом текстовом аргументе (жёсткий предел 2 000 000).
PROMPTFLOW_MCP_LOGне заданоdebug записывает в stderr имя инструмента, размер ввода, результат и длительность. Содержимое — никогда.

Возможности: инструменты (19)

ИнструментОписание
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.

Все инструменты помечены как только для чтения и идемпотентные. Первые одиннадцать сохраняют поля результатов из расширения 1.5.x, поэтому существующие конфигурации агентов продолжают работать.

Ресурсы и промпты

  • promptflow://rules: каталог правил, измерения и штрафы оценки.
  • promptflow://models: модели, кодировки токенов и справочные цены.
  • Промпт review-prompt: просит ассистента оценить и оптимизировать промпт, который передаётся как данные внутри тегов.

Пример

В чате с агентом попросите обычными словами, а клиент выберет инструмент:

вы
Use promptflow to restructure this before you start:
"fix login issue and make google login work and don't break anything"
tools/call, отправляемый клиентом
{
  "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 }
}

Чтобы попробовать без клиента, подайте JSON-RPC в процесс через конвейер:

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

Ошибки и безопасность

  • Аргументы проверяются по схеме. Неверные или слишком большие аргументы возвращают ошибку инструмента (isError) с указанием причины, а не ошибку протокола, чтобы агент мог исправиться и повторить попытку.
  • Ни один инструмент не возвращает обнаруженные значения секретов: результаты по чувствительным данным содержат только категории и места.
  • Текст промпта, переданный инструменту, считается данными. Сервер никогда его не выполняет, а шаблон review-prompt оборачивает его в теги, прежде чем отдать модели.
  • У сервера нет файловых, shell- или сетевых инструментов, поэтому агент, подвергшийся инъекции в промпте, не может с его помощью ни до чего добраться.