Use Gyral with coding agents
A coding agent writes better Gyral code when it can look things up instead of guessing. Gyral gives agents four things, and they work together:
- The MCP server,
@gyral/mcp: searches these docs, returns exact API signatures and working examples, scaffolds components, and typechecks code against your project. It runs locally or athttps://mcp.gyral.dev/mcp. - The agent skill: the rules and the API in a form agents load on demand.
- llms-small.txt: the rules, one complete component and tested recipes in one small file.
- An
AGENTS.mdin every appcreate-gyralmakes.
The hosted MCP server
https://mcp.gyral.dev/mcp is a public MCP server over Streamable HTTP. It needs no token and
no install, and it only reads: it answers from Gyral's docs, API and examples.
In Claude Code:
claude mcp add --transport http gyral https://mcp.gyral.dev/mcpIn VS Code, add it to .vscode/mcp.json:
{ "servers": { "gyral": { "type": "http", "url": "https://mcp.gyral.dev/mcp" } } }Any other client that speaks Streamable HTTP: add a server with the URL
https://mcp.gyral.dev/mcp and no authentication.
The hosted server has every tool except check_snippet, which needs your project's
TypeScript and packages. It can run an older @gyral/mcp than the latest release; its
initialize response and https://mcp.gyral.dev/healthz report the version it serves. This
page describes the tools as @gyral/mcp 0.3.6 provides them.
The local MCP server
Run the server on your machine when the agent writes code. It adds check_snippet, which
typechecks against the TypeScript and @gyral/* versions installed in your project
(TypeScript 5 or 6; TypeScript 7 has no compiler API, so there it asks you to run your own
typecheck), and
scaffold_component reads your package.json. Start it from the project directory:
claude mcp add gyral -- npx -y @gyral/mcpThat's Claude Code. Other clients:
Codex:
codex mcp add gyral -- npx -y @gyral/mcpCursor, in
.cursor/mcp.json:{ "mcpServers": { "gyral": { "command": "npx", "args": ["-y", "@gyral/mcp"] } } }VS Code, in
.vscode/mcp.json:{ "servers": { "gyral": { "type": "stdio", "command": "npx", "args": ["-y", "@gyral/mcp"] } } }Any other client: run
npx -y @gyral/mcpas a stdio server.
npx fetches the latest @gyral/mcp release unless your project has another version installed.
The local server answers from the docs bundled with its own version, so it works offline and
matches the Gyral you install. Set GYRAL_DOCS_URL=https://gyral.dev/llms-full.txt to load
the latest docs at startup instead; it falls back to the bundled copy after 3 seconds.
GYRAL_PROJECT_DIR points check_snippet at another directory than the working one.
The tools
| Tool | What it returns |
|---|---|
start_here |
The mental model, the rules, the workflow, and which example or guide covers which task |
search_docs |
Ranked doc sections for a query: title, URL and snippet |
get_doc |
One docs page, or one section with #anchor, such as forms#the-server-half |
get_api |
The declaration, doc comment and import line of an export, with usage code and the next call; on a miss, the nearest names |
list_examples |
Every example and what it shows |
get_example |
One example's component source |
scaffold_component |
Starting code: basic, form, form-native or ssr-page, importing only what you have |
check_snippet |
Type errors for a module against your project, with a suggested fix for each (local only) |
The workflow the server teaches, first in its instructions and in every tool description: call
start_here once, start from get_example or scaffold_component, write the module right
away, then run check_snippet and apply its suggested fixes until it passes. Use get_api only
for a name you already saw in an example or an error, not to read the API type by type.
get_api steers back to that loop. On a function with a matching example, such as
define, each, fieldErrors or every, it adds a short usage module and the call that gives
working code for the task, such as scaffold_component({ tag: "signup-form", kind: "form-native" }).
On a type, it adds a note that TypeScript infers it and that the real type errors come from
check_snippet (on the local server) or your typecheck. get_api("*") groups the functions by task, with the example or scaffold to start from,
and collapses the types into one line. The local stdio server also counts reads (every docs, API and example lookup) since the
agent last called scaffold_component or check_snippet: from the third get_example, the
fourth get_api or the eighth read of any kind, its answers end with a nudge that names the
examples read and suggests adapting the closest one, then check_snippet. The HTTP server, hosted or your own, keeps no
state between requests, so it never nudges.
scaffold_component imports only packages your project has installed, and
writes a model test only when @gyral/testing and vitest are there. form-native needs no
dependencies: it turns the browser's own constraint checks into your messages. check_snippet
also flags Gyral mistakes TypeScript can't see, such as a one-call define or side effects in
update.
The server also offers the resources gyral://llms.txt, gyral://skill and
gyral://skill/references/{name}, and a build-gyral-component prompt.
Host your own
gyral-mcp http runs the server behind the hosted one: read-only, anonymous Streamable HTTP
at /mcp, without check_snippet. It listens on 127.0.0.1:3000 by default, and needs
GYRAL_MCP_PUBLIC_ORIGIN set to the origin it's served from:
GYRAL_MCP_PUBLIC_ORIGIN=http://127.0.0.1:3000 npx -y @gyral/mcp httpIt is configured by environment variables only; gyral-mcp http --help lists them. Put it
behind TLS, and pin the package version you deploy. The
package README
has the details.
The agent skill
The skill teaches an agent the rules and the API, with a reference per topic that it loads
when the task needs it. Every code block in it typechecks against the packages.
SKILL.md opens with where to start from working code (the recipes, llms-small.txt and the MCP
loop) and the rule that the entry must import every component module, and its forms reference
starts with native validation, as the Forms guide does.
In Claude Code, add Gyral's repository as a plugin marketplace and install the plugin:
/plugin marketplace add gyraljs/gyral
/plugin install gyral@gyralFrom a shell: claude plugin marketplace add gyraljs/gyral && claude plugin install gyral@gyral.
Other agents: copy
skills/gyral/ into the agent's
skills or rules folder, or point it at SKILL.md.
Docs for agents
- llms-small.txt: read first. The mental model, MUST and DO NOT rules, a complete component with tests, the recipes, and where each export comes from, in under 40 KB. Every code block in it compiles against the released packages.
- llms.txt: the index of every page, each with a line on when to read it.
- llms-full.txt: all the docs, the API reference and the examples in one file.
- Every docs page has a Markdown copy: add
index.mdto its URL, as in/docs/testing/index.md.
New apps
npm create gyral@latest writes an AGENTS.md into every project, and a CLAUDE.md that
imports it, so an agent that opens the project learns the rules and the commands before it
writes anything. See Getting started.