@restforge-dev/mcp-server
Official@restforge-dev/mcp-server
MCP (Model Context Protocol) сервер для фреймворка RESTForge. Предоставляет возможности RESTForge для ИИ-агентов (Claude Desktop, Cursor, Claude CLI и другие MCP-клиенты), чтобы агенты могли управлять RESTForge с помощью естественного языка без необходимости вручную вызывать команды CLI.
Требования
Node.js >= 18
npm >= 9
Для полного рабочего процесса настройки: PostgreSQL / MySQL / Oracle / SQLite, лицензионный ключ RESTForge
Related MCP server: Swagger MCP
Установка
npm install -g @restforge-dev/mcp-serverПосле установки команда restforge-mcp будет доступна в PATH.
Быстрый старт
1. Проверка установки
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | restforge-mcpВывод должен содержать список из 29 инструментов в доменах health_*, setup_*, codegen_* и runtime_*.
2. Регистрация в MCP-клиенте
Claude CLI (область пользователя, применяется ко всем проектам):
claude mcp add --transport stdio --scope user restforge -- restforge-mcpCursor (.cursor/mcp.json в корне проекта):
{
"mcpServers": {
"restforge": {
"command": "restforge-mcp"
}
}
}Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"restforge": {
"command": "restforge-mcp"
}
}
}3. Использование через естественный язык
В чате вашего ИИ-клиента введите запросы, например:
Setup a new RESTForge project at
d:/projects/api-testwith PostgreSQL on localhost:5432, licenseXXXX-XXXX-XXXX-XXXX
Generate a CRUD endpoint for the
customertable
Run my RESTForge server (агент генерирует скрипт запуска для выполнения пользователем)
Агент координирует соответствующие инструменты для выполнения запроса от начала до конца.
Доступные инструменты
29 инструментов, организованных по доменам. ИИ-агенты вызывают их через протокол MCP; конечные пользователи не вызывают их напрямую.
Домен Health (1 инструмент)
Инструмент | Описание |
| Дымовое тестирование транспорта MCP. Возвращает |
Домен Setup (9 инструментов)
Инструмент | Описание |
| Создание новой папки проекта для RESTForge |
| Установка |
| Генерация скелета конфигурации и примеров полезной нагрузки через |
| Запись |
| Чтение текущих значений из |
| Обновление отдельных полей в |
| Проверка лицензии и подключений к базе данных, redis и kafka |
| Получение JSON-схемы всех 63 параметров, доступных в |
| Получение содержимого шаблона |
Домен Codegen (13 инструментов)
Инструмент | Описание |
| Список всех таблиц в базе данных проекта (интроспекция в реальном времени) |
| Описание столбцов, первичного ключа и внешних ключей конкретной таблицы |
| Генерация JSON полезной нагрузки из таблицы базы данных |
| Проверка структуры и ограничений JSON полезной нагрузки |
| Проверка структуры полезной нагрузки панели управления |
| Сравнение JSON полезной нагрузки со схемой базы данных |
| Синхронизация JSON полезной нагрузки со схемой базы данных |
| Создание модуля эндпоинта на основе спецификации полезной нагрузки |
| Создание модуля панели управления на основе спецификации полезной нагрузки |
| Проверка SQL-запроса SELECT или WITH (CTE) через EXPLAIN в реальной базе данных |
| Получение каталога проверки полей (для обоснования ограничений полезной нагрузки) |
| Получение декларативного каталога запросов (для обоснования JSON запроса) |
| Получение каталога виджетов панели управления (для обоснования конфигурации панели) |
Домен Runtime (6 инструментов)
Инструмент | Описание |
| Сканирование |
| Сканирование |
| Проверка конфигурации + проверка файла PID + проверка доступности порта перед запуском |
| Проверка наличия файлов запуска ( |
| Генерация |
| Определение того, запущен ли сервер (хост или режим PM2) с опциональной проверкой работоспособности HTTP |
Принцип работы Runtime: ИИ-агенты никогда не запускают, не останавливают и не перезапускают сервер напрямую. Инструменты среды выполнения только генерируют скрипты запуска, которые пользователь выполняет самостоятельно, поэтому запущенный сервер существует независимо от сессии ИИ.
Совместимость
Этот MCP-сервер работает с любым MCP-клиентом, поддерживающим транспорт stdio, включая, но не ограничиваясь:
Claude Desktop
Claude CLI (Claude Code)
Cursor
Windsurf
Cline (расширение для VS Code)
Continue (расширение для VS Code/JetBrains)
Zed
Используемая модель (Claude, GPT, Gemini и т.д.) зависит от конфигурации клиента. Точность выбора инструментов выше при использовании передовых моделей, имеющих развитую поддержку вызова инструментов.
Репозиторий
Исходный код: https://github.com/restforge/restforge-mcp
Лицензия
MIT — см. LICENSE.md.
Available Tools
29 toolscodegen_create_dashboardCreate Dashboard ModuleADestructive
Generate a multi-widget dashboard endpoint module from a payload spec by wrapping restforge-cli dashboard. URL pattern produced: POST /api/{project}/{name}/dashboard.
Dashboards differ structurally from CRUD endpoints: there is no table, no fieldValidation, no CRUD actions. The payload declares a 'widgets' array — each widget owns SQL aggregation queries that are embedded into the generated module file and executed in parallel at request time, returning a JSON envelope keyed by widget id.
This tool is DESTRUCTIVE: it spawns the CLI which writes / overwrites files in 'src/modules/.js' and 'src/modules//.js', plus 'metadata//.json' and updates '.restforge/projects.json'. Single-call semantics: the tool always executes; there is no preview mode. Internally the tool always passes '--force=true' to the CLI to bypass the CLI's interactive y/N readline prompt (which would deadlock in a no-TTY subprocess).
Safety net: when the CLI overwrites an existing dashboard module, it FIRST renames the previous version to '.archive.NNN' (NNN is a sequential generation number starting at 001) inside the same folder. Rollback by restoring the most recent archive is always possible.
AI responsibility — IMPORTANT: because this tool always executes and may overwrite generated files, you MUST confirm intent with the user in plain language BEFORE invoking the tool. You do NOT need to detect file conflicts programmatically — the CLI handles that and the archive mechanism keeps the previous version safe. Just confirm intent. Examples of good confirmation phrasing in user-facing chat:
"Saya akan generate dashboard di project . Kalau modul lama sudah ada, versi sebelumnya akan disimpan sebagai '.archive.NNN'. Lanjut?"
"I will generate under project . Existing files will be archived as .archive.NNN before being overwritten. Proceed?"
USE WHEN:
The user asks to generate, create, or scaffold a dashboard endpoint, multi-widget aggregator, or analytics endpoint (e.g. "buatkan dashboard X di project Y", "generate dashboard sales", "scaffold dashboard inbound dengan payload Z")
The user mentions "dashboard", "widget aggregator", "multi-widget", "POST .../dashboard", or terms like "donut breakdown", "metric card", "sparkline" in the context of generating an endpoint
The user has authored a payload file with a 'widgets' array (not a CRUD 'tableName' shape) and wants to materialise it as a runnable endpoint
Pertanyaan dalam bentuk: "buatkan dashboard X di project Y", "generate dashboard sales", "scaffold dashboard inbound dengan payload Z"
The user mentions the URL pattern POST /api///dashboard and wants to register it as runnable code
The user explicitly references dashboard concepts: scalar collapse rules, widget id, query versus queries, params contract, file:query/*.sql references inside widgets
After 'codegen_validate_payload' confirmed a dashboard-shape payload — this is the natural follow-up that turns it into runnable code
The user asks to regenerate an existing dashboard after the payload changed (overwrite + archive flow handled by the CLI)
DO NOT USE FOR:
Generating a CRUD endpoint (payload has 'tableName', 'fieldName', 'action') -> use 'codegen_create_endpoint'
Generating the payload JSON itself from a database table -> use 'codegen_generate_payload' (note: codegen_generate_payload targets CRUD payloads — dashboard payloads are typically authored manually)
Validating a payload before generation -> use 'codegen_validate_payload'
Inspecting per-column differences between payload and database -> use 'codegen_diff_payload'
Syncing payload changes back into existing payload files after schema drift -> use 'codegen_sync_payload'
Looking up the field validation catalog (dashboards do not have field validation) -> use 'codegen_get_field_validation_catalog' only if discussing CRUD payload fields
Looking up the query declarative catalog (dashboards have their own query structure with widgets[].query and widgets[].queries) -> use 'codegen_get_query_declarative_catalog' only if discussing CRUD payload queries
Generating a processor (Kafka consumer, etc.) — out of scope; the CLI has separate 'processor' subcommand not covered by this MCP server yet
Deleting a dashboard or project — out of scope; the user must run 'npx restforge-cli drop' manually
Changing widget visual presentation (widgetType, layout, color, title, subtitle) — those are frontend concerns and forbidden in the dashboard payload (separation of concerns); they belong in the frontend code, not in this generator
Cross-reference: this tool is sibling of 'codegen_create_endpoint'. Both generate runnable code from payload JSON, but they consume different payload shapes (CRUD vs dashboard) and produce different artefacts (full module + model vs single dashboard module with embedded SQL).
Preconditions:
The project must have restforgejs installed in node_modules.
The payload file must exist at /payload/.json before calling this tool.
The payload must follow the dashboard schema: a 'widgets' array (NOT a CRUD payload with 'tableName'). The CLI's DashboardValidator rejects payloads that mix shapes, declare forbidden frontend fields (widgetType, layout, title, subtitle, color), have widgets without 'id', have duplicate widget ids, declare both 'query' AND 'queries' in the same widget, declare neither, or use placeholders not declared in 'params'.
The dashboard name MUST start with 'dash-' prefix (e.g. dash-sales, dash-inbound). The prefix is required by the CLI and becomes part of the URL segment.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "the dashboard generator", "validate the payload first", "draft the payload first").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
This tool is destructive: it can overwrite an existing dashboard module file. BEFORE invoking this tool, ALWAYS confirm with the user in plain language. Example: "Saya akan generate dashboard di project . Kalau modul lama sudah ada, akan ditimpa (versi sebelumnya disimpan sebagai .archive.NNN). Lanjut?". Do not detect conflicts programmatically; the CLI handles that and creates the archive.
After the tool runs, summarise the result. Surface the resulting endpoint URL (POST /api///dashboard) so the user knows where to call it. Read the CLI output and identify any archive activity using the '.archive.NNN' filesystem convention; surface to the user when archives exist.
If the user is confused about the difference between a dashboard and a CRUD endpoint: dashboards aggregate data from multiple SQL queries (widgets) and return a JSON envelope with widget keys; CRUD endpoints expose actions like /datatables, /read, /create, /update, /delete on a single table. Suggest the right tool based on what the user is actually building.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and a payload/ directory with the named payload file) | |
| project | Yes | Project name. Letters/numbers/dash/underscore, max 50 chars, cannot start or end with dash or underscore. Auto-lowercased by the CLI. Reserved names rejected by the CLI: src, lib, node_modules, config, utils, models, controllers, middleware, routes. | |
| name | Yes | Dashboard name. MUST start with 'dash-' prefix. The prefix is required by the CLI and becomes part of the URL segment (POST /api/{project}/{name}/dashboard). The full name is the URL slug, e.g. dash-sales, dash-inbound. The CLI rejects 'dash-' alone — there must be at least one character after the prefix. | |
| payload | Yes | Payload file name without the .json extension. The file must exist at <cwd>/payload/<payload>.json. Payload must follow the dashboard schema (with a `widgets` array; NOT a CRUD payload with `tableName`). | |
| database | No | Database type for the generated code. Default postgres. | |
| skipSqlValidation | No | Default false (CLI default). When true, skip SQL keyword validation in payload widget queries. Useful when the SQL fragments are intentional but the validator flags them as suspicious. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true; description elaborates on overwriting files, single-call semantics, no preview, internal --force flag, and archive mechanism for safety. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very long and includes extensive guidance, preconditions, and presentation notes. While well-structured, it sacrifices conciseness for completeness, which may overwhelm an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive, multiple dependencies, dashboard-specific behavior), the description thoroughly covers preconditions, file side effects, error handling, output URL, and AI usage guidelines. No output schema, but return values are described in presentation guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions. Description adds contextual value (e.g., name prefix requirement, database type defaults) beyond the schema, though not exhaustive for all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool generates a multi-widget dashboard endpoint module from a payload spec. It distinguishes from sibling CRUD tool by emphasizing different payload shapes and artefacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive 'USE WHEN' and 'DO NOT USE FOR' sections explicitly list when to use this tool vs alternatives like codegen_create_endpoint, codegen_validate_payload, etc. Cross-references other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_create_endpointCreate Endpoint ModuleADestructive
Generate a project + endpoint module (submodule, model, metadata, demo files, optional audit migration) from an existing payload spec by wrapping restforge-cli create. URL pattern produced: /api/{project}/{endpoint}/{action}.
This tool is DESTRUCTIVE: it spawns the CLI which writes / overwrites files in 'src/modules//', 'src/models//', 'metadata//', 'examples///', and updates '.restforge/projects.json'. Single-call semantics: the tool always executes; there is no preview mode. Internally the tool always passes '--force=true' to the CLI to bypass the CLI's interactive y/N readline prompt (which would deadlock in a no-TTY subprocess).
Safety net: when the CLI overwrites an existing module, model, or query directory, it FIRST renames the previous version to '.archive.NNN' (NNN is a sequential generation number starting at 001) inside the same folder. Rollback by restoring the most recent archive is always possible.
AI responsibility — IMPORTANT: because this tool always executes and may overwrite generated files, you MUST confirm intent with the user in plain language BEFORE invoking the tool. You do NOT need to detect file conflicts programmatically — the CLI handles that and the archive mechanism keeps the previous version safe. Just confirm intent. Examples of good confirmation phrasing in user-facing chat:
"Saya akan generate endpoint di project ({database}). Kalau modul/model lama sudah ada, versi sebelumnya akan disimpan sebagai '.archive.NNN'. Lanjut?"
"I will generate under project using . Existing files will be archived as .archive.NNN before being overwritten. Proceed?"
USE WHEN:
The user asks to generate, create, or scaffold an endpoint, resource, or module from a payload (e.g. "buatkan endpoint untuk product", "generate resource users", "create endpoint dari payload X", "scaffold a new endpoint")
The user mentions "endpoint", "resource", "module" or the URL pattern /api/{project}/{resource}/{action} and wants to register it as runnable code
The user has authored a payload file (e.g. via 'codegen_generate_payload' or manually) and now wants to materialise it as runnable code in the project
Pertanyaan dalam bentuk: "tambahkan endpoint X ke project Y", "buat module baru di project Z", "scaffold endpoint baru pakai payload ini", "generate kode dari payload ini"
The user asks to add a new endpoint to an existing project (registry already has the project, just adding more endpoints)
The user asks to bootstrap a brand-new project together with its first endpoint
The user asks about regenerating an existing endpoint after the payload changed (this triggers overwrite + archive flow inside the CLI; previous versions become '.archive.NNN' in place)
After 'codegen_validate_payload' confirmed the payload is valid — this is the natural follow-up that turns a verified payload into runnable code
DO NOT USE FOR:
Generating the payload JSON itself from a database table -> use 'codegen_generate_payload'
Validating a payload before generation -> use 'codegen_validate_payload'
Inspecting per-column differences between payload and database -> use 'codegen_diff_payload'
Syncing payload changes back into existing payload files after schema drift -> use 'codegen_sync_payload'
Looking up the field validation catalog before authoring the payload -> use 'codegen_get_field_validation_catalog'
Looking up the query declarative catalog before authoring the payload -> use 'codegen_get_query_declarative_catalog'
Deleting a project or endpoint — out of scope; the user must run 'npx restforge-cli drop' manually
Generating a processor (Kafka consumer, etc.) — out of scope; the CLI has separate 'processor' and 'consumer-create' subcommands not covered by this MCP server yet
Generating a dashboard endpoint — out of scope; the CLI has a separate 'dashboard' subcommand
Listing all registered projects in the registry — out of scope here; use the CLI's 'list' subcommand directly
Database DDL changes (CREATE TABLE, ALTER TABLE) — not in this tool's scope. The audit migration sub-step DOES create a single audit table when the payload uses the 'audit' fieldPolicy strategy, but that is the only DDL it touches.
Preconditions:
The project must have restforgejs installed in node_modules.
The payload file must exist at /payload/.json before calling this tool.
The CLI itself rejects reserved project names (src, lib, node_modules, config, utils, models, controllers, middleware, routes) and reserved endpoint names (health, status, admin, api, auth, login, logout, register, index, main, app, config, test, docs, swagger, graphql, websocket, socket). When in doubt, ask the user to pick a different name before invoking this tool.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "the endpoint generator", "the project generator", "generate the payload first", "validate the payload first").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
This tool is destructive: it can overwrite existing module / model / query files. BEFORE invoking this tool, ALWAYS confirm with the user in plain language. Example: "Saya akan generate endpoint di project . Kalau file lama sudah ada, akan ditimpa (versi lama disimpan sebagai .archive.NNN). Lanjut?". Do not detect conflicts programmatically; the CLI handles that and creates the archive.
After the tool runs, summarise the result. Read the CLI output and identify any archive activity (the CLI uses the '.archive.NNN' naming convention in the filesystem and reports archive activity in its output, but the exact wording may evolve). When archives are created, tell the user that previous versions are preserved in case rollback is needed.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and a payload/ directory with the named payload file) | |
| project | Yes | Project name. Letters/numbers/dash/underscore, max 50 chars, cannot start or end with dash or underscore. Auto-lowercased by the CLI. Reserved names rejected by the CLI: src, lib, node_modules, config, utils, models, controllers, middleware, routes. | |
| endpoint | Yes | Endpoint name (also called "resource" — the URL pattern is /api/{project}/{endpoint}/{action}). Same shape as project. Auto-lowercased by the CLI. Reserved names rejected by the CLI: health, status, admin, api, auth, login, logout, register, index, main, app, config, test, docs, swagger, graphql, websocket, socket. Naming convention: kebab-case or snake-case recommended. | |
| payload | Yes | Payload file name without the .json extension. The file must exist at <cwd>/payload/<payload>.json. Same shape rules as project. | |
| database | No | Database type for the generated code. Default postgres. | |
| createDemo | No | Default true (CLI default). When true, generate demo files (curl, postman, insomnia) for testing the endpoint. | |
| skipSqlValidation | No | Default false (CLI default). When true, skip SQL keyword validation in the payload. Useful when payload includes generated SQL fragments that the validator flags as suspicious. | |
| noAuditMigration | No | Default false (CLI default). When true, skip executing the audit table migration even if the payload has fieldPolicy.*.strategies containing "audit". The migration SQL file is still written to migrations/audit/ as documentation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint true, but the description adds critical behavioral details: always executes with no preview, internal --force=true, archive mechanism for safety, and AI responsibility to confirm intent. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, but somewhat verbose. Every sentence adds value, but the PRESENTATION GUIDANCE could be shorter. Front-loaded with key actions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 8 parameters, no output schema, and destructive behavior, the description covers behavior, safety, prerequisites, and post-invocation guidance. Completely equips the agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. The description adds context such as URL pattern, auto-lowercasing, naming conventions, and reserved name lists, but these partially overlap with schema descriptions. Still adds meaningful extra guidance beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a project and endpoint module by wrapping the CLI, producing files in multiple directories. It distinguishes itself from siblings like codegen_generate_payload and codegen_validate_payload by listing DO NOT USE FOR scenarios with explicit alternative tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit USE WHEN and DO NOT USE FOR sections, detailing specific user intents and mapping them to this tool vs. alternatives. Covers common Indonesian phrases and specific actions like regenerating endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_describe_tableDescribe Database TableARead-onlyIdempotent
Describe a single database table — columns (with dialect-specific types), primary key, foreign keys, and indexes — by wrapping restforge-cli dbschema:describe. Live introspection — the CLI connects to the database and queries the catalog.
USE WHEN:
The user asks about the columns, primary key, foreign keys, or indexes of a specific table
Pertanyaan dalam bentuk seperti "kolom apa saja di tabel X", "describe tabel sales_order", "show schema for users table", "tabel X punya FK ke mana", "ada index apa di tabel Y"
Before authoring a SQL JOIN — to discover the foreign key path between two tables and write the JOIN clause correctly
Before authoring a dashboard widget query — to confirm column names and types before composing the SELECT
The user wants to verify whether a specific column exists in a table
The user asks "what type is column X in table Y" — column type is dialect-specific so live introspection is more reliable than guessing
Before invoking 'codegen_create_dashboard' (with widget SQL) — to ground SQL identifiers in the live schema
After 'codegen_list_tables' returned a candidate name and the user wants the per-column details
DO NOT USE FOR:
Listing all tables in the database -> use 'codegen_list_tables'
Querying the actual row data inside a table -> out of scope; this tool returns metadata (columns, PK, FK, indexes) only, not row content
Validating a payload spec file against the database schema (file-level diff) -> use 'codegen_validate_payload' or 'codegen_diff_payload'
Modifying the schema (ALTER TABLE) -> out of scope
Inspecting the SQL definition behind a database view -> out of scope; only column-level info is returned for views
Cross-database introspection (multiple databases at once) -> out of scope; a single config = a single connection
Cross-reference: this tool is the sibling of 'codegen_list_tables'. Use list-tables first to discover candidate names, then describe-table for the per-column details.
This tool runs: npx restforge-cli dbschema:describe --config= --table= [--include-foreign-keys=] [--include-indexes=] in the given cwd. The CLI connects to the database described in the config file, queries the catalog, and emits a JSON envelope with the table metadata.
Preconditions:
The project must have restforgejs installed in node_modules.
The config file (default 'db-connection.env') must exist in the project and contain valid database credentials. This tool does not pre-check that — if the CLI fails, the failure response will surface the underlying cause.
The named table must exist in the database; otherwise the CLI fails with a "Table 'X' not found" error.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "describe the table", "list the database tables", "install the package").
Speak in plain language. Summarise the result; do not paste the raw JSON unless the user explicitly asks.
This is a live introspection: the tool actively queries the database catalog. The result reflects the schema state at query time.
Column types are dialect-specific (Postgres: 'character varying(N)', MySQL: 'varchar(N)', Oracle: 'VARCHAR2(N)'). Use the type as-is when the user asks about column constraints; do not normalise.
Foreign key 'references' field is the JOIN target — when the user asks "how do I join A and B", look at FK paths in both directions to compose the JOIN clause.
When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and the config file) | |
| config | No | Config file name relative to the project, used by the CLI to connect to the database | db-connection.env |
| table | Yes | Table name to describe. Format: <schema>.<table> or just <table> (the CLI resolves the schema). Example: supplier, public.supplier, core.users. | |
| includeForeignKeys | No | Default true (CLI default). When false, omit the foreignKeys field from output. | |
| includeIndexes | No | Default true (CLI default). When false, omit the indexes field from output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and idempotentHint. Description adds that it performs live introspection, requires preconditions (restforgejs installed, config file), and describes failure modes (table not found). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with headings (USE WHEN, DO NOT USE FOR, Preconditions, PRESENTATION GUIDANCE). However, it is slightly verbose with repeated 'out of scope' statements. Still front-loaded with key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains returned fields (columns, PK, FK, indexes), dialect-specific types, and usage guidance for JOINs. Covers preconditions, failure modes, and presentation advice. Complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage for all 5 parameters. Description adds meaning by explaining table name format, defaults for includeForeignKeys and includeIndexes, and config file default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it describes a single database table with columns, primary key, foreign keys, and indexes. It distinguishes from siblings like codegen_list_tables (listing all tables) and codegen_validate_payload (validating payloads).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'USE WHEN' and 'DO NOT USE FOR' sections covering numerous scenarios, including when to use alternatives like codegen_list_tables, codegen_validate_payload, etc. Also includes preconditions and presentation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_diff_payloadDiff PayloadARead-onlyIdempotent
Show the column-level differences between existing payload spec files and the current database schema, by running restforge-cli payload --diff.
USE WHEN:
The user asks to see the detailed differences between a payload file and the current database schema (column-level)
The user asks things like "tunjukkan diff payload", "apa yang berubah di table X", "kolom apa saja yang baru", "show schema diff", "what columns changed"
After 'codegen_validate_payload' reported DRIFT and the user wants to know what specifically changed
Pre-flight inspection before deciding whether to run sync
Often called after 'codegen_validate_payload' once a DRIFT status is reported, to drill into the column-level differences for the affected file.
DO NOT USE FOR:
Quick overall status (OK / DRIFT / ERROR per file) -> use 'codegen_validate_payload'
Generating a payload from scratch for a table that has no payload yet -> use 'codegen_generate_payload'
Applying the changes to payload files -> use 'codegen_sync_payload'
This tool runs: npx restforge-cli payload --diff --config= [--table=] [--output=] in the given cwd. The CLI reads existing payload JSON files from the output directory, connects to the database described in the config file, and prints a per-column diff (added, removed, or type-changed columns) without modifying any file. The CLI typically uses '[+]' for added columns, '[-]' for removed columns, and '[~]' for type-changed columns.
Preconditions:
The project must have restforgejs installed in node_modules.
The config file (default 'db-connection.env') must exist in the project and contain valid database credentials. This tool does not pre-check that — if the CLI fails, the failure response will surface the underlying cause.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "see the column-level differences", "do a quick overall validation", "sync the payload files").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and the config file) | |
| config | No | Config file name (relative to project) used by the CLI to connect to the database | db-connection.env |
| table | No | Specific table name to inspect (e.g. supplier or core.supplier). When omitted, all payload files in the output directory are diffed. | |
| output | No | Payload directory relative to project (e.g. payload). When omitted, the CLI uses its default (payload/). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds value by detailing the CLI command executed, preconditions (restforgejs installed, config file exists), and output format ([+], [-], [~]). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and front-loaded purpose. While slightly lengthy, each sentence adds value, including presentation guidance. It could be slightly more concise, but it is well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary aspects: what the tool does, when to use it, preconditions, output format, and presentation guidance. No output schema exists, but the description explains the CLI output adequately. Complete for a complex tool with multiple siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description doesn't need to repeat parameter details. However, it adds useful context beyond the schema, such as the default config file name and the behavior when 'table' is omitted. This compensates somewhat, but the schema already covers the basics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Show the column-level differences between existing payload spec files and the current database schema'. It uses specific verbs and resources, and distinguishes from siblings like codegen_validate_payload and codegen_sync_payload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'USE WHEN' and 'DO NOT USE FOR' sections, listing concrete scenarios (e.g., after drift detection, pre-flight inspection) and providing alternatives for other tasks, such as codegen_validate_payload for quick status and codegen_sync_payload for applying changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_generate_payloadGenerate PayloadA
Generate a payload spec file (metadata, fields, action specs) from a database table by introspecting its schema via restforge-cli.
USE WHEN:
The user asks to generate a payload, payload spec, or payload metadata file from a database table
The user asks things like "buatkan payload dari table X", "generate payload guest_book", "scan schema table to JSON", "create payload for endpoint generation"
The user wants to "introspect" or "scan" a database table into a JSON spec
Starting CLI codegen workflow after the project config has been validated
Re-generating payload after a schema change in the database
DO NOT USE FOR:
Filling in credentials in db-connection.env -> use 'setup_write_env'
Validating config before generating payload -> use 'setup_validate_config'
Creating the project / endpoint code from a payload -> that is the next CLI step (will be wrapped in a future tool, not yet available)
This tool runs: npx restforge-cli payload --table= --config= in the given cwd. The CLI connects to the database described in the config file, reads the table schema, and writes a payload JSON file (e.g. table 'guest_book' -> 'guest-book.json' with underscore mapped to hyphen). The payload file is the input for the next codegen step (project + endpoint creation).
Preconditions:
The project must have restforgejs installed in node_modules.
The config file (default 'db-connection.env') must exist in the project and contain valid database credentials. This tool does not pre-check that — if the CLI fails, the failure response will surface the underlying cause.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "install the package", "fill in the credentials", "generate the payload").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and the config file) | |
| table | Yes | Name of the database table to introspect (e.g. guest_book) | |
| config | No | Config file name (relative to project) used by the CLI to connect to the database | db-connection.env |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and idempotentHint=false. The description adds behavioral context: it runs a CLI command, writes a payload file, and has preconditions. It also mentions failure behavior. This adds value beyond annotations, but could further detail side effects like overwriting existing files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (use when, do not use, preconditions, presentation guidance). Every sentence serves a purpose; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, no output schema), the description thoroughly covers preconditions, CLI invocation, output file naming, and presentation guidance. It is complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning beyond the schema by explaining the cwd precondition, that table is the database table name, and config default. This enhances understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a payload spec file by introspecting a database table via CLI. It uses specific verbs and resources, and distinguishes from sibling tools like setup_write_env and setup_validate_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly enumerates when to use (e.g., user asks to generate payload, after project config validated) and when not to use (e.g., for credentials or validation), naming alternative tools. This provides comprehensive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_get_dashboard_catalogGet Dashboard CatalogARead-onlyIdempotent
Get authoritative JSON catalog of dashboard payload spec (payload shape with discriminator, widget structure with mutex query/queries, params contract with allowed types, scalar collapse rules, naming convention with dash- prefix, URL pattern POST /api/{project}/{name}/dashboard, file reference convention, placeholder convention with :paramName).
USE WHEN:
The user asks about dashboard payload structure, widget definition, or how dashboard endpoints work
The user mentions specific dashboard concepts:
widgets,params,queryvsqueries, scalar collapse, dashboard prefixdash-Pertanyaan dalam bentuk seperti "bagaimana struktur payload dashboard", "apa beda dashboard dengan endpoint biasa", "kapan pakai query vs queries", "kenapa nama dashboard harus pakai dash-"
The user asks about the URL pattern for dashboard endpoints (
POST /api/{project}/{name}/dashboard)The user asks why dashboard names must start with
dash-prefixThe user asks about response shape: when is value a scalar, when is it object, when is it array (scalar collapse rules)
The user asks about placeholder
:paramNamein widget SQL — declaration requirements, escaping (::Postgres cast)Before authoring a dashboard payload manually (via Write tool) — to ground field naming, allowed/forbidden fields, widget structure
Before invoking 'codegen_validate_dashboard_payload' or 'codegen_create_dashboard' — to verify payload conforms to schema
The user is unsure whether their use case is a dashboard or a CRUD endpoint
DO NOT USE FOR:
Validating an actual dashboard payload file -> use 'codegen_validate_dashboard_payload'
Generating a dashboard module from a payload -> use 'codegen_create_dashboard'
Looking up CRUD payload field validation rules -> use 'codegen_get_field_validation_catalog'
Looking up CRUD query declarative spec (
datatablesQuery,viewQuery,viewName,exportQuery,detailQuery) -> use 'codegen_get_query_declarative_catalog'Generating a CRUD payload from a database table -> use 'codegen_generate_payload'
Validating CRUD payload drift against the database -> use 'codegen_validate_payload'
Common widget patterns examples (Metric+Donut, Metric+Sparkline, Metric+Goal) — not in catalog scope; refer to the documentationUrl returned in the response
Frontend integration examples (Metronic, AdminLTE, etc.) — not in catalog scope; refer to documentationUrl
Separation of Concerns rationale for forbidden frontend fields — not in catalog scope; refer to documentationUrl
Multi-database SQL dialect adaptation inside widget queries — not in catalog scope; refer to documentationUrl
Performance characteristics (Promise.allSettled execution, in-memory SQL embedding) — not in catalog scope; refer to documentationUrl
This tool runs: npx restforge-cli dashboard:catalog in the given cwd. The catalog is sourced from restforge-cli (single source of truth) so it stays in sync with the restforge runtime version installed in the project.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "look up the dashboard catalog", "edit the dashboard payload", "install the package").
Speak in plain language. Summarise the catalog (number of allowed top-level fields, forbidden frontend fields, param types, scalar collapse rules); do not paste the entire JSON unless the user explicitly asks for it.
When the user is unsure whether their use case is dashboard or CRUD, briefly explain the discriminator:
widgetsarray means dashboard (multi-query aggregator),tableNamemeans CRUD (single-table REST endpoint). They cannot mix.When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint. The description adds that the tool runs `npx restforge-cli dashboard:catalog`, is single source of truth, and includes presentation guidance. No contradictions with annotations. The description enriches transparency with runtime context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into clear sections (USE WHEN, DO NOT USE FOR, PRESENTATION GUIDANCE) and front-loaded with the core purpose. However, it is somewhat verbose, especially the presentation guidelines, which could be trimmed. Still earns its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the dashboard catalog and no output schema, the description thoroughly explains what the tool returns, when to use it, prerequisites, and even presentation guidance for the AI. No gaps remain for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single `cwd` parameter. The description does not add significant extra semantics beyond implying the tool runs in that directory. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the authoritative JSON catalog of dashboard payload spec, listing specific aspects like payload shape, widget structure, params contract, scalar collapse rules, naming conventions, URL pattern, file reference, and placeholder conventions. It also distinguishes itself from sibling tools in the DO NOT USE FOR section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit USE WHEN section listing concrete user intents and a DO NOT USE FOR section that names sibling tools and explains when to use them instead. This gives the agent clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_get_field_validation_catalogGet Field Validation CatalogARead-onlyIdempotent
Get authoritative JSON catalog of field validation spec (data types, constraints, format presets, audit columns convention, message override pattern) used in payload fieldValidation arrays.
USE WHEN:
The user asks about valid field validation constraints, types, format presets, or audit columns convention in payload JSON
The user asks things like "constraint apa yang valid untuk tipe X", "list field validation constraints", "tampilkan catalog validasi", "what validation rules can I use", "format preset apa saja", "show me the validation spec"
Before generating or editing the
fieldValidationarray in a payload file — to ground constraint names, scope correctness, and the message override pattern. Often called before 'codegen_generate_payload' for grounding the initial generation, or before manual editing of an existing payload.The user mentions adding validation to a payload field but is unsure which constraint name to use
The user asks about audit columns convention (
auditColumns: false, override custom names, valid/rejected values, etc.)The user asks about the message override pattern (
{constraintName}Message)The user reports a typo-like error such as
maxLenghtor wonders whetherminLengthworks on a number field — fetch the catalog to ground the answerThe user wants to add validation rules at APPLICATION LAYER in payload JSON (validation runs in generated model code, returns HTTP 400 with structured error before the request reaches the database), NOT native SQL DDL constraints (NOT NULL, UNIQUE, CHECK at database level)
DO NOT USE FOR:
Validating actual payload files against the database schema -> use 'codegen_validate_payload'
Validating config (license, database connection) -> use 'setup_validate_config'
Reading the active database connection config schema -> use 'setup_get_config_schema'
Generating a payload from scratch -> use 'codegen_generate_payload'
Applying changes to payload files -> use 'codegen_sync_payload'
Generating SQL DDL constraints (NOT NULL, UNIQUE, CHECK, REFERENCES, ALTER TABLE, CREATE INDEX) — these are database-level and out of scope for RESTForge field validation. They require direct SQL or a database migration tool.
This tool runs: npx restforge-cli field-validation:catalog in the given cwd. The catalog is sourced from restforge-cli (single source of truth) so it stays in sync with the restforge runtime version installed in the project. Requires restforgejs >= 2.4.0.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "install the package", "generate the payload", "edit the validation rules").
Speak in plain language. Summarise the catalog (number of types, constraints, format presets); do not paste the entire JSON unless the user explicitly asks for it.
If the user uses SQL DDL terminology (NOT NULL, UNIQUE, CHECK, ALTER TABLE, REFERENCES, CREATE INDEX), do not silently map it to payload validation. First clarify which layer the user wants: application-layer validation in payload (this catalog applies, response 400 with structured error) versus database-level DDL constraints (out of scope here, requires direct SQL or migration tool). The two layers can co-exist for the same field but behave differently.
When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs, version >= 2.4.0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ReadOnlyHint and idempotentHint annotations already indicate safety; description adds that it runs a CLI command, requires restforgejs >= 2.4.0, and is sourced from restforge-cli. No contradictions. Provides context about presentation guidance for the AI, enhancing transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (USE WHEN, DO NOT USE, etc.) and front-loaded purpose. However, it is relatively long and includes presentation guidance that may not be essential for tool selection, slightly reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains the tool's output (JSON catalog with specific content), prerequisites (package version), execution (runs CLI), and AI presentation hints. For a read-only catalog tool with one parameter, the context is comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'cwd', which has a clear description. The description mentions the parameter implicitly ('in the given cwd') but does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves an authoritative JSON catalog of field validation spec, listing specific contents (data types, constraints, etc.). It distinguishes from siblings by naming alternatives like codegen_validate_payload, setup_validate_config, etc., both in USE WHEN and DO NOT USE sections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive USE WHEN section with concrete scenarios (e.g., user asking about valid constraints, before generating payload) and language-specific example (Indonesian). DO NOT USE lists specific sibling tools and contexts (e.g., validating payload files, generating SQL DDL). This provides explicit guidance for when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_get_query_declarative_catalogGet Query Declarative CatalogARead-onlyIdempotent
Get authoritative JSON catalog of query declarative spec (5 query properties, 7 endpoint resolution rules, file reference convention with database-specific placeholders) used in payload query declarations such as datatablesQuery, viewQuery, viewName, exportQuery, and masterDetail.detailConfig.detailQuery.
USE WHEN:
The user asks about query declaration in payload, query properties, or how endpoints resolve queries
The user mentions specific property names:
datatablesQuery,viewQuery,viewName,exportQuery,detailQuery, ataumasterDetailPertanyaan dalam bentuk seperti "bagaimana cara declare query di payload", "what's the difference between viewQuery and viewName", "kapan pakai viewName vs tableName"
The user asks about endpoint query resolution: "query apa yang dipakai untuk /datatables", "what query does /export use", "resolusi query untuk /read-composite"
The user asks about
file:prefix convention or SQL file references in payloadThe user asks about database placeholder differences (PostgreSQL
$1, MySQL?, Oracle:1) in detailQuery or other file-referenced SQLBefore generating or editing query-related properties in payload JSON — to ground property naming, resolution priority, and file reference convention. Often called before 'codegen_generate_payload' for grounding the initial generation, or before manual editing of an existing payload. Sibling of 'codegen_get_field_validation_catalog' (catalog-style tool, different scope).
The user asks about master-detail composite read query setup (
detailQueryplacement, foreign key placeholder)
DO NOT USE FOR:
Validating actual payload files against the database schema -> use 'codegen_validate_payload'
Generating a payload from scratch -> use 'codegen_generate_payload'
Applying changes to payload files -> use 'codegen_sync_payload'
Validating fieldValidation array -> use 'codegen_get_field_validation_catalog'
Reading the active database connection config schema -> use 'setup_get_config_schema'
Auto SQL conversion details (PostgreSQL -> MySQL/Oracle) — not in catalog scope; refer to the documentationUrl returned in the response
Subquery wrapping behavior for JOIN/CTE queries — not in catalog scope; refer to documentationUrl
Master-detail full structure outside
detailQuery(e.g.enabled,detailTable,foreignKey,detailConfig.tableName) — not in catalog scope; refer to documentationUrlUse case examples and decision guides ("kapan pakai X vs Y") — refer to documentationUrl for narrative explanation
This tool runs: npx restforge-cli query-declarative:catalog in the given cwd. The catalog is sourced from restforge-cli (single source of truth) so it stays in sync with the restforge runtime version installed in the project.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "look up the query catalog", "edit the query declaration", "install the package").
Speak in plain language. Summarise the catalog (number of query properties, endpoints, database placeholders); do not paste the entire JSON unless the user explicitly asks for it.
When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds context: it runs 'npx restforge-cli query-declarative:catalog' in the given cwd, and the catalog is sourced from restforge-cli to stay in sync. Also includes presentation guidance on language matching and not mentioning internal tool names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but well-structured with clear sections (USE WHEN, DO NOT USE FOR, PRESENTATION GUIDANCE). Every sentence serves a purpose, though a few lines could be considered verbose. Overall, it is appropriately detailed for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the catalog contains, when to use, when not to use, and includes presentation guidance. With only one parameter and no output schema, the description provides sufficient context for an agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the only parameter cwd. The description does not add significant meaning beyond the schema—it merely implies the cwd is used to run a command, which is already clear from the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves an authoritative JSON catalog of query declarative spec, listing specific contents. It distinguishes itself from siblings like codegen_get_field_validation_catalog by noting it's a catalog-style tool with different scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides USE WHEN and DO NOT USE FOR sections, listing numerous specific scenarios and naming alternative tools (e.g., codegen_validate_payload, codegen_generate_payload) for cases where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_list_tablesList Database TablesARead-onlyIdempotent
List all tables (and views) in the project's configured database, by wrapping restforge-cli dbschema:list. Live introspection — the CLI connects to the database and queries the catalog (information_schema in Postgres/MySQL, all_tables in Oracle).
USE WHEN:
The user asks "what tables exist in the database?" or any equivalent question
Pertanyaan dalam bentuk seperti "tabel apa saja yang ada di database", "list table di database project", "show me the tables", "ada tabel apa aja"
Before authoring any SQL query (dashboard widget query, ad-hoc query, CRUD payload generation) and the table catalog is unknown — ground the query in the live database state instead of guessing
The user mentions a specific table name and the AI is unsure whether it actually exists in the project's database
The user is exploring an unfamiliar database before deciding what to build (e.g. picking a target table for a new endpoint or dashboard)
The user asks to filter by schema or namespace (e.g. "list tables in core schema only", "tabel di schema public saja")
The user asks for a read-only inspection without modifying anything
Before invoking 'codegen_describe_table' — to discover candidate table names first
DO NOT USE FOR:
Detailed column / primary key / foreign key / index information for a specific table -> use 'codegen_describe_table'
Listing payload spec files on the filesystem (the payload/ folder) -> use generic Read or filesystem tools
Validating whether a payload file is in sync with the database -> use 'codegen_validate_payload'
Querying the actual row data inside tables -> out of scope; this tool returns only the table catalog (names + type), not row content
Modifying the database schema (CREATE/ALTER/DROP TABLE) -> out of scope
Listing schemas or databases themselves -> out of scope; this tool returns the tables WITHIN a schema, not the schemas themselves
This tool runs: npx restforge-cli dbschema:list --config= [--schema=] [--include-system=] in the given cwd. The CLI connects to the database described in the config file, queries the catalog, and emits a JSON envelope with summary counts and a tables array.
Preconditions:
The project must have restforgejs installed in node_modules.
The config file (default 'db-connection.env') must exist in the project and contain valid database credentials. This tool does not pre-check that — if the CLI fails, the failure response will surface the underlying cause.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "list the database tables", "describe a specific table", "install the package").
Speak in plain language. Summarise the result (database type and total table count); do not paste the raw JSON unless the user explicitly asks.
This is a live introspection: the tool actively queries the database catalog (information_schema in Postgres/MySQL, all_tables in Oracle). The result reflects the database state at query time.
Database type is auto-detected from the config file. The schema filter is dialect-aware (Postgres schema vs MySQL database vs Oracle owner) and uppercase is required for Oracle owners.
When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and the config file) | |
| config | No | Config file name relative to the project, used by the CLI to connect to the database | db-connection.env |
| schema | No | Filter to a specific database schema/owner. Postgres: schema name (e.g. public); MySQL: database name; Oracle: owner (uppercase). When omitted, lists tables from all user-owned schemas. | |
| includeSystem | No | Default false. When true, include system tables (Postgres: pg_catalog, information_schema; MySQL: mysql, performance_schema, sys; Oracle: SYS, SYSTEM, etc). Most users do NOT want this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and idempotent. Description adds valuable context: live introspection, CLI invocation, preconditions, and presentation guidance. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, front-loaded summary. However, it is somewhat verbose; could be trimmed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, usage, parameters, preconditions, output format, and presentation guidance. Extremely thorough given no output schema and simple annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds extra context: default config, dialect-aware schema filtering, includeSystem default false, and preconditions. Goes beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists tables and views in the database. Distinguishes itself from siblings like codegen_describe_table by explicitly specifying that it returns only table names and types, not details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides extensive 'USE WHEN' and 'DO NOT USE FOR' sections, detailing exact contexts and alternatives for each sibling. E.g., when to use codegen_describe_table instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_sync_payloadSync PayloadA
Apply schema drift to existing payload spec files in a project, archiving the previous version of each updated file, by running restforge-cli payload --sync.
USE WHEN:
The user asks to apply schema drift changes to payload files, sync payload files with the database, or update payload JSON files to match the current schema
The user asks things like "sinkronisasi payload", "update payload sesuai database", "apply schema drift", "sync payload files", "terapkan perubahan schema", "samakan payload dengan database"
After 'codegen_diff_payload' reported column-level differences and the user has reviewed them, wanting to apply the changes
After ALTER TABLE in the database when the user wants to bring all payload files in line with the new schema
The user mentions creating an archive of the previous payload before regenerating endpoints
Before applying changes, strongly consider calling 'codegen_diff_payload' first to confirm what will change in each file (read-before-write per §5.3 — sync overwrites the active payload file and produces an archive that the user may want to inspect later).
DO NOT USE FOR:
Just checking which payload files have drift (without modifying anything) -> use 'codegen_validate_payload'
Looking at the per-column differences without applying them -> use 'codegen_diff_payload'
Generating a payload from scratch for a table that has no payload yet -> use 'codegen_generate_payload'
Cleaning up or deleting old '.archive.NNN' files — this tool does not handle archive cleanup; the user must remove archive files manually if desired
This tool runs: npx restforge-cli payload --sync --config= [--table=] [--output=] in the given cwd. The CLI reads existing payload JSON files from the output directory, connects to the database described in the config file, and rewrites each payload file whose schema has drifted. Before overwriting, the previous file content is renamed to '.archive.NNN' (NNN is a sequential number starting at 001). Files that are already in sync are not touched. The CLI prints a per-file status (typically [SKIP], [ARCHIVE], [SYNCED]) followed by a Summary section with totals.
If the sync run fails partway through (e.g. database connection drops), the CLI restores the archived file back to its original name so the active payload is not left corrupted.
Preconditions:
The project must have restforgejs installed in node_modules.
The config file (default 'db-connection.env') must exist in the project and contain valid database credentials. This tool does not pre-check that — if the CLI fails, the failure response will surface the underlying cause.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "update the payload files", "see the column-level differences first", "regenerate the endpoint code from the updated payload").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and the config file) | |
| config | No | Config file name (relative to project) used by the CLI to connect to the database | db-connection.env |
| table | No | Specific table name to sync (e.g. supplier or core.supplier). When omitted, all payload files in the output directory are synced. | |
| output | No | Payload directory relative to project (e.g. payload). When omitted, the CLI uses its default (payload/). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that sync overwrites files, archives, and restores on failure. Annotations correctly indicate readOnlyHint=false. No contradictions. Additional context about archive cleanup and CLI output is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections, but is somewhat lengthy. Every sentence is justified given the tool's complexity. Front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers preconditions, failure handling, and output format comprehensively. It also includes presentation guidance for appropriate agent response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage, so baseline is 3. The description adds meaning by explaining defaults (config, output) and behavior when table is omitted, as well as preconditions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies schema drift to payload files and archives previous versions. It distinguishes from siblings by listing when to use and when not to use, with specific verb+resource scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit USE WHEN and DO NOT USE FOR sections, including specific user utterances and alternative tools. It also advises ordering relative to codegen_diff_payload.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_validate_dashboard_payloadValidate Dashboard PayloadARead-onlyIdempotent
Validate the structural correctness of a dashboard payload spec WITHOUT generating any file, by wrapping restforge-cli dashboard --validate-only=true.
Dashboards have a different shape than CRUD endpoints (widgets array, no tableName, no fieldValidation). The CLI's DashboardValidator checks: widgets array shape, allowed/forbidden fields per level, the 'query' vs 'queries' mutual exclusion, params contract (each ':placeholder' used in SQL must be declared in 'params'), 'file:query/.sql' reference resolution, and that no frontend-only fields (widgetType, layout, title, subtitle, color) leak into the payload.
This tool is READ-ONLY: it does NOT write any file, does NOT touch the database, does NOT update the project registry. It only reports whether the payload structure is valid. Re-running with the same input gives the same result (idempotent).
Workflow positioning: this is the natural pre-flight before 'codegen_create_dashboard'. When the AI authors a dashboard payload (manually via Write), call this tool first to surface validation errors cheaply — before invoking the generator that performs filesystem writes.
Gap closed: the general 'codegen_validate_payload' tool silently skips dashboard payloads (it filters on 'tableName' and 'fieldName'). This tool fills that gap for the dashboard shape.
USE WHEN:
The user asks to validate, check, or verify the structure of a dashboard payload before generating
The user has authored a dashboard payload (with 'widgets' array) and wants to confirm it parses correctly before invoking the generator
Pertanyaan dalam bentuk: "cek dashboard payload saya valid?", "validate dashboard config", "is this dashboard schema correct?", "apakah payload dashboard ini OK?"
Before invoking 'codegen_create_dashboard' — pre-flight to surface validation errors early (cheaper than failing inside the generator stage, which performs filesystem writes)
The user reports that 'codegen_create_dashboard' failed with a validation-related error and wants to fix the payload iteratively
The user mentions specific dashboard validation rules: forbidden frontend fields (widgetType, layout, title, subtitle, color), 'query' vs 'queries' mutex, params placeholder declaration
After the user manually edited a dashboard payload and wants a quick sanity check before re-running the generator
The user is unsure whether their payload follows dashboard shape (widgets) or CRUD shape (tableName) and wants verification
DO NOT USE FOR:
Validating a CRUD payload (with 'tableName' and 'fieldName') against database schema -> use 'codegen_validate_payload'
Generating the dashboard module after validation -> use 'codegen_create_dashboard'
Inspecting drift between CRUD payload and database -> use 'codegen_validate_payload' (this dashboard validator does NOT touch the database)
Generating a payload from scratch -> use 'codegen_generate_payload' for CRUD; for dashboard, the user authors manually
Looking up the field validation catalog -> use 'codegen_get_field_validation_catalog' (different scope; dashboard payloads have no fieldValidation)
Validating SQL syntax inside a widget query — the validator only checks placeholder declarations and structural shape, not SQL semantics. SQL errors will only surface when the dashboard endpoint is actually called at runtime.
Cross-reference: this tool is the read-only sibling of 'codegen_create_dashboard'. Both have nearly identical input schemas, but this tool only validates and does NOT generate any file.
Preconditions:
The project must have restforgejs installed in node_modules.
The payload file must exist at /payload/.json before calling this tool.
The dashboard name MUST start with 'dash-' prefix (CLI requirement). For validate-only mode, this is checked at the argument-parser level even though the value is not used to write any file.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "validate the dashboard payload", "generate the dashboard module").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
This tool is read-only: it validates payload structure without writing files or touching the database. Safe to invoke proactively before 'codegen_create_dashboard' to give the user faster feedback on payload errors.
If validation passes, briefly confirm the result and offer to proceed with generation. If validation fails, surface the specific error in plain language and offer to help fix it. Do not paste raw CLI output unless the user explicitly asks.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and a payload/ directory with the named payload file) | |
| project | Yes | Project name. Required by the CLI argument schema even in validate-only mode. Letters/numbers/dash/underscore, max 50 chars. | |
| name | Yes | Dashboard name. MUST start with 'dash-' prefix (CLI requirement). For validate-only mode, this is checked at the argument-parser level even though the value is not used to write any file. The CLI rejects 'dash-' alone — there must be at least one character after the prefix. | |
| payload | Yes | Payload file name without the .json extension. The file must exist at <cwd>/payload/<payload>.json. Payload must follow the dashboard schema (with a `widgets` array; NOT a CRUD payload with `tableName`). | |
| database | No | Database type. Default postgres. Database connection is NOT used in validate-only mode (validation is structural, not drift-based), but kept for argument-schema parity with codegen_create_dashboard. | |
| skipSqlValidation | No | Default false (CLI default). When true, skip SQL keyword validation in payload widget queries. Useful when the SQL fragments are intentional but the validator flags them as suspicious. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses read-only, idempotent nature, no file writes, no database access, no registry updates. It adds context beyond annotations (readOnlyHint, idempotentHint) by detailing validation rules, CLI wrapping, and safety for proactive use. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with clear sections (purpose, use when, do not use, preconditions, presentation). It front-loads the core purpose. While concise could be improved, it earns its length given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers validation scope, use cases, exclusions, preconditions, and presentation guidance. Lacks explicit output format, but states it 'reports whether the payload structure is valid'. Given no output schema, this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context for some parameters (e.g., 'database' not used in validate-only, 'skipSqlValidation' default behavior, 'name' dash- prefix CLI requirement). This adds meaningful value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it 'Validate the structural correctness of a dashboard payload spec WITHOUT generating any file', providing a specific verb and resource. It clearly distinguishes from siblings like 'codegen_validate_payload' (which skips dashboards) and 'codegen_create_dashboard' (which generates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive 'USE WHEN' and 'DO NOT USE FOR' sections explicitly list scenarios and alternatives, such as using 'codegen_validate_payload' for CRUD or 'codegen_create_dashboard' for generation. It also mentions workflow positioning (pre-flight before generation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_validate_payloadValidate PayloadARead-onlyIdempotent
Validate that existing payload spec files in a project are still in sync with the current database schema, by running restforge-cli payload --validate.
USE WHEN:
The user asks to validate, check, or verify whether existing payload files are still in sync with the current database schema
The user asks things like "cek drift payload", "validate semua payload", "apakah payload masih sinkron", "is the schema in sync", "check schema drift"
The user mentions ALTER TABLE in the database and wants to know which payloads are affected
Routine drift check after pulling new database migrations
Periodic audit of payload files in a project
Often called before 'codegen_diff_payload' as a quick overall status pass; if a file shows DRIFT, follow up with 'codegen_diff_payload' to see column-level details.
The user wants to validate PAYLOAD FILES against the database schema, not configuration credentials
DO NOT USE FOR:
Seeing the per-column detail of what changed -> use 'codegen_diff_payload'
Generating a payload from scratch for a table that has no payload yet -> use 'codegen_generate_payload'
Updating payload files to match the database -> use 'codegen_sync_payload'
Checking the database connection, license, or other config credentials -> use 'setup_validate_config'
This tool runs: npx restforge-cli payload --validate --config= [--table=] [--output=] in the given cwd. The CLI reads existing payload JSON files from the output directory, connects to the database described in the config file, and reports per-file status (typically OK / DRIFT / ERROR) without modifying any file.
Preconditions:
The project must have restforgejs installed in node_modules.
The config file (default 'db-connection.env') must exist in the project and contain valid database credentials. This tool does not pre-check that — if the CLI fails, the failure response will surface the underlying cause.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "validate the payload files", "see the column-level differences", "sync the payload files").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and the config file) | |
| config | No | Config file name (relative to project) used by the CLI to connect to the database | db-connection.env |
| table | No | Specific table name to check (e.g. supplier or core.supplier). When omitted, all payload files in the output directory are checked. | |
| output | No | Payload directory relative to project (e.g. payload). When omitted, the CLI uses its default (payload/). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds preconditions (restforgejs installed, config file), explains the CLI runs without modifying files, and reports per-file status. Consistent with annotations readOnlyHint and idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections, front-loaded summary, and no redundant sentences. Slightly long but all content is valuable for agent understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers purpose, usage guidelines, preconditions, presentation guidance, and how it relates to siblings. Annotations provide safety profile. Completes all required context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions. The description reinforces default values (config, output) and explains behavior when table is omitted, adding meaningful context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates that payload spec files are in sync with the database schema, using a specific CLI command. It distinguishes from siblings by explicitly listing what it does not cover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes 'USE WHEN' and 'DO NOT USE FOR' sections with concrete examples and alternative tool names, providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codegen_validate_sqlValidate SQL QueryARead-onlyIdempotent
Validate a SELECT (or WITH/CTE) SQL statement against the live database — checks syntax, column references, function existence, type compatibility, and JOIN resolution — by wrapping restforge-cli query:validate. Live introspection — the CLI runs EXPLAIN against the configured database without executing any rows.
USE WHEN:
The user asks "is this SQL valid?", "check my SQL", "validate this query", "cek SQL ini bener atau salah"
Before invoking 'codegen_create_dashboard' with widget queries — to verify each widget SQL passes against the live database before committing the payload file
After authoring a complex SQL (multi-table JOIN, CTE, window function) — to catch column reference errors, ambiguous columns, dialect-specific function mismatches before runtime
The user reports a dashboard widget failed at runtime with a database error — to confirm whether the SQL is the cause and identify the specific error code/message
Iterating on SQL: validate, fix, re-validate (the tool is idempotent and read-only)
After 'codegen_describe_table' suggested column names but the user wants a final correctness check on a draft SQL
DO NOT USE FOR:
Validating the JSON shape of a payload file -> use 'codegen_validate_payload' or 'codegen_validate_dashboard_payload'
Checking whether the SQL result shape matches a widget query key's expected shape (scalar/object/array) -> out of scope; that is checked by the dashboard payload validator separately
Running INSERT/UPDATE/DELETE/DROP/ALTER/CREATE/TRUNCATE — these statements are rejected before any database connection is opened (this tool is read-only)
Listing tables in the database -> use 'codegen_list_tables'
Describing a table's columns/PK/FK -> use 'codegen_describe_table'
Performance/query plan analysis -> out of scope; the tool only reports validation pass/fail, not the query plan
Cross-reference: this tool complements 'codegen_list_tables' and 'codegen_describe_table'. Use list/describe to ground SQL on the live schema, then validate-sql to confirm the composed SQL is correct before commit.
This tool runs: npx restforge-cli query:validate --config= --sql= --pretty=false in the given cwd. The CLI runs EXPLAIN (PostgreSQL/MySQL) or EXPLAIN PLAN FOR (Oracle) against the configured database, without executing any rows.
Preconditions:
The project must have restforgejs installed in node_modules (>= 2.4.8 for query:validate support).
The config file (default 'db-connection.env') must exist in the project (or in cwd/config/) and contain valid database credentials. The CLI auto-fallbacks to the config/ subfolder if the file is not found at the top level.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "validate the SQL", "list the database tables").
Speak in plain language. For success: confirm the SQL is valid in one sentence. For failure: summarise the error category in plain language (e.g. "the column 'x' doesn't exist in this table"), and suggest the next action (revise SQL based on error, re-validate).
This is a live introspection: the tool actively runs EXPLAIN against the database. The result reflects the database state at query time. Zero rows are executed; the planner only parses and resolves references.
For SELECT-only rejection (when the SQL starts with INSERT/UPDATE/DELETE/etc), explain that the validator is read-only by design and ask the user to revise to a SELECT statement.
Error codes are dialect-specific: Postgres uses 5-char SQLSTATE (e.g. '42703'), MySQL uses ER_* names or numeric errno, Oracle uses 'ORA-XXXXX'. When relevant, mention the category in plain language (column not found, ambiguous reference, function mismatch, etc) instead of citing the raw code.
When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must contain node_modules/restforgejs and the config file) | |
| config | No | Config file name relative to the project, used by the CLI to connect to the database | db-connection.env |
| sql | Yes | SQL string to validate. Must be a SELECT or WITH (CTE) statement. Other statements (INSERT/UPDATE/DELETE/DROP/ALTER/CREATE/TRUNCATE) are rejected before any database connection is opened. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint) are supplemented by detailed behavioral info: tool runs EXPLAIN without executing rows, rejects non-SELECT statements, is idempotent and read-only, and describes error handling and preconditions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (USE WHEN, DO NOT USE, Preconditions, PRESENTATION GUIDANCE) and front-loaded core purpose. Each part is necessary given the tool's complexity, no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description compensates by explaining return behavior (pass/fail, error categories), preconditions (restforgejs version, config file), and presentation guidance. Covers all necessary aspects for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage; the description re-explains each parameter with additional context (e.g., SQL must be SELECT or WITH, config can auto-fallback to config/ subfolder). Adds value by reinforcing constraints beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates a SELECT (or WITH/CTE) SQL statement against the live database, checking syntax, column references, function existence, type compatibility, and JOIN resolution. It distinguishes from siblings like codegen_validate_payload by specifying SQL validation vs payload validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE WHEN' and 'DO NOT USE FOR' sections list specific use cases and exclusions, including alternative tools for JSON shape, table listing, and other tasks. Cross-references sibling tools (codegen_list_tables, codegen_describe_table) provide clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_pingHealth PingARead-onlyIdempotent
Simple smoke test tool to verify the MCP server is up and responsive. Not related to RESTForge operations — purely for verifying MCP transport.
USE WHEN:
Verifying that the MCP server itself is reachable and responsive
Checking if the server can receive and respond to tool calls
Diagnosing whether a problem is in the MCP transport layer or in a specific tool
The user asks things like "ping the MCP server", "is the MCP server alive", "cek MCP server", "MCP server jalan tidak", "test the MCP connection", "apakah MCP-nya nyala", "smoke test the server"
DO NOT USE FOR:
Validating the RESTForge license or database connection -> use 'setup_validate_config'
Reading the active configuration of a project -> use 'setup_read_env'
Anything related to RESTForge state, configuration, or project setup
This tool runs in-process: it does not touch the filesystem, network, or any RESTForge component. Output: "pong" with ISO 8601 timestamp and server version, plus the optional echoed message.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "verify the MCP server is responsive", "validate the configuration").
Speak in plain language. Confirm that the MCP server is responsive and report the timestamp and server version.
Keep the reply concise; this is a smoke test, not a diagnostic dump.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional message to echo back in the response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint; the description adds that the tool runs in-process, does not touch filesystem/network/RESTForge, and outputs 'pong' with timestamp and version. This context goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (USE WHEN, DO NOT USE, presentation guidelines). Front-loaded with purpose. Slightly verbose with presentation guidance, but each section serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional param, no output schema), the description covers all necessary aspects: purpose, usage scenarios, behavioral constraints, and output format. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional 'message' parameter has 100% schema description coverage ('Optional message to echo back'). The description only mentions it in output context, adding marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is a 'smoke test tool to verify the MCP server is up and responsive.' It clearly distinguishes itself from RESTForge operations, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes a 'USE WHEN' section listing specific scenarios and a 'DO NOT USE FOR' section with explicit alternative tools like 'setup_validate_config' and 'setup_read_env', providing clear guidance on when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_check_launcher_existsCheck Launcher File ExistenceARead-onlyIdempotent
Check whether the launcher files that would be produced by 'runtime_generate_launcher' already exist in the project root. Read-only — does not create or overwrite anything.
USE WHEN:
Before invoking 'runtime_generate_launcher' — to detect potential overwrites and ask the user for confirmation
The user wants to know which files would be created without committing
The user is debugging an existing setup and wants to confirm what files exist
DO NOT USE FOR:
Generating launcher files -> use 'runtime_generate_launcher'
Reading the content of an existing launcher -> use generic Read tools
Checking if the server is currently running -> use 'runtime_check_status'
The list of files depends on os + mode (file names are FIXED, not user-customisable):
windows + host: server-start.bat, server-stop.bat
windows + pm2: server-start.bat, server-stop.bat, ecosystem.config.js
linux + host: server-start.sh, server-stop.sh
linux + pm2: server-start.sh, server-stop.sh, ecosystem.config.js
PRESENTATION GUIDANCE:
Match the user's language.
Never mention internal tool names.
When at least one file already exists, ask the user whether to overwrite (then call generate with overwrite=true).
Do not echo the JSON unless explicitly asked.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder root | |
| os | Yes | Target OS for the launcher | |
| mode | Yes | Runtime mode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint; the description adds behavioral details like read-only, no creation/overwrite, and fixed file names per os+mode, but doesn't cover return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections and bullet points, each sentence adds value; no unnecessary verbiage despite moderate length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and description doesn't explain what the tool returns (e.g., list of files or boolean), which is a gap for a simple check tool. Otherwise complete for usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameter descriptions, so baseline is 3. The description adds file name details but doesn't enhance parameter understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks existence of launcher files produced by runtime_generate_launcher, uses specific verbs, and distinguishes from sibling tools like runtime_generate_launcher and runtime_check_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE WHEN and DO NOT USE FOR sections provide clear context and alternatives, such as using runtime_generate_launcher for generation and generic Read tools for reading content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_check_statusCheck RESTForge Server StatusARead-only
Check whether the RESTForge Server is currently running. Inspects (in order): (1) .restforge/server.pid file (legacy launchers), (2) port-based detection — tries to bind to the configured port; if the bind fails the port is in use and a host-mode server is presumed running, (3) PM2 process list via 'pm2 jlist', (4) optional HTTP health endpoint probe.
USE WHEN:
The user asks "is the server running?", "apakah server jalan?", "cek status server", "server saya kenapa tidak respond"
After running the launcher (server-start.bat or equivalent) — to confirm the server actually came up
Before invoking other tools that talk to the running server — to verify it's reachable
The user reports the server appears to be down — to diagnose stale PID file vs PM2 app issue vs not started
DO NOT USE FOR:
Generating launcher files -> use 'runtime_generate_launcher'
Validating preflight before starting -> use 'runtime_validate_preflight'
Starting or stopping the server -> the user runs server-start.bat / server-stop.bat themselves
Calling specific business endpoints to test functionality -> out of scope; this only checks server liveness
Detection modes:
'auto' (default): try host mode first (PID file then port-based), fall back to pm2 mode
'host': only inspect .restforge/server.pid and the port (skip PM2 entirely)
'pm2': only inspect 'pm2 jlist' output (skip PID file and port). Requires 'project' parameter to locate the right app.
Note on host-mode detection:
Current launcher scripts (generated by 'runtime_generate_launcher') do NOT write .restforge/server.pid. Detection therefore relies primarily on the port-based bind probe — pass 'port' to enable it. The PID-file path is still inspected for backward compatibility with launchers generated by older versions.
The port probe binds locally on host_address (default 127.0.0.1). If the server binds to a different interface, pass host_address accordingly. A port shown 'in use' confirms a process is listening, but does not guarantee it is the RESTForge server.
Optional HTTP health probe: if 'health_path' is set, the tool performs an HTTP GET against http://: and reports status code + response time. Without health_path, only process liveness is checked.
Preconditions:
The cwd folder must exist.
For host mode port-based detection: 'port' must be provided.
For pm2 mode: PM2 must be installed and running on the user machine.
For HTTP probe: 'port' must be provided alongside 'health_path'.
PRESENTATION GUIDANCE:
Match the user's language.
Never mention internal tool names.
Summarise the state in one sentence: running, dead_pid (stale), http_unreachable (process up but endpoint dead), or not_running.
For 'dead_pid': suggest the user run the stop launcher (or 'pm2 delete' for PM2 mode) to clean up before starting again.
For 'http_unreachable': process is alive but the HTTP probe failed — usually a config mismatch (wrong port or path) or server still booting. Suggest re-trying after a moment or checking server logs.
For 'not_running': the server isn't currently running. Suggest generating a launcher (if not already done) and asking the user to execute it.
Do not echo the JSON envelope unless explicitly asked.
The HTTP probe targets the local machine by default (127.0.0.1). If the server binds to a different address (SERVER_ADDRESS in .env), the user can pass host_address to override.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder root (must contain .restforge/ if host mode was used) | |
| mode | No | Detection mode. auto = try host first, fallback to pm2. host = only check PID file. pm2 = only check pm2 list. | auto |
| project | No | Project name (e.g. mini-inventory). Required for pm2 mode to find the specific app in pm2 list. Optional for host mode (only used in summary text). | |
| port | No | Port the server should be listening on. Required if health_path is set. | |
| host_address | No | Host or IP for the HTTP health check (default 127.0.0.1). | 127.0.0.1 |
| health_path | No | If set, perform an HTTP GET against http://<host_address>:<port><health_path> and report the result. If omitted, no HTTP probe is performed. | |
| timeout_ms | No | HTTP probe timeout in milliseconds (default 3000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds rich behavioral details: detection order (PID file, port probe, PM2, HTTP probe), the fact that current launchers don't write PID file, that a port in use doesn't guarantee it's the server, and caveats about host address. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (e.g., USE WHEN, DO NOT USE FOR, Detection modes, Note on host-mode detection) and bullet points. It is slightly verbose but every sentence adds value. Front-loads the main purpose effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, multiple detection modes, HTTP probe, no output schema), the description is thorough. It covers preconditions, detection flow, presentation guidance, and caveats (e.g., stale PID file, interface mismatch). No output schema, but the description sufficiently explains return states (running, dead_pid, etc.).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant meaning beyond the schema: explains detection modes, when each parameter is required (e.g., 'port' for port detection and health_path, 'project' for pm2 mode), and provides context like 'host_address' default and interaction with health_path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Check whether the RESTForge Server is currently running' (specific verb+resource). It lists detection modes and preconditions, and distinguishes from sibling tools like runtime_generate_launcher and runtime_validate_preflight by explicitly stating what the tool is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a 'USE WHEN' section with explicit scenarios (e.g., user asks 'is the server running?'), and a 'DO NOT USE FOR' section listing alternatives (e.g., use 'runtime_generate_launcher' for generating launchers). This provides clear guidance on when to use this tool versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_detect_configDetect RESTForge Config FilesARead-onlyIdempotent
Detect RESTForge configuration files by scanning the 'config/' folder for .env files. Each .env file is a candidate config to pass via --config= when invoking the RESTForge runtime.
USE WHEN:
The user asks "which config files are available?", "config apa saja yang ada", "list .env"
Before generating a launcher script — to confirm which config file to pass
Before invoking 'runtime_generate_launcher' — to know if a config exists at all
The user mentions running the server but the config file is unknown or ambiguous
DO NOT USE FOR:
Listing project names -> use 'runtime_detect_project'
Reading content of a specific .env file -> use 'setup_read_env'
Validating connection credentials in a config -> use 'setup_validate_config' or 'runtime_validate_preflight'
Preconditions:
The 'config/' folder must exist at /config/. If missing, the precondition response will say so.
PRESENTATION GUIDANCE:
Match the user's language.
Never mention internal tool names.
When exactly one config file is found, proceed without asking. When multiple are found, ask the user which environment they want.
The filename is what gets passed as --config=; the runtime will resolve it relative to the config/ folder automatically.
When a precondition is not met (folder missing or empty), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder root (must contain config/) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: scanning behavior, presentation guidance, precondition handling, and filename usage. Annotations already indicate read-only/idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (USE WHEN, etc.), but slightly verbose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains return value (list of filenames) and how to use it. Preconditions and edge cases addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers cwd with 100% description. Description reinforces the precondition that config/ must exist relative to cwd, adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects RESTForge config files by scanning the config/ folder for .env files. It differentiates from siblings via explicit DO NOT USE examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit USE WHEN conditions (e.g., user asks for available configs, before generating launcher) and DO NOT USE scenarios with alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_detect_projectDetect RESTForge Project NamesARead-onlyIdempotent
Detect RESTForge project names by scanning the conventional 'src/modules/' folder. Each .js file in that folder represents one RESTForge project; the filename without extension is the project name.
USE WHEN:
The user asks "which projects are available?", "what RESTForge projects are in this folder?", "list project saya"
Before generating a launcher script — to confirm the project name to pass as --project=
Before invoking 'runtime_generate_launcher' — to determine whether the user must specify a project name or one can be auto-detected
The user requests to run the server but the project name is unknown or ambiguous
DO NOT USE FOR:
Listing config files -> use 'runtime_detect_config'
Listing payload spec files -> use generic Read or filesystem tools
Listing database tables -> use 'codegen_list_tables'
Validating runtime preflight -> use 'runtime_validate_preflight'
Preconditions:
The 'src/modules/' folder must exist at /src/modules/. If missing, the precondition response will say so.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user.
When exactly one project is found, proceed without asking. When multiple are found, ask the user to pick one before generating the launcher.
The project name comes from the filename in src/modules/ (without the .js extension); explain this in plain language if asked.
When a precondition is not met (folder missing), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder root (must contain src/modules/) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations: it explains that detection scans JS files, mentions preconditions (folder existence), and details presentation rules (language matching, auto-proceed vs. ask user). Since annotations already declare readOnly and idempotent, the description effectively supplements them without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with headers and bullet points, making it easy to scan. While it is longer than minimal, each section (USE WHEN, DO NOT USE FOR, Preconditions, PRESENTATION GUIDANCE) earns its place by adding essential guidance. Could be slightly tightened but remains effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides complete context for a simple detection tool: it explains the detection logic, preconditions, usage boundaries, and presentation rules. No output schema is needed because the output is implicitly a list of project names. The description fully equips an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that 'cwd' must contain 'src/modules/' and that the folder's existence is a precondition. This provides meaningful context beyond the schema's basic parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific verb ('Detect') and resource ('RESTForge project names by scanning the conventional 'src/modules/' folder'). It distinguishes itself from sibling tools like 'runtime_detect_config' by focusing on project names from module files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'USE WHEN' and 'DO NOT USE FOR' sections that list specific user queries and contexts. It names alternative tools for different tasks (e.g., 'runtime_detect_config' for config files), providing clear guidance on when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_generate_launcherGenerate RESTForge Launcher ScriptADestructive
Generate a launcher script for the RESTForge Server in the project root. This tool does NOT run the server — it produces a .bat or .sh script that the user must execute themselves. This is intentional: a server launched by the AI session would terminate when the session ends; a script executed by the user lives in the user's terminal/session and persists independently.
Files produced (depending on os + mode) — file names are FIXED, not user-customisable:
windows + host: server-start.bat, server-stop.bat
windows + pm2: server-start.bat (calls 'pm2 start ecosystem.config.js'), server-stop.bat, ecosystem.config.js
linux + host: server-start.sh, server-stop.sh
linux + pm2: server-start.sh (calls 'pm2 start ecosystem.config.js'), server-stop.sh, ecosystem.config.js
For host mode the start script runs 'npx restforge ...' in the foreground (or 'exec' on Linux). The stop script kills the process by port via netstat/taskkill on Windows or lsof/fuser+kill on Linux — no PID file is required. For PM2 mode the ecosystem points 'script' directly at './node_modules/restforgejs/server.js' to bypass the npx shim and avoid PM2's default node interpreter mis-parsing a .cmd file.
USE WHEN:
The user asks "run the server", "jalankan server", "start RESTForge"
After confirming OS, mode, project, config, and port with the user (typically via 'runtime_detect_project', 'runtime_detect_config', and direct questions)
After 'runtime_check_launcher_exists' returned no conflicts, OR the user confirmed overwrite
DO NOT USE FOR:
Actually starting or stopping the server -> the user runs the generated script themselves
Modifying database schema or payload files -> out of scope
Running one-off commands -> out of scope; this tool is launcher-scaffolding only
Preconditions:
The cwd must exist.
'cluster' and 'workers' are mutually exclusive.
'watch' is not allowed with mode=pm2.
PRESENTATION GUIDANCE:
Match the user's language.
Never mention internal tool names. Refer to the produced files by their visible names (e.g. 'server-start.bat').
Tell the user clearly that the AI does NOT execute the script — they must run it themselves so the server keeps running after the AI session ends.
For PM2 mode: warn the user that PM2 must be installed globally first (npm install -g pm2). Do not auto-install.
After generation, summarise: location, files produced, how to start, how to stop. Do not paste the JSON envelope unless explicitly asked.
If the user asks for a different mode (Windows Service, Docker, systemd) — those are out of scope V1; suggest using host or pm2 instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder root (output goes here) | |
| os | Yes | Target OS: windows produces .bat, linux produces .sh | |
| mode | Yes | Runtime mode: host runs npx restforge directly; pm2 uses ecosystem.config.js | |
| project | Yes | Project name (filename in src/modules/ without .js). Passed as --project=<name> | |
| config | Yes | Config file name in config/ folder (e.g. db-connection.env). Passed as --config=<filename> | |
| port | Yes | Server port | |
| overwrite | No | If true, overwrite existing files. If false, skip existing. | |
| cluster | No | If true, append --cluster flag. Mutually exclusive with workers. | |
| workers | No | If set, append --workers=N flag. Mutually exclusive with cluster. | |
| watch | No | If true, append --watch flag. Not allowed with mode=pm2 (PM2 has its own watch via ecosystem). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false; the description adds details on file generation, modes, and the intentional design choice (AI session termination). No contradictions, and it enriches understanding beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive yet well-organized with sections (purpose, file details, use cases, preconditions, presentation guidance). Every sentence adds value, and the most critical info (it generates, doesn't run) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, no output schema), the description covers all aspects: purpose, exact file outputs, usage contexts, parameter constraints, and post-generation instructions. It leaves no ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description significantly adds meaning: explains os/mode file naming, mutual exclusivity of cluster/workers, and watch disallowed with pm2. This goes well beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Generate a launcher script for the RESTForge Server' and clarifies that it does not run the server, distinguishing it from sibling tools like runtime_check_status. This provides a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear when-to-use conditions (user asks to run the server) and when-not-to-use (actual server start/stop, modifying DB schema). It also lists preconditions and alternatives, making it easy for agents to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_validate_preflightValidate RESTForge Runtime PreflightARead-only
Run a runtime preflight check before generating a launcher. Wraps 'npx restforge validate --config=' (license + database + redis/kafka) and additionally inspects: (1) .restforge/server.pid to detect a possibly-running server, (2) optional local port availability via Node net binding.
USE WHEN:
Before invoking 'runtime_generate_launcher' — to verify the project is ready to launch
The user asks "is this ready to run?", "preflight check", "cek apakah server bisa dijalankan"
After changing config or installing a new license — to verify everything still works
The user reports the server fails to start — to identify the failing component
DO NOT USE FOR:
Validating ONLY the config (license/database) without runtime context -> use 'setup_validate_config'
Listing or reading config values -> use 'setup_read_env'
Generating launcher files -> use 'runtime_generate_launcher'
This tool runs: npx restforge validate --config= in the given cwd, plus filesystem checks (PID file, optional port).
Preconditions:
The project must have restforgejs installed in node_modules.
The config file must exist in the config/ folder.
PRESENTATION GUIDANCE:
Match the user's language.
Never mention internal tool names.
Summarise by component: license, database, optional redis/kafka, PID file presence, port availability.
Do not echo license keys, passwords, or full connection URIs from the CLI output.
Preflight failure is informational, not a blocker. The user can still proceed to generate the launcher (with a warning recorded).
Port check is best-effort: a "free" result on this machine does not guarantee the port is free for the eventual server bind address (which may differ).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder root | |
| config | No | Config file name in the config/ folder (default: db-connection.env) | db-connection.env |
| port | No | Port to check availability (optional). When set, the tool tries to bind locally to detect if the port is free. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=false. The description reinforces this by stating preflight failure is informational and not a blocker, and explains the best-effort nature of the port check. No contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (USE WHEN, DO NOT USE FOR, Preconditions, PRESENTATION GUIDANCE). It is front-loaded with the purpose and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema exists, the description provides presentation guidance and notes the informational nature of failures. However, it lacks explicit details on the return format (e.g., structured object vs. text). This minor gap prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context for the 'port' parameter ('tries to bind locally to detect if the port is free'), which is beyond the schema's description. For 'cwd' and 'config', the description aligns with the schema but does not add significant new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool runs a runtime preflight check before generating a launcher, detailing the components inspected (license, database, redis/kafka, PID file, port). This clearly distinguishes from sibling tools like 'setup_validate_config' and 'runtime_generate_launcher'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes dedicated 'USE WHEN' and 'DO NOT USE FOR' sections that specify conditions (e.g., before invoking 'runtime_generate_launcher', after config changes) and explicitly name alternative tools (e.g., 'setup_validate_config', 'setup_read_env'). This provides excellent guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_create_folderCreate Project FolderA
Create a new folder to serve as the root of a RESTForge project. The folder will host node_modules (restforgejs), config/, payload/, and generated src/.
USE WHEN:
The user wants to set up a new RESTForge project working folder
Starting a RESTForge project from scratch in a specific location
The user says things like "buat folder project baru", "create a new project folder", "siapkan folder untuk project baru", "make a directory for my new RESTForge project", "bikinkan project baru di folder X", "scaffold a new restforge project"
A safe mkdir with collision detection is needed
DO NOT USE FOR:
Installing the restforgejs package -> use 'setup_install_package'
Generating skeleton config -> use 'setup_init_config'
Writing credentials -> use 'setup_write_env'
This is typically the very first step in setting up a new RESTForge project. The natural next step after this is 'setup_install_package' to install the RESTForge package into the new folder. // per §5.2
This tool runs: fs.mkdir(/, { recursive: true }) Output: absolute path of the created folder. Pass this path as 'cwd' to subsequent setup_* tools.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "install the package", "set up the initial config").
Speak in plain language. Confirm the folder was created and state the absolute path.
When the folder already exists and force was not set, frame it as a choice or question, not as a hard error.
| Name | Required | Description | Default |
|---|---|---|---|
| folderName | No | Project folder name. Default: backend-server | backend-server |
| parentCwd | No | Parent directory where the folder is created. Default: process.cwd() | |
| force | No | Continue even if the folder already exists (mkdir recursive remains idempotent) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and idempotentHint=false. The description adds implementation detail (fs.mkdir with recursive: true), output format (absolute path), and collision handling behavior (force flag frames as choice/question).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections and bullet points, but somewhat lengthy. Each section earns its place: purpose, usage, internals, output, presentation. Front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, output is clearly described (absolute path) with usage guidance for subsequent tools. Presentation guidance adds completeness for agent interaction. Adequately covers all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description reinforces defaults (folderName) and clarifies force behavior beyond schema, adding moderate value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear, specific verb+resource: 'Create a new folder to serve as the root of a RESTForge project.' It lists contents and explicitly distinguishes from siblings via 'DO NOT USE FOR' referencing other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes a 'USE WHEN' section with concrete user phrases and a 'DO NOT USE FOR' section naming alternative tools. Also states natural next step, making usage context explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_get_config_schemaGet Config SchemaARead-onlyIdempotent
Get JSON schema of all parameters available in db-connection.env template. Schema includes parameter name, section, type (string/integer/boolean), default value, description, and required status.
USE WHEN:
The agent needs to know what parameters are configurable before writing config
Listing available config options for user reference
Building a dynamic UI or validator from the schema
The user asks things like "what parameters are available", "list all config options", "parameter apa saja yang bisa di-set", "tampilkan schema config", "what can I configure", "show me the configurable fields", "field apa saja yang valid"
DO NOT USE FOR:
Reading actual current config values -> use 'setup_read_env'
Writing config -> use 'setup_write_env' or 'setup_update_env'
Getting raw template text -> use 'setup_get_init_template'
This tool runs: npx restforge-cli config:schema in the given cwd. The schema is sourced from restforge-cli (single source of truth) so it stays in sync with the restforge runtime version installed in the project. Requires restforgejs >= 2.3.1.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "install the package", "fill in the credentials").
Speak in plain language. Summarise the schema (number of parameters, sections present, key required fields); do not paste the entire JSON unless the user explicitly asks for it.
When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must have restforgejs installed in node_modules) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent. The description adds operational details (command execution, version requirement) and data freshness (single source of truth). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, but the presentation guidance adds length. Could be slightly more concise, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one param, no output schema), the description covers purpose, usage, prerequisites, and even response formatting. Fully complete for the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the cwd parameter. The description does not add new meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches the JSON schema of config parameters, with a specific verb and resource. It distinguishes from sibling tools like setup_read_env and setup_write_env.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE WHEN and DO NOT USE FOR sections list scenarios and alternatives, providing clear guidance for when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_get_init_templateGet Init TemplateARead-onlyIdempotent
Get raw template content of db-connection.env without writing any file. Useful as reference after current file has been modified, or for comparing current config against template defaults (drift detection).
USE WHEN:
The agent needs to see template defaults after the current file has been modified
Comparing current config with template (drift detection)
Restoring template content reference without re-running init
The user asks things like "show me the default template", "lihat template config default", "apa isi template defaultnya", "what does the default config look like", "bandingkan dengan template asli", "compare against the original template"
DO NOT USE FOR:
Generating new config files in the project -> use 'setup_init_config'
Reading current config -> use 'setup_read_env'
Getting structured schema (JSON) -> use 'setup_get_config_schema'
This tool runs: npx restforge-cli config:template in the given cwd. This tool is READ-ONLY and safe to call repeatedly. No file is written. Requires restforgejs >= 2.3.1.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "install the package", "set up the initial config", "show the active configuration").
Speak in plain language. Summarise what the template contains (sections present, total parameters); do not paste the entire template body unless the user explicitly asks for it.
When a precondition is not met (e.g. the package is not installed), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must have restforgejs installed in node_modules) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true and idempotentHint=true. The description adds context: 'Runs npx restforge-cli config:template', 'READ-ONLY and safe to call repeatedly', 'No file is written', and a version requirement. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (USE WHEN, DO NOT USE FOR). Front-loaded with core purpose. Presentation guidance is extra but relevant. Could be slightly more concise by merging some points, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and no output schema, the description fully explains what the tool does, when to use it, its safety profile, and internal command. Includes version prerequisite. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (cwd) with high schema description coverage (100%). The schema already explains 'Absolute path of the project folder (must have restforgejs installed)'. Description doesn't add significant new parameter info beyond restating the requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get raw template content of db-connection.env without writing any file.' It clearly identifies the resource (template content), action (get), and key behavior (no file writing). It distinguishes from siblings like setup_init_config and setup_read_env.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases (drift detection, comparing config after modification) and a 'DO NOT USE FOR' section listing three sibling tools with their purposes. Includes example user queries in multiple languages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_init_configInit RESTForge ConfigA
Generate skeleton config and sample payloads in the project folder via restforge-cli.
USE WHEN:
The project has restforgejs installed in node_modules
The config/ and payload/ folders do not exist yet, or you want to reset them to the default template
Starting RESTForge project configuration from scratch
DO NOT USE FOR:
Installing restforgejs -> use 'setup_install_package'
Filling in credentials in db-connection.env -> use 'setup_write_env'
This tool runs: npx restforge-cli init in the given cwd. Output: config/db-connection.env (empty template), payload/samples.json, payload/query/samples-datatables.sql.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "install the package", "fill in the credentials").
Speak in plain language. Summarise the result; do not paste raw CLI output unless the user explicitly asks.
When a precondition is not met, frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes generated files and mentions 'reset them to the default template' implying destructive behavior, consistent with readOnlyHint=false. Annotations already cover non-idempotent nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections, but includes presentation guidance that adds length. Still clear and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, preconditions, and output files. Complete for a simple tool with one parameter and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter cwd has full schema coverage (100%), and description adds context by stating the tool runs in the given cwd and generates files there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb 'Generate' and specific resource 'skeleton config and sample payloads', and distinguishes from siblings like setup_install_package and setup_write_env.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'USE WHEN' and 'DO NOT USE FOR' sections with conditions and alternatives, e.g., 'DO NOT USE FOR: Installing restforgejs -> use setup_install_package'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_install_packageInstall restforgejs PackageAIdempotent
Install the restforgejs package into the project's node_modules via npm.
USE WHEN:
The user wants to install RESTForge (restforgejs) into a project
The project folder exists but does not yet have restforgejs in node_modules
Setting up a new project before the configuration stage
Updating restforgejs to a specific tag or version
The user says things like "install restforge", "tambahkan restforgejs", "pasang package restforge", "set up the package", "siapkan project ini", "upgrade restforgejs", "ganti versi restforge"
DO NOT USE FOR:
Creating a new project folder -> use 'setup_create_folder'
Generating config skeleton -> use 'setup_init_config'
Filling in credentials -> use 'setup_write_env'
Validating the configuration -> use 'setup_validate_config'
This tool sits in the middle of the new-project setup chain: typically run after 'setup_create_folder' creates the project folder, and before 'setup_init_config' which generates the configuration skeleton. 'setup_init_config' will return a precondition message if this tool has not been run first. // per §5.2
This tool runs: npm install restforgejs@ in the given cwd (local install, not global). Default version is "beta" because RESTForge is currently a public pre-release. Use "latest" once stable, or a specific version (e.g. "1.2.3").
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "create the project folder", "generate the initial config", "fill in the credentials").
Speak in plain language. Summarise the result; do not paste raw npm output unless the user explicitly asks.
When a precondition is not met (e.g. the project folder is missing), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder (must exist before this tool runs) | |
| version | No | npm version or tag: "beta" (default), "latest", or a specific version (e.g. "1.2.3") | beta |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool runs 'npm install restforgejs@<version>' in cwd (local install), defaults to 'beta' version, and notes that setup_init_config will return a precondition message if not run first. Annotations already indicate idempotentHint=true and readOnlyHint=false, so the description adds behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is relatively long but well-structured with sections (USE WHEN, DO NOT USE, positioning note, presentation guidance). Every section adds value. Could be slightly more concise, but the structure aids clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 params, no output schema, and annotations present, the description covers prerequisites (folder exists), exact command, version semantics, and even agent presentation behavior. It thoroughly addresses what the agent needs to know to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 2 parameters with 100% description coverage. Description adds extra context: cwd must exist before running, and explains why default version is 'beta' (RESTForge is a public pre-release). This adds meaning beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Install restforgejs Package' and description clearly state the tool installs the restforgejs package via npm. The description uses specific verb 'install' and resource 'restforgejs package', and distinguishes from sibling tools by listing what the tool is NOT for (e.g., creating folder, generating config).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'USE WHEN' scenarios (e.g., user wants to install RESTForge, setup before configuration, update to specific version) and 'DO NOT USE FOR' list that references sibling tools (setup_create_folder, setup_init_config, etc.). Also positions the tool in the setup chain, giving clear context for when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_read_envRead Database Connection EnvARead-onlyIdempotent
Read and parse the config/db-connection.env file, returning all parameters as KEY=value lines. Sensitive fields (LICENSE, DB_PASSWORD, REDIS_PASSWORD, KAFKA_SASL_PASSWORD) are masked by default.
USE WHEN:
The user asks to see the active/current configuration, parameters, settings, or env values of a RESTForge project
The user asks questions like "tampilkan parameter yang aktif", "config apa yang sudah di-set", "show current settings", "cek konfigurasi", "what's configured in this project"
Verifying the current configuration before calling 'setup_write_env' or 'setup_update_env' to make changes
Auditing the active config after a change
Listing every parameter present in the file (including optional sections like Live Sync, Redis, Kafka, Logging)
Checking whether a RESTForge project has been set up at all (this tool returns a clear "file not found" precondition if not)
DO NOT USE FOR:
Writing values -> use 'setup_write_env' or 'setup_update_env'
Validating connection -> use 'setup_validate_config'
This tool is READ-ONLY and safe to call repeatedly. Pass unmask=true to see real values of sensitive fields (use with care).
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "set up the initial config", "fill in the credentials", "update a single value", "validate the connection").
Speak in plain language. Summarise the result; do not paste the full KEY=value list unless the user explicitly asks for it.
Even when unmask=true, do not echo sensitive values (license keys, passwords) into chat unless the user explicitly asks. Prefer to confirm presence and length only.
When a precondition is not met (e.g. config file is missing), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder | |
| configFile | No | Config file name in the config/ folder. Default: db-connection.env | db-connection.env |
| unmask | No | When true, show real values of sensitive fields (LICENSE, *_PASSWORD). Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark readOnlyHint and idempotentHint; description adds that the tool is read-only, safe to repeat, masks sensitive fields by default, and the unmask parameter behavior. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with clear sections but slightly long; some redundancy (e.g., 'READ-ONLY' repeated). Still effective and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Perfectly complete: covers purpose, usage, parameters, behavior, presentation, and error conditions. No gaps considering the tool's role and lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 3 parameters with descriptions. Description adds guidance on unmask usage and default masking, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly specify the action (read and parse) and resource (config/db-connection.env). Distinguishes from siblings like setup_write_env, setup_update_env, and setup_validate_config by name and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE WHEN' list covering multiple scenarios and 'DO NOT USE FOR' with alternative tools. Also includes presentation guidance for safe interaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_update_envUpdate Database Connection EnvAIdempotent
Apply a partial update to config/db-connection.env. Accepts an arbitrary set of key/value pairs and merges them into the existing file, preserving comments, blank lines, and untouched parameters.
USE WHEN:
Toggling individual feature flags (e.g. LIVE_SYNC_ENABLED, REDIS_ENABLED, KAFKA_ENABLED)
Adjusting one or two values without restating the whole core connection
Adding a new optional parameter that is not in the template
DO NOT USE FOR:
Generating the initial config skeleton -> use 'setup_init_config'
Bulk write of license + DB credentials -> use 'setup_write_env'
Validating connection -> use 'setup_validate_config'
Behavior: read existing file, replace matching keys (preserving inline comments), append non-existing keys at the bottom, write back. Values may be string, number, or boolean (booleans serialize as 'true'/'false'). Values containing spaces, '=' or '#' are auto-quoted.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "set up the initial config", "fill in the credentials", "validate the connection").
Speak in plain language. Summarise the result by counting and naming the changed keys; do not paste the full diff block unless the user explicitly asks.
Do not echo sensitive values (license keys, passwords) into chat even when they appear masked in the response. Confirm presence and length only.
When a precondition is not met (e.g. config file is missing), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder | |
| configFile | No | Config file name in the config/ folder. Default: db-connection.env | db-connection.env |
| fields | Yes | Key-value map of parameters to update or add. Example: { "DB_PORT": 5433, "KAFKA_ENABLED": true } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses detailed behavior: reading existing file, replacing matching keys while preserving inline comments, appending new keys, auto-quoting values with special characters, and handling types. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections but includes a 'PRESENTATION GUIDANCE' section that, while useful, adds length. Not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a tool with 3 parameters and no output schema; covers behavior, usage alternatives, and presentation guidelines. An agent can use it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value with an example for 'fields' and clarifies type handling, but doesn't add much for 'cwd' or 'configFile'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it applies a partial update to config/db-connection.env by merging key/value pairs, preserving comments and untouched parameters. It distinguishes from siblings by listing what not to use it for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE WHEN and DO NOT USE FOR sections with specific scenarios and direct references to sibling tools (setup_init_config, setup_write_env, setup_validate_config).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_validate_configValidate RESTForge ConfigARead-onlyIdempotent
Validate the RESTForge license and connections to database, redis, and kafka based on the config file.
USE WHEN:
The db-connection.env file has been filled in (license + DB credentials)
After credentials have been written or updated, to verify they actually work
Before starting runtime or codegen operations
Verifying license and access to external services before deploy
Diagnosing configuration issues
The user asks things like "test connection", "cek license", "validate config", "apakah config sudah benar", "is the database reachable", "tes koneksi", "verify the configuration", "cek apakah license valid"
Before validating, consider calling 'setup_read_env' to confirm what is currently set — especially when the user describes the validation relative to a recent change (e.g. "cek apakah license barunya valid"). // per §5.3
The user wants to validate CONFIGURATION (license, database connection, kafka, redis), not payload files
DO NOT USE FOR:
Writing the config file -> use 'setup_write_env'
Adjusting individual fields -> use 'setup_update_env'
Generating module code -> use codegen_* domain tools
Checking if payload JSON files are still in sync with the database schema -> use 'codegen_validate_payload'
Often called as the final step after 'setup_write_env' or 'setup_update_env' has filled in or changed credentials, to confirm that they actually work. // per §5.2
This tool runs: npx restforge validate --config= in the given cwd. This tool is READ-ONLY and safe to call repeatedly.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "fill in the credentials", "update a single value", "set up the initial config").
Speak in plain language. Summarise the validation result by component (license, database, optional redis/kafka); do not paste the raw CLI output unless the user explicitly asks.
The CLI output may contain license fragments, host names, or user names. Do not echo license keys, passwords, or full connection URIs into chat. Confirm validation status only.
When a precondition is not met (e.g. config file is missing), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder | |
| configFile | No | Config file name in the config/ folder. Default: db-connection.env | db-connection.env |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds that it runs 'npx restforge validate' and explicitly states 'read-only and safe to call repeatedly', reinforcing safety but adding moderate value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with main purpose and well-organized into USE WHEN, DO NOT USE, presentation guidance. While somewhat long, each section contributes essential guidance; minor redundancy could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters and no output schema, the description covers validation scope, preconditions, and presentation guidance. It lacks explicit output format but addresses handling of results (e.g., summarizing, no raw output). Relatively complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description mentions 'cwd' and 'configFile' with the default value, consistent with schema but not adding significant new meaning. Adequate given high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'validate' and resource 'RESTForge config' (license, database, redis, kafka). It distinguishes from sibling tools like codegen_* and setup_write_env via explicit DO NOT USE conditions, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides comprehensive USE WHEN conditions (e.g., after filling credentials, before runtime) and DO NOT USE list referencing specific alternatives. Includes multi-language examples and a suggestion to call setup_read_env first, covering when to use and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_write_envWrite Database Connection EnvAIdempotent
Write license, server settings, and database credentials into config/db-connection.env using a partial-merge strategy that preserves all other parameters and comments in the file.
USE WHEN:
The user provides a complete set of license + database credentials in one go
The user is doing initial credential setup (first time filling in the empty template)
You need to fill in or update ALL core connection fields together (license, server, database) — even if some values are already set, this tool will overwrite them consistently
The user says things like "isi credentials", "setup koneksi database", "fill in the connection info", "atur license dan database"
DO NOT USE FOR:
Generating the initial config skeleton -> use 'setup_init_config'
Changing only one or two fields (e.g. just the password, or toggle a flag) -> use 'setup_update_env'
Validating license/connection -> use 'setup_validate_config'
Behavior: read existing file, update LICENSE/SERVER_*/DB_* entries in place, append any missing keys at the bottom, and write back. Comments, blank lines, and unrelated parameters are preserved verbatim. Output file: /config/db-connection.env.
PRESENTATION GUIDANCE:
Match the user's language. If the user writes in Indonesian, respond in Indonesian.
Never mention internal tool names in the reply to the user. Describe actions by what they do (e.g. "set up the initial config", "update a single value", "validate the connection").
Speak in plain language. Summarise what was written; do not paste the full field list unless the user explicitly asks.
Do not echo sensitive values (license keys, passwords) into chat even when they appear masked in the response. Confirm only that they were set.
When a precondition is not met (e.g. config file is missing), frame it as a question or next-step suggestion rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder | |
| license | Yes | ||
| serverAddress | No | 127.0.0.1 | |
| serverPort | No | ||
| dbType | Yes | ||
| dbHost | Yes | ||
| dbPort | Yes | ||
| dbUser | Yes | ||
| dbPassword | Yes | ||
| dbName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is a write operation (readOnlyHint=false) and idempotent (idempotentHint=true). The description adds that it reads the existing file, updates specific fields in place, appends missing keys, and preserves comments/blank lines. This reveals behavior beyond annotations, though it could explicitly mention that it overwrites existing values for the updated fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive and well-structured with sections (USE WHEN, DO NOT USE, Behavior, PRESENTATION GUIDANCE) but is somewhat lengthy. The front-loading is effective, but the presentation guidance section is verbose and somewhat tangential to the tool's core behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 10 parameters and no output schema, the description covers most essential aspects: purpose, when to use, behavioral details, and output file location. It mentions handling of missing keys but omits details about error handling or file non-existence (though implied in presentation guidance). Overall, it is relatively complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10%, but the description groups parameters into 'license, server settings, and database credentials', which adds context. However, it does not explain each parameter's meaning, format (e.g., pattern for license), or default values, leaving room for ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Write license, server settings, and database credentials into config/db-connection.env using a partial-merge strategy'. It explicitly differentiates from siblings by naming alternative tools for different tasks (e.g., setup_init_config, setup_update_env).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes dedicated 'USE WHEN' and 'DO NOT USE FOR' sections that explicitly specify when to use this tool vs. alternatives, providing concrete conditions and naming sibling tools for clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
29 tool updates
v0.5.4- First observed
codegen_create_dashboard - First observed
codegen_create_endpoint - First observed
codegen_describe_table - First observed
codegen_diff_payload - First observed
codegen_generate_payload - First observed
codegen_get_dashboard_catalog - First observed
codegen_get_field_validation_catalog - First observed
codegen_get_query_declarative_catalog - First observed
codegen_list_tables - First observed
codegen_sync_payload - First observed
codegen_validate_dashboard_payload - First observed
codegen_validate_payload - First observed
codegen_validate_sql - First observed
health_ping - First observed
runtime_check_launcher_exists - First observed
runtime_check_status - First observed
runtime_detect_config - First observed
runtime_detect_project - First observed
runtime_generate_launcher - First observed
runtime_validate_preflight - First observed
setup_create_folder - First observed
setup_get_config_schema - First observed
setup_get_init_template - First observed
setup_init_config - First observed
setup_install_package - First observed
setup_read_env - First observed
setup_update_env - First observed
setup_validate_config - First observed
setup_write_env
TDQS
Most tools are clearly distinguished by domain prefix and specific nouns (e.g., codegen vs runtime vs setup). However, there is slight potential confusion between similar creation tools (codegen_create_dashboard vs codegen_create_endpoint) and multiple validation tools, though descriptions provide clarity.
All tools follow a consistent domain_verb_noun pattern in snake_case (e.g., codegen_create_dashboard, runtime_check_status, setup_install_package). The naming is uniform and predictable across the entire set.
With 29 tools, the count is well above the typical 3-15 range for a coherent server. While many tools are justified by the comprehensive RESTForge workflow, the large number may overwhelm an agent or user, reducing coherence.
The tool surface covers the full RESTForge development lifecycle: setup, code generation, validation, runtime management, and introspection. Minor gaps exist, such as missing delete/drop operations and no direct server start tool (only launcher generation).
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for generating rough-draft project plans from natural-language prompts.
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that supercharges AI assistants with powerful tools for software development, enabling research, planning, code generation, and project scaffolding through natural language interaction.1167101MIT
- FlicenseNot gradedqualityDmaintenanceAutomatically converts Swagger/OpenAPI specifications into MCP servers, enabling AI agents to interact with any REST API through natural language by exposing endpoints as AI-friendly tools.3-
- AlicenseAqualityCmaintenanceEnables AI assistants to discover, install, configure, and manage MCP servers through natural language conversation, automating tedious manual setup across multiple clients.11MIT
- AlicenseBqualityDmaintenanceMCP server that integrates with Coolify to let AI assistants manage Coolify instances via a clean toolkit wrapping the official REST API.351696MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/restforge/restforge-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server