falai
Server Details
Run fal.ai models, poll the inference queue and read model schemas.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 7 tools
Most tools have clearly distinct purposes: model discovery/schema, submission, polling, result retrieval, and cancellation. The only overlap is falai_run_model versus falai_submit_request combined with status/result polling, but descriptions explicitly frame run_model as a convenience subscribe, reducing ambiguity.
All seven tools use the consistent prefix falai_ and a verb_noun pattern (cancel_request, get_model_schema, get_request_result, get_request_status, list_models, run_model, submit_request). No camelCase or mixed conventions are present.
Seven tools is well within the ideal 3-15 range and each maps to a distinct operation in the fal.ai queue/model workflow. No tool feels redundant or trivial, and the set is not bloated.
The set covers the full lifecycle: list models, inspect input schema, submit async, run synchronously, check status, fetch final result, and cancel. Optional logs are exposed via status logs=1, so obvious gaps are minimal.
Available Tools
7 toolsfalai_cancel_requestCancel requestADestructiveInspect
Request cancellation of a queued (not-yet-started) request. Returns 202 { status: 'CANCELLATION_REQUESTED' }. fal.ai queue: PUT {queue}/{model_id}/requests/{request_id}/cancel.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| request_id | Yes | The queue request id returned when the request was submitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations disclose only destructiveHint=true, so the description carries most of the burden and does well: it reveals the response is 202 with CANCELLATION_REQUESTED, i.e. cancellation is a request, not a guaranteed synchronous outcome, and that only queued work is affected. It omits error modes (e.g. what happens if the request has already started) and auth requirements, which keeps it from 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, front-loaded sentences: scope first, response second, underlying endpoint last. No filler, though the REST path line is partly redundant with the parameter names and borders on trivia for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and a single destructiveHint annotation, the description covers applicability, return signal, and the queue semantics an agent needs. Missing only failure handling (already-started or completed requests), which is a modest gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already fully documented in the schema. The description only restates them implicitly through the REST path template and adds no format, constraint, or edge-case detail beyond that, so the 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?
States a specific verb and resource (cancel a request) plus a sharp scope qualifier: only queued, not-yet-started requests. That scope plus the untouched request_id/model_id pair makes it trivially distinguishable from siblings like falai_get_request_status or falai_run_model.
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 gives a clear when: the request must still be queued and not yet started, which implicitly routes the agent to check status first and tells it this is useless for in-flight work. It stops short of naming the sibling (falai_get_request_status) to call before/after, so it is not a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_get_model_schemaGet model schemaARead-onlyInspect
Get the OpenAPI 3 schema for a model — its input/output fields (components.schemas). Use this to learn what inputs a model accepts before submitting. fal.ai API: GET /openapi/queue/openapi.json?endpoint_id={model_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description adds real value beyond it by disclosing the exact backing source (GET /openapi/queue/openapi.json?endpoint_id={model_id}) and that the raw OpenAPI document is returned. It does not cover rate limits or error behavior, so it stops 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?
Two sentences, front-loaded with purpose before usage guidance. The trailing endpoint URL is somewhat technical detail but is short and reinforces the data source, so it earns its place without bloating the 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?
With no output schema, the description does the necessary work of stating what is returned ('input/output fields (components.schemas)'), which is exactly what an agent needs before calling. Nothing critical is missing for a single-parameter read tool, though return-format caveats (size, nesting) are unaddressed.
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 sole parameter's description already documents that model_id is used raw as a path segment with an example. The description adds nothing further about the parameter, so the baseline 3 for schema-complete tools 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?
States a specific verb and resource ('Get the OpenAPI 3 schema for a model') and specifies the payload content ('components.schemas'), which cleanly separates it from action-oriented siblings like falai_run_model and falai_submit_request. The reader can tell immediately that this is an introspection tool, not an execution tool.
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 this to learn what inputs a model accepts before submitting' gives a clear trigger condition tied to a sibling workflow (submit/run). It does not name a specific alternative or state exclusions, but the when-to-use context is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_get_request_resultGet request resultARead-onlyInspect
Get the final output of a COMPLETED queued request. fal.ai queue: GET {queue}/{model_id}/requests/{request_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| request_id | Yes | The queue request id returned when the request was submitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the 'COMPLETED-only' precondition and the underlying HTTP endpoint, which is useful for advanced/debugging use, but says nothing about error behavior for pending/failed requests or whether the call is retried.
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 short sentences, zero filler, and the key scoping constraint ('COMPLETED') is front-loaded ahead of the endpoint reference. Nothing is redundant.
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 carries the burden of explaining what 'final output' contains (e.g. generated media vs. JSON payload), and it does not. Parameters and safety are adequately covered, but return-value ambiguity leaves a real gap for an agent consuming the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both model_id and request_id are already documented in the schema. The description's endpoint template confirms how those two values are placed but adds no new syntax or format meaning, so the baseline of 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?
The description names a specific verb ('Get') and resource ('final output of a COMPLETED queued request'), and the 'COMPLETED' qualifier implicitly separates it from falai_get_request_status. An agent can tell what this returns 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 'COMPLETED' constraint provides clear context that this should only be called after a request has finished, implying the status-then-result sequencing. It does not explicitly name falai_get_request_status as a prerequisite or state when-not to use it, so it falls short of full explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_get_request_statusGet request statusARead-onlyInspect
Get the status of a queued request (IN_QUEUE | IN_PROGRESS | COMPLETED). fal.ai queue: GET {queue}/{model_id}/requests/{request_id}/status (optional logs=1).
| Name | Required | Description | Default |
|---|---|---|---|
| logs | No | Include queue logs in the response (?logs=1). | |
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| request_id | Yes | The queue request id returned when the request was submitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe, non-mutating read. The description adds the queue-endpoint context and the optional logs flag, but says nothing about polling cadence, error/404 behavior for unknown request ids, or how long a request remains queryable.
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 tight sentences, front-loaded with the purpose and immediately followed by the endpoint and status values. The embedded URL is useful reference material rather than filler, though it borders on redundant with the server name.
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 simple read-only polling tool with full schema coverage and no output schema, the description covers what the tool does and when it applies. It lacks return-shape and error-case detail, but nothing essential to correct invocation 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 baseline is 3. The description does echo the logs=1 query syntax, which slightly reinforces the schema's description of that flag, but adds no meaning beyond what the schema already documents for model_id and request_id.
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 (get status of a queued request), enumerates the possible status values (IN_QUEUE | IN_PROGRESS | COMPLETED), and gives the concrete endpoint. This makes it clearly distinguishable from sibling falai_get_request_result, which fetches output rather than status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'of a queued request' implies this is for polling a request submitted via falai_submit_request, but no explicit when-to-use vs falai_get_request_result or falai_cancel_request guidance is given. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_list_modelsList modelsBRead-onlyInspect
List or search fal.ai models in the registry (paginated). fal.ai API: GET /models (query: keywords, page, total).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number (default 1). | |
| total | No | Page size (number of models per page). | |
| keywords | No | Optional search string to filter models by. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful context by disclosing the underlying REST endpoint and query parameters, but it says nothing about return shape, page-size semantics, or result limits. With annotations lowering the bar, this is adequate but not rich.
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 that front-load the core purpose and the pagination constraint, with zero filler. Nothing could be removed without losing information.
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 simple read-only, three-parameter list tool with full schema coverage and no output schema, the description covers the essentials. The only gap is that the return contents and pagination termination behavior aren't described, which is minor for a listing endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents page, total, and keywords with their defaults and bounds. The description only restates the parameter names in parentheses, adding no format, syntax, or interaction detail beyond the schema. 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?
The description states a specific verb pair (list/search) and resource (fal.ai models in the registry) and notes pagination, so the agent immediately knows what the tool returns. It doesn't name a sibling to distinguish from, but the surrounding tools (run, submit, cancel, get) are functionally unrelated, so the risk of confusion is low.
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, prerequisite, or alternative guidance. The agent can infer that this is a discovery call before falai_run_model, but nothing in the text says so, nor does it mention when another tool (e.g. falai_get_model_schema) would be the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_run_modelRun model (subscribe)ADestructiveInspect
Convenience 'subscribe': submit a request, poll its status until COMPLETED, then return the result. Consumes fal credits. If it does not complete within the wait budget, returns a { status, request_id, status_url, note } object (NOT an error) so you can keep polling with falai_get_request_status / falai_get_request_result.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The model's input object — arbitrary params for that model, e.g. { "prompt": "a cat" }. Use falai_get_model_schema to learn the fields. | |
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| max_wait_seconds | No | Max seconds to wait for completion (default 60, capped at 300). | |
| poll_interval_seconds | No | Seconds between status polls (default 3, min 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only destructiveHint=true provided, the description does real work: it discloses credit consumption, that the call blocks/polls, and that a timeout returns a { status, request_id, status_url, note } object rather than an error. It is consistent with (and explains the reason behind) the destructive hint. It does not state whether a submitted request continues/charges after the client abandons polling, which would be the remaining behavioral detail.
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 sentences, both dense: the first defines the flow and cost, the second defines the failure/continuation path. No filler and the core behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a blocking convenience wrapper with no output schema, the description covers cost, control flow, and the timeout return shape. The one gap is the shape/meaning of a successful result (model output payload) versus the partial object it does describe.
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%, including the default/cap semantics for max_wait_seconds and poll_interval_seconds, so the baseline is 3. The description adds no parameter-level meaning beyond the schema, though it does implicitly frame why wait/interval exist.
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 chain (submit, poll, return) on a named resource, and the compression of that into a single 'subscribe' convenience call distinguishes it from the sibling falai_submit_request, which presumably only submits. An agent can tell what it gets 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?
Explicitly routes the agent to falai_get_request_status / falai_get_request_result when the wait budget is exhausted, which is clear contextual guidance. However, it never states when to prefer this tool over falai_submit_request or when to avoid the blocking convenience path entirely, so one comparison is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_submit_requestSubmit requestADestructiveInspect
Submit an inference request to the queue and return immediately (async — does NOT wait for completion). Returns { request_id, response_url, status_url, cancel_url, queue_position }. Consumes fal credits when the model runs. fal.ai queue: POST {queue}/{model_id} with body = the model input.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The model's input object — arbitrary params for that model, e.g. { "prompt": "a cat" }. Use falai_get_model_schema to learn the fields. | |
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the lone destructiveHint=true: it discloses the async/non-blocking contract, the exact return payload shape, credit consumption, and the underlying queue POST semantics. It does not explain what makes the call 'destructive' or what auth the queue requires, but the side-effect and cost model are clearly surfaced.
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 with zero filler, front-loading the most decision-relevant fact (returns immediately) before the return shape and cost note.
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 correctly enumerates the returned fields (request_id, response_url, status_url, cancel_url, queue_position) and covers cost and transport. It would be fully complete if it pointed at the polling/result siblings for the next step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, including the note to use falai_get_model_schema for input fields. The description reinforces that model_id is used raw as a path segment and the body equals the model input, but adds no syntax or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('submit an inference request to the queue') and pins down the defining behavior: it returns immediately and does NOT wait for completion, which separates it from the synchronous sibling falai_run_model. It stops short of naming that sibling explicitly, so the differentiation is inferable 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?
The async framing implies the follow-up pattern of polling status and fetching results, but no sibling is named and no condition is given for choosing this over falai_run_model. The guidance is implied rather than explicit.
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.
7 tool updates
- First observed
falai_cancel_request - First observed
falai_get_model_schema - First observed
falai_get_request_result - First observed
falai_get_request_status - First observed
falai_list_models - First observed
falai_run_model - First observed
falai_submit_request
Related MCP Connectors
Run AI models, create deployments, and manage predictions via cloud API
LLM chat, text tools, image generation, editing, batch image jobs, and asynchronous video generation
Run multi-step AI pipelines for video, image, audio and text: upload media, run, poll results.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables Claude Code to run and manage fal.ai queue jobs, including submitting generation requests, checking status, waiting for results, canceling jobs, and downloading finished media files to disk.-
- AlicenseAqualityBmaintenanceEnables MCP clients to run 600+ generative AI models from fal.ai, including image, video, audio, and text, with tools for synchronous and asynchronous execution, model catalog browsing, and schema inspection.81MIT
- AlicenseNot gradedqualityDmaintenanceA FastMCP server that exposes core fal.ai model API operations, enabling model catalogue browsing, search, schema retrieval, inference, queue management, and CDN uploads through natural language.4MIT
- AlicenseAqualityDmaintenanceEnables discovery, search, generation, and management of AI models via fal.ai, allowing Claude Desktop and other MCP clients to interact with fal.ai services.12310 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.