briq
Server Details
Give your agent its own cloud: Postgres, Redis, a sandbox or any Docker image, in one MCP call.
- Status
- Healthy
- Uptime
- 32.0% over 22 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- briq-cloud/briq-mcp
- GitHub Stars
- 1
- Server Listing
- briq
TDQS
Scored across 23 tools
Most tools have clearly distinct purposes: lifecycle operations (run/start/stop/destroy/fork/resize), exec controls, file transfer, networking, and observability are separated well. The main possible confusion is between briq_run and briq_up, or between briq_stop, sleep behavior, and briq_destroy, but the descriptions clarify these boundaries.
All tools use a consistent briq_ snake_case prefix with readable resource or action names. The convention is not strictly verb_noun throughout (e.g. briq_catalog, briq_status, briq_up), but it is predictable and no naming styles are mixed chaotically.
With 23 tools, the surface is on the heavy side for an agent-facing server, even though the domain is broad. The exec and lifecycle families are justified, but the total count is above the typical 3-15 well-scoped range and increases selection burden.
The server covers the full briq lifecycle well: create, start, stop, destroy, fork, resize, sleep, expose, inspect, exec, file transfer, stacks, secrets listing, quota, docs, and feedback. Minor gaps exist, such as direct secret creation/update and explicit file deletion, but most workflows are available or have workarounds.
Available Tools
23 toolsbriq_catalogRecipe catalogARead-onlyIdempotentInspect
List ready-made recipes (postgres, redis, sandbox, …) with their parameters and outputs. Use before briq_run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | recipe name for details |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds that entries carry parameters and outputs and that it is a pre-run step, but says nothing about whether the catalog is static or account-scoped, or how large it is.
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?
Two compact sentences with the resource and the workflow cue front-loaded, and no filler whatsoever.
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 one-parameter read-only tool with rich annotations, the description covers what it returns (recipes with parameters and outputs) and when to call it. The only real omission is clarifying the list-vs-detail behavior of the `name` parameter.
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% and the single optional `name` parameter is already documented as "recipe name for details". The description frames the tool purely as a listing and never mentions that passing `name` narrows to one recipe's details, so it adds nothing beyond the schema here.
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?
Specific verb (List) plus resource (ready-made recipes) with concrete examples (postgres, redis, sandbox) and the added promise that each entry includes parameters and outputs. It does not explicitly contrast itself with siblings like briq_docs or briq_exec, so the differentiation is implied rather than stated.
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?
"Use before briq_run" gives a clear sequencing rule that tells the agent where this fits in the workflow. It stops short of stating exclusions (e.g., when to use briq_docs instead), but the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_destroyDestroy a briqADestructiveIdempotentInspect
Destroy a briq and free its disk. Do this when you are done. Pass stack instead of briq to destroy every briq of a stack (a fork you are done with). Returns once it lands (up to 30 s); a state of stopping, starting or destroying means it is still on its way. Calling again is safe: it waits for the same move rather than starting another.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | No | ||
| stack | No | Instead of `briq`: every briq of this stack |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond what the annotations already declare: it discloses that disk is freed, that the call blocks until the move lands (up to 30 s), how to interpret transitional states (stopping/starting/destroying mean still in flight), and that repeat calls wait on the same move. That turn idempotency into an operational rule, not just a hint flag.
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?
Four short sentences, each doing distinct work: action, timing of use, parameter alternative, and return/call-again semantics. The primary action is front-loaded and no sentence is filler.
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 destructive, no-output-schema, two-parameter tool, the description covers the gaps that matter: what is destroyed, what is released, how long the call may block, and how to interpret an intermediate result. An agent has everything needed to call it correctly and to avoid a premature retry.
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 50% — `briq` is undocumented in the schema, but the description clarifies the relationship between the two parameters ("Pass `stack` instead of `briq`" = mutually exclusive alternate targeting) and that stack expands to every briq in the stack. It does not say explicitly that at least one of the two must be supplied, which matters since required is empty.
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?
States a specific verb and resource ("Destroy a briq and free its disk") and immediately distinguishes two modes: a single briq vs. a whole `stack`. Against siblings like briq_stop or briq_fork, an agent can tell this is the terminal teardown operation without opening any schema.
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?
Gives an explicit trigger ("Do this when you are done") and explains the stack form as "a fork you are done with", which is a clear when-to-use signal. It stops short of naming a sibling alternative (e.g., briq_stop for pausing rather than destroying), so the exclusion set is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_docsRead the briq docsARead-onlyIdempotentInspect
Read briq's documentation: forks, stacks, sleep, keys and policy, cost, public and private URLs, regions, and every recipe. Without page, returns the index of every page with a one-line summary; then pass a page from it, e.g. "concepts/fork" or "cookbook/postgres".
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page to read, e.g. "concepts/fork", "cookbook/postgres", or a link from the index |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is free. The description adds real behavioral context the annotations don't: the no-argument call returns an index of all pages each with a one-line summary, which is a return-value contract. No pagination or rate-limit details, but that's a minor gap.
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?
One dense sentence pair: the resource and coverage are front-loaded, then the two-mode usage is stated with examples. No filler, no restating the title.
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 one-optional-param, no-output-schema tool, it covers both invocation modes and where valid page values come from. The only unstated detail is the response shape when reading a specific page (markdown text vs structured), which is a small but real gap.
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% and the single `page` param is documented in-schema. The description adds the semantics of *omitting* `page` (index mode) and how to obtain valid values (from the returned index), which the schema alone does not convey.
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?
States a specific verb and resource ("Read briq's documentation") and enumerates the topical coverage (forks, stacks, sleep, keys/policy, cost, URLs, regions, recipes), which immediately distinguishes it from all the operational briq_* siblings. An agent can tell this is the doc-lookup tool without opening the schema.
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?
Gives an explicit two-step workflow: call without `page` to get the index, then pass a page name from that index, with concrete examples ("concepts/fork", "cookbook/postgres"). It doesn't name any sibling alternatives or exclusions, but the read-docs-only usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_execRun a command in a briqADestructiveInspect
Execute a command inside a running briq and return stdout, stderr and the exit code, for up to 60 s. Use for migrations, seeding, health checks, the commands of a sandbox briq (scripts, tests, builds), or anything you would run with docker exec. Anything that can take longer (a build, a test suite, a data load): pass async: true, which starts it and answers at once with an exec id; then briq_exec_result reads it (it waits 30 s a call, up to 45 with waitMs) and briq_exec_stop stops it. Async needs sh and setsid in the image, as most have. Keep the command under about 16 KB: send bigger input as stdin. A sleeping briq is woken first, with the sleeping briqs of its stack, so the call is slower; on a stopped one, the error says why.
| Name | Required | Description | Default |
|---|---|---|---|
| cmd | Yes | argv, run without a shell: ["psql", "-c", "select 1"], not ["psql -c 'select 1'"]. For pipes, globs, && or $VARS: ["sh", "-c", "…"] | |
| env | No | Variables for this command only, over the briq's own: { NAME: value }. Kept off its command line, and out of status and the audit log | |
| briq | Yes | briq id (bq_…) | |
| async | No | Start it and answer at once with an exec id, for a command that can take over a minute; read it with briq_exec_result. A running command keeps its stack awake | |
| stdin | No | Text fed to the command's standard input | |
| clearEnv | No | Start it from an empty environment: only the briq's PATH, HOME and LANG, then env. So a variable of the briq (an API key) does not reach it | |
| stdinOpen | No | With async: keep its stdin open, to write to while it runs with briq_exec_input (a follow-up message, an approval) until eof. Not with stdin | |
| timeoutMs | No | Without async: 60000 by default and at most. With async: when to stop it, 3600000 (1 h) by default, 86400000 (24 h) at most |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/openWorld/non-idempotent, and the description adds substantial context beyond that: the ~60 s sync ceiling, the ~16 KB command-size limit with `stdin` as the escape hatch, async's dependency on sh and setsid in the image, that async keeps the stack awake, and that a sleeping briq (and its stack) is woken first, making the call slower. It stops short of describing permission/auth requirements or what the returned payload looks like beyond the three streams.
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?
Front-loaded with the core contract and return values, then the timeout/async path, then edge constraints (size limit, sleeping/stopped briqs). Nearly every clause carries information, though the async sentence packs three tool names and two wait durations into one dense run that takes a re-read.
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 still states what comes back (stdout, stderr, exit code) and covers the operational hazards an agent must plan for: sync duration cap, size cap, waking latency, and stopped-briq failure mode. Nothing essential to a correct first call is missing.
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 the baseline is 3; the description still adds guidance the schema only partly carries, notably the command-size threshold that motivates `stdin` and the concrete selection criteria for `async` beyond the one-line schema text. The remaining parameters (env, clearEnv, stdinOpen, timeoutMs) are left entirely to the schema, which is acceptable given full 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?
Opens with a concrete verb+resource+return contract: execute a command inside a running briq, returning stdout, stderr and exit code. It explicitly disambiguates from the sibling family by naming briq_exec_result and briq_exec_stop for the async path, so an agent can route correctly without reading other schemas.
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?
Gives explicit use cases (migrations, seeding, health checks, sandbox scripts/tests/builds, docker exec equivalents) and an explicit exclusion rule: anything that can take longer must use `async: true`, with the follow-up tools named. The condition that selects each alternative is stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_exec_inputWrite to a command started with asyncADestructiveInspect
Write to the stdin of a command started with briq_exec async and stdinOpen: a follow-up message, an answer, an approval (a JSON line to claude -p --input-format stream-json, a JSON-RPC request to an app server). eof: true closes it; the command then reads end of file. Writes land in order, 64 KB at most each. Pass seq (the last one plus one, as briq_exec_result shows) so that sending a write again after an error never writes it twice. Read what it answers with briq_exec_result and offset.
| Name | Required | Description | Default |
|---|---|---|---|
| eof | No | Close its input after this write | |
| seq | No | This write's number: the last one's plus one. A seq already taken writes nothing and says so | |
| briq | Yes | ||
| data | No | Text to write, newline included when the command reads lines | |
| exec | Yes | exec id (ex_…), from briq_exec | |
| base64 | No | Bytes to write, as base64; instead of data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite destructiveHint=true being set, the description adds substantial behavior: writes are ordered, capped at 64 KB each, eof causes EOF read, and seq makes retries safe (a taken seq writes nothing and says so). Those are exactly the operational facts an agent needs before invoking a mutation tool and are not derivable from the annotations or schema alone.
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?
Purpose is front-loaded in the first clause, and the parenthetical examples are compact rather than padded. It is dense — several constraints packed into two sentences — but every sentence carries a distinct constraint (ordering, size cap, seq retry, eof, read path), so little is wasted.
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 6-param mutation tool with no output schema, the description covers what to write, ordering, size limits, idempotent retry, and how to read the reply via briq_exec_result. It does not say what an error response looks like or whether concurrent writes from multiple callers are serialized, which would round out the picture.
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 already 83%, so the baseline is 3. The description goes beyond by explaining the seq contract (last value plus one, sourced from briq_exec_result) and the eof/read-EOF consequence, plus that base64 is used instead of data. That is meaningful added meaning, though the data vs base64 mutual exclusivity rule could be stated more sharply.
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?
States a specific verb and resource — writing to the stdin of a command started with briq_exec async and stdinOpen — and names the concrete message types (follow-up, answer, approval) plus the underlying wire formats (stream-json line, JSON-RPC). This makes it unambiguous against siblings like briq_exec, which starts commands, and briq_exec_result, which reads output.
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?
Explains the context that triggers use (a command already started async with stdinOpen) and routes the agent to briq_exec_result for reading the response. The 'use eof:true to close' guidance is conditional and explicit. It lacks an explicit 'do not use this to start a command — use briq_exec' exclusion, which keeps it below 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_exec_resultRead a command started with asyncARead-onlyIdempotentInspect
Where a command started with briq_exec async stands: running, exited (with its exit code), timed_out, stopped or lost, with the last 64 KB of its stdout and stderr. Waits up to waitMs (30 s by default, 45 s at most) for it to finish before answering, so call it again while it runs. The whole output is in the briq: briq_files_get the path it names. To follow a stream of output (events, a log) without missing or repeating a line, pass offset (0 first): you get the output from that byte, and the offset to pass next; the wait then ends as soon as there is new output.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| exec | Yes | exec id (ex_…), from briq_exec | |
| offset | No | Read from this byte of the stream instead of its tail: 0 first, then the next offset each answer gives | |
| stream | No | The stream offset reads; stdout by default | |
| waitMs | No | How long to wait for it to finish, or with offset for new output; 30000 by default | |
| maxBytes | No | With offset: the most to read in one call; 32768 by default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the readOnly/idempotent annotations: the default 30 s and max 45 s wait, the 64 KB stdout/stderr tail cap, and the fact that the wait ends early once new output exists when offset is used. Slight deduction only because the response shape (fields returned besides the tail and next offset) is left partly implicit.
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?
Three tight sentences that front-load the status answer before the wait and streaming mechanics. Dense but nearly every clause carries information; the 'The whole output is in the briq' clause is slightly telegraphic but still earns its place by routing to briq_files_get.
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?
There is no output schema, yet the description tells the agent what comes back (status, exit code, timestamp semantics, last 64 KB of both streams, next offset) and how to get the full output. Nothing essential is missing for correct invocation or interpretation.
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 already 83%, and the description adds real semantic depth for the tricky ones: offset starts at 0 and the next offset comes back in the answer, and waitMs doubles as a new-output wait when offset is set. stream and maxBytes are left to the schema, which is acceptable given the 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?
Opens with a specific verb and resource ('Where a command started with briq_exec async stands') and enumerates the exact status values it reports (running, exited with exit code, timed_out, stopped, lost). Clearly distinguishes itself from briq_exec (which starts the command) and briq_exec_stop.
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 says to call it again while the command runs, names briq_files_get as the route to the complete output rather than the 64 KB tail, and prescribes the offset protocol for following a stream without gaps or repeats. Only minor gap is no explicit mention of briq_exec_stop for termination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_exec_stopStop a command started with asyncBDestructiveIdempotentInspect
Stop a command started with briq_exec async, and every process it started. One already finished is answered as it is. Its output stays in the briq.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| exec | Yes | exec id (ex_…) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: it terminates the whole process tree the exec started, calling it on an already-finished exec is a benign no-op answered as-is (reinforcing idempotentHint), and the output survives in the briq. It does not say how the caller learns the result or whether the call blocks, which keeps it short of a 5.
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?
Three short sentences, front-loaded with the action and scope, with no filler. 'One already finished is answered as it is' is slightly awkward phrasing that costs a little 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?
With destructiveHint and idempotentHint already declared and no output schema, the description covers the key facts (process-tree kill, no-op on finished execs, output retained). What remains missing is the response shape/confirmation and whether a running stop is synchronous, which matters for a destructive operation.
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 only 50% — the 'briq' parameter has no description at all — and the description never mentions either parameter. Only indirectly does 'started with briq_exec async' hint that 'exec' identifies the target, so the coverage gap is not compensated.
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?
States a specific verb (stop) plus a precisely scoped resource: a command started with briq_exec in async mode and every process it spawned. The 'started with briq_exec async' qualifier implicitly separates it from briq_stop and briq_destroy, though neither sibling is named.
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?
Usage is only implied by the phrase 'started with briq_exec async' — an agent can infer it should be called on async execs, but there is no explicit when-to-use/when-not-to-use guidance and no pointer to briq_stop, briq_destroy, or briq_exec_result as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_exposePublish a briq: its HTTPS URL, or a TCP endpointADestructiveInspect
Give a briq its HTTPS URL, on one port (https://-<4 random characters>., kept for the life of the briq). mode "private" opens only with the URL you get back: it carries a secret, briq turns away every request without it before it reaches the briq, and the browser keeps it as a cookie after the first visit. Use "private" whenever the person wants it private, protected or only for them; "public" is open to anyone on the internet. Visits to the URL count as use for its whole stack, so an exposed briq sleeps only when nobody uses it, and a visit to a sleeping one wakes it. A briq has one URL, on one port: its front door (the one a recipe names, or the only port in ports) is published at once; another port moves the URL there and restarts the machine (processes start over, files on disk are kept). Without mode, a URL that already exists keeps the mode it has, so moving a private URL never opens it; a first URL is public. rotate: true gives a private URL a new token, for when the link went somewhere it should not have: the URL stays, the old token stops working; a public URL has none to rotate. A briq declares at most 32 ports. Simplest: briq_run with expose. protocol other than "http" makes a TCP endpoint instead, for a client outside briq (psql, a BI tool, a laptop): -<10 random characters>.tcp. on the usual port of its protocol, TLS required. postgres (5432), mysql (3306), redis (6379), mongodb (27017), amqp (AMQPS 5671), bolt (Neo4j, 7687), grpc (6334). The database port of a recipe (briq_status lists them as databasePorts) answers with its full connection string, password included; another briq gets the address, to which you add its user and password. No token: the password is the gate, so mode does not apply, and the edge refuses a Postgres, Redis or MongoDB that lets anyone in. Only when the person wants to reach the service from outside: briqs of the stack reach it on its internal address already.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| mode | No | ||
| port | Yes | ||
| rotate | No | A new token for a private URL; the old one stops working | |
| protocol | No | What the port speaks: http (default) for an HTTPS URL, or a database protocol |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it explains URL lifetime, token secrecy and cookie behavior, default mode inheritance, port-move restarts with process loss but disk retention, visit-based sleep/wake behavior, and rotation invalidation. These are substantial side effects and defaults that an agent needs before calling a destructive, open-world mutation.
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 dense and front-loads the core operation, but it is long and uses several nested parentheticals. Most sentences carry useful behavioral or usage information, though the density makes it slower to parse than an ideal definition.
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, destructive, open-world mutation with no output schema, it covers the important gaps: outputs in concept, default behavior, side effects, protocol-specific return values, and safety constraints. An agent would have enough context to choose parameters and anticipate consequences.
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?
With only 40% schema description coverage, the description compensates heavily: it explains `mode` semantics and defaults, `rotate` invalidation, `protocol` mapping to TCP endpoint behavior, and `port` as the front door or moved port. The only lightly covered parameter is the briq identifier, whose pattern is already clear from 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 states a specific verb and resource: giving a briq an HTTPS URL or a TCP endpoint. It distinguishes the operation from the simpler sibling path by noting that `briq_run` with `expose` is the simplest route, while this tool handles explicit publishing and protocol selection.
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 explicitly states when to use `private` versus `public`, when to use a TCP endpoint, and when not to expose externally because stack-internal addresses already work. The alternative `briq_run` path is also named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_feedbackWrite to the briq teamAInspect
Send a bug, an idea or a question to the people who build briq. Use it when briq does not do what its docs say, fails with an error you cannot explain (an internal error, a 5xx), or its docs miss something you needed; or when you or the person have an idea that would make briq better. Not for payment_required, plan_limit, quota_exceeded or policy_violation: those are expected. Write it so it stands alone: what you were doing, what you expected, what happened, the briq id and request id when there are some. Never include secrets, connection strings or the person's data. The person who connected you gets a copy and the answer by email; tell them what you sent.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | bug: briq misbehaved · idea: a suggestion · question | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this is a non-read-only, open-world, non-idempotent, non-destructive call; the description adds the real side effect — the connecting person receives a copy and the answer by email, so the agent should tell them what was sent. It also sets content constraints (no secrets, connection strings or the person's data) and asks for traceability data (briq id, request id), which annotations cannot convey. It stops short of saying what the tool returns or how fast a reply comes.
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?
Front-loaded with purpose and triggers before the exclusion list and the content recipe. It is dense and semicolon-heavy, and the privacy warning plus the email-notification sentence could be tightened, but no sentence is filler.
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 only two required parameters, no output schema and thin annotations, the description carries the full burden and does: purpose, triggers, exclusions, required report content, privacy rules, and the out-of-band notification to the user. An agent has everything needed to submit a usable report.
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 50% (only topic is documented) so the description must compensate, and it does: it spells out what the message body needs — what you were doing, what you expected, what happened, briq id and request id — and the three topic categories are named in the first sentence. It does not mention the message length limit, but the content guidance is substantive.
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?
States a specific verb and resource — 'Send a bug, an idea or a question to the people who build briq' — and the channels named (question/bug/idea) map to the topic enum, so an agent can tell it is the human-escalation path rather than briq_docs or briq_logs.
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?
Gives explicit trigger conditions (docs behaviour mismatch, unexplained internal error / 5xx, missing docs, improvement idea) and an explicit exclusion list: not for payment_required, plan_limit, quota_exceeded or policy_violation because those are expected. That is a genuine when/when-not pair rather than an implied use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_files_getRead a file from a briqARead-onlyIdempotentInspect
Download a file as base64 (max 1 MB) from the briq's own filesystem. A PNG, JPEG, GIF or WebP comes back as an image you can look at (a screenshot, a chart); for its bytes as text, briq_exec base64 <path>. For anything bigger, read part of it with briq_exec (head, tail, grep). Reference: https://briq.cloud/docs/mcp/tools#briq_files_put--briq_files_get
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, non-open-world behavior. Beyond that, the description adds important behavioral details: the 1 MB maximum, base64 encoding, and special image handling for PNG, JPEG, GIF, and WebP.
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 the core action and size limit, then gives alternatives and a reference URL. Every sentence adds useful routing or behavioral context without unnecessary repetition.
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 read-only file retrieval tool with no output schema, the description explains the return representation, size cap, and image handling well. The main remaining gap is finer-grained parameter semantics for `path` and `briq`.
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 0%, so the description must carry parameter meaning. It implies that `briq` identifies the target filesystem and that `path` is a file path, but it does not explicitly document path format, relative vs. absolute resolution, or the `bq_...` identifier format beyond what the schema pattern shows.
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 a specific verb and resource: downloading a file from the briq's own filesystem, with a clear 1 MB limit and base64/image return behavior. It distinguishes the tool from briq_exec by explaining that briq_exec is for text bytes or partial reads of larger 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?
It explicitly says when to use this tool, including that supported image types come back as viewable images. It also names alternatives for related cases: briq_exec with base64 for text bytes and head/tail/grep for files larger than 1 MB.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_files_putWrite a file into a briqADestructiveIdempotentInspect
Upload a file (base64, max 1 MB) into a running briq. Creates parent directories; the file stays on its disk across stops and restarts. The answer gives the SHA-256 of the bytes written, checked inside the briq when its image has sha256sum: compare it with the digest of your own copy. Base64 that was cut short is refused. A file its command needs to start belongs in files of briq_run instead: a briq whose command fails without it never gets far enough for an upload. For anything bigger, fetch it from inside the briq with briq_exec (git clone, curl); code on GitHub runs with a language recipe's checkout. path is in the briq's own filesystem; reference: https://briq.cloud/docs/mcp/tools#briq_files_put--briq_files_get
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| path | Yes | absolute path inside the briq | |
| contentBase64 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: 1 MB cap, auto-creation of parent directories, persistence across stops/restarts, refusal of truncated base64, and verification via SHA-256 returned in the answer. The annotations already declare destructiveHint/idempotentHint, and the description does not say what happens to an existing file at the same path (overwrite vs. error), which is the one behavioral detail a destructive write tool should cover.
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 core action and limits are front-loaded, and each subsequent sentence carries a distinct decision or constraint (size, startup files, large files, path scope). The SHA-256 verification sentence is dense but earns its place; overall the paragraph is longer than ideal but not padded.
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 still tells the agent what comes back (SHA-256 of written bytes) and how to use it. Size limits, persistence, error behavior (truncated base64 refused), and alternatives are all covered, so an agent can invoke this correctly on the first attempt.
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 only 33% (only `path` is described), so the description must compensate, and it largely does: it clarifies that `path` refers to the briq's own filesystem, and constrains `contentBase64` (max 1 MB, must be complete, not truncated). The `briq` identifier itself is left to the schema's pattern with no explanation of how to obtain one.
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?
States a specific verb and resource ('Upload a file ... into a running briq') and immediately scopes it against the two plausible alternatives: the `files` field of briq_run and briq_exec for larger payloads. An agent can separate this from briq_files_get and briq_run without opening any schema.
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 when-not-to-use guidance: startup files belong in briq_run's `files`, oversized content should be fetched inside the briq via briq_exec (git clone/curl), and GitHub code uses a recipe's `checkout`. It also states an operational precondition (a briq whose command fails never gets far enough to upload), which is exactly the routing information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_forkFork a briq or a whole stackAInspect
Branch before you try something you might want to undo: a migration, a destructive test, a second approach next to the first. Pass briq to fork one briq, or stack to fork every briq of a stack into a new stack (names kept, so the forked app talks to the forked database). Each fork starts from a copy of its source's disk as it is now, keeps the same credentials, and gets its own address; the source keeps running and never sees what the fork does. Processes in a fork start fresh on the copied disk, like after a power cut (a database replays its log); memory is not copied. A briq without a volume gets its config and boot files; what it wrote to its own disk stays with the source. Returns outputs pointing at the fork. Keep the fork, or briq_destroy it to throw the attempt away.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | No | briq id (bq_…) to fork | |
| into | No | Stack fork only: name of the new stack (default "<stack>-fork") | |
| name | No | Single fork only: name of the fork (default "<name>-fork") | |
| wait | No | Wait until the forks are ready (default true) | |
| sleep | No | When it goes to sleep: after this long without use, as a string: "30m", "3h", "7d", or "never" (always on, Pro plan and above). Never a number. Use means your calls on it (exec, files, logs, expose), on any briq of its stack, and visits to its stack's URLs. A sleeping briq keeps its disk, costs nothing, and the next call or visit wakes it. A command started with briq_exec async is use while it runs. Other work briq cannot see (a worker, a bot that only makes outgoing connections) needs a window longer than that work, or "never". Default: the source's. A window longer than your key allows is refused: send a shorter one. | |
| stack | No | With `briq`: the stack to create the fork in (default: the same). Without: the stack to fork whole. | |
| expose | No | Stack fork only: reach the fork from outside briq (a laptop, a sandbox). Database ports get TLS endpoints, front doors a URL in this mode; outputs use them. Leave it out when only briqs of the stack use the fork. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the write/idempotency profile; the description adds substantial context beyond them: the fork starts from a live disk copy of the source, keeps the same credentials, gets its own address, and the source keeps running without seeing the fork. It also discloses the non-obvious caveats (memory is not copied, processes start fresh as after a power loss, a briq without a volume loses what it wrote) — exactly the surprises that would otherwise break an agent's mental model.
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?
Front-loaded with the decision rule then the mode switch, then behavior, then cleanup — a sensible order. It is dense rather than padded, though the power-cut and disk-replay sentences are long and the volume caveat could be tighter.
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 7-parameter tool with no output schema, the description covers what an agent needs: two operating modes, snapshot semantics, credential and addressing inheritance, process/memory state, disk edge case, and that the return value contains outputs pointing at the fork. Nothing material about the call's consequences is left implicit.
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 the baseline is 3, but the description adds real meaning: the `briq`/`stack` pair is framed as mutually selecting single-vs-whole-stack forking, naming is explained (names kept so the forked app talks to the forked database), and `expose` is conditioned on external access. It does repeat some schema content rather than extend it, keeping it short of a 5.
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?
States a specific verb (fork) and resource (a briq or a whole stack), and immediately disambiguates the two modes by naming the parameter that selects each: `briq` for one, `stack` for every briq of a stack. An agent can distinguish this from siblings like briq_up or briq_start without opening the schema.
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 when-to-use framing: branch before a migration, a destructive test, or a parallel approach. It also names the exit path and the sibling that implements it ("Keep the fork, or briq_destroy it to throw the attempt away"), which closes the loop on the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_listList briqsBRead-onlyIdempotentInspect
List the briqs of this key/team with state, host and cost.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | include destroyed | |
| stack | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is covered. The description adds that each briq carries state, host and cost, which is genuine return-shape context, but it omits the default exclusion of destroyed briqs and any pagination or result-size behavior.
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?
A single front-loaded sentence with no filler; scope and return fields come first. Its brevity is efficient, though it leaves the parameter gaps noted elsewhere.
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 two-parameter read-only listing with no output schema, the description covers scope and return fields, but the undocumented 'stack' parameter and the implicit destroyed-exclusion default leave real holes an agent must guess at.
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 only 50%: 'all' is documented inline as 'include destroyed', while 'stack' has no schema description at all. The description never mentions either parameter, so it does nothing to close the gap on 'stack' or to explain what passing 'all' changes.
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?
A specific verb (List) plus the resource (briqs) and scope ('of this key/team'), and it previews the returned fields (state, host, cost). That is enough to separate it from mutation siblings like briq_destroy or single-resource siblings like briq_status, though it never names an alternative.
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 says what is listed but never when to reach for it instead of briq_status or briq_catalog, nor any precondition for use. Nothing tells the agent when this list view is the right choice over the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_logsRead briq logsCRead-onlyIdempotentInspect
Tail the container logs of a briq.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| limit | No | ||
| since | No | cursor from a previous call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so safety is covered. The description adds only 'container logs', and critically never resolves whether this is a snapshot or a follow-stream — 'tail' implies streaming while the `since` cursor implies discrete pages. It also says nothing about log retention, truncation, or default limits.
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?
One short sentence with no wasted words, front-loaded and readable. But it is terse to the point of under-specification rather than economical — the brevity costs information an agent needs.
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 3-parameter tool with no output schema and thin schema descriptions, the definition should explain pagination, cursor reuse, and limit semantics. Instead the agent must guess whether results are truncated, how to page, and what 'tail' actually returns.
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 33%: `since` is documented as a cursor but `briq` and `limit` have no description (limit even carries a bizarre negative minimum with no explanation of default or meaning). The description contributes zero parameter information to close that gap.
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?
States a specific verb and resource: 'Tail the container logs of a briq.' An agent can tell this reads logs rather than executing code (briq_exec) or reporting state (briq_status). However, it never names a sibling or clarifies scope, and 'tail' ambiguously suggests a live stream when the schema shows a paged/cursor read.
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?
There is no when-to-use guidance at all. With 20 siblings including briq_exec_result, briq_status, and briq_docs, the agent gets no help deciding when logs are the right source versus those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_quotaQuotaARead-onlyIdempotentInspect
What this key may still do: remaining daily spend, credits, concurrency, allowed sizes, disk. The spend and the concurrency are counted on this credential: briqs started before you signed in again count for the team, not for you.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context about how spend and concurrency are counted against the credential versus the team, which is not in the 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?
It is two sentences, front-loaded with the list of quota dimensions, and has little waste. The second sentence is useful but slightly ambiguous in phrasing ('signed in again'), which keeps it from a perfect score.
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 parameterless, read-only quota tool with no output schema, the description provides enough detail about what is returned and the credential-counting semantics. It could be clearer about response shape, but the core information an agent needs is present.
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 tool takes zero parameters, so the baseline is 4. The description correctly implies no inputs are needed and focuses on what the returned quota information covers.
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 enumerates the resource being reported: remaining daily spend, credits, concurrency, allowed sizes, and disk for the current key. It lacks an explicit verb like 'get' or 'report', but the content is specific enough to distinguish it from siblings such as briq_status or briq_list.
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?
Usage is only implied: an agent would call this when it needs to know remaining limits before starting work. There is no explicit when-to-use guidance, no mention of alternatives like briq_status, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_resizeResize a briqAIdempotentInspect
Give a briq another size, or a bigger volume, and keep the briq: its disk, volume and URLs stay. Example: { briq: "bq_…", size: "medium", volumeGb: 20 }. A new size restarts a running briq: its processes start over, so finish or save work first. A stopped or sleeping briq takes it at its next start. A volume only grows; under a running briq it grows without a restart. Checked like briq_run: sizes, disk and credits. Returns once it lands (up to 30 s); resizing means it is still on its way.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| size | No | nano | small | medium | large: the new size | |
| volumeGb | No | The volume grown to this many GB; more than it has now |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: a size change restarts a running briq and its processes start over, stopped/sleeping briqs apply it at next start, volume only grows and does so without restart under a running briq. It also discloses validation ('sizes, disk and credits') and the async landing window with the `resizing` state — consistent with destructiveHint=false and idempotentHint=true.
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?
Front-loaded with the action and the data-retention guarantee, then example, then restart semantics, then return behavior — a sensible agent-reading order. Every sentence carries distinct information; nothing is restated from the schema or annotations verbatim.
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 return behavior itself ('returns once it lands, up to 30 s; `resizing` means still on its way'), plus restart risk, validation, and partial-failure signaling — everything needed to call and interpret this 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 67%, and the description compensates by naming both optional knobs semantically ('another size', 'bigger volume') and giving a concrete call example with size and volumeGb. It adds the growth-only constraint on volume, though it does not restate the allowed size enum or the 1-500 GB bound, which remain schema-only.
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?
States a specific verb (resize) and resource (briq), and immediately pins the scope by contrasting with the alternatives: 'keep the briq: its disk, volume and URLs stay' implicitly distinguishes it from briq_fork and briq_up. An agent can tell what this does without opening the schema.
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 retention clause ('its disk, volume and URLs stay') gives a clear condition for choosing resize over fork/recreate, and the volume-growth rule tells you when volumeGb is applicable. It never explicitly names a sibling to use instead or states when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_runRun a briqAInspect
Start a service, or a sandbox to run code in, for this agent on a cloud microVM. Prefer recipe (see briq_catalog: postgres, redis, sandbox, …) which returns ready-to-use connection outputs; or pass image for any public OCI image. Blocks until the service is ready, for up to two minutes (or wait: false): with a healthcheck, ready means it passed; without one, only that the process started, and if it later exits briq_status shows the exit and briq_logs why. A briq still creating after the wait is on its way: briq_status says when it runs, briq_logs shows each step (download, install, build) as it goes. With recipe, the same fields change the service it makes, as a GitHub Actions service: image (another tag, or pgvector/pgvector:pg16), env, cmd, size, volume ({ gb }), files. A language recipe (python, node, …) also takes your code as files, or a repo as checkout (the briq downloads it itself), with steps and cmd. briq_catalog with the name lists what each takes and its defaults. A briq goes to sleep after sleep without use (1 hour by default on briq.cloud; your calls and visits to its URL are use) and the next call or visit wakes it: a sleeping briq keeps its disk (files written anywhere survive) and costs nothing, so it is there tomorrow and next month. Only briq_destroy removes it. One stopped by briq_stop or its own exit needs briq_start. Put data you cannot afford to lose on a volume. Still briq_destroy what you are finished with.
| Name | Required | Description | Default |
|---|---|---|---|
| cmd | No | The command: a string run with sh -c ("npm start"), or the argv. A language recipe's start command; with checkout, pass it | |
| env | No | Env vars; with `recipe`, added to its own or replacing one of its values. { secret: "NAME" } has briq generate a secret and return it in outputs; { secret: "NAME", value: "…" } stores a credential you already have (a password, an API key), not printed back. Secrets are stored encrypted and never shown in status. Never put a credential in a plain value. A credential only the boot needs (a clone of a private repo, a private registry) goes with scope: "boot": a variable of the recipe's steps, then gone, never in the environment briq_exec or the code runs in; for a language recipe or the sandbox. A credential the code calls an API with goes with hosts: { secret: "NAME", value: "…", hosts: ["api.stripe.com"] } (locations: ["header"] unless you add "body"): the briq gets a placeholder, and the team's credential gateway puts the real value into its requests to those hosts only. The code never holds it; prefer this to a plain { secret, value } whenever the value is an API credential. A team secret (briq_secrets lists them; the person adds them on the dashboard) goes as { secret: "NAME", scope: "team" } with no value: the same placeholder and gateway, the value held by the team. `{{briq:NAME}}` in a plain value becomes the address of the briq NAME in the stack (not allowed in a secret value). `{{self:host}}` in a plain value becomes the hostname of the URL of this briq when it is published as it runs (`expose`), for an app that needs its public address at boot; `localhost` without one. | |
| name | No | DNS-safe name within the stack (default: recipe briq name) | |
| size | No | nano | small | medium | large; small by default (a recipe has its own default, and may allow fewer). The Hobby plan runs nano, small, medium; large once the team has a card on file. | |
| wait | No | Wait until ready (default true) | |
| files | No | With a language recipe, your app's files: relative paths go under /app. Otherwise files written into the briq before its command starts, absolute path → content: your app's sources, a config file. Text as it is, or { base64 } for binary; at most 64 files and 256 KB in all. Written again whenever the process starts over, so the spec stays their source of truth. E.g. { "/app/server.py": "…" } with cmd ["python", "/app/server.py"]. | |
| image | No | Any public OCI image, e.g. "redis:7-alpine". With `recipe`: another tag ("postgres:17") or a compatible image ("pgvector/pgvector:pg16") | |
| ports | No | The ports the image listens on. A language recipe: the port the app listens on, [8080] by default | |
| sleep | No | When it goes to sleep: after this long without use, as a string: "30m", "3h", "7d", or "never" (always on, Pro plan and above). Never a number. Use means your calls on it (exec, files, logs, expose), on any briq of its stack, and visits to its stack's URLs. A sleeping briq keeps its disk, costs nothing, and the next call or visit wakes it. A command started with briq_exec async is use while it runs. Other work briq cannot see (a worker, a bot that only makes outgoing connections) needs a window longer than that work, or "never". With a recipe, every briq it makes gets the same. Default set by the service: "1h" on briq.cloud. | |
| stack | No | Stack (namespace with private DNS) to run in; default "default" | |
| steps | No | A language recipe: shell commands run before the app starts, as GitHub Actions steps: [{ run: "npm ci" }, { run: "npm run build" }]. Default: the language's install. With checkout, they run again when the commit changed | |
| expose | No | Publish it as it is created, with its HTTPS URL as URL in outputs: "private" for a URL only whoever has it can open (it carries a secret, checked before any request reaches the briq), "public" for anyone. A recipe publishes its front door (only recipes with something to open in a browser have one; a database does not); an image publishes its port, so pass exactly one in `ports` (with several, run without `expose`, then briq_expose the one you want, which restarts the machine). Nothing restarts, and the URL serves once the briq runs. Off by default: publishing is a decision. | |
| recipe | No | Recipe name from briq_catalog, e.g. "postgres" | |
| routes | No | The nginx recipe: path prefix → "briq:port", e.g. { "/api/": "backend:8080", "/": "frontend:8080" } | |
| volume | No | A durable disk mounted at `mount`: for data that must not be lost (a database), and what a fork copies. Empty at first, and it hides whatever the image had at that path. A recipe that keeps data has one: { gb } sets its size, small by default, so ask for what the data needs ({ gb: 20 }) | |
| checkout | No | A language or static recipe: your code from a repo, as actions/checkout. The briq downloads it at each start onto its volume | |
| entrypoint | No | Image only. argv replacing the image's entrypoint | |
| healthcheck | No | Image only. A command that succeeds once the service serves, e.g. ["wget", "-qO-", "127.0.0.1:8080"]. Use 127.0.0.1, not localhost: inside a briq, localhost is ::1, which a server listening on IPv4 only refuses. briq_run waits for it. `timeoutMs` (default 60000) is per attempt: a process still up when it runs out is waited for again, up to three times, before the create fails. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give the safety/lifecycle envelope (write, openWorld, non-idempotent, non-destructive), and the description adds substantial context on top: blocking up to two minutes, what 'ready' means with vs without a healthcheck, sleep/wake economics and disk retention, and that only briq_destroy removes the briq. Secret handling (encrypted, never printed, gateway substitution) is also disclosed.
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?
Purpose and the recipe-vs-image decision are front-loaded, but the text is a dense single block of long sentences that re-explains schema content (env secret forms, volume mounting, steps defaults) already documented per-parameter. A reader must work through ~10 sentences to reach the lifecycle rules, which is heavier than needed for a tool with a fully documented schema.
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 an 18-parameter, zero-required tool with no output schema, the description covers creation modes, lifecycle (sleep/wake/destroy/start), data durability, and even output keys ('its HTTPS URL as URL in outputs'). Nothing an agent needs to call it correctly appears absent.
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% across all 18 parameters, including nested env/volume/checkout/healthcheck objects, so the schema already carries the semantics. The description mostly restates that surface (recipe field behavior, volume, files, env) rather than adding meaning the schema lacks; baseline 3 applies.
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?
Opens with a concrete verb and resource: 'Start a service, or a sandbox to run code in, for this agent on a cloud microVM,' and immediately splits the two creation modes (recipe vs image). It routes away from briq_status/briq_logs/briq_destroy/briq_start by name, but never says how it differs from close siblings briq_up or briq_fork, leaving the agent to infer the boundary.
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 preference stated: 'Prefer `recipe` ... which returns ready-to-use connection outputs; or pass `image`' and 'Put data you cannot afford to lose on a `volume`.' It also explains recovery paths ('One stopped by briq_stop or its own exit needs briq_start') and cleanup ('Still briq_destroy what you are finished with'). Missing only an explicit when-to-use-me-over-briq_up clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_secretsTeam secretsARead-onlyIdempotentInspect
The team's secrets by name, with the hosts each may be sent to and where it goes (header, body); never a value. Name one in briq_run's env as { secret: "NAME", scope: "team" }: the briq gets a placeholder, and the team's credential gateway puts the real value in on the way to those hosts. The person adds secrets on the dashboard's Secrets page (or POST /v1/secrets): ask them, never ask for the value.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuine behavioral detail beyond them: values are never returned, the briq receives a placeholder, and the credential gateway substitutes the real value in transit to the listed hosts. These are non-obvious security mechanics an agent cannot get from structured 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?
Two dense sentences that front-load what is returned, then the usage rule. Every clause earns its place, though the embedded JSON-ish snippet and parenthetical host/placement detail make the second sentence slightly run-on.
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 must describe the return payload — it does so precisely (names, allowed hosts, where the value goes, never a value) — and it also closes the loop on how the returned names are consumed and how secrets get created. Nothing an agent needs is missing.
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?
Zero parameters, so there is no schema semantics to explain; baseline applies. The description correctly describes the response shape (name, hosts, header/body placement, never the value) rather than inventing parameter guidance.
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?
States a specific resource and verb: returns the team's secrets by name with allowed hosts and placement (header/body), explicitly excluding values. It doesn't name a sibling it is distinct from (e.g., briq_catalog), so an agent must infer differentiation, but the scope is 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?
Gives concrete downstream usage — reference a listed name in briq_run's env as { secret: "NAME", scope: "team" } — and routes creation to the dashboard's Secrets page or POST /v1/secrets with the explicit rule 'ask them, never ask for the value.' Clear context and a prohibition, though it never states when not to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_set_sleepSet when a briq sleepsAIdempotentInspect
Change when a briq goes to sleep: a longer window before work briq cannot see (a worker; a command started with briq_exec async is seen), a shorter one, or "never" (always on). You do not need this for ordinary work: every call on it and every visit to its URL already pushes its sleep back. A running briq sleeps the new window from now; a sleeping one keeps sleeping until its next use. A window longer than your key or the environment allows is refused with the longest you may send.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes | ||
| sleep | Yes | When it goes to sleep: after this long without use, as a string: "30m", "3h", "7d", or "never" (always on, Pro plan and above). Never a number. Use means your calls on it (exec, files, logs, expose), on any briq of its stack, and visits to its stack's URLs. A sleeping briq keeps its disk, costs nothing, and the next call or visit wakes it. A command started with briq_exec async is use while it runs. Other work briq cannot see (a worker, a bot that only makes outgoing connections) needs a window longer than that work, or "never". | |
| stack | No | true: the same sleep for every briq of its stack (an app and its database sleep and wake together) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish idempotent=true, destructive=false, readOnly=false; the description adds real behavioral context beyond that: a running briq applies the new window from now, a sleeping briq keeps sleeping until next use, and an over-large window is 'refused with the longest you may send'. Remaining gaps: it doesn't say what the success response looks like or whether changes are auditable, but with annotations covering the safety profile this is solidly above baseline.
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 core effect is front-loaded in the first clause, with consequences and refusal behavior following in logical order. It is dense with parentheticals ('a worker; a command started with briq_exec async is seen') and the wake/sleep-timing material partly restates the `sleep` schema description, but no sentence is truly expendable.
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 three-parameter mutator with no output schema, the description covers the main behavioral questions: what changes, when it takes effect, and what happens when the requested window exceeds limits. It omits error-shape detail and any plan gating (which the `sleep` schema mentions for 'never'), but nothing critical to calling it correctly is missing.
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 67%, and the description compensates for the undocumented `briq` param by naming the resource throughout. It also adds semantics the schema doesn't state as crisply — that async commands count as use, and why a longer window may be needed for work the briq cannot see. Format guidance ('30m', '3h', '7d', 'never', never a number) lives in the schema, so the description correctly doesn't repeat it.
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?
Opens with a specific verb and resource: 'Change when a briq goes to sleep', and immediately defines the effect ('a longer window before work briq cannot see... a shorter one, or "never"'). An agent can tell this is a sleep-timeout setter, distinct from briq_exec/briq_up which are cross-referenced. No sibling does anything similar, so the lack of explicit 'use X instead' naming against siblings is a minor gap.
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 states when the tool is NOT needed: 'You do not need this for ordinary work: every call on it and every visit to its URL already pushes its sleep back.' It then names the cases that do require it (workers, bots making only outgoing connections). This is a clear when/when-not split with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_startStart a briqAIdempotentInspect
Start a stopped briq: one stopped by briq_stop, by its own exit, or by a limit. A sleeping briq does not need it: the next call or visit wakes it. It resumes from a memory snapshot in a second or two. Returns once it lands (up to 30 s); a state of stopping, starting or destroying means it is still on its way. Calling again is safe: it waits for the same move rather than starting another.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, and the description reinforces idempotency in operational terms ('waits for the same move rather than starting another') while adding unannotated facts: resume from a memory snapshot in a second or two, blocking until it lands with a 30 s ceiling, and the meaning of interim states (stopping/starting/destroying).
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?
Four short sentences, each doing distinct work: what it does, when it is unnecessary, how fast it resumes, how it returns and what interim states mean, and retry safety. Nothing is repeated from the title or annotations.
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 one-parameter mutation with no output schema, the description covers timing, return semantics, interim states, and retry safety, which is nearly everything an agent needs. The only omission is what the returned state/value looks like, which matters slightly since there is 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?
Schema coverage is 0%, but there is only one parameter, named 'briq', with a visible pattern in the schema. The description never clarifies what identifier to pass or that it must be a bq_ handle, so it adds nothing beyond the schema, though the gap is small for a single self-evident parameter.
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 opens with a specific verb and resource ('Start a stopped briq') and immediately scopes it against the states it does not apply to (sleeping briqs) and the sibling that produces the stopped state (briq_stop). An agent can distinguish it from briq_up/briq_run without opening any schema.
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 enumerates the exact conditions that make this the right call (stopped by briq_stop, by its own exit, or by a limit) and explicitly excludes the sleeping case, pointing to the waking behavior instead. That is a when-to-use plus when-not-to-use statement in a single breath.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_statusBriq statusARead-onlyIdempotentInspect
State of one briq: why it stopped, its last process exit, endpoints, env (secrets masked), boot files, cost, and when it goes to sleep.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds real value beyond that: it discloses that secrets are masked in the env output and enumerates the returned signals (cost, sleep time, boot files). It doesn't state auth requirements, which keeps it short of a 5.
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?
One front-loaded sentence with no filler; each item in the enumeration is a distinct output field. The comma-list style is dense but every element earns its place, though a slightly clearer framing verb would help.
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 read-only status tool with full annotation coverage and no output schema, the description adequately enumerates what comes back, including the non-obvious secret-masking behavior. The only gap is the unexplained identifier format of the single required parameter.
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 0% and the single required parameter 'briq' is documented only by a regex pattern. The description doesn't clarify that 'briq' is the bq_-prefixed identifier or how to obtain one (e.g. from briq_list), leaving the agent to infer parameter meaning from the sibling tools.
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 names a specific resource (one briq) and enumerates exactly what the state report contains: stop reason, last exit, endpoints, env, boot files, cost, sleep schedule. An agent can tell it apart from briq_list (plural inventory) without opening a schema. It loses a point only because 'State of one briq' is a noun phrase rather than an explicit verb and the singular-vs-list distinction is left implicit.
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?
There is no explicit when-to-use statement or named alternative, but listing 'why it stopped' and 'its last process exit' strongly implies the diagnostic use case. The agent must infer that this is the tool for post-mortem investigation versus briq_logs or briq_exec_result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_stopStop a briqAIdempotentInspect
Stop a briq; its disk is kept and it stays stopped until briq_start (it does not wake on the next call or visit). A stopped briq is not billed. To let it sleep and wake on use instead, do nothing: it sleeps on its own. Returns once it lands (up to 30 s); a state of stopping, starting or destroying means it is still on its way. Calling again is safe: it waits for the same move rather than starting another.
| Name | Required | Description | Default |
|---|---|---|---|
| briq | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: disk is preserved, the stop persists across calls/visits, the briq is not billed while stopped, the call blocks up to 30 s until it lands, and an intermediate state (stopping/starting/destroying) signals it is still in flight. The idempotency note adds concrete meaning to idempotentHint by explaining it waits on the same move rather than launching another.
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?
Front-loads the action, then packs contrast, billing, return timing, and retry safety into a few tight sentences. Every clause carries information an agent would otherwise have to guess.
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 exists, and the description compensates by explaining what the return means (lands vs. still-in-transit state), plus timeout expectations. For a single-parameter, non-destructive stop operation, nothing an agent needs in order to call it correctly is missing.
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?
One required parameter with 0% schema description coverage — the schema only supplies a regex pattern, not meaning. The description never clarifies whether 'briq' is an ID, name, or handle (the bq_ pattern implies an ID), so it adds little beyond the self-explanatory parameter name.
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?
States a specific verb and resource ('Stop a briq') and immediately distinguishes it from the sleep/idle behavior and from the briq_start counterpart. An agent can tell it apart from briq_destroy and briq_set_sleep without opening any schema.
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 gives the negative case: 'To let it sleep and wake on use instead, do nothing' — so the agent knows when NOT to call it. It also references briq_start as the way back. It stops short of explicitly routing to briq_destroy for teardown, which would have made it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
briq_upBring a stack up from its fileAIdempotentInspect
Bring up the stack a repo declares in its stack file, briq.yaml. Pass file: the file's content as you read it from the repo. Creates each service the stack does not have yet, as briq_run makes it and under the same checks: every new one, or none. Leaves the services it has as they are and never deletes, so calling it again is safe. A service is what briq_run takes: recipe with the fields it changes (image, env, cmd, size, volume, files; checkout and steps for a language recipe), or image with its settings. A secret the file names as { secret: NAME } is generated, unless its value is passed here: secrets: { STRIPE_KEY: "…" }; ask the person for one briq cannot generate, never invent it. Returns each briq and the outputs (connection strings, :URL for each published service). With expose: true, the outputs reach the stack from outside briq (a laptop): each database gets a TLS endpoint. The format: briq_docs "stack-file".
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The stack file's content, YAML or JSON, as it is in the repo | |
| wait | No | Wait until the new services are ready (default true) | |
| stack | No | Bring it up as this stack instead of the file's `stack`, e.g. a branch's | |
| expose | No | Outputs for a client outside briq (a laptop): each database gets a TLS endpoint and its connection string names it. Only when the person needs that: the briqs of the stack reach each other already | |
| secrets | No | Values of secrets the file names as { secret: NAME }, by name: an API key briq cannot generate. Stored encrypted, never shown again |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it discloses atomicity ('every new one, or none'), the exact non-destructive semantics ('leaves the services it has as they are and never deletes, so calling it again is safe'), secret generation behavior, and what gets returned including the `<briq>:URL` outputs and TLS endpoints under expose. The idempotency claim is backed by mechanism rather than merely restating 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?
Front-loaded with the core action and the file argument, then layers the creation rules, secret policy, return values, and a pointer to briq_docs. It is dense and long, but nearly every clause carries operational weight for a multi-service provisioning tool; only the recipe-field enumeration feels slightly over-packed.
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 five-parameter, nested-object tool with no output schema, the description covers what an agent needs: atomic creation, non-destructive re-runs, secret sourcing policy, the shape of returned outputs, and the expose trade-off. Nothing essential is missing before a correct call.
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 the baseline is 3, but the description adds real meaning: `file` must be the file as read from the repo, `expose` is scoped to outside-briq clients with a TLS endpoint per database, and `secrets` is keyed by the { secret: NAME } references plus a never-invent instruction. `wait` and `stack` are not addressed in the description, keeping it from a 5.
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?
States a specific verb and resource: bring up the stack a repo declares in briq.yaml, creating whatever services don't exist yet. It explicitly positions itself against briq_run ('as briq_run makes it and under the same checks') and points to briq_docs for the file format, so an agent can place it among siblings without opening a schema.
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?
Gives clear conditions: use it when a repo ships a stack file, pass the file content as read, and only set `expose: true` when the person needs access from outside briq. It also states the handling rule for secrets — ask the person for a value briq cannot generate, never invent one. It stops short of an explicit 'to create a single service, use briq_run instead' exclusion, leaving that to inference from the briq_run references.
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.
4 tool updates
- Changed
briq_exec3 fields changed- added
Input schema / properties / clearEnvAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "true", + "type": "string" + }, + { + "const": "false", + "type": "string" + } + ], + "description": "Start it from an empty environment: only the briq's PATH, HOME and LANG, then env. So a variable of the briq (an API key) does not reach it" +} - added
Input schema / properties / envAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "Variables for this command only, over the briq's own: { NAME: value }. Kept off its command line, and out of status and the audit log", + "propertyNames": { + "type": "string" + }, + "type": "object" +} - added
Input schema / properties / stdinOpenAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "true", + "type": "string" + }, + { + "const": "false", + "type": "string" + } + ], + "description": "With async: keep its stdin open, to write to while it runs with briq_exec_input (a follow-up message, an approval) until eof. Not with stdin" +}
- Added
briq_exec_input - Changed
briq_exec_result4 fields changed- added
Input schema / properties / maxBytesAdded value: +{ + "description": "With offset: the most to read in one call; 32768 by default", + "maximum": 262144, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Read from this byte of the stream instead of its tail: 0 first, then the next offset each answer gives", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / streamAdded value: +{ + "description": "The stream offset reads; stdout by default", + "enum": [ + "stdout", + "stderr" + ], + "type": "string" +} - changed
Input schema / properties / waitMs / descriptionPrevious value: -"How long to wait for it to finish; 30000 by default"New value: +"How long to wait for it to finish, or with offset for new output; 30000 by default"
- Added
briq_resize
21 tool updates
- First observed
briq_catalog - First observed
briq_destroy - First observed
briq_docs - First observed
briq_exec - First observed
briq_exec_result - First observed
briq_exec_stop - First observed
briq_expose - First observed
briq_feedback - First observed
briq_files_get - First observed
briq_files_put - First observed
briq_fork - First observed
briq_list - First observed
briq_logs - First observed
briq_quota - First observed
briq_run - First observed
briq_secrets - First observed
briq_set_sleep - First observed
briq_start - First observed
briq_status - First observed
briq_stop - First observed
briq_up
Publisher details
- Operator
- Briq
- Operator website
- https://briq.cloud
- Vendor relationship
- First-party
- Documentation
- https://briq.cloud/docs/getting-started
- Trust center
- Unknown
- Restrictions
- Unknown
Related MCP Connectors
Hosting for AI agents: your AI client deploys Docker apps to live HTTPS URLs over MCP.
- MeandrOAuthcom.meandr
MCP gateway and cloud hosting for MCP servers, agents and apps like RAG, managed from your agent.
Sandboxes, storage, secrets, queues, timers, locks, inboxes and run ledger for AI bots. One MCP.
Hosted MCP runtime where your agent publishes its own tools by tool call and keeps working.
Related MCP Servers
AlicenseAqualityCmaintenanceProvides MCP tools to create, run commands in, checkpoint, and delete durable cloud environments, giving coding agents persistent state between calls.793 npm3MIT- FlicenseNot gradedqualityCmaintenanceEnables AI agents to operate a persistent Linux sandbox in the cloud, running commands, managing files, using Git, and publishing artifacts through a Streamable HTTP MCP endpoint.-
- AlicenseAqualityCmaintenanceEnables MCP-capable agents to create and invoke OpenServerless endpoints, manage secrets, and configure integrations such as S3, PostgreSQL, Redis, Milvus, and MongoDB.13Apache 2.0

Nexlayer MCPofficial
FlicenseNot gradedqualityDmaintenanceAgentic cloud platform with 45+ MCP tools. Deploy any containerized stack, debug live pods (shell, file editing, DB queries), manage custom domains & TLS, push to built-in container registry, scale pods, and manage GPU workloads. The infrastructure layer where AI agents ship software to production.9-
Glama MCP Gateway
Add one secure layer between your agents and this server.