Skip to main content
Glama

regexforge

MCP-сервер (Model Context Protocol), который синтезирует регулярные выражения промышленного уровня на основе размеченных примеров. Никаких LLM во время обслуживания — чистый символьный синтез на основе банка шаблонов с резервным выводом классов символов. Каждый ответ включает матрицу проверки и аудит риска возврата (backtracking).


Инструмент 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}]}}}'

Как это работает внутри

  1. Сопоставление с банком шаблонов — тестирует ~65 предварительно скомпилированных, проверенных в боях шаблонов регулярных выражений (email, UUID v4, ISO-дата, semver, ETH-адрес, телефон США, SHA-256, base64, почтовый индекс США, MAC-адрес и т. д.) на каждом примере. Любой шаблон, который правильно классифицирует все примеры, является кандидатом.

  2. Разрешение конфликтов — если подходит несколько шаблонов, выбирается тот, чьи ключевые слова лучше всего соответствуют description вызывающего абонента, с дополнительным выбором по длине шаблона.

  3. Резервный вывод классов символов — если ни один шаблон не подходит, извлекаются самый длинный общий префикс и суффикс из положительных примеров, середина выводится как объединение классов символов [a-z0-9-]{n,m} с ограничениями по длине, затем проверяется, что синтезированный шаблон отклоняет все отрицательные примеры.

  4. Возврат с доказательством — ответ включает полную test_matrix, чтобы вызывающий абонент (модель) мог убедиться, что каждый пример классифицируется правильно, прежде чем использовать регулярное выражение в коде.

  5. Аудит возврата (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, точно указывающее агенту, что нужно изменить.


Другие поверхности обнаружения (только для агентов, машиночитаемые)

Эндпоинт

Формат

GET /.well-known/ai-plugin.json

Манифест плагина OpenAI

GET /.well-known/mcp.json

Манифест сервера MCP (инструменты + транспорт)

GET /llms.txt

Стандарт llms.txt

GET /openapi.json

OpenAPI 3.1

GET /v1/pricing

Машиночитаемые цены

GET /v1/errors

Полный каталог кодов ошибок

GET /

Корневой индекс всего вышеперечисленного


Реализация

  • Транспорт: HTTP потоковый (спецификация MCP 2024-11-05), JSON-RPC 2.0

  • Развертывание: Cloudflare Workers (холодный старт <10 мс)

  • Построено на: @walko/agent-microsaas — каркас, который обрабатывает транспорт MCP, манифесты обнаружения, авторизацию по bearer-ключу и реестр кредитов. Сам regexforge — это ~300 строк кода чистой логики синтеза.

Лицензия

Apache-2.0.

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/walkojas-boop/regexforge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server