RegexForge
regexforge
MCP-сервер (Model Context Protocol), который синтезирует регулярные выражения промышленного уровня на основе размеченных примеров. Никаких LLM во время обслуживания — чистый символьный синтез на основе банка шаблонов с резервным выводом классов символов. Каждый ответ включает матрицу проверки и аудит риска возврата (backtracking).
Транспорт MCP: HTTP (потоковый) · Версия протокола:
2024-11-05Эндпоинт MCP:
https://regexforge.jason-12c.workers.dev/mcpМанифест MCP: https://regexforge.jason-12c.workers.dev/.well-known/mcp.json
Инструмент MCP
regexforge предоставляет один инструмент MCP. ИИ-клиент (Claude Desktop, Cline, Continue, Cursor или любой агент с поддержкой MCP) вызывает его так же, как и любой другой инструмент MCP — через tools/call по протоколу JSON-RPC 2.0.
regexforge_synth
Синтезируйте проверенное в боях регулярное выражение на основе размеченных примеров.
Схема входных данных (что предоставляет модель):
{
"type": "object",
"required": ["examples"],
"properties": {
"description": {
"type": "string",
"description": "Optional natural-language description of the target pattern. Used only for tie-breaking when multiple templates fit."
},
"examples": {
"type": "array",
"minItems": 2,
"maxItems": 100,
"items": {
"type": "object",
"required": ["text", "match"],
"properties": {
"text": { "type": "string", "maxLength": 2048 },
"match": { "type": "boolean", "description": "true if the regex should match this string; false if it should NOT match." }
}
}
}
}
}Схема выходных данных:
{
"regex": "string",
"flags": "string",
"source": "template | char_class",
"template_name": "string (if source=template)",
"test_matrix": [
{ "text": "string", "expected": "boolean", "actual": "boolean", "pass": "boolean" }
],
"all_pass": "boolean",
"backtrack_risk": "none | low | high",
"backtrack_reasons": [ "string" ],
"candidates_considered": "integer",
"candidates_passing": "integer",
"notes": [ "string" ]
}Ошибки возвращают объекты ошибок JSON-RPC со структурированными рекомендациями по исправлению:
not_expressible(HTTP 422) — примеры подразумевают нерегулярный язык (сбалансированные скобки, подсчет и т. д.).no_credits(HTTP 402) — кошелек пуст, покупка через/v1/credits.missing_input(HTTP 400) — полеfixточно указывает, чего не хватает.
Подключение из клиентов MCP
Claude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"regexforge": {
"transport": {
"type": "http",
"url": "https://regexforge.jason-12c.workers.dev/mcp"
},
"headers": {
"Authorization": "Bearer YOUR_API_KEY_HERE"
}
}
}
}Получите API-ключ с помощью: curl -X POST https://regexforge.jason-12c.workers.dev/v1/keys (бесплатно, 50 кредитов при регистрации).
Python (официальный SDK mcp)
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
url = "https://regexforge.jason-12c.workers.dev/mcp"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
async with streamablehttp_client(url, headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
result = await session.call_tool(
"regexforge_synth",
arguments={
"description": "ISO 8601 date like 2024-12-30",
"examples": [
{"text": "2024-12-30", "match": True},
{"text": "2023-01-01", "match": True},
{"text": "12/30/2024", "match": False},
{"text": "abc", "match": False},
],
},
)
print(result.content[0].text)TypeScript (официальный @modelcontextprotocol/sdk)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://regexforge.jason-12c.workers.dev/mcp"),
{ requestInit: { headers: { Authorization: "Bearer YOUR_API_KEY" } } }
);
const client = new Client({ name: "demo", version: "1.0.0" }, { capabilities: {} });
await client.connect(transport);
const res = await client.callTool({
name: "regexforge_synth",
arguments: {
description: "ethereum wallet address",
examples: [
{ text: "0x8ABCE477e22B76121f04c6c6a69eE2e6a12De53e", match: true },
{ text: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", match: true },
{ text: "0x123", match: false },
{ text: "xyz", match: false },
],
},
});
console.log(res.content[0].text);Raw JSON-RPC через HTTP
Если вы предпочитаете работать с протоколом напрямую:
# 1. initialize
curl -X POST https://regexforge.jason-12c.workers.dev/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize"}'
# 2. list tools
curl -X POST https://regexforge.jason-12c.workers.dev/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_KEY" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# 3. call the tool
curl -X POST https://regexforge.jason-12c.workers.dev/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_KEY" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"regexforge_synth","arguments":{"examples":[{"text":"2024-12-30","match":true},{"text":"abc","match":false}]}}}'Как это работает внутри
Сопоставление с банком шаблонов — тестирует ~65 предварительно скомпилированных, проверенных в боях шаблонов регулярных выражений (email, UUID v4, ISO-дата, semver, ETH-адрес, телефон США, SHA-256, base64, почтовый индекс США, MAC-адрес и т. д.) на каждом примере. Любой шаблон, который правильно классифицирует все примеры, является кандидатом.
Разрешение конфликтов — если подходит несколько шаблонов, выбирается тот, чьи ключевые слова лучше всего соответствуют
descriptionвызывающего абонента, с дополнительным выбором по длине шаблона.Резервный вывод классов символов — если ни один шаблон не подходит, извлекаются самый длинный общий префикс и суффикс из положительных примеров, середина выводится как объединение классов символов
[a-z0-9-]{n,m}с ограничениями по длине, затем проверяется, что синтезированный шаблон отклоняет все отрицательные примеры.Возврат с доказательством — ответ включает полную
test_matrix, чтобы вызывающий абонент (модель) мог убедиться, что каждый пример классифицируется правильно, прежде чем использовать регулярное выражение в коде.Аудит возврата (backtracking) — статический проход по возвращенному регулярному выражению помечает вложенные квантификаторы, обратные ссылки и lookaround, которые могут вызвать катастрофический возврат.
Все детерминировано. Никаких вызовов LLM во время обслуживания. Типичная задержка <100 мс.
Пример рабочего процесса агента
ИИ-агент, пишущий код, которому нужно парсить строки, предоставленные пользователем, вызывает regexforge_synth вместо того, чтобы генерировать регулярное выражение самостоятельно (в чем более слабые модели постоянно ошибаются):
Модель думает: "Мне нужно распарсить этот шаблон SKU-1234-AB. Лучше не галлюцинировать регулярное выражение."
Вызывает:
regexforge_synth({ description: "SKU типа SKU-1234-AB", examples: [<3 положительных, 5 отрицательных>] })Получает:
{ regex: "^SKU-[-0-9A-Z]{7}$", all_pass: true, backtrack_risk: "none", source: "char_class" }Вставляет
"^SKU-[-0-9A-Z]{7}$"в свой код с уверенностью, что каждый известный пример классифицируется правильно.
Это один вызов инструмента вместо: (а) LLM пишет регулярное выражение, (б) LLM пишет тестовые примеры, (в) LLM имитирует выполнение регулярного выражения, (г) LLM сомневается и переписывает, … что расходует в 10 раз больше токенов и все равно приводит к ошибкам.
Авторизация и цены
Программная выдача ключей:
POST /v1/keys→{ key, credits: 50 }. Без email. Без капчи. Агенты создают свои собственные ключи.Стоимость за вызов: $0.002. Пакеты: стартовый ($5 / 2,500), масштабный ($50 / 30k), оптовый ($500 / 350k).
Оплата (автономно агентом):
POST /v1/credits { "pack": "starter" }возвращает реальный URL Stripe Checkout + заголовки x402 USDC-on-Base. Завершите оплату, затемPOST /v1/credits/verify { "session_id": "cs_..." }начислит кредиты на ключ.Каждый ответ об ошибке включает структурированное поле
fix, точно указывающее агенту, что нужно изменить.
Другие поверхности обнаружения (только для агентов, машиночитаемые)
Эндпоинт | Формат |
| Манифест плагина OpenAI |
| Манифест сервера MCP (инструменты + транспорт) |
| Стандарт |
| OpenAPI 3.1 |
| Машиночитаемые цены |
| Полный каталог кодов ошибок |
| Корневой индекс всего вышеперечисленного |
Реализация
Транспорт: HTTP потоковый (спецификация MCP
2024-11-05), JSON-RPC 2.0Развертывание: Cloudflare Workers (холодный старт <10 мс)
Построено на:
@walko/agent-microsaas— каркас, который обрабатывает транспорт MCP, манифесты обнаружения, авторизацию по bearer-ключу и реестр кредитов. Сам regexforge — это ~300 строк кода чистой логики синтеза.
Лицензия
Apache-2.0.
Related MCP Connectors
Jailbreak-proof AI guardrails. Automated Reasoning SMT solver, not an LLM. ZK proofs included.
Deterministic JSON repair, validate, example-gen, schema-coerce for agents. Zero LLM, sub-10ms.
Detects catastrophic-backtracking (ReDoS) regex risk via AST parsing, with JS-safe rewrites.
The WAF for agents. Pattern-based + heuristic firewall scans prompts, RAG documents, tool argume...